package com.quantum.preferences; import com.quantum.Messages; import com.quantum.PluginPreferences; import com.quantum.QuantumPlugin; import com.quantum.util.versioning.VersioningHelper; import org.eclipse.jface.preference.ColorFieldEditor; import org.eclipse.jface.preference.PreferenceConverter; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.FontData; 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.swt.widgets.FontDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; /** * A preference page for font and colour preferences for the SQL * Editor. * * @author Tom Schneider */ public class SQLEditorPreferences extends PreferencePage implements IWorkbenchPreferencePage { private FontDialog fontDialog; private ColorFieldEditor backgroundColorEditor; private ColorFieldEditor textColorEditor; private ColorFieldEditor keywordColorEditor; private ColorFieldEditor stringColorEditor; private ColorFieldEditor numericColorEditor; private ColorFieldEditor commentColorEditor; private boolean textFlag; private boolean keywordFlag; private boolean stringFlag; private boolean numericFlag; private boolean commentFlag; private Button boldText; private Button boldKeyword; private Button boldString; private Button boldNumeric; private Button boldComment; private FontData fontData; private Label fontDisplay; public void init(IWorkbench workbench) { setPreferenceStore(QuantumPlugin.getDefault().getPreferenceStore()); } protected void performDefaults() { fontData = PluginPreferences.getDefaultFont(); updateFontDisplay(); this.textFlag = false; this.keywordFlag = true; this.stringFlag = false; this.numericFlag = false; this.commentFlag = false; updateFlags(); backgroundColorEditor.loadDefault(); textColorEditor.loadDefault(); keywordColorEditor.loadDefault(); stringColorEditor.loadDefault(); commentColorEditor.loadDefault(); numericColorEditor.loadDefault(); } /** * Save the preferences to the preference store. */ public boolean performOk() { PreferenceConverter.setValue(getPreferenceStore(), "quantum.font", fontData); //$NON-NLS-1$ getPreferenceStore().setValue("quantum.text.bold", textFlag); //$NON-NLS-1$ getPreferenceStore().setValue("quantum.keyword.bold", keywordFlag); //$NON-NLS-1$ getPreferenceStore().setValue("quantum.string.bold", stringFlag); //$NON-NLS-1$ getPreferenceStore().setValue("quantum.comment.bold", commentFlag); //$NON-NLS-1$ getPreferenceStore().setValue("quantum.numeric.bold", numericFlag); //$NON-NLS-1$ backgroundColorEditor.store(); textColorEditor.store(); keywordColorEditor.store(); stringColorEditor.store(); commentColorEditor.store(); numericColorEditor.store(); return super.performOk(); } protected Control createContents(Composite parent) { Composite main = new Composite(parent, SWT.NULL); main.setLayout(new GridLayout()); createFontSelectionArea(main); Label label = new Label(main, SWT.NONE); label.setText(""); createColorSelectionArea(main); return main; } /** * @param main * @return */ private void createColorSelectionArea(Composite parent) { Composite main = new Composite(parent, SWT.NULL); this.textFlag = getPreferenceStore().getBoolean("quantum.text.bold"); //$NON-NLS-1$ this.keywordFlag = getPreferenceStore().getBoolean("quantum.keyword.bold"); //$NON-NLS-1$ this.stringFlag = getPreferenceStore().getBoolean("quantum.string.bold"); //$NON-NLS-1$ this.commentFlag = getPreferenceStore().getBoolean("quantum.comment.bold"); //$NON-NLS-1$ this.numericFlag = getPreferenceStore().getBoolean("quantum.numeric.bold"); //$NON-NLS-1$ GridLayout layout = new GridLayout(); // the colour preference chooser really, really wants to take up a whole // row, so we need to pretend that our row is only two cells wide, then // pull a switcheroo later... layout.numColumns = 2; main.setLayout(layout); backgroundColorEditor = new ColorFieldEditor( PluginPreferences.BACKGROUND_COLOR, Messages.getString(getClass(), "backgroundColor"), //$NON-NLS-1$ main); Label emptyLabel = new Label(main, SWT.NULL); emptyLabel.setText(""); createEmptyRow(main); this.textColorEditor = new ColorFieldEditor( PluginPreferences.TEXT_COLOR, Messages.getString(getClass(), "defaultTextColor"), //$NON-NLS-1$ main); this.boldText = new Button(main, SWT.CHECK); this.boldText.setSelection(textFlag); this.boldText.setText(Messages.getString(getClass(), "bold")); //$NON-NLS-1$ this.boldText.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { } public void widgetSelected(SelectionEvent e) { textFlag = boldText.getSelection(); } }); keywordColorEditor = new ColorFieldEditor( PluginPreferences.KEYWORD_COLOR, Messages.getString(getClass(), "keywordTextColor"), //$NON-NLS-1$ main); boldKeyword = new Button(main, SWT.CHECK); boldKeyword.setSelection(keywordFlag); boldKeyword.setText(Messages.getString(getClass(), "bold")); //$NON-NLS-1$ boldKeyword.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { } public void widgetSelected(SelectionEvent e) { keywordFlag = boldKeyword.getSelection(); } }); commentColorEditor = new ColorFieldEditor( PluginPreferences.COMMENT_COLOR, Messages.getString(getClass(), "commentTextColor"), //$NON-NLS-1$ main); boldComment = new Button(main, SWT.CHECK); boldComment.setSelection(commentFlag); boldComment.setText(Messages.getString(getClass(), "bold")); //$NON-NLS-1$ boldComment.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { } public void widgetSelected(SelectionEvent e) { commentFlag = boldComment.getSelection(); } }); stringColorEditor = new ColorFieldEditor( PluginPreferences.STRING_COLOR, Messages.getString(getClass(), "stringTextColor"), //$NON-NLS-1$ main); boldString = new Button(main, SWT.CHECK); boldString.setSelection(stringFlag); boldString.setText(Messages.getString(getClass(), "bold")); //$NON-NLS-1$ boldString.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { } public void widgetSelected(SelectionEvent e) { stringFlag = boldString.getSelection(); } }); numericColorEditor = new ColorFieldEditor( PluginPreferences.NUMERIC_COLOR, Messages.getString(getClass(), "numericTextColor"), //$NON-NLS-1$ main); boldNumeric = new Button(main, SWT.CHECK); boldNumeric.setSelection(numericFlag); boldNumeric.setText(Messages.getString(getClass(), "bold")); //$NON-NLS-1$ boldNumeric.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { } public void widgetSelected(SelectionEvent e) { numericFlag = boldNumeric.getSelection(); } }); backgroundColorEditor.setPreferencePage(this); backgroundColorEditor.setPreferenceStore(getPreferenceStore()); backgroundColorEditor.load(); textColorEditor.setPreferencePage(this); textColorEditor.setPreferenceStore(getPreferenceStore()); textColorEditor.load(); keywordColorEditor.setPreferencePage(this); keywordColorEditor.setPreferenceStore(getPreferenceStore()); keywordColorEditor.load(); commentColorEditor.setPreferencePage(this); commentColorEditor.setPreferenceStore(getPreferenceStore()); commentColorEditor.load(); stringColorEditor.setPreferencePage(this); stringColorEditor.setPreferenceStore(getPreferenceStore()); stringColorEditor.load(); numericColorEditor.setPreferencePage(this); numericColorEditor.setPreferenceStore(getPreferenceStore()); numericColorEditor.load(); // now for the switcheroo... // reset the number of columns to 3 GridLayout innerLayout = new GridLayout(); innerLayout.numColumns = 3; main.setLayout(innerLayout); } /** * @param main */ private void createFontSelectionArea(Composite main) { Group group = new Group(main, SWT.NONE); group.setText(Messages.getString(getClass(), "font")); GridLayout innerLayout = new GridLayout(); innerLayout.numColumns = 2; group.setLayout(innerLayout); group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); fontDisplay = new Label(group, SWT.NULL); GridData data = new GridData(GridData.FILL_HORIZONTAL); data.horizontalSpan = 2; fontDisplay.setLayoutData(data); fontData = PreferenceConverter.getFontData(getPreferenceStore(), "quantum.font"); //$NON-NLS-1$ fontDialog = new FontDialog(getShell()); Button fontButton = new Button(group, SWT.PUSH); fontButton.setText(Messages.getString(getClass(), "pickFont")); //$NON-NLS-1$ fontButton.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { } public void widgetSelected(SelectionEvent e) { if (fontData != null) { VersioningHelper.setFont(fontDialog, new FontData[] { fontData} ); } FontData data = fontDialog.open(); if (data != null) { fontData = data; updateFontDisplay(); } } }); Button defaultButton = new Button(group, SWT.PUSH); defaultButton.setText(Messages.getString(getClass(), "defaultFont")); //$NON-NLS-1$ defaultButton.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { } public void widgetSelected(SelectionEvent e) { fontData = PluginPreferences.getDefaultFont(); updateFontDisplay(); } }); updateFontDisplay(); } /** * @param main */ private void createEmptyRow(Composite main) { Label emptyLabel = new Label(main, SWT.NULL); emptyLabel.setText(""); GridData gridData = new GridData(); gridData.horizontalSpan = 3; emptyLabel.setLayoutData(gridData); } protected void updateFontDisplay() { if (fontData == null) { fontDisplay.setText(Messages.getString(getClass(), "default")); //$NON-NLS-1$ } else { Object[] parameters = new Object[] { fontData.getName(), new Integer(fontData.getHeight()) }; String style = Messages.getString(getClass(), "regularFont", parameters); //$NON-NLS-1$ if (fontData.getStyle() == SWT.BOLD) { style = Messages.getString(getClass(), "boldFont", parameters); //$NON-NLS-1$ } else if (fontData.getStyle() == SWT.ITALIC) { style = Messages.getString(getClass(), "italicFont", parameters); //$NON-NLS-1$ } else if (fontData.getStyle() == (SWT.BOLD | SWT.ITALIC)) { style = Messages.getString(getClass(), "boldItalicFont", parameters); //$NON-NLS-1$ } fontDisplay.setText(style); //$NON-NLS-1$ } } protected void updateFlags() { this.boldText.setSelection(this.textFlag); this.boldKeyword.setSelection(this.keywordFlag); this.boldString.setSelection(this.stringFlag); this.boldNumeric.setSelection(this.numericFlag); this.boldComment.setSelection(this.commentFlag); } }