package tk.eclipse.plugin.htmleditor;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.preference.BooleanFieldEditor;
import org.eclipse.jface.preference.ColorFieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.IntegerFieldEditor;
import org.eclipse.jface.preference.RadioGroupFieldEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
/**
* The preference page to configure appearance of the HTML/JSP/XML editor.
*
* @author Naoki Takezoe
*/
public class HTMLEditorPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
private ColorFieldEditor colorForeground;
private SystemColorFieldEditor colorBackground;
private ColorFieldEditor colorTag;
private ColorFieldEditor colorWoTag;
private ColorFieldEditor colorAttribute;
private ColorFieldEditor colorOGNL;
private ColorFieldEditor colorDynamic;
private ColorFieldEditor colorComment;
private ColorFieldEditor colorDoctype;
private ColorFieldEditor colorString;
private ColorFieldEditor colorScriptlet;
// private ColorFieldEditor colorCssProperty;
private UseSoftTabFieldEditor useSoftTab;
private SoftTabWidthFieldEditor softTabWidth;
private RadioGroupFieldEditor editorType;
private BooleanFieldEditor highlightPair;
private BooleanFieldEditor showXMLErrors;
public HTMLEditorPreferencePage() {
super(GRID);
setPreferenceStore(HTMLPlugin.getDefault().getPreferenceStore());
}
public void init(IWorkbench workbench) {
}
@Override
protected void createFieldEditors() {
setTitle(HTMLPlugin.getResourceString("HTMLEditorPreferencePage.Appearance"));
Composite parent = getFieldEditorParent();
colorForeground = new ColorFieldEditor(HTMLPlugin.PREF_COLOR_FG,
HTMLPlugin.getResourceString("HTMLEditorPreferencePage.ForegroundColor"),
parent);
addField(colorForeground);
colorBackground = new SystemColorFieldEditor(HTMLPlugin.PREF_COLOR_BG,HTMLPlugin.PREF_COLOR_BG_DEF,
HTMLPlugin.getResourceString("HTMLEditorPreferencePage.BackgroundColor"),
parent);
addField(colorBackground);
colorTag = new ColorFieldEditor(HTMLPlugin.PREF_COLOR_TAG,
HTMLPlugin.getResourceString("HTMLEditorPreferencePage.TagColor"),
parent);
addField(colorTag);
colorWoTag = new ColorFieldEditor(HTMLPlugin.PREF_COLOR_WO_TAG,
HTMLPlugin.getResourceString("HTMLEditorPreferencePage.WoTagColor"),
parent);
addField(colorWoTag);
colorAttribute = new ColorFieldEditor(HTMLPlugin.PREF_COLOR_ATTRIBUTE,
HTMLPlugin.getResourceString("HTMLEditorPreferencePage.AttributeColor"),
parent);
addField(colorAttribute);
colorOGNL = new ColorFieldEditor(HTMLPlugin.PREF_COLOR_OGNL,
HTMLPlugin.getResourceString("HTMLEditorPreferencePage.AttributeOGNLColor"),
parent);
addField(colorOGNL);
colorDynamic = new ColorFieldEditor(HTMLPlugin.PREF_COLOR_DYNAMIC,
HTMLPlugin.getResourceString("HTMLEditorPreferencePage.AttributeDynamicColor"),
parent);
addField(colorDynamic);
colorComment = new ColorFieldEditor(HTMLPlugin.PREF_COLOR_COMMENT,
HTMLPlugin.getResourceString("HTMLEditorPreferencePage.CommentColor"),
parent);
addField(colorComment);
colorDoctype = new ColorFieldEditor(HTMLPlugin.PREF_COLOR_DOCTYPE,
HTMLPlugin.getResourceString("HTMLEditorPreferencePage.DocTypeColor"),
parent);
addField(colorDoctype);
colorString = new ColorFieldEditor(HTMLPlugin.PREF_COLOR_STRING,
HTMLPlugin.getResourceString("HTMLEditorPreferencePage.StringColor"),
parent);
addField(colorString);
colorScriptlet = new ColorFieldEditor(HTMLPlugin.PREF_COLOR_SCRIPT,
HTMLPlugin.getResourceString("HTMLEditorPreferencePage.ScriptColor"),
parent);
addField(colorScriptlet);
// colorCssProperty = new ColorFieldEditor(HTMLPlugin.PREF_COLOR_CSSPROP,
// HTMLPlugin.getResourceString("HTMLEditorPreferencePage.CSSPropColor"),
// parent); //$NON-NLS-1$
// addField(colorCssProperty);
highlightPair = new BooleanFieldEditor(HTMLPlugin.PREF_PAIR_CHAR,
HTMLPlugin.getResourceString("HTMLEditorPreferencePage.PairCharacter"), parent);
addField(highlightPair);
showXMLErrors = new BooleanFieldEditor(HTMLPlugin.PREF_SHOW_XML_ERRORS,
HTMLPlugin.getResourceString("HTMLEditorPreferencePage.ShowXMLErrors"), parent);
addField(showXMLErrors);
useSoftTab = new UseSoftTabFieldEditor(HTMLPlugin.PREF_USE_SOFTTAB,
HTMLPlugin.getResourceString("HTMLEditorPreferencePage.UseSoftTab"),
parent);
addField(useSoftTab);
softTabWidth = new SoftTabWidthFieldEditor(HTMLPlugin.PREF_SOFTTAB_WIDTH,
HTMLPlugin.getResourceString("HTMLEditorPreferencePage.SoftTabWidth"),
parent,4);
softTabWidth.setEnabled(getPreferenceStore().getBoolean(HTMLPlugin.PREF_USE_SOFTTAB),parent);
addField(softTabWidth);
editorType = new RadioGroupFieldEditor(HTMLPlugin.PREF_EDITOR_TYPE,
HTMLPlugin.getResourceString("HTMLEditorPreferencePage.EditorType"),1,
new String[][]{
{HTMLPlugin.getResourceString("HTMLEditorPreferencePage.EditorTab"),"tab"},
{HTMLPlugin.getResourceString("HTMLEditorPreferencePage.EditorSplitHor"),"horizontal"},
{HTMLPlugin.getResourceString("HTMLEditorPreferencePage.EditorSplitVer"),"vertical"},
{HTMLPlugin.getResourceString("HTMLEditorPreferencePage.EditorNoPreview"),"noPreview"}
},parent,true);
addField(editorType);
}
/** Background Color Field Editor */
private class SystemColorFieldEditor extends ColorFieldEditor {
private String booleanName = null;
private Button colorButton;
private Button checkbox;
public SystemColorFieldEditor(String colorName, String booleanName, String labelText, Composite parent){
super(colorName,labelText,parent);
this.booleanName = booleanName;
}
@Override
protected void doFillIntoGrid(Composite parent, int numColumns) {
Control control = getLabelControl(parent);
GridData gd = new GridData();
gd.horizontalSpan = numColumns - 1;
control.setLayoutData(gd);
Composite composite = new Composite(parent,SWT.NULL);
GridLayout layout = new GridLayout(2,false);
layout.horizontalSpacing = 5;
layout.verticalSpacing = 0;
layout.marginHeight = 0;
layout.marginWidth = 0;
composite.setLayout(layout);
colorButton = getChangeControl(composite);
gd = new GridData();
int widthHint = convertHorizontalDLUsToPixels(colorButton, IDialogConstants.BUTTON_WIDTH);
gd.widthHint = Math.max(widthHint, colorButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x);
colorButton.setLayoutData(gd);
checkbox = new Button(composite,SWT.CHECK);
checkbox.setText(HTMLPlugin.getResourceString("HTMLEditorPreferencePage.SystemDefault"));
checkbox.addSelectionListener(new SelectionAdapter(){
@Override
public void widgetSelected(SelectionEvent evt){
colorButton.setEnabled(!checkbox.getSelection());
}
});
}
@Override
protected void doLoad() {
super.doLoad();
checkbox.setSelection(getPreferenceStore().getBoolean(booleanName));
colorButton.setEnabled(!checkbox.getSelection());
}
@Override
protected void doLoadDefault() {
super.doLoadDefault();
checkbox.setSelection(getPreferenceStore().getDefaultBoolean(booleanName));
colorButton.setEnabled(!checkbox.getSelection());
}
@Override
protected void doStore() {
super.doStore();
getPreferenceStore().setValue(booleanName,checkbox.getSelection());
}
}
/** Soft Tab Field Editor */
private class UseSoftTabFieldEditor extends BooleanFieldEditor {
private Composite parent;
public UseSoftTabFieldEditor(String name, String label, Composite parent) {
super(name, label, parent);
this.parent = parent;
}
@Override
protected void valueChanged(boolean oldValue, boolean newValue) {
super.valueChanged(oldValue, newValue);
softTabWidth.setEnabled(newValue,parent);
}
}
/** Soft Tab Width Field Listener */
private class SoftTabWidthFieldEditor extends IntegerFieldEditor {
public SoftTabWidthFieldEditor(String name, String labelText,
Composite parent, int textLimit) {
super(name, labelText, parent, textLimit);
}
@Override
protected void doFillIntoGrid(Composite parent, int numColumns) {
super.doFillIntoGrid(parent, numColumns);
GridData gd = (GridData)getTextControl().getLayoutData();
gd.horizontalAlignment = 0;
gd.widthHint = 40;
}
}
}