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