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