1) Added missing strings for italic, underline and strike through.
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / ui / preferences / JavaEditorPreferencePage.java
1 /*******************************************************************************
2  * Copyright (c) 2000, 2003 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Common Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/cpl-v10.html
7  *
8  * Contributors:
9  *     IBM Corporation - initial API and implementation
10  *******************************************************************************/
11 package net.sourceforge.phpdt.internal.ui.preferences;
12
13 import java.io.BufferedReader;
14 import java.io.IOException;
15 import java.io.InputStreamReader;
16 //import java.text.Collator;
17 import java.util.ArrayList;
18 //import java.util.Comparator;
19 import java.util.HashMap;
20 import java.util.Iterator;
21 import java.util.Map;
22 //import java.util.SortedSet;
23 import java.util.StringTokenizer;
24 //import java.util.TreeSet;
25
26 import net.sourceforge.phpdt.core.JavaCore;
27 import net.sourceforge.phpdt.internal.ui.IJavaHelpContextIds;
28 import net.sourceforge.phpdt.internal.ui.dialogs.StatusInfo;
29 import net.sourceforge.phpdt.internal.ui.dialogs.StatusUtil;
30 import net.sourceforge.phpdt.internal.ui.text.IPHPPartitions;
31 import net.sourceforge.phpdt.internal.ui.text.PreferencesAdapter;
32 import net.sourceforge.phpdt.internal.ui.util.TabFolderLayout;
33 import net.sourceforge.phpdt.ui.PreferenceConstants;
34 import net.sourceforge.phpdt.ui.text.JavaTextTools;
35 import net.sourceforge.phpdt.ui.text.PHPSourceViewerConfiguration;
36 import net.sourceforge.phpeclipse.PHPeclipsePlugin;
37 import net.sourceforge.phpeclipse.phpeditor.EditorUtility;
38 import net.sourceforge.phpeclipse.phpeditor.JavaSourceViewer;
39 import net.sourceforge.phpeclipse.preferences.ColorEditor;
40
41 import org.eclipse.core.runtime.IStatus;
42 import org.eclipse.core.runtime.Preferences;
43 import org.eclipse.jface.action.Action;
44 import org.eclipse.jface.dialogs.Dialog;
45 import org.eclipse.jface.preference.IPreferenceStore;
46 import org.eclipse.jface.preference.PreferenceConverter;
47 import org.eclipse.jface.preference.PreferencePage;
48 import org.eclipse.jface.resource.JFaceResources;
49 import org.eclipse.jface.text.Document;
50 import org.eclipse.jface.text.IDocument;
51 import org.eclipse.jface.text.source.SourceViewer;
52 import org.eclipse.swt.SWT;
53 import org.eclipse.swt.events.KeyEvent;
54 import org.eclipse.swt.events.KeyListener;
55 import org.eclipse.swt.events.ModifyEvent;
56 import org.eclipse.swt.events.ModifyListener;
57 import org.eclipse.swt.events.SelectionEvent;
58 import org.eclipse.swt.events.SelectionListener;
59 import org.eclipse.swt.graphics.Color;
60 import org.eclipse.swt.graphics.Font;
61 import org.eclipse.swt.graphics.Point;
62 import org.eclipse.swt.graphics.RGB;
63 import org.eclipse.swt.layout.GridData;
64 import org.eclipse.swt.layout.GridLayout;
65 import org.eclipse.swt.layout.RowLayout;
66 import org.eclipse.swt.widgets.Button;
67 //import org.eclipse.swt.widgets.Combo;
68 import org.eclipse.swt.widgets.Composite;
69 import org.eclipse.swt.widgets.Control;
70 import org.eclipse.swt.widgets.Event;
71 import org.eclipse.swt.widgets.Group;
72 import org.eclipse.swt.widgets.Label;
73 import org.eclipse.swt.widgets.Link;
74 import org.eclipse.swt.widgets.List;
75 import org.eclipse.swt.widgets.Listener;
76 import org.eclipse.swt.widgets.TabFolder;
77 import org.eclipse.swt.widgets.TabItem;
78 import org.eclipse.swt.widgets.Text;
79 import org.eclipse.ui.IWorkbench;
80 import org.eclipse.ui.IWorkbenchPreferencePage;
81 import org.eclipse.ui.PlatformUI;
82 import org.eclipse.ui.dialogs.PreferencesUtil;
83 import org.eclipse.ui.editors.text.EditorsUI;
84 import org.eclipse.ui.texteditor.AbstractDecoratedTextEditorPreferenceConstants;
85 import org.eclipse.ui.texteditor.AnnotationPreference;
86 import org.eclipse.ui.texteditor.ChainedPreferenceStore;
87 import org.eclipse.ui.texteditor.MarkerAnnotationPreferences;
88
89
90 /**
91  * The page for setting the editor options.
92  */
93 public class JavaEditorPreferencePage extends PreferencePage implements
94                 IWorkbenchPreferencePage {
95         private static final String BOLD          = PreferenceConstants.EDITOR_BOLD_SUFFIX;
96         private static final String ITALIC        = PreferenceConstants.EDITOR_ITALIC_SUFFIX;
97         private static final String UNDERLINE     = PreferenceConstants.EDITOR_UNDERLINE_SUFFIX;
98         private static final String STRIKETHROUGH = PreferenceConstants.EDITOR_STRIKETHROUGH_SUFFIX;
99
100         private static final String COMPILER_TASK_TAGS = JavaCore.COMPILER_TASK_TAGS;
101
102         private static final String DELIMITER = PreferencesMessages
103                         .getString("JavaEditorPreferencePage.navigation.delimiter"); //$NON-NLS-1$
104
105         /** The keys of the overlay store. */
106         public final OverlayPreferenceStore.OverlayKey[] fKeys;
107
108         private final String[][] fSyntaxColorListModel = new String[][] {
109                         {
110                                         PreferencesMessages.getString("JavaEditorPreferencePage.multiLineComment"),
111                                         PreferenceConstants.EDITOR_MULTI_LINE_COMMENT_COLOR },
112                         //$NON-NLS-1$
113                         {
114                                         PreferencesMessages.getString("JavaEditorPreferencePage.singleLineComment"),
115                                         PreferenceConstants.EDITOR_SINGLE_LINE_COMMENT_COLOR },
116                         //$NON-NLS-1$
117                         {
118                                     PreferencesMessages.getString("JavaEditorPreferencePage.tags"),
119                                         PreferenceConstants.EDITOR_PHP_TAG_COLOR },
120                         //$NON-NLS-1$
121                         {
122                                         PreferencesMessages.getString("JavaEditorPreferencePage.keywords"),
123                                         PreferenceConstants.EDITOR_JAVA_KEYWORD_COLOR },
124                         {
125                                         PreferencesMessages.getString("JavaEditorPreferencePage.functionNames"),
126                                         PreferenceConstants.EDITOR_PHP_FUNCTIONNAME_COLOR },
127                         //$NON-NLS-1$
128                         {
129                                         PreferencesMessages.getString("JavaEditorPreferencePage.variables"),
130                                         PreferenceConstants.EDITOR_PHP_VARIABLE_COLOR },
131                         //$NON-NLS-1$
132                         {
133                                         PreferencesMessages.getString("JavaEditorPreferencePage.variables_dollar"),
134                                         PreferenceConstants.EDITOR_PHP_VARIABLE_DOLLAR_COLOR },
135                         //$NON-NLS-1$
136                         {
137                                         PreferencesMessages.getString("JavaEditorPreferencePage.constants"),
138                                         PreferenceConstants.EDITOR_PHP_CONSTANT_COLOR },
139                         //$NON-NLS-1$
140                         {
141                                         PreferencesMessages.getString("JavaEditorPreferencePage.types"),
142                                         PreferenceConstants.EDITOR_PHP_TYPE_COLOR },
143                         //$NON-NLS-1$
144                         {
145                                         PreferencesMessages.getString("JavaEditorPreferencePage.strings_dq"),
146                                         PreferenceConstants.EDITOR_STRING_COLOR_DQ },
147                         {
148                                         PreferencesMessages.getString("JavaEditorPreferencePage.strings_sq"),
149                                         PreferenceConstants.EDITOR_STRING_COLOR_SQ },
150                         //$NON-NLS-1$
151                         {
152                                         PreferencesMessages.getString("JavaEditorPreferencePage.others"),
153                                         PreferenceConstants.EDITOR_JAVA_DEFAULT_COLOR }, //$NON-NLS-1$
154                         {
155                                         PreferencesMessages.getString("JavaEditorPreferencePage.operators"),
156                                         PreferenceConstants.EDITOR_PHP_OPERATOR_COLOR },
157                         //$NON-NLS-1$
158                         {
159                                         PreferencesMessages.getString("JavaEditorPreferencePage.returnKeyword"),
160                                         PreferenceConstants.EDITOR_PHP_KEYWORD_RETURN_COLOR },
161                         {
162                                     PreferencesMessages.getString("JavaEditorPreferencePage.braces"),
163                                         PreferenceConstants.EDITOR_PHP_BRACE_OPERATOR_COLOR },
164                         //$NON-NLS-1$
165                         {
166                                         PreferencesMessages.getString("JavaEditorPreferencePage.phpDocKeywords"),
167                                         PreferenceConstants.EDITOR_JAVADOC_KEYWORD_COLOR },
168                         //$NON-NLS-1$
169                         {
170                                         PreferencesMessages.getString("JavaEditorPreferencePage.phpDocHtmlTags"),
171                                         PreferenceConstants.EDITOR_JAVADOC_TAG_COLOR },
172                         //$NON-NLS-1$
173                         {
174                                         PreferencesMessages.getString("JavaEditorPreferencePage.phpDocLinks"),
175                                         PreferenceConstants.EDITOR_JAVADOC_LINKS_COLOR },
176                         //$NON-NLS-1$
177                         {
178                                         PreferencesMessages.getString("JavaEditorPreferencePage.phpDocOthers"), PreferenceConstants.EDITOR_JAVADOC_DEFAULT_COLOR } //$NON-NLS-1$
179         };
180
181         private final String[][] fAppearanceColorListModel = new String[][] {
182                         {
183                                         PreferencesMessages.getString("JavaEditorPreferencePage.matchingBracketsHighlightColor2"),
184                                         PreferenceConstants.EDITOR_MATCHING_BRACKETS_COLOR },
185                         //$NON-NLS-1$
186                         {
187                                         PreferencesMessages.getString("JavaEditorPreferencePage.currentLineHighlighColor"),
188                                         AbstractDecoratedTextEditorPreferenceConstants.EDITOR_CURRENT_LINE_COLOR },
189                         //$NON-NLS-1$
190                         {
191                                         PreferencesMessages.getString("JavaEditorPreferencePage.printMarginColor2"),
192                                         AbstractDecoratedTextEditorPreferenceConstants.EDITOR_PRINT_MARGIN_COLOR },
193                         //$NON-NLS-1$
194                         {
195                                         PreferencesMessages.getString("JavaEditorPreferencePage.findScopeColor2"),
196                                         PreferenceConstants.EDITOR_FIND_SCOPE_COLOR },
197                         //$NON-NLS-1$
198                         {
199                                         PreferencesMessages.getString("JavaEditorPreferencePage.linkColor2"), PreferenceConstants.EDITOR_LINK_COLOR }, //$NON-NLS-1$
200         };
201
202         // private final String[][] fAnnotationColorListModel;
203
204         // private final String[][] fAnnotationDecorationListModel = new String[][]{
205         // {
206         // PreferencesMessages
207         // .getString("JavaEditorPreferencePage.AnnotationDecoration.NONE"),
208         // AnnotationPreference.STYLE_NONE},
209         // //$NON-NLS-1$
210         // {
211         // PreferencesMessages
212         // .getString("JavaEditorPreferencePage.AnnotationDecoration.SQUIGGLIES"),
213         // AnnotationPreference.STYLE_SQUIGGLIES},
214         // //$NON-NLS-1$
215         // {
216         // PreferencesMessages
217         // .getString("JavaEditorPreferencePage.AnnotationDecoration.UNDERLINE"),
218         // AnnotationPreference.STYLE_UNDERLINE},
219         // //$NON-NLS-1$
220         // {
221         // PreferencesMessages
222         // .getString("JavaEditorPreferencePage.AnnotationDecoration.BOX"),
223         // AnnotationPreference.STYLE_BOX},
224         // //$NON-NLS-1$
225         // {
226         // PreferencesMessages
227         // .getString("JavaEditorPreferencePage.AnnotationDecoration.IBEAM"),
228         // AnnotationPreference.STYLE_IBEAM} //$NON-NLS-1$
229         // };
230         private OverlayPreferenceStore fOverlayStore;
231
232         private JavaTextTools fJavaTextTools;
233
234         private JavaEditorHoverConfigurationBlock fJavaEditorHoverConfigurationBlock;
235
236         private FoldingConfigurationBlock fFoldingConfigurationBlock;
237
238         private Map fColorButtons = new HashMap();
239
240         private Map fCheckBoxes = new HashMap();
241
242         private SelectionListener fCheckBoxListener = new SelectionListener() {
243                 public void widgetDefaultSelected(SelectionEvent e) {
244                 }
245
246                 public void widgetSelected(SelectionEvent e) {
247                         Button button = (Button) e.widget;
248                         fOverlayStore.setValue((String) fCheckBoxes.get(button), button
249                                         .getSelection());
250                 }
251         };
252
253         private Map fTextFields = new HashMap();
254
255         private ModifyListener fTextFieldListener = new ModifyListener() {
256                 public void modifyText(ModifyEvent e) {
257                         Text text = (Text) e.widget;
258                         fOverlayStore.setValue((String) fTextFields.get(text), text
259                                         .getText());
260                 }
261         };
262
263         private ArrayList fNumberFields = new ArrayList();
264
265         private ModifyListener fNumberFieldListener = new ModifyListener() {
266                 public void modifyText(ModifyEvent e) {
267                         numberFieldChanged((Text) e.widget);
268                 }
269         };
270
271         private List fSyntaxColorList;
272
273         private List fAppearanceColorList;
274
275         // private List fContentAssistColorList;
276         //private List fAnnotationList;
277
278         private ColorEditor fSyntaxForegroundColorEditor;
279
280         private ColorEditor fAppearanceColorEditor;
281
282         //private ColorEditor fAnnotationForegroundColorEditor;
283
284         //private ColorEditor fContentAssistColorEditor;
285
286         private ColorEditor fBackgroundColorEditor;
287
288         private Button fBackgroundDefaultRadioButton;
289
290         private Button fBackgroundCustomRadioButton;
291
292         private Button fBackgroundColorButton;
293
294         private Button fBoldCheckBox;
295         private Button fItalicCheckBox;
296         private Button fUnderlineCheckBox;
297         private Button fStrikeThroughCheckBox;
298
299         // private Button fAddJavaDocTagsButton;
300
301         private Button fEscapeStringsButtonDQ;
302
303         private Button fEscapeStringsButtonSQ;
304
305         // private Button fGuessMethodArgumentsButton;
306         private SourceViewer fPreviewViewer;
307
308         private Color fBackgroundColor;
309
310         //private Control fAutoInsertDelayText;
311
312         //private Control fAutoInsertJavaTriggerText;
313
314         //private Control fAutoInsertJavaDocTriggerText;
315
316         //private Label fAutoInsertDelayLabel;
317
318         //private Label fAutoInsertJavaTriggerLabel;
319
320         //private Label fAutoInsertJavaDocTriggerLabel;
321
322         //private Button;
323
324         //private Combo fDecorationStyleCombo;
325
326         //private Button fHighlightInTextCheckBox;
327
328         //private Button fShowInOverviewRulerCheckBox;
329
330         //private Button fShowInVerticalRulerCheckBox;
331
332         private Text fBrowserLikeLinksKeyModifierText;
333
334         private Button fBrowserLikeLinksCheckBox;
335
336         private StatusInfo fBrowserLikeLinksKeyModifierStatus;
337
338         // private Button fCompletionInsertsRadioButton;
339         // private Button fCompletionOverwritesRadioButton;
340         // private Button fStickyOccurrencesButton;
341         /**
342          * Creates a new preference page.
343          */
344         public JavaEditorPreferencePage() {
345                 setDescription(PreferencesMessages.getString("JavaEditorPreferencePage.description")); //$NON-NLS-1$
346                 setPreferenceStore(PHPeclipsePlugin.getDefault().getPreferenceStore());
347                 MarkerAnnotationPreferences markerAnnotationPreferences = new MarkerAnnotationPreferences();
348                 fKeys = createOverlayStoreKeys(markerAnnotationPreferences);
349                 fOverlayStore = new OverlayPreferenceStore(getPreferenceStore(), fKeys);
350                 // fAnnotationColorListModel =
351                 // createAnnotationTypeListModel(markerAnnotationPreferences);
352         }
353
354         private OverlayPreferenceStore.OverlayKey[] createOverlayStoreKeys(
355                         MarkerAnnotationPreferences preferences) {
356                 ArrayList overlayKeys = new ArrayList();
357                 Iterator e = preferences.getAnnotationPreferences().iterator();
358                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.EDITOR_FOREGROUND_COLOR));
359                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_FOREGROUND_DEFAULT_COLOR));
360                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.EDITOR_BACKGROUND_COLOR));
361                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_BACKGROUND_DEFAULT_COLOR));
362                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.INT,PreferenceConstants.EDITOR_TAB_WIDTH));
363
364                 overlayKeys.add (new OverlayPreferenceStore.OverlayKey (OverlayPreferenceStore.STRING,PreferenceConstants.EDITOR_MULTI_LINE_COMMENT_COLOR));
365                 overlayKeys.add (new OverlayPreferenceStore.OverlayKey (OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_MULTI_LINE_COMMENT_BOLD));
366                 overlayKeys.add (new OverlayPreferenceStore.OverlayKey (OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_MULTI_LINE_COMMENT_ITALIC));
367                 overlayKeys.add (new OverlayPreferenceStore.OverlayKey (OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_MULTI_LINE_COMMENT_UNDERLINE));
368                 overlayKeys.add (new OverlayPreferenceStore.OverlayKey (OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_MULTI_LINE_COMMENT_STRIKETHROUGH));
369
370                 overlayKeys.add (new OverlayPreferenceStore.OverlayKey (OverlayPreferenceStore.STRING,PreferenceConstants.EDITOR_SINGLE_LINE_COMMENT_COLOR));
371                 overlayKeys.add (new OverlayPreferenceStore.OverlayKey (OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_SINGLE_LINE_COMMENT_BOLD));
372                 overlayKeys.add (new OverlayPreferenceStore.OverlayKey (OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_SINGLE_LINE_COMMENT_ITALIC));
373                 overlayKeys.add (new OverlayPreferenceStore.OverlayKey (OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_SINGLE_LINE_COMMENT_UNDERLINE));
374                 overlayKeys.add (new OverlayPreferenceStore.OverlayKey (OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_SINGLE_LINE_COMMENT_STRIKETHROUGH));
375
376                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.EDITOR_JAVA_KEYWORD_COLOR));
377                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_JAVA_KEYWORD_BOLD));
378                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_JAVA_KEYWORD_ITALIC));
379                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_JAVA_KEYWORD_UNDERLINE));
380                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_JAVA_KEYWORD_STRIKETHROUGH));
381
382                 overlayKeys.add (new OverlayPreferenceStore.OverlayKey (OverlayPreferenceStore.STRING,PreferenceConstants.EDITOR_PHP_TAG_COLOR));
383                 overlayKeys.add (new OverlayPreferenceStore.OverlayKey (OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_TAG_BOLD));
384                 overlayKeys.add (new OverlayPreferenceStore.OverlayKey (OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_TAG_ITALIC));
385                 overlayKeys.add (new OverlayPreferenceStore.OverlayKey (OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_TAG_UNDERLINE));
386                 overlayKeys.add (new OverlayPreferenceStore.OverlayKey (OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_TAG_STRIKETHROUGH));
387
388                 overlayKeys.add (new OverlayPreferenceStore.OverlayKey (OverlayPreferenceStore.STRING,PreferenceConstants.EDITOR_PHP_FUNCTIONNAME_COLOR));
389                 overlayKeys.add (new OverlayPreferenceStore.OverlayKey (OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_FUNCTIONNAME_BOLD));
390                 overlayKeys.add (new OverlayPreferenceStore.OverlayKey (OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_FUNCTIONNAME_ITALIC));
391                 overlayKeys.add (new OverlayPreferenceStore.OverlayKey (OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_FUNCTIONNAME_UNDERLINE));
392                 overlayKeys.add (new OverlayPreferenceStore.OverlayKey (OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_FUNCTIONNAME_STRIKETHROUGH));
393
394                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.EDITOR_PHP_VARIABLE_COLOR));
395                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_VARIABLE_BOLD));
396                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_VARIABLE_ITALIC));
397                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_VARIABLE_UNDERLINE));
398                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_VARIABLE_STRIKETHROUGH));
399
400                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.EDITOR_PHP_VARIABLE_DOLLAR_COLOR));
401                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_VARIABLE_DOLLAR_BOLD));
402                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_VARIABLE_DOLLAR_ITALIC));
403                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_VARIABLE_DOLLAR_UNDERLINE));
404                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_VARIABLE_DOLLAR_STRIKETHROUGH));
405
406                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.EDITOR_PHP_CONSTANT_COLOR));
407                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_CONSTANT_BOLD));
408                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_CONSTANT_ITALIC));
409                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_CONSTANT_UNDERLINE));
410                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_CONSTANT_STRIKETHROUGH));
411
412                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.EDITOR_PHP_TYPE_COLOR));
413                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_TYPE_BOLD));
414                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_TYPE_ITALIC));
415                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_TYPE_UNDERLINE));
416                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_TYPE_STRIKETHROUGH));
417
418                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.EDITOR_STRING_COLOR_DQ));
419                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_STRING_BOLD_DQ));
420                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_STRING_ITALIC_DQ));
421                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_STRING_UNDERLINE_DQ));
422                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_STRING_STRIKETHROUGH_DQ));
423
424                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.EDITOR_STRING_COLOR_SQ));
425                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_STRING_BOLD_SQ));
426                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_STRING_ITALIC_SQ));
427                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_STRING_UNDERLINE_SQ));
428                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_STRING_STRIKETHROUGH_SQ));
429
430                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.EDITOR_JAVA_DEFAULT_COLOR));
431                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_JAVA_DEFAULT_BOLD));
432                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_JAVA_DEFAULT_ITALIC));
433                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_JAVA_DEFAULT_UNDERLINE));
434                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_JAVA_DEFAULT_STRIKETHROUGH));
435
436                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.EDITOR_TASK_TAG_COLOR));
437                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_TASK_TAG_BOLD));
438                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_TASK_TAG_ITALIC));
439                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_TASK_TAG_UNDERLINE));
440                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_TASK_TAG_STRIKETHROUGH));
441                 // overlayKeys.add(new
442                 // OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING_DQ,
443                 // PreferenceConstants.EDITOR_JAVA_METHOD_NAME_COLOR));
444                 // overlayKeys.add(new
445                 // OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,
446                 // PreferenceConstants.EDITOR_JAVA_METHOD_NAME_BOLD));
447                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.EDITOR_PHP_OPERATOR_COLOR));
448                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_OPERATOR_BOLD));
449                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_OPERATOR_ITALIC));
450                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_OPERATOR_UNDERLINE));
451                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_OPERATOR_STRIKETHROUGH));
452
453                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.EDITOR_PHP_KEYWORD_RETURN_COLOR));
454                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_KEYWORD_RETURN_BOLD));
455                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_KEYWORD_RETURN_ITALIC));
456                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_KEYWORD_RETURN_UNDERLINE));
457                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_KEYWORD_RETURN_STRIKETHROUGH));
458
459                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.EDITOR_PHP_BRACE_OPERATOR_COLOR));
460                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_BRACE_OPERATOR_BOLD));
461                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_BRACE_OPERATOR_ITALIC));
462                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_BRACE_OPERATOR_UNDERLINE));
463                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_PHP_BRACE_OPERATOR_STRIKETHROUGH));
464
465                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.EDITOR_JAVADOC_KEYWORD_COLOR));
466                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_JAVADOC_KEYWORD_BOLD));
467                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_JAVADOC_KEYWORD_ITALIC));
468                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_JAVADOC_KEYWORD_UNDERLINE));
469                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_JAVADOC_KEYWORD_STRIKETHROUGH));
470
471                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.EDITOR_JAVADOC_TAG_COLOR));
472                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_JAVADOC_TAG_BOLD));
473                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_JAVADOC_TAG_ITALIC));
474                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_JAVADOC_TAG_UNDERLINE));
475                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_JAVADOC_TAG_STRIKETHROUGH));
476
477                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.EDITOR_JAVADOC_LINKS_COLOR));
478                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_JAVADOC_LINKS_BOLD));
479                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_JAVADOC_LINKS_ITALIC));
480                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_JAVADOC_LINKS_UNDERLINE));
481                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_JAVADOC_LINKS_STRIKETHROUGH));
482
483                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.EDITOR_JAVADOC_DEFAULT_COLOR));
484                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_JAVADOC_DEFAULT_BOLD));
485                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_JAVADOC_DEFAULT_ITALIC));
486                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_JAVADOC_DEFAULT_UNDERLINE));
487                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_JAVADOC_DEFAULT_STRIKETHROUGH));
488
489                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.EDITOR_MATCHING_BRACKETS_COLOR));
490                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_MATCHING_BRACKETS));
491                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,AbstractDecoratedTextEditorPreferenceConstants.EDITOR_CURRENT_LINE_COLOR));
492                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,AbstractDecoratedTextEditorPreferenceConstants.EDITOR_CURRENT_LINE));
493                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,AbstractDecoratedTextEditorPreferenceConstants.EDITOR_PRINT_MARGIN_COLOR));
494                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.INT,AbstractDecoratedTextEditorPreferenceConstants.EDITOR_PRINT_MARGIN_COLUMN));
495                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,AbstractDecoratedTextEditorPreferenceConstants.EDITOR_PRINT_MARGIN));
496                 // overlayKeys.add(new
497                 // OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,
498                 // PreferenceConstants.EDITOR_MARK_OCCURRENCES));
499                 // overlayKeys.add(new
500                 // OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,
501                 // PreferenceConstants.EDITOR_STICKY_OCCURRENCES));
502                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.EDITOR_FIND_SCOPE_COLOR));
503                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.EDITOR_LINK_COLOR));
504                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_CORRECTION_INDICATION));
505                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_EVALUTE_TEMPORARY_PROBLEMS));
506                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,AbstractDecoratedTextEditorPreferenceConstants.EDITOR_OVERVIEW_RULER));
507                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_SPACES_FOR_TABS));
508                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.CODEASSIST_AUTOACTIVATION));
509                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.INT,PreferenceConstants.CODEASSIST_AUTOACTIVATION_DELAY));
510                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.CODEASSIST_AUTOINSERT));
511                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.CODEASSIST_PROPOSALS_BACKGROUND));
512                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.CODEASSIST_PROPOSALS_FOREGROUND));
513                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.CODEASSIST_PARAMETERS_BACKGROUND));
514                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.CODEASSIST_PARAMETERS_FOREGROUND));
515                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.CODEASSIST_REPLACEMENT_BACKGROUND));
516                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.CODEASSIST_REPLACEMENT_FOREGROUND));
517                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.CODEASSIST_AUTOACTIVATION_TRIGGERS_JAVA));
518                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.CODEASSIST_AUTOACTIVATION_TRIGGERS_JAVADOC));
519                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.CODEASSIST_SHOW_VISIBLE_PROPOSALS));
520                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.CODEASSIST_ORDER_PROPOSALS));
521                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.CODEASSIST_CASE_SENSITIVITY));
522                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.CODEASSIST_ADDIMPORT));
523                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.CODEASSIST_INSERT_COMPLETION));
524                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.CODEASSIST_FILL_ARGUMENT_NAMES));
525                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.CODEASSIST_GUESS_METHOD_ARGUMENTS));
526                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_SMART_PASTE));
527                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_CLOSE_STRINGS_DQ_PHP));
528                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_CLOSE_STRINGS_SQ_PHP));
529                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_CLOSE_BRACKETS_PHP));
530                 // overlayKeys
531                 // .add(new OverlayPreferenceStore.OverlayKey(
532                 // OverlayPreferenceStore.BOOLEAN,
533                 // PreferenceConstants.EDITOR_CLOSE_BRACES));
534                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_CLOSE_JAVADOCS));
535                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_WRAP_WORDS));
536                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_WRAP_STRINGS_DQ));
537                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_ESCAPE_STRINGS_DQ));
538                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_WRAP_STRINGS_SQ));
539                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_ESCAPE_STRINGS_SQ));
540
541                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_ADD_JAVADOC_TAGS));
542                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_FORMAT_JAVADOCS));
543
544                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_SMART_HOME_END));
545                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_SUB_WORD_NAVIGATION));
546                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_DISABLE_OVERWRITE_MODE));
547                 // overlayKeys.add(new
548                 // OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,
549                 // PreferenceConstants.EDITOR_SHOW_TEXT_HOVER_AFFORDANCE));
550                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.EDITOR_TEXT_HOVER_MODIFIERS));
551                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.EDITOR_TEXT_HOVER_MODIFIER_MASKS));
552                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN,PreferenceConstants.EDITOR_BROWSER_LIKE_LINKS));
553                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.EDITOR_BROWSER_LIKE_LINKS_KEY_MODIFIER));
554                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING,PreferenceConstants.EDITOR_BROWSER_LIKE_LINKS_KEY_MODIFIER_MASK));
555
556                 while (e.hasNext()) {
557                         AnnotationPreference info = (AnnotationPreference) e.next();
558                         overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, info.getColorPreferenceKey()));
559                         overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, info.getTextPreferenceKey()));
560
561                         if (info.getHighlightPreferenceKey() != null)
562                                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, info.getHighlightPreferenceKey()));
563
564                         overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, info.getOverviewRulerPreferenceKey()));
565
566                         if (info.getVerticalRulerPreferenceKey() != null)
567                                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, info.getVerticalRulerPreferenceKey()));
568
569                         if (info.getTextStylePreferenceKey() != null)
570                                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, info.getTextStylePreferenceKey()));
571                 }
572
573                 OverlayPreferenceStore.OverlayKey[] keys = new OverlayPreferenceStore.OverlayKey[overlayKeys.size()];
574                 overlayKeys.toArray(keys);
575
576                 return keys;
577         } /*
578                  * @see IWorkbenchPreferencePage#init()
579                  */
580
581         public void init(IWorkbench workbench) {
582         }
583
584         /*
585          * @see PreferencePage#createControl(Composite)
586          */
587         public void createControl(Composite parent) {
588                 super.createControl(parent);
589                 PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(),
590                                 IJavaHelpContextIds.JAVA_EDITOR_PREFERENCE_PAGE);
591         }
592
593         private void handleSyntaxColorListSelection () {
594                 int i = fSyntaxColorList.getSelectionIndex ();
595                 String key = fSyntaxColorListModel[i][1];
596                 RGB rgb = PreferenceConverter.getColor (fOverlayStore, key);
597                 fSyntaxForegroundColorEditor.setColorValue (rgb);
598                 fBoldCheckBox.setSelection          (fOverlayStore.getBoolean (key + BOLD));
599                 fItalicCheckBox.setSelection        (fOverlayStore.getBoolean (key + ITALIC));
600                 fUnderlineCheckBox.setSelection     (fOverlayStore.getBoolean (key + UNDERLINE));
601                 fStrikeThroughCheckBox.setSelection (fOverlayStore.getBoolean (key + STRIKETHROUGH));
602         }
603
604         private void handleAppearanceColorListSelection() {
605                 int i = fAppearanceColorList.getSelectionIndex();
606                 String key = fAppearanceColorListModel[i][1];
607                 RGB rgb = PreferenceConverter.getColor(fOverlayStore, key);
608                 fAppearanceColorEditor.setColorValue(rgb);
609         }
610
611         // private void handleAnnotationListSelection() {
612         // int i = fAnnotationList.getSelectionIndex();
613         // String key = fAnnotationColorListModel[i][1];
614         // RGB rgb = PreferenceConverter.getColor(fOverlayStore, key);
615         // fAnnotationForegroundColorEditor.setColorValue(rgb);
616         // key = fAnnotationColorListModel[i][2];
617         // boolean showInText = fOverlayStore.getBoolean(key);
618         // fShowInTextCheckBox.setSelection(showInText);
619         // key = fAnnotationColorListModel[i][6];
620         // if (key != null) {
621         // fDecorationStyleCombo.setEnabled(showInText);
622         // for (int j = 0; j < fAnnotationDecorationListModel.length; j++) {
623         // String value = fOverlayStore.getString(key);
624         // if (fAnnotationDecorationListModel[j][1].equals(value)) {
625         // fDecorationStyleCombo.setText(fAnnotationDecorationListModel[j][0]);
626         // break;
627         // }
628         // }
629         // } else {
630         // fDecorationStyleCombo.setEnabled(false);
631         // fDecorationStyleCombo.setText(fAnnotationDecorationListModel[1][0]); //
632         // set
633         // // selection
634         // // to
635         // // squigglies
636         // // if
637         // // the
638         // // key
639         // // is
640         // // not
641         // // there
642         // // (legacy
643         // // support)
644         // }
645         // key = fAnnotationColorListModel[i][3];
646         // fShowInOverviewRulerCheckBox.setSelection(fOverlayStore.getBoolean(key));
647         // key = fAnnotationColorListModel[i][4];
648         // if (key != null) {
649         // fHighlightInTextCheckBox.setSelection(fOverlayStore.getBoolean(key));
650         // fHighlightInTextCheckBox.setEnabled(true);
651         // } else
652         // fHighlightInTextCheckBox.setEnabled(false);
653         // key = fAnnotationColorListModel[i][5];
654         // if (key != null) {
655         // fShowInVerticalRulerCheckBox.setSelection(fOverlayStore.getBoolean(key));
656         // fShowInVerticalRulerCheckBox.setEnabled(true);
657         // } else {
658         // fShowInVerticalRulerCheckBox.setSelection(true);
659         // fShowInVerticalRulerCheckBox.setEnabled(false);
660         // }
661         // }
662         private Control createSyntaxPage(Composite parent) {
663                 Composite colorComposite = new Composite(parent, SWT.NULL);
664                 colorComposite.setLayout (new GridLayout());
665                 Group backgroundComposite = new Group (colorComposite, SWT.SHADOW_ETCHED_IN);
666                 backgroundComposite.setLayout(new RowLayout());
667                 backgroundComposite.setText (PreferencesMessages.getString ("JavaEditorPreferencePage.backgroundColor"));//$NON-NLS-1$
668                                                                                                                                                                                                                                  //
669                 SelectionListener backgroundSelectionListener = new SelectionListener() {
670                         public void widgetSelected (SelectionEvent e) {
671                                 boolean custom = fBackgroundCustomRadioButton.getSelection ();
672                                 fBackgroundColorButton.setEnabled (custom);
673                                 fOverlayStore.setValue (PreferenceConstants.EDITOR_BACKGROUND_DEFAULT_COLOR, !custom);
674                         }
675
676                         public void widgetDefaultSelected(SelectionEvent e) {
677                         }
678                 };
679
680                 fBackgroundDefaultRadioButton = new Button(backgroundComposite, SWT.RADIO | SWT.LEFT);
681                 fBackgroundDefaultRadioButton.setText (PreferencesMessages.getString ("JavaEditorPreferencePage.systemDefault")); //$NON-NLS-1$
682                 fBackgroundDefaultRadioButton.addSelectionListener (backgroundSelectionListener);
683                 fBackgroundCustomRadioButton = new Button(backgroundComposite, SWT.RADIO | SWT.LEFT);
684                 fBackgroundCustomRadioButton.setText (PreferencesMessages.getString ("JavaEditorPreferencePage.custom")); //$NON-NLS-1$
685                 fBackgroundCustomRadioButton.addSelectionListener (backgroundSelectionListener);
686                 fBackgroundColorEditor = new ColorEditor(backgroundComposite);
687                 fBackgroundColorButton = fBackgroundColorEditor.getButton ();
688
689                 Label label = new Label(colorComposite, SWT.LEFT);
690                 label.setText (PreferencesMessages.getString("JavaEditorPreferencePage.foreground")); //$NON-NLS-1$
691                 label.setLayoutData (new GridData (GridData.FILL_HORIZONTAL));
692                 Composite editorComposite = new Composite (colorComposite, SWT.NONE);
693
694                 GridLayout layout = new GridLayout();
695                 layout.numColumns = 2;
696                 layout.marginHeight = 0;
697                 layout.marginWidth = 0;
698                 editorComposite.setLayout(layout);
699
700                 GridData gd = new GridData (GridData.FILL_BOTH);
701                 editorComposite.setLayoutData (gd);
702                 fSyntaxColorList = new List (editorComposite, SWT.SINGLE | SWT.V_SCROLL | SWT.BORDER);
703                 gd = new GridData (GridData.FILL_BOTH);
704                 gd.heightHint = convertHeightInCharsToPixels (5);
705                 fSyntaxColorList.setLayoutData (gd);
706                 Composite stylesComposite = new Composite (editorComposite, SWT.NONE);
707                 layout = new GridLayout ();
708                 layout.marginHeight = 0;
709                 layout.marginWidth = 0;
710                 layout.numColumns = 2;
711                 stylesComposite.setLayout(layout);
712
713                 stylesComposite.setLayoutData (new GridData(GridData.FILL_BOTH));
714                 label = new Label(stylesComposite, SWT.LEFT);
715                 label.setText(PreferencesMessages.getString ("JavaEditorPreferencePage.color")); //$NON-NLS-1$
716
717                 gd = new GridData();
718                 gd.horizontalAlignment = GridData.BEGINNING;
719                 label.setLayoutData(gd);
720
721                 fSyntaxForegroundColorEditor = new ColorEditor(stylesComposite);
722                 Button foregroundColorButton = fSyntaxForegroundColorEditor.getButton();
723                 gd = new GridData(GridData.FILL_HORIZONTAL);
724                 gd.horizontalAlignment = GridData.BEGINNING;
725                 foregroundColorButton.setLayoutData (gd);
726
727                 fBoldCheckBox = new Button (stylesComposite, SWT.CHECK);
728                 fBoldCheckBox.setText (PreferencesMessages.getString ("JavaEditorPreferencePage.bold")); //$NON-NLS-1$
729
730                 gd = new GridData (GridData.FILL_HORIZONTAL);
731                 gd.horizontalAlignment = GridData.BEGINNING;
732                 gd.horizontalSpan = 2;
733                 fBoldCheckBox.setLayoutData (gd);
734
735                 fItalicCheckBox = new Button (stylesComposite, SWT.CHECK);
736                 fItalicCheckBox.setText (PreferencesMessages.getString ("JavaEditorPreferencePage.italic")); //$NON-NLS-1$
737
738                 gd = new GridData (GridData.FILL_HORIZONTAL);
739                 gd.horizontalAlignment = GridData.BEGINNING;
740                 gd.horizontalSpan = 2;
741                 fItalicCheckBox.setLayoutData (gd);
742
743                 fUnderlineCheckBox = new Button (stylesComposite, SWT.CHECK);
744                 fUnderlineCheckBox.setText (PreferencesMessages.getString ("JavaEditorPreferencePage.underline")); //$NON-NLS-1$
745
746                 gd = new GridData (GridData.FILL_HORIZONTAL);
747                 gd.horizontalAlignment = GridData.BEGINNING;
748                 gd.horizontalSpan = 2;
749                 fUnderlineCheckBox.setLayoutData (gd);
750
751                 fStrikeThroughCheckBox = new Button (stylesComposite, SWT.CHECK);
752                 fStrikeThroughCheckBox.setText (PreferencesMessages.getString ("JavaEditorPreferencePage.strikethrough")); //$NON-NLS-1$
753
754                 gd = new GridData (GridData.FILL_HORIZONTAL);
755                 gd.horizontalAlignment = GridData.BEGINNING;
756                 gd.horizontalSpan = 2;
757                 fStrikeThroughCheckBox.setLayoutData (gd);
758
759                 label = new Label (colorComposite, SWT.LEFT);
760                 label.setText (PreferencesMessages.getString ("JavaEditorPreferencePage.preview")); //$NON-NLS-1$
761                 label.setLayoutData (new GridData (GridData.FILL_HORIZONTAL));
762                 Control previewer = createPreviewer (colorComposite);
763
764                 gd = new GridData (GridData.FILL_BOTH);
765                 gd.widthHint = convertWidthInCharsToPixels (20);
766                 gd.heightHint = convertHeightInCharsToPixels (5);
767                 previewer.setLayoutData (gd);
768
769                 fSyntaxColorList.addSelectionListener (new SelectionListener () {
770                         public void widgetDefaultSelected(SelectionEvent e) {
771                                 // do nothing
772                         }
773
774                         public void widgetSelected(SelectionEvent e) {
775                                 handleSyntaxColorListSelection();
776                         }
777                 });
778
779                 foregroundColorButton.addSelectionListener (new SelectionListener() {
780                         public void widgetDefaultSelected(SelectionEvent e) {
781                                 // do nothing
782                         }
783
784                         public void widgetSelected(SelectionEvent e) {
785                                 int i = fSyntaxColorList.getSelectionIndex();
786                                 String key = fSyntaxColorListModel[i][1];
787                                 PreferenceConverter.setValue(fOverlayStore, key, fSyntaxForegroundColorEditor.getColorValue ());
788                         }
789                 });
790
791                 fBackgroundColorButton.addSelectionListener (new SelectionListener() {
792                         public void widgetDefaultSelected (SelectionEvent e) {
793                                 // do nothing
794                         }
795
796                         public void widgetSelected (SelectionEvent e) {
797                                 PreferenceConverter.setValue (fOverlayStore, PreferenceConstants.EDITOR_BACKGROUND_COLOR, fBackgroundColorEditor.getColorValue ());
798                         }
799                 });
800
801                 fBoldCheckBox.addSelectionListener (new SelectionListener () {
802                         public void widgetDefaultSelected (SelectionEvent e) {
803                                 // do nothing
804                         }
805
806                         public void widgetSelected (SelectionEvent e) {
807                                 int i = fSyntaxColorList.getSelectionIndex ();
808                                 String key = fSyntaxColorListModel[i][1];
809                                 fOverlayStore.setValue (key + BOLD, fBoldCheckBox.getSelection ());
810                         }
811                 });
812
813                 fItalicCheckBox.addSelectionListener (new SelectionListener () {
814                         public void widgetDefaultSelected (SelectionEvent e) {
815                                 // do nothing
816                         }
817
818                         public void widgetSelected (SelectionEvent e) {
819                                 int i = fSyntaxColorList.getSelectionIndex ();
820                                 String key = fSyntaxColorListModel[i][1];
821                                 fOverlayStore.setValue (key + ITALIC, fItalicCheckBox.getSelection ());
822                         }
823                 });
824
825                 fUnderlineCheckBox.addSelectionListener (new SelectionListener () {
826                         public void widgetDefaultSelected (SelectionEvent e) {
827                                 // do nothing
828                         }
829
830                         public void widgetSelected (SelectionEvent e) {
831                                 int i = fSyntaxColorList.getSelectionIndex ();
832                                 String key = fSyntaxColorListModel[i][1];
833                                 fOverlayStore.setValue (key + UNDERLINE, fUnderlineCheckBox.getSelection ());
834                         }
835                 });
836
837                 fStrikeThroughCheckBox.addSelectionListener (new SelectionListener () {
838                         public void widgetDefaultSelected (SelectionEvent e) {
839                                 // do nothing
840                         }
841
842                         public void widgetSelected (SelectionEvent e) {
843                                 int i = fSyntaxColorList.getSelectionIndex ();
844                                 String key = fSyntaxColorListModel[i][1];
845                                 fOverlayStore.setValue (key + STRIKETHROUGH, fStrikeThroughCheckBox.getSelection ());
846                         }
847                 });
848
849                 return colorComposite;
850         }
851
852         private Control createPreviewer(Composite parent) {
853                 Preferences coreStore = createTemporaryCorePreferenceStore();
854                 fJavaTextTools = new JavaTextTools(fOverlayStore, coreStore, false);
855                 IPreferenceStore generalTextStore = EditorsUI.getPreferenceStore();
856                 IPreferenceStore store = new ChainedPreferenceStore (
857                                 new IPreferenceStore[] {
858                                                 fOverlayStore,
859                                                 new PreferencesAdapter (createTemporaryCorePreferenceStore ()),
860                                                 generalTextStore });
861
862                 fPreviewViewer = new JavaSourceViewer(parent, null, null, false, SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER, store);
863                 JavaTextTools tools = PHPeclipsePlugin.getDefault().getJavaTextTools();
864                 PHPSourceViewerConfiguration configuration = new PHPSourceViewerConfiguration(
865                                 tools.getColorManager(), store, null,
866                                 IPHPPartitions.PHP_PARTITIONING);
867                 // PHPSourceViewerConfiguration configuration =new
868                 // PHPSourceViewerConfiguration(fJavaTextTools, null,
869                 // IPHPPartitions.PHP_PARTITIONING);
870                 fPreviewViewer.configure(configuration);
871
872                 Font font = JFaceResources.getFont (PreferenceConstants.EDITOR_TEXT_FONT);
873                 fPreviewViewer.getTextWidget ().setFont (font);
874                 new JavaSourcePreviewerUpdater (fPreviewViewer, configuration, store);
875                 fPreviewViewer.setEditable (false);
876                 String content = loadPreviewContentFromFile ("ColorSettingPreviewCode.txt"); //$NON-NLS-1$
877                 IDocument document = new Document (content);
878                 fJavaTextTools.setupJavaDocumentPartitioner (document, IPHPPartitions.PHP_PARTITIONING);
879                 fPreviewViewer.setDocument (document);
880
881                 return fPreviewViewer.getControl ();
882         }
883
884         private Preferences createTemporaryCorePreferenceStore() {
885                 Preferences result = new Preferences();
886                 result.setValue (COMPILER_TASK_TAGS, "TASK"); //$NON-NLS-1$
887                 return result;
888         }
889
890         private Control createAppearancePage(Composite parent) {
891                 Composite appearanceComposite = new Composite(parent, SWT.NONE);
892                 GridLayout layout = new GridLayout();
893                 layout.numColumns = 2;
894                 appearanceComposite.setLayout(layout);
895
896                 // Inserts a hyper-link to the General Editor preferences page
897                 // TODO Can probably be removed post 1.5.0?
898                 String label = PreferencesMessages
899                                 .getString("JavaEditorPreferencePage.appearanceTabLink");
900                 Link link = new Link(appearanceComposite, SWT.NONE);
901                 GridData gridPosition = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
902                 gridPosition.horizontalSpan = 2;
903                 link.setLayoutData(gridPosition);
904
905                 link.setText(label);
906                 link.addListener(SWT.Selection, new Listener () {
907                         public void handleEvent(Event event) {
908                                 String u = event.text;
909                                 PreferencesUtil.createPreferenceDialogOn(getShell(), u, null, null);
910                         }
911                 });
912                 String tooltip = PreferencesMessages
913                                 .getString("JavaEditorPreferencePage.appearanceTabTooltip");
914                 link.setToolTipText(tooltip);
915
916                 label = PreferencesMessages
917                                 .getString("JavaEditorPreferencePage.displayedTabWidth"); //$NON-NLS-1$
918                 addTextField(appearanceComposite, label,
919                                 PreferenceConstants.EDITOR_TAB_WIDTH, 3, 0, true);
920                 label = PreferencesMessages
921                                 .getString("JavaEditorPreferencePage.printMarginColumn"); //$NON-NLS-1$
922                 addTextField(
923                                 appearanceComposite,
924                                 label,
925                                 AbstractDecoratedTextEditorPreferenceConstants.EDITOR_PRINT_MARGIN_COLUMN,
926                                 3, 0, true);
927                 label = PreferencesMessages
928                                 .getString("JavaEditorPreferencePage.showOverviewRuler"); //$NON-NLS-1$
929                 addCheckBox(
930                                 appearanceComposite,
931                                 label,
932                                 AbstractDecoratedTextEditorPreferenceConstants.EDITOR_OVERVIEW_RULER,
933                                 0);
934                 label = PreferencesMessages
935                                 .getString("JavaEditorPreferencePage.highlightMatchingBrackets"); //$NON-NLS-1$
936                 addCheckBox(appearanceComposite, label,
937                                 PreferenceConstants.EDITOR_MATCHING_BRACKETS, 0);
938                 label = PreferencesMessages
939                                 .getString("JavaEditorPreferencePage.highlightCurrentLine"); //$NON-NLS-1$
940                 addCheckBox(
941                                 appearanceComposite,
942                                 label,
943                                 AbstractDecoratedTextEditorPreferenceConstants.EDITOR_CURRENT_LINE,
944                                 0);
945                 label = PreferencesMessages
946                                 .getString("JavaEditorPreferencePage.showPrintMargin"); //$NON-NLS-1$
947                 addCheckBox(
948                                 appearanceComposite,
949                                 label,
950                                 AbstractDecoratedTextEditorPreferenceConstants.EDITOR_PRINT_MARGIN,
951                                 0);
952                 label = PreferencesMessages
953                                 .getString("JavaEditorPreferencePage.markOccurrences"); //$NON-NLS-1$
954                 // Button master= addCheckBox(appearanceComposite, label,
955                 // PreferenceConstants.EDITOR_MARK_OCCURRENCES, 0); //$NON-NLS-1$
956                 label = PreferencesMessages
957                                 .getString("JavaEditorPreferencePage.stickyOccurrences"); //$NON-NLS-1$
958                 // fStickyOccurrencesButton= addCheckBox(appearanceComposite, label,
959                 // PreferenceConstants.EDITOR_STICKY_OCCURRENCES, 0); //$NON-NLS-1$
960                 // createDependency(master, fStickyOccurrencesButton);
961                 Label l = new Label(appearanceComposite, SWT.LEFT);
962                 GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
963                 gd.horizontalSpan = 2;
964                 gd.heightHint = convertHeightInCharsToPixels(1) / 2;
965                 l.setLayoutData(gd);
966                 l = new Label(appearanceComposite, SWT.LEFT);
967                 l.setText(PreferencesMessages
968                                 .getString("JavaEditorPreferencePage.appearanceOptions")); //$NON-NLS-1$
969                 gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
970                 gd.horizontalSpan = 2;
971                 l.setLayoutData(gd);
972                 Composite editorComposite = new Composite(appearanceComposite, SWT.NONE);
973                 layout = new GridLayout();
974                 layout.numColumns = 2;
975                 layout.marginHeight = 0;
976                 layout.marginWidth = 0;
977                 editorComposite.setLayout(layout);
978                 gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL
979                                 | GridData.FILL_VERTICAL);
980                 gd.horizontalSpan = 2;
981                 editorComposite.setLayoutData(gd);
982                 fAppearanceColorList = new List(editorComposite, SWT.SINGLE
983                                 | SWT.V_SCROLL | SWT.BORDER);
984                 gd = new GridData(GridData.VERTICAL_ALIGN_BEGINNING
985                                 | GridData.FILL_HORIZONTAL);
986                 gd.heightHint = convertHeightInCharsToPixels(8);
987                 fAppearanceColorList.setLayoutData(gd);
988                 Composite stylesComposite = new Composite(editorComposite, SWT.NONE);
989                 layout = new GridLayout();
990                 layout.marginHeight = 0;
991                 layout.marginWidth = 0;
992                 layout.numColumns = 2;
993                 stylesComposite.setLayout(layout);
994                 stylesComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
995                 l = new Label(stylesComposite, SWT.LEFT);
996                 l.setText(PreferencesMessages
997                                 .getString("JavaEditorPreferencePage.color")); //$NON-NLS-1$
998                 gd = new GridData();
999                 gd.horizontalAlignment = GridData.BEGINNING;
1000                 l.setLayoutData(gd);
1001                 fAppearanceColorEditor = new ColorEditor(stylesComposite);
1002                 Button foregroundColorButton = fAppearanceColorEditor.getButton();
1003                 gd = new GridData(GridData.FILL_HORIZONTAL);
1004                 gd.horizontalAlignment = GridData.BEGINNING;
1005                 foregroundColorButton.setLayoutData(gd);
1006                 fAppearanceColorList.addSelectionListener(new SelectionListener() {
1007                         public void widgetDefaultSelected(SelectionEvent e) {
1008                                 // do nothing
1009                         }
1010
1011                         public void widgetSelected(SelectionEvent e) {
1012                                 handleAppearanceColorListSelection();
1013                         }
1014                 });
1015                 foregroundColorButton.addSelectionListener(new SelectionListener() {
1016                         public void widgetDefaultSelected(SelectionEvent e) {
1017                                 // do nothing
1018                         }
1019
1020                         public void widgetSelected(SelectionEvent e) {
1021                                 int i = fAppearanceColorList.getSelectionIndex();
1022                                 String key = fAppearanceColorListModel[i][1];
1023                                 PreferenceConverter.setValue(fOverlayStore, key,
1024                                                 fAppearanceColorEditor.getColorValue());
1025                         }
1026                 });
1027                 return appearanceComposite;
1028         }
1029
1030         // private Control createAnnotationsPage(Composite parent) {
1031         // Composite composite = new Composite(parent, SWT.NULL);
1032         // GridLayout layout = new GridLayout();
1033         // layout.numColumns = 2;
1034         // composite.setLayout(layout);
1035         // String text = PreferencesMessages
1036         // .getString("JavaEditorPreferencePage.analyseAnnotationsWhileTyping");
1037         // //$NON-NLS-1$
1038         // addCheckBox(composite, text,
1039         // PreferenceConstants.EDITOR_EVALUTE_TEMPORARY_PROBLEMS, 0);
1040         // text = PreferencesMessages
1041         // .getString("JavaEditorPreferencePage.showQuickFixables"); //$NON-NLS-1$
1042         // addCheckBox(composite, text,
1043         // PreferenceConstants.EDITOR_CORRECTION_INDICATION, 0);
1044         // addFiller(composite);
1045         // Label label = new Label(composite, SWT.LEFT);
1046         // label.setText(PreferencesMessages
1047         // .getString("JavaEditorPreferencePage.annotationPresentationOptions"));
1048         // //$NON-NLS-1$
1049         // GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
1050         // gd.horizontalSpan = 2;
1051         // label.setLayoutData(gd);
1052         // Composite editorComposite = new Composite(composite, SWT.NONE);
1053         // layout = new GridLayout();
1054         // layout.numColumns = 2;
1055         // layout.marginHeight = 0;
1056         // layout.marginWidth = 0;
1057         // editorComposite.setLayout(layout);
1058         // gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL |
1059         // GridData.FILL_VERTICAL);
1060         // gd.horizontalSpan = 2;
1061         // editorComposite.setLayoutData(gd);
1062         // fAnnotationList = new List(editorComposite, SWT.SINGLE | SWT.V_SCROLL
1063         // | SWT.BORDER);
1064         // gd = new GridData(GridData.VERTICAL_ALIGN_BEGINNING
1065         // | GridData.FILL_HORIZONTAL);
1066         // gd.heightHint = convertHeightInCharsToPixels(10);
1067         // fAnnotationList.setLayoutData(gd);
1068         // Composite optionsComposite = new Composite(editorComposite, SWT.NONE);
1069         // layout = new GridLayout();
1070         // layout.marginHeight = 0;
1071         // layout.marginWidth = 0;
1072         // layout.numColumns = 2;
1073         // optionsComposite.setLayout(layout);
1074         // optionsComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
1075         // fShowInTextCheckBox = new Button(optionsComposite, SWT.CHECK);
1076         // fShowInTextCheckBox.setText(PreferencesMessages
1077         // .getString("JavaEditorPreferencePage.annotations.showInText"));
1078         // //$NON-NLS-1$
1079         // gd = new GridData(GridData.FILL_HORIZONTAL);
1080         // gd.horizontalAlignment = GridData.BEGINNING;
1081         // gd.horizontalSpan = 2;
1082         // fShowInTextCheckBox.setLayoutData(gd);
1083         // fDecorationStyleCombo = new Combo(optionsComposite, SWT.READ_ONLY);
1084         // for (int i = 0; i < fAnnotationDecorationListModel.length; i++)
1085         // fDecorationStyleCombo.add(fAnnotationDecorationListModel[i][0]);
1086         // gd = new GridData(GridData.FILL_HORIZONTAL);
1087         // gd.horizontalAlignment = GridData.BEGINNING;
1088         // gd.horizontalSpan = 2;
1089         // gd.horizontalIndent = 20;
1090         // fDecorationStyleCombo.setLayoutData(gd);
1091         // fHighlightInTextCheckBox = new Button(optionsComposite, SWT.CHECK);
1092         // fHighlightInTextCheckBox.setText(PreferencesMessages
1093         // .getString("TextEditorPreferencePage.annotations.highlightInText"));
1094         // //$NON-NLS-1$
1095         // gd = new GridData(GridData.FILL_HORIZONTAL);
1096         // gd.horizontalAlignment = GridData.BEGINNING;
1097         // gd.horizontalSpan = 2;
1098         // fHighlightInTextCheckBox.setLayoutData(gd);
1099         // fShowInOverviewRulerCheckBox = new Button(optionsComposite, SWT.CHECK);
1100         // fShowInOverviewRulerCheckBox.setText(PreferencesMessages
1101         // .getString("JavaEditorPreferencePage.annotations.showInOverviewRuler"));
1102         // //$NON-NLS-1$
1103         // gd = new GridData(GridData.FILL_HORIZONTAL);
1104         // gd.horizontalAlignment = GridData.BEGINNING;
1105         // gd.horizontalSpan = 2;
1106         // fShowInOverviewRulerCheckBox.setLayoutData(gd);
1107         // fShowInVerticalRulerCheckBox = new Button(optionsComposite, SWT.CHECK);
1108         // fShowInVerticalRulerCheckBox.setText(PreferencesMessages
1109         // .getString("JavaEditorPreferencePage.annotations.showInVerticalRuler"));
1110         // //$NON-NLS-1$
1111         // gd = new GridData(GridData.FILL_HORIZONTAL);
1112         // gd.horizontalAlignment = GridData.BEGINNING;
1113         // gd.horizontalSpan = 2;
1114         // fShowInVerticalRulerCheckBox.setLayoutData(gd);
1115         // label = new Label(optionsComposite, SWT.LEFT);
1116         // label.setText(PreferencesMessages
1117         // .getString("JavaEditorPreferencePage.annotations.color")); //$NON-NLS-1$
1118         // gd = new GridData();
1119         // gd.horizontalAlignment = GridData.BEGINNING;
1120         // label.setLayoutData(gd);
1121         // fAnnotationForegroundColorEditor = new ColorEditor(optionsComposite);
1122         // Button foregroundColorButton =
1123         // fAnnotationForegroundColorEditor.getButton();
1124         // gd = new GridData(GridData.FILL_HORIZONTAL);
1125         // gd.horizontalAlignment = GridData.BEGINNING;
1126         // foregroundColorButton.setLayoutData(gd);
1127         // fAnnotationList.addSelectionListener(new SelectionListener() {
1128         // public void widgetDefaultSelected(SelectionEvent e) {
1129         // // do nothing
1130         // }
1131         // public void widgetSelected(SelectionEvent e) {
1132         // handleAnnotationListSelection();
1133         // }
1134         // });
1135         // fShowInTextCheckBox.addSelectionListener(new SelectionListener() {
1136         // public void widgetDefaultSelected(SelectionEvent e) {
1137         // // do nothing
1138         // }
1139         // public void widgetSelected(SelectionEvent e) {
1140         // int i = fAnnotationList.getSelectionIndex();
1141         // String key = fAnnotationColorListModel[i][2];
1142         // fOverlayStore.setValue(key, fShowInTextCheckBox.getSelection());
1143         // String decorationKey = fAnnotationColorListModel[i][6];
1144         // fDecorationStyleCombo.setEnabled(decorationKey != null
1145         // && fShowInTextCheckBox.getSelection());
1146         // }
1147         // });
1148         // fHighlightInTextCheckBox.addSelectionListener(new SelectionListener() {
1149         // public void widgetDefaultSelected(SelectionEvent e) {
1150         // // do nothing
1151         // }
1152         // public void widgetSelected(SelectionEvent e) {
1153         // int i = fAnnotationList.getSelectionIndex();
1154         // String key = fAnnotationColorListModel[i][4];
1155         // fOverlayStore.setValue(key, fHighlightInTextCheckBox.getSelection());
1156         // }
1157         // });
1158         // fShowInOverviewRulerCheckBox.addSelectionListener(new SelectionListener()
1159         // {
1160         // public void widgetDefaultSelected(SelectionEvent e) {
1161         // // do nothing
1162         // }
1163         // public void widgetSelected(SelectionEvent e) {
1164         // int i = fAnnotationList.getSelectionIndex();
1165         // String key = fAnnotationColorListModel[i][3];
1166         // fOverlayStore
1167         // .setValue(key, fShowInOverviewRulerCheckBox.getSelection());
1168         // }
1169         // });
1170         // fShowInVerticalRulerCheckBox.addSelectionListener(new SelectionListener()
1171         // {
1172         // public void widgetDefaultSelected(SelectionEvent e) {
1173         // // do nothing
1174         // }
1175         // public void widgetSelected(SelectionEvent e) {
1176         // int i = fAnnotationList.getSelectionIndex();
1177         // String key = fAnnotationColorListModel[i][5];
1178         // fOverlayStore
1179         // .setValue(key, fShowInVerticalRulerCheckBox.getSelection());
1180         // }
1181         // });
1182         // foregroundColorButton.addSelectionListener(new SelectionListener() {
1183         // public void widgetDefaultSelected(SelectionEvent e) {
1184         // // do nothing
1185         // }
1186         // public void widgetSelected(SelectionEvent e) {
1187         // int i = fAnnotationList.getSelectionIndex();
1188         // String key = fAnnotationColorListModel[i][1];
1189         // PreferenceConverter.setValue(fOverlayStore, key,
1190         // fAnnotationForegroundColorEditor.getColorValue());
1191         // }
1192         // });
1193         // fDecorationStyleCombo.addSelectionListener(new SelectionListener() {
1194         // /**
1195         // * {@inheritdoc}
1196         // */
1197         // public void widgetDefaultSelected(SelectionEvent e) {
1198         // // do nothing
1199         // }
1200         // /**
1201         // * {@inheritdoc}
1202         // */
1203         // public void widgetSelected(SelectionEvent e) {
1204         // int i = fAnnotationList.getSelectionIndex();
1205         // String key = fAnnotationColorListModel[i][6];
1206         // if (key != null) {
1207         // for (int j = 0; j < fAnnotationDecorationListModel.length; j++) {
1208         // if (fAnnotationDecorationListModel[j][0]
1209         // .equals(fDecorationStyleCombo.getText())) {
1210         // fOverlayStore.setValue(key, fAnnotationDecorationListModel[j][1]);
1211         // break;
1212         // }
1213         // }
1214         // }
1215         // }
1216         // });
1217         // return composite;
1218         // }
1219 //      private String[][] createAnnotationTypeListModel(
1220 //                      MarkerAnnotationPreferences preferences) {
1221 //              ArrayList listModelItems = new ArrayList();
1222 //              SortedSet sortedPreferences = new TreeSet(new Comparator() {
1223 //                      /*
1224 //                       * @see java.util.Comparator#compare(java.lang.Object,
1225 //                       *      java.lang.Object)
1226 //                       */
1227 //                      public int compare(Object o1, Object o2) {
1228 //                              if (!(o2 instanceof AnnotationPreference))
1229 //                                      return -1;
1230 //                              if (!(o1 instanceof AnnotationPreference))
1231 //                                      return 1;
1232 //                              AnnotationPreference a1 = (AnnotationPreference) o1;
1233 //                              AnnotationPreference a2 = (AnnotationPreference) o2;
1234 //                              return Collator.getInstance().compare(a1.getPreferenceLabel(),
1235 //                                              a2.getPreferenceLabel());
1236 //                      }
1237 //              });
1238 //              sortedPreferences.addAll(preferences.getAnnotationPreferences());
1239 //              Iterator e = sortedPreferences.iterator();
1240 //              while (e.hasNext()) {
1241 //                      AnnotationPreference info = (AnnotationPreference) e.next();
1242 //                      listModelItems.add(new String[] { info.getPreferenceLabel(),
1243 //                                      info.getColorPreferenceKey(), info.getTextPreferenceKey(),
1244 //                                      info.getOverviewRulerPreferenceKey(),
1245 //                                      info.getHighlightPreferenceKey(),
1246 //                                      info.getVerticalRulerPreferenceKey(),
1247 //                                      info.getTextStylePreferenceKey() });
1248 //              }
1249 //              String[][] items = new String[listModelItems.size()][];
1250 //              listModelItems.toArray(items);
1251 //              return items;
1252 //      }
1253
1254         private Control createTypingPage(Composite parent) {
1255                 Composite composite = new Composite(parent, SWT.NONE);
1256                 GridLayout layout = new GridLayout();
1257                 layout.numColumns = 1;
1258                 composite.setLayout(layout);
1259                 String label;
1260                 // label = PreferencesMessages
1261                 // .getString("JavaEditorPreferencePage.overwriteMode");
1262                 // //$NON-NLS-1$
1263                 // addCheckBox(composite, label,
1264                 // PreferenceConstants.EDITOR_DISABLE_OVERWRITE_MODE, 1);
1265                 // addFiller(composite);
1266                 //
1267                 // label = PreferencesMessages
1268                 // .getString("JavaEditorPreferencePage.smartHomeEnd");
1269                 // //$NON-NLS-1$
1270                 // addCheckBox(composite, label,
1271                 // PreferenceConstants.EDITOR_SMART_HOME_END, 1);
1272                 //
1273                 // label = PreferencesMessages
1274                 // .getString("JavaEditorPreferencePage.subWordNavigation");
1275                 // //$NON-NLS-1$
1276                 // addCheckBox(composite, label,
1277                 // PreferenceConstants.EDITOR_SUB_WORD_NAVIGATION, 1);
1278                 // addFiller(composite);
1279                 Group group = new Group(composite, SWT.NONE);
1280                 layout = new GridLayout();
1281                 layout.numColumns = 2;
1282                 group.setLayout(layout);
1283                 group.setText(PreferencesMessages
1284                                 .getString("JavaEditorPreferencePage.typing.description")); //$NON-NLS-1$
1285
1286                 label = PreferencesMessages
1287                                 .getString("JavaEditorPreferencePage.wrapWords");//$NON-NLS-1$
1288                 addCheckBox(group, label, PreferenceConstants.EDITOR_WRAP_WORDS, 1);
1289
1290                 label = PreferencesMessages
1291                                 .getString("JavaEditorPreferencePage.wrapStringsDQ");//$NON-NLS-1$
1292                 Button button = addCheckBox(group, label,
1293                                 PreferenceConstants.EDITOR_WRAP_STRINGS_DQ, 1);
1294
1295                 label = PreferencesMessages
1296                                 .getString("JavaEditorPreferencePage.escapeStringsDQ");//$NON-NLS-1$
1297                 fEscapeStringsButtonDQ = addCheckBox(group, label,
1298                                 PreferenceConstants.EDITOR_ESCAPE_STRINGS_DQ, 1);
1299                 createDependency(button, fEscapeStringsButtonDQ);
1300
1301                 label = PreferencesMessages
1302                                 .getString("JavaEditorPreferencePage.wrapStringsSQ");//$NON-NLS-1$
1303                 button = addCheckBox(group, label,
1304                                 PreferenceConstants.EDITOR_WRAP_STRINGS_SQ, 1);
1305
1306                 label = PreferencesMessages
1307                                 .getString("JavaEditorPreferencePage.escapeStringsSQ");
1308                 //$NON-NLS-1$
1309                 fEscapeStringsButtonSQ = addCheckBox(group, label,
1310                                 PreferenceConstants.EDITOR_ESCAPE_STRINGS_SQ, 1);
1311                 createDependency(button, fEscapeStringsButtonSQ);
1312
1313                 label = PreferencesMessages
1314                                 .getString("JavaEditorPreferencePage.smartPaste");
1315                 //$NON-NLS-1$
1316                 addCheckBox(group, label, PreferenceConstants.EDITOR_SMART_PASTE, 1);
1317
1318                 label = PreferencesMessages
1319                                 .getString("JavaEditorPreferencePage.insertSpaceForTabs");
1320                 //$NON-NLS-1$
1321                 addCheckBox(group, label, PreferenceConstants.EDITOR_SPACES_FOR_TABS, 1);
1322
1323                 label = PreferencesMessages
1324                                 .getString("JavaEditorPreferencePage.closeStringsDQ");
1325                 //$NON-NLS-1$
1326                 addCheckBox(group, label,
1327                                 PreferenceConstants.EDITOR_CLOSE_STRINGS_DQ_PHP, 1);
1328                 label = PreferencesMessages
1329                                 .getString("JavaEditorPreferencePage.closeStringsSQ");
1330                 //$NON-NLS-1$
1331                 addCheckBox(group, label,
1332                                 PreferenceConstants.EDITOR_CLOSE_STRINGS_SQ_PHP, 1);
1333
1334                 label = PreferencesMessages
1335                                 .getString("JavaEditorPreferencePage.closeBrackets");
1336                 //$NON-NLS-1$
1337                 addCheckBox(group, label,
1338                                 PreferenceConstants.EDITOR_CLOSE_BRACKETS_PHP, 1);
1339
1340                 // label = PreferencesMessages
1341                 // .getString("JavaEditorPreferencePage.closeBraces");
1342                 // //$NON-NLS-1$
1343                 // addCheckBox(group, label, PreferenceConstants.EDITOR_CLOSE_BRACES,
1344                 // 1);
1345
1346                 label = PreferencesMessages
1347                                 .getString("JavaEditorPreferencePage.closeJavaDocs");
1348                 //$NON-NLS-1$
1349                 button = addCheckBox(group, label,
1350                                 PreferenceConstants.EDITOR_CLOSE_JAVADOCS, 1);
1351                 label = PreferencesMessages
1352                                 .getString("JavaEditorPreferencePage.formatJavaDocs");
1353                 //$NON-NLS-1$
1354                 button = addCheckBox(group, label,
1355                                 PreferenceConstants.EDITOR_FORMAT_JAVADOCS, 1);
1356
1357                 //
1358                 // label = PreferencesMessages
1359                 // .getString("JavaEditorPreferencePage.addJavaDocTags");
1360                 // //$NON-NLS-1$
1361                 // fAddJavaDocTagsButton = addCheckBox(group, label,
1362                 // PreferenceConstants.EDITOR_ADD_JAVADOC_TAGS, 1);
1363                 // createDependency(button, fAddJavaDocTagsButton);
1364                 return composite;
1365         }
1366
1367 //      private void addFiller(Composite composite) {
1368 //              Label filler = new Label(composite, SWT.LEFT);
1369 //              GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
1370 //              gd.horizontalSpan = 2;
1371 //              gd.heightHint = convertHeightInCharsToPixels(1) / 2;
1372 //              filler.setLayoutData(gd);
1373 //      }
1374
1375         private static void indent(Control control) {
1376                 GridData gridData = new GridData();
1377                 gridData.horizontalIndent = 20;
1378                 control.setLayoutData(gridData);
1379         }
1380
1381         private static void createDependency(final Button master,
1382                         final Control slave) {
1383                 indent(slave);
1384                 master.addSelectionListener(new SelectionListener() {
1385                         public void widgetSelected(SelectionEvent e) {
1386                                 slave.setEnabled(master.getSelection());
1387                         }
1388
1389                         public void widgetDefaultSelected(SelectionEvent e) {
1390                         }
1391                 });
1392         }
1393
1394 //      private void addCompletionRadioButtons(Composite contentAssistComposite) {
1395 //              Composite completionComposite = new Composite(contentAssistComposite,
1396 //                              SWT.NONE);
1397 //              GridData ccgd = new GridData();
1398 //              ccgd.horizontalSpan = 2;
1399 //              completionComposite.setLayoutData(ccgd);
1400 //              GridLayout ccgl = new GridLayout();
1401 //              ccgl.marginWidth = 0;
1402 //              ccgl.numColumns = 2;
1403 //              completionComposite.setLayout(ccgl);
1404 //              // SelectionListener completionSelectionListener= new SelectionAdapter()
1405 //              // {
1406 //              // public void widgetSelected(SelectionEvent e) {
1407 //              // boolean insert= fCompletionInsertsRadioButton.getSelection();
1408 //              // fOverlayStore.setValue(PreferenceConstants.CODEASSIST_INSERT_COMPLETION,
1409 //              // insert);
1410 //              // }
1411 //              // };
1412 //              //
1413 //              // fCompletionInsertsRadioButton= new Button(completionComposite,
1414 //              // SWT.RADIO
1415 //              // | SWT.LEFT);
1416 //              // fCompletionInsertsRadioButton.setText(PreferencesMessages.getString("JavaEditorPreferencePage.completionInserts"));
1417 //              // //$NON-NLS-1$
1418 //              // fCompletionInsertsRadioButton.setLayoutData(new GridData());
1419 //              // fCompletionInsertsRadioButton.addSelectionListener(completionSelectionListener);
1420 //              //
1421 //              // fCompletionOverwritesRadioButton= new Button(completionComposite,
1422 //              // SWT.RADIO | SWT.LEFT);
1423 //              // fCompletionOverwritesRadioButton.setText(PreferencesMessages.getString("JavaEditorPreferencePage.completionOverwrites"));
1424 //              // //$NON-NLS-1$
1425 //              // fCompletionOverwritesRadioButton.setLayoutData(new GridData());
1426 //              // fCompletionOverwritesRadioButton.addSelectionListener(completionSelectionListener);
1427 //      }
1428
1429         private Control createNavigationPage(Composite parent) {
1430                 Composite composite = new Composite(parent, SWT.NULL);
1431                 GridLayout layout = new GridLayout();
1432                 layout.numColumns = 2;
1433                 composite.setLayout(layout);
1434                 String text = PreferencesMessages
1435                                 .getString("JavaEditorPreferencePage.navigation.browserLikeLinks");
1436                 //$NON-NLS-1$
1437                 fBrowserLikeLinksCheckBox = addCheckBox(composite, text,
1438                                 PreferenceConstants.EDITOR_BROWSER_LIKE_LINKS, 0);
1439                 fBrowserLikeLinksCheckBox.addSelectionListener(new SelectionListener() {
1440                         public void widgetSelected(SelectionEvent e) {
1441                                 boolean state = fBrowserLikeLinksCheckBox.getSelection();
1442                                 fBrowserLikeLinksKeyModifierText.setEnabled(state);
1443                                 handleBrowserLikeLinksKeyModifierModified();
1444                         }
1445
1446                         public void widgetDefaultSelected(SelectionEvent e) {
1447                         }
1448                 });
1449                 // Text field for modifier string
1450                 text = PreferencesMessages
1451                                 .getString("JavaEditorPreferencePage.navigation.browserLikeLinksKeyModifier");
1452                 //$NON-NLS-1$
1453                 fBrowserLikeLinksKeyModifierText = addTextField(composite, text,
1454                                 PreferenceConstants.EDITOR_BROWSER_LIKE_LINKS_KEY_MODIFIER, 20,
1455                                 0, false);
1456                 fBrowserLikeLinksKeyModifierText.setTextLimit(Text.LIMIT);
1457
1458                 if (computeStateMask(fOverlayStore
1459                                 .getString(PreferenceConstants.EDITOR_BROWSER_LIKE_LINKS_KEY_MODIFIER)) == -1) {
1460                         // Fix possible illegal modifier string
1461                         int stateMask = fOverlayStore
1462                                         .getInt(PreferenceConstants.EDITOR_BROWSER_LIKE_LINKS_KEY_MODIFIER_MASK);
1463                         if (stateMask == -1)
1464                                 fBrowserLikeLinksKeyModifierText.setText(""); //$NON-NLS-1$
1465                         else
1466                                 fBrowserLikeLinksKeyModifierText.setText(EditorUtility
1467                                                 .getModifierString(stateMask));
1468                 }
1469                 fBrowserLikeLinksKeyModifierText.addKeyListener(new KeyListener() {
1470                         private boolean isModifierCandidate;
1471
1472                         public void keyPressed(KeyEvent e) {
1473                                 isModifierCandidate = e.keyCode > 0 && e.character == 0
1474                                                 && e.stateMask == 0;
1475                         }
1476
1477                         public void keyReleased(KeyEvent e) {
1478                                 if (isModifierCandidate && e.stateMask > 0
1479                                                 && e.stateMask == e.stateMask && e.character == 0) {// &&
1480                                                                                                                                                         // e.time
1481                                                                                                                                                         // -time
1482                                                                                                                                                         // <
1483                                                                                                                                                         // 1000)
1484                                                                                                                                                         // {
1485                                         String modifierString = fBrowserLikeLinksKeyModifierText
1486                                                         .getText();
1487                                         Point selection = fBrowserLikeLinksKeyModifierText
1488                                                         .getSelection();
1489                                         int i = selection.x - 1;
1490                                         while (i > -1
1491                                                         && Character.isWhitespace(modifierString.charAt(i))) {
1492                                                 i--;
1493                                         }
1494                                         boolean needsPrefixDelimiter = i > -1
1495                                                         && !String.valueOf(modifierString.charAt(i))
1496                                                                         .equals(DELIMITER);
1497
1498                                         i = selection.y;
1499                                         while (i < modifierString.length()
1500                                                         && Character.isWhitespace(modifierString.charAt(i))) {
1501                                                 i++;
1502                                         }
1503                                         boolean needsPostfixDelimiter = i < modifierString.length()
1504                                                         && !String.valueOf(modifierString.charAt(i))
1505                                                                         .equals(DELIMITER);
1506
1507                                         String insertString;
1508
1509                                         if (needsPrefixDelimiter && needsPostfixDelimiter)
1510                                                 insertString = PreferencesMessages
1511                                                                 .getFormattedString(
1512                                                                                 "JavaEditorPreferencePage.navigation.insertDelimiterAndModifierAndDelimiter",
1513                                                                                 new String[] { Action
1514                                                                                                 .findModifierString(e.stateMask) }); //$NON-NLS-1$
1515                                         else if (needsPrefixDelimiter)
1516                                                 insertString = PreferencesMessages
1517                                                                 .getFormattedString(
1518                                                                                 "JavaEditorPreferencePage.navigation.insertDelimiterAndModifier",
1519                                                                                 new String[] { Action
1520                                                                                                 .findModifierString(e.stateMask) }); //$NON-NLS-1$
1521                                         else if (needsPostfixDelimiter)
1522                                                 insertString = PreferencesMessages
1523                                                                 .getFormattedString(
1524                                                                                 "JavaEditorPreferencePage.navigation.insertModifierAndDelimiter",
1525                                                                                 new String[] { Action
1526                                                                                                 .findModifierString(e.stateMask) }); //$NON-NLS-1$
1527                                         else
1528                                                 insertString = Action.findModifierString(e.stateMask);
1529
1530                                         fBrowserLikeLinksKeyModifierText.insert(insertString);
1531                                 }
1532                         }
1533                 });
1534
1535                 fBrowserLikeLinksKeyModifierText
1536                                 .addModifyListener(new ModifyListener() {
1537                                         public void modifyText(ModifyEvent e) {
1538                                                 handleBrowserLikeLinksKeyModifierModified();
1539                                         }
1540                                 });
1541                 return composite;
1542         }
1543
1544         private void handleBrowserLikeLinksKeyModifierModified() {
1545                 String modifiers = fBrowserLikeLinksKeyModifierText.getText();
1546                 int stateMask = computeStateMask(modifiers);
1547                 if (fBrowserLikeLinksCheckBox.getSelection()
1548                                 && (stateMask == -1 || (stateMask & SWT.SHIFT) != 0)) {
1549                         if (stateMask == -1)
1550                                 fBrowserLikeLinksKeyModifierStatus = new StatusInfo(
1551                                                 IStatus.ERROR,
1552                                                 PreferencesMessages
1553                                                                 .getFormattedString(
1554                                                                                 "JavaEditorPreferencePage.navigation.modifierIsNotValid", modifiers)); //$NON-NLS-1$
1555                         else
1556                                 fBrowserLikeLinksKeyModifierStatus = new StatusInfo(
1557                                                 IStatus.ERROR,
1558                                                 PreferencesMessages
1559                                                                 .getString("JavaEditorPreferencePage.navigation.shiftIsDisabled"));
1560                         //$NON-NLS-1$
1561                         setValid(false);
1562                         StatusUtil.applyToStatusLine(this,
1563                                         fBrowserLikeLinksKeyModifierStatus);
1564                 } else {
1565                         fBrowserLikeLinksKeyModifierStatus = new StatusInfo();
1566                         updateStatus(fBrowserLikeLinksKeyModifierStatus);
1567                 }
1568         }
1569
1570 //      private IStatus getBrowserLikeLinksKeyModifierStatus() {
1571 //              if (fBrowserLikeLinksKeyModifierStatus == null)
1572 //                      fBrowserLikeLinksKeyModifierStatus = new StatusInfo();
1573 //              return fBrowserLikeLinksKeyModifierStatus;
1574 //      }
1575
1576         /**
1577          * Computes the state mask for the given modifier string.
1578          *
1579          * @param modifiers
1580          *            the string with the modifiers, separated by '+', '-', ';', ','
1581          *            or '.'
1582          * @return the state mask or -1 if the input is invalid
1583          */
1584         private int computeStateMask(String modifiers) {
1585                 if (modifiers == null)
1586                         return -1;
1587                 if (modifiers.length() == 0)
1588                         return SWT.NONE;
1589                 int stateMask = 0;
1590                 StringTokenizer modifierTokenizer = new StringTokenizer(modifiers,
1591                                 ",;.:+-* "); //$NON-NLS-1$
1592                 while (modifierTokenizer.hasMoreTokens()) {
1593                         int modifier = EditorUtility
1594                                         .findLocalizedModifier(modifierTokenizer.nextToken());
1595                         if (modifier == 0 || (stateMask & modifier) == modifier)
1596                                 return -1;
1597                         stateMask = stateMask | modifier;
1598                 }
1599                 return stateMask;
1600         }
1601
1602         /*
1603          * @see PreferencePage#createContents(Composite)
1604          */
1605         protected Control createContents(Composite parent) {
1606                 initializeDefaultColors();
1607                 fFoldingConfigurationBlock = new FoldingConfigurationBlock(
1608                                 fOverlayStore);
1609                 fOverlayStore.load();
1610                 fOverlayStore.start();
1611                 TabFolder folder = new TabFolder(parent, SWT.NONE);
1612                 folder.setLayout(new TabFolderLayout());
1613                 folder.setLayoutData(new GridData(GridData.FILL_BOTH));
1614                 TabItem item = new TabItem(folder, SWT.NONE);
1615                 item.setText(PreferencesMessages
1616                                 .getString("JavaEditorPreferencePage.general")); //$NON-NLS-1$
1617                 item.setControl(createAppearancePage(folder));
1618                 item = new TabItem(folder, SWT.NONE);
1619                 item.setText(PreferencesMessages
1620                                 .getString("JavaEditorPreferencePage.colors")); //$NON-NLS-1$
1621                 item.setControl(createSyntaxPage(folder));
1622
1623                 // item = new TabItem(folder, SWT.NONE);
1624                 // item.setText(PreferencesMessages
1625                 // .getString("JavaEditorPreferencePage.annotationsTab.title"));
1626                 // //$NON-NLS-1$
1627                 // item.setControl(createAnnotationsPage(folder));
1628                 item = new TabItem(folder, SWT.NONE);
1629                 item.setText(PreferencesMessages
1630                                 .getString("JavaEditorPreferencePage.typing.tabTitle"));
1631                 //$NON-NLS-1$
1632                 item.setControl(createTypingPage(folder));
1633
1634                 item = new TabItem(folder, SWT.NONE);
1635                 item.setText(PreferencesMessages
1636                                 .getString("JavaEditorPreferencePage.hoverTab.title"));
1637                 //$NON-NLS-1$
1638                 fJavaEditorHoverConfigurationBlock = new JavaEditorHoverConfigurationBlock(
1639                                 this, fOverlayStore);
1640                 item.setControl(fJavaEditorHoverConfigurationBlock
1641                                 .createControl(folder));
1642                 item = new TabItem(folder, SWT.NONE);
1643                 item.setText(PreferencesMessages
1644                                 .getString("JavaEditorPreferencePage.navigationTab.title"));
1645                 // //$NON-NLS-1$
1646                 item.setControl(createNavigationPage(folder));
1647                 item = new TabItem(folder, SWT.NONE);
1648                 item.setText(PreferencesMessages
1649                                 .getString("JavaEditorPreferencePage.folding.title")); //$NON-NLS-1$
1650                 item.setControl(fFoldingConfigurationBlock.createControl(folder));
1651
1652                 initialize();
1653                 Dialog.applyDialogFont(folder);
1654                 return folder;
1655         }
1656
1657         private void initialize() {
1658                 initializeFields();
1659                 for (int i = 0; i < fSyntaxColorListModel.length; i++)
1660                         fSyntaxColorList.add(fSyntaxColorListModel[i][0]);
1661                 fSyntaxColorList.getDisplay().asyncExec(new Runnable() {
1662                         public void run() {
1663                                 if (fSyntaxColorList != null && !fSyntaxColorList.isDisposed()) {
1664                                         fSyntaxColorList.select(0);
1665                                         handleSyntaxColorListSelection();
1666                                 }
1667                         }
1668                 });
1669                 for (int i = 0; i < fAppearanceColorListModel.length; i++)
1670                         fAppearanceColorList.add(fAppearanceColorListModel[i][0]);
1671                 fAppearanceColorList.getDisplay().asyncExec(new Runnable() {
1672                         public void run() {
1673                                 if (fAppearanceColorList != null
1674                                                 && !fAppearanceColorList.isDisposed()) {
1675                                         fAppearanceColorList.select(0);
1676                                         handleAppearanceColorListSelection();
1677                                 }
1678                         }
1679                 });
1680                 // for (int i = 0; i < fAnnotationColorListModel.length; i++)
1681                 // fAnnotationList.add(fAnnotationColorListModel[i][0]);
1682                 // fAnnotationList.getDisplay().asyncExec(new Runnable() {
1683                 // public void run() {
1684                 // if (fAnnotationList != null && !fAnnotationList.isDisposed()) {
1685                 // fAnnotationList.select(0);
1686                 // handleAnnotationListSelection();
1687                 // }
1688                 // }
1689                 // });
1690                 // for (int i= 0; i < fContentAssistColorListModel.length; i++)
1691                 // fContentAssistColorList.add(fContentAssistColorListModel[i][0]);
1692                 // fContentAssistColorList.getDisplay().asyncExec(new Runnable() {
1693                 // public void run() {
1694                 // if (fContentAssistColorList != null &&
1695                 // !fContentAssistColorList.isDisposed()) {
1696                 // fContentAssistColorList.select(0);
1697                 // handleContentAssistColorListSelection();
1698                 // }
1699                 // }
1700                 // });
1701                 fFoldingConfigurationBlock.initialize();
1702         }
1703
1704         private void initializeFields() {
1705                 Iterator e = fColorButtons.keySet().iterator();
1706                 while (e.hasNext()) {
1707                         ColorEditor c = (ColorEditor) e.next();
1708                         String key = (String) fColorButtons.get(c);
1709                         RGB rgb = PreferenceConverter.getColor(fOverlayStore, key);
1710                         c.setColorValue(rgb);
1711                 }
1712                 e = fCheckBoxes.keySet().iterator();
1713                 while (e.hasNext()) {
1714                         Button b = (Button) e.next();
1715                         String key = (String) fCheckBoxes.get(b);
1716                         b.setSelection(fOverlayStore.getBoolean(key));
1717                 }
1718                 e = fTextFields.keySet().iterator();
1719                 while (e.hasNext()) {
1720                         Text t = (Text) e.next();
1721                         String key = (String) fTextFields.get(t);
1722                         t.setText(fOverlayStore.getString(key));
1723                 }
1724                 RGB rgb = PreferenceConverter.getColor(fOverlayStore,
1725                                 PreferenceConstants.EDITOR_BACKGROUND_COLOR);
1726                 fBackgroundColorEditor.setColorValue(rgb);
1727                 boolean default_ = fOverlayStore
1728                                 .getBoolean(PreferenceConstants.EDITOR_BACKGROUND_DEFAULT_COLOR);
1729                 fBackgroundDefaultRadioButton.setSelection(default_);
1730                 fBackgroundCustomRadioButton.setSelection(!default_);
1731                 fBackgroundColorButton.setEnabled(!default_);
1732 //              boolean closeJavaDocs = fOverlayStore
1733 //                              .getBoolean(PreferenceConstants.EDITOR_CLOSE_JAVADOCS);
1734                 // fAddJavaDocTagsButton.setEnabled(closeJavaDocs);
1735                 fEscapeStringsButtonDQ.setEnabled(fOverlayStore
1736                                 .getBoolean(PreferenceConstants.EDITOR_WRAP_STRINGS_DQ));
1737                 fEscapeStringsButtonSQ.setEnabled(fOverlayStore
1738                                 .getBoolean(PreferenceConstants.EDITOR_WRAP_STRINGS_SQ));
1739                 // boolean fillMethodArguments=
1740                 // fOverlayStore.getBoolean(PreferenceConstants.CODEASSIST_FILL_ARGUMENT_NAMES);
1741                 // fGuessMethodArgumentsButton.setEnabled(fillMethodArguments);
1742                 // boolean completionInserts=
1743                 // fOverlayStore.getBoolean(PreferenceConstants.CODEASSIST_INSERT_COMPLETION);
1744                 // fCompletionInsertsRadioButton.setSelection(completionInserts);
1745                 // fCompletionOverwritesRadioButton.setSelection(! completionInserts);
1746                 //
1747                 fBrowserLikeLinksKeyModifierText.setEnabled(fBrowserLikeLinksCheckBox
1748                                 .getSelection());
1749                 // boolean markOccurrences=
1750                 // fOverlayStore.getBoolean(PreferenceConstants.EDITOR_MARK_OCCURRENCES);
1751                 // fStickyOccurrencesButton.setEnabled(markOccurrences);
1752                 updateAutoactivationControls();
1753         }
1754
1755         private void initializeDefaultColors() {
1756                 if (!getPreferenceStore().contains(
1757                                 PreferenceConstants.EDITOR_BACKGROUND_COLOR)) {
1758                         RGB rgb = getControl().getDisplay().getSystemColor(
1759                                         SWT.COLOR_LIST_BACKGROUND).getRGB();
1760                         PreferenceConverter.setDefault(fOverlayStore,
1761                                         PreferenceConstants.EDITOR_BACKGROUND_COLOR, rgb);
1762                         PreferenceConverter.setDefault(getPreferenceStore(),
1763                                         PreferenceConstants.EDITOR_BACKGROUND_COLOR, rgb);
1764                 }
1765                 if (!getPreferenceStore().contains(
1766                                 PreferenceConstants.EDITOR_FOREGROUND_COLOR)) {
1767                         RGB rgb = getControl().getDisplay().getSystemColor(
1768                                         SWT.COLOR_LIST_FOREGROUND).getRGB();
1769                         PreferenceConverter.setDefault(fOverlayStore,
1770                                         PreferenceConstants.EDITOR_FOREGROUND_COLOR, rgb);
1771                         PreferenceConverter.setDefault(getPreferenceStore(),
1772                                         PreferenceConstants.EDITOR_FOREGROUND_COLOR, rgb);
1773                 }
1774         }
1775
1776         private void updateAutoactivationControls() {
1777                 // boolean autoactivation=
1778                 // fOverlayStore.getBoolean(PreferenceConstants.CODEASSIST_AUTOACTIVATION);
1779                 // fAutoInsertDelayText.setEnabled(autoactivation);
1780                 // fAutoInsertDelayLabel.setEnabled(autoactivation);
1781                 // fAutoInsertJavaTriggerText.setEnabled(autoactivation);
1782                 // fAutoInsertJavaTriggerLabel.setEnabled(autoactivation);
1783                 //
1784                 // fAutoInsertJavaDocTriggerText.setEnabled(autoactivation);
1785                 // fAutoInsertJavaDocTriggerLabel.setEnabled(autoactivation);
1786         }
1787
1788         /*
1789          * @see PreferencePage#performOk()
1790          */
1791         public boolean performOk() {
1792                 // fJavaEditorHoverConfigurationBlock.performOk();
1793                 fFoldingConfigurationBlock.performOk();
1794                 fOverlayStore
1795                                 .setValue(
1796                                                 PreferenceConstants.EDITOR_BROWSER_LIKE_LINKS_KEY_MODIFIER_MASK,
1797                                                 computeStateMask(fBrowserLikeLinksKeyModifierText
1798                                                                 .getText()));
1799                 fOverlayStore.propagate();
1800                 PHPeclipsePlugin.getDefault().savePluginPreferences();
1801                 return true;
1802         }
1803
1804         /*
1805          * @see PreferencePage#performDefaults()
1806          */
1807         protected void performDefaults() {
1808                 fOverlayStore.loadDefaults();
1809                 initializeFields();
1810                 handleSyntaxColorListSelection();
1811                 handleAppearanceColorListSelection();
1812                 // handleAnnotationListSelection();
1813                 // handleContentAssistColorListSelection();
1814                 // fJavaEditorHoverConfigurationBlock.performDefaults();
1815                 fFoldingConfigurationBlock.performDefaults();
1816                 super.performDefaults();
1817                 fPreviewViewer.invalidateTextPresentation();
1818         }
1819
1820         /*
1821          * @see DialogPage#dispose()
1822          */
1823         public void dispose() {
1824                 fFoldingConfigurationBlock.dispose();
1825
1826                 if (fJavaTextTools != null) {
1827                         fJavaTextTools.dispose();
1828                         fJavaTextTools = null;
1829                 }
1830                 if (fOverlayStore != null) {
1831                         fOverlayStore.stop();
1832                         fOverlayStore = null;
1833                 }
1834                 if (fBackgroundColor != null && !fBackgroundColor.isDisposed())
1835                         fBackgroundColor.dispose();
1836                 super.dispose();
1837         }
1838
1839         private Button addCheckBox(Composite parent, String label, String key,
1840                         int indentation) {
1841                 Button checkBox = new Button(parent, SWT.CHECK);
1842                 checkBox.setText(label);
1843                 GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
1844                 gd.horizontalIndent = indentation;
1845                 gd.horizontalSpan = 2;
1846                 checkBox.setLayoutData(gd);
1847                 checkBox.addSelectionListener(fCheckBoxListener);
1848                 fCheckBoxes.put(checkBox, key);
1849                 return checkBox;
1850         }
1851
1852         private Text addTextField(Composite composite, String label, String key,
1853                         int textLimit, int indentation, boolean isNumber) {
1854                 return getTextControl(addLabelledTextField(composite, label, key,
1855                                 textLimit, indentation, isNumber));
1856         }
1857
1858 //      private static Label getLabelControl(Control[] labelledTextField) {
1859 //              return (Label) labelledTextField[0];
1860 //      }
1861
1862         private static Text getTextControl(Control[] labelledTextField) {
1863                 return (Text) labelledTextField[1];
1864         }
1865
1866         /**
1867          * Returns an array of size 2: - first element is of type <code>Label</code>-
1868          * second element is of type <code>Text</code> Use
1869          * <code>getLabelControl</code> and <code>getTextControl</code> to get
1870          * the 2 controls.
1871          */
1872         private Control[] addLabelledTextField(Composite composite, String label,
1873                         String key, int textLimit, int indentation, boolean isNumber) {
1874                 Label labelControl = new Label(composite, SWT.NONE);
1875                 labelControl.setText(label);
1876                 GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
1877                 gd.horizontalIndent = indentation;
1878                 labelControl.setLayoutData(gd);
1879                 Text textControl = new Text(composite, SWT.BORDER | SWT.SINGLE);
1880                 gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
1881                 gd.widthHint = convertWidthInCharsToPixels(textLimit + 1);
1882                 textControl.setLayoutData(gd);
1883                 textControl.setTextLimit(textLimit);
1884                 fTextFields.put(textControl, key);
1885                 if (isNumber) {
1886                         fNumberFields.add(textControl);
1887                         textControl.setText("0");
1888                         textControl.addModifyListener(fNumberFieldListener);
1889                 } else {
1890                         textControl.addModifyListener(fTextFieldListener);
1891                 }
1892                 return new Control[] { labelControl, textControl };
1893         }
1894
1895         private String loadPreviewContentFromFile(String filename) {
1896                 String line;
1897                 String separator = System.getProperty("line.separator"); //$NON-NLS-1$
1898                 StringBuffer buffer = new StringBuffer(512);
1899                 BufferedReader reader = null;
1900                 try {
1901                         reader = new BufferedReader(new InputStreamReader(getClass()
1902                                         .getResourceAsStream(filename)));
1903                         while ((line = reader.readLine()) != null) {
1904                                 buffer.append(line);
1905                                 buffer.append(separator);
1906                         }
1907                 } catch (IOException io) {
1908                         PHPeclipsePlugin.log(io);
1909                 } finally {
1910                         if (reader != null) {
1911                                 try {
1912                                         reader.close();
1913                                 } catch (IOException e) {
1914                                 }
1915                         }
1916                 }
1917                 return buffer.toString();
1918         }
1919
1920         private void numberFieldChanged(Text textControl) {
1921                 String number = textControl.getText();
1922                 IStatus status = validatePositiveNumber(number);
1923                 if (!status.matches(IStatus.ERROR))
1924                         fOverlayStore.setValue((String) fTextFields.get(textControl),
1925                                         number);
1926                 updateStatus(status);
1927         }
1928
1929         private IStatus validatePositiveNumber(String number) {
1930                 StatusInfo status = new StatusInfo();
1931                 if (number.length() == 0) {
1932                         status.setError(PreferencesMessages
1933                                         .getString("JavaEditorPreferencePage.empty_input")); //$NON-NLS-1$
1934                 } else {
1935                         try {
1936                                 int value = Integer.parseInt(number);
1937                                 if (value < 0)
1938                                         status.setError(PreferencesMessages.getFormattedString(
1939                                                         "JavaEditorPreferencePage.invalid_input", number)); //$NON-NLS-1$
1940                         } catch (NumberFormatException e) {
1941                                 status.setError(PreferencesMessages.getFormattedString(
1942                                                 "JavaEditorPreferencePage.invalid_input", number)); //$NON-NLS-1$
1943                         }
1944                 }
1945                 return status;
1946         }
1947
1948         void updateStatus(IStatus status) {
1949                 if (!status.matches(IStatus.ERROR)) {
1950                         for (int i = 0; i < fNumberFields.size(); i++) {
1951                                 Text text = (Text) fNumberFields.get(i);
1952                                 IStatus s = validatePositiveNumber(text.getText());
1953                                 status = StatusUtil.getMoreSevere(s, status);
1954                         }
1955                 }
1956                 // status=
1957                 // StatusUtil.getMoreSevere(fJavaEditorHoverConfigurationBlock.getStatus(),
1958                 // status);
1959                 // status=
1960                 // StatusUtil.getMoreSevere(getBrowserLikeLinksKeyModifierStatus(),
1961                 // status);
1962                 setValid(!status.matches(IStatus.ERROR));
1963                 StatusUtil.applyToStatusLine(this, status);
1964         }
1965 }