package com.aptana.ide.editors.internal.ui.preferences;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import org.eclipse.jface.preference.BooleanFieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import com.aptana.ide.editors.UnifiedEditorsPlugin;
import com.aptana.ide.editors.preferences.IPreferenceConstants;
public class TodoPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage
{
static class TodoTask
{
public TodoTask(String name, String priority)
{
this.name = name;
this.priority = priority;
}
String name;
String priority;
}
public TodoPreferencePage()
{
super();
setPreferenceStore(UnifiedEditorsPlugin.getDefault().getPreferenceStore());
setDescription("Description");
setTitle("title");
}
private List<String> extract(String raw)
{
StringTokenizer tokenizer = new StringTokenizer(raw, ",");
List<String> tokens = new ArrayList<String>();
while (tokenizer.hasMoreTokens())
{
tokens.add(tokenizer.nextToken());
}
return tokens;
}
@Override
protected void createFieldEditors()
{
TableViewerEditor taskEditor = new TableViewerEditor("Todo Tasks", getFieldEditorParent())
{
@Override
protected Object createObject()
{
TodoTaskDialog dialog = new TodoTaskDialog(getShell(), null, fElements);
if (dialog.open() == Window.OK)
return dialog.getResult();
return null;
}
@Override
protected Object editObject(Object toEdit)
{
TodoTaskDialog dialog = new TodoTaskDialog(getShell(), (TodoTask) toEdit, fElements);
if (dialog.open() == Window.OK)
return dialog.getResult();
return toEdit;
}
@Override
protected ColumnsDescription createTableColumns()
{
return new ColumnsDescription(new String[] { "Tag", "Priority" }, true);
}
@Override
protected void doLoadDefault()
{
if (fTableControl != null)
{
List<String> tags = extract(getPreferenceStore().getDefaultString(
IPreferenceConstants.COMPILER_TASK_TAGS));
List<String> priorities = extract(getPreferenceStore().getDefaultString(
IPreferenceConstants.COMPILER_TASK_PRIORITIES));
for (int i = 0; i < tags.size(); i++)
{
addElement(new TodoTask(tags.get(i), priorities.get(i)));
}
}
}
@Override
protected void doLoad()
{
if (fTableControl != null)
{
List<String> tags = extract(getPreferenceStore().getString(IPreferenceConstants.COMPILER_TASK_TAGS));
List<String> priorities = extract(getPreferenceStore().getString(
IPreferenceConstants.COMPILER_TASK_PRIORITIES));
for (int i = 0; i < tags.size(); i++)
{
addElement(new TodoTask(tags.get(i), priorities.get(i)));
}
}
}
@Override
protected Map<String, String> createPrefMap(List<Object> elements)
{
Map<String, String> prefMap = new HashMap<String, String>();
StringBuilder tagBuilder = new StringBuilder();
StringBuilder priorityBuilder = new StringBuilder();
for (Object element : elements)
{
TodoTask task = (TodoTask) element;
tagBuilder.append(task.name).append(",");
priorityBuilder.append(task.priority).append(",");
}
if (!elements.isEmpty())
{
tagBuilder.deleteCharAt(tagBuilder.length() - 1);
priorityBuilder.deleteCharAt(priorityBuilder.length() - 1);
}
prefMap.put(IPreferenceConstants.COMPILER_TASK_TAGS, tagBuilder.toString());
prefMap.put(IPreferenceConstants.COMPILER_TASK_PRIORITIES, priorityBuilder.toString());
return prefMap;
}
@Override
protected ITableLabelProvider createLabelProvider()
{
return new TodoTaskLabelProvider();
}
};
taskEditor.setPreferenceStore(UnifiedEditorsPlugin.getDefault().getPreferenceStore());
addField(taskEditor);
BooleanFieldEditor caseSensitiveEditor = new BooleanFieldEditor(
IPreferenceConstants.COMPILER_TASK_CASE_SENSITIVE, "Case-sensitive", getFieldEditorParent());
caseSensitiveEditor.setPreferenceStore(UnifiedEditorsPlugin.getDefault().getPreferenceStore());
addField(caseSensitiveEditor);
}
public void init(IWorkbench workbench)
{
// TODO Auto-generated method stub
}
private class TodoTaskLabelProvider extends LabelProvider implements ITableLabelProvider
{
public TodoTaskLabelProvider()
{
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
*/
public Image getImage(Object element)
{
return null; // RubyPluginImages.get(RubyPluginImages.IMG_OBJS_REFACTORING_INFO);
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
*/
public String getText(Object element)
{
return getColumnText(element, 0);
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
*/
public Image getColumnImage(Object element, int columnIndex)
{
return null;
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
*/
public String getColumnText(Object element, int columnIndex)
{
TodoTask task = (TodoTask) element;
if (columnIndex == 0)
{
return task.name;
}
else
{
// if (PRIORITY_HIGH.equals(task.priority)) {
// return PreferencesMessages.TodoTaskConfigurationBlock_markers_tasks_high_priority;
// } else if (PRIORITY_NORMAL.equals(task.priority)) {
// return PreferencesMessages.TodoTaskConfigurationBlock_markers_tasks_normal_priority;
// } else if (PRIORITY_LOW.equals(task.priority)) {
// return PreferencesMessages.TodoTaskConfigurationBlock_markers_tasks_low_priority;
// }
return task.priority;
}
}
}
}