]> git.uio.no Git - ifi-stolz-refaktor.git/blob - case-study/jdt-after/ui/org/eclipse/jdt/internal/ui/preferences/MarkOccurrencesConfigurationBlock.java
Case Study: adding data and statistics
[ifi-stolz-refaktor.git] / case-study / jdt-after / ui / org / eclipse / jdt / internal / ui / preferences / MarkOccurrencesConfigurationBlock.java
1 /*******************************************************************************
2  * Copyright (c) 2000, 2011 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Eclipse Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Contributors:
9  *     IBM Corporation - initial API and implementation
10  *     Sebastian Davids, sdavids@gmx.de - 187316 [preferences] Mark Occurences Pref Page; Link to
11  *******************************************************************************/
12 package org.eclipse.jdt.internal.ui.preferences;
13
14 import java.util.ArrayList;
15 import java.util.HashMap;
16 import java.util.Iterator;
17 import java.util.Map;
18
19 import org.eclipse.swt.SWT;
20 import org.eclipse.swt.events.SelectionAdapter;
21 import org.eclipse.swt.events.SelectionEvent;
22 import org.eclipse.swt.events.SelectionListener;
23 import org.eclipse.swt.layout.GridData;
24 import org.eclipse.swt.layout.GridLayout;
25 import org.eclipse.swt.widgets.Button;
26 import org.eclipse.swt.widgets.Composite;
27 import org.eclipse.swt.widgets.Control;
28 import org.eclipse.swt.widgets.Label;
29 import org.eclipse.swt.widgets.Link;
30
31 import org.eclipse.core.runtime.IStatus;
32
33 import org.eclipse.jface.layout.PixelConverter;
34
35 import org.eclipse.ui.dialogs.PreferencesUtil;
36
37 import org.eclipse.ui.texteditor.AnnotationPreference;
38
39 import org.eclipse.ui.editors.text.EditorsUI;
40
41 import org.eclipse.jdt.ui.PreferenceConstants;
42
43 import org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
44 import org.eclipse.jdt.internal.ui.preferences.OverlayPreferenceStore.OverlayKey;
45
46
47 /**
48  * Configures Java Editor hover preferences.
49  *
50  * @since 2.1
51  */
52 class MarkOccurrencesConfigurationBlock implements IPreferenceConfigurationBlock {
53
54         OverlayPreferenceStore fStore;
55
56
57         private Map<Button, String> fCheckBoxes= new HashMap<Button, String>();
58         private SelectionListener fCheckBoxListener= new SelectionListener() {
59                 public void widgetDefaultSelected(SelectionEvent e) {
60                 }
61                 public void widgetSelected(SelectionEvent e) {
62                         Button button= (Button) e.widget;
63                         fStore.setValue(fCheckBoxes.get(button), button.getSelection());
64                 }
65         };
66
67         /**
68          * List of master/slave listeners when there's a dependency.
69          *
70          * @see #createDependency(Button, String, Control)
71          * @since 3.0
72          */
73         private ArrayList<SelectionListener> fMasterSlaveListeners= new ArrayList<SelectionListener>();
74
75         private StatusInfo fStatus;
76
77         public MarkOccurrencesConfigurationBlock(OverlayPreferenceStore store) {
78                 store.generated_9167413225028357301(this);
79         }
80
81         OverlayPreferenceStore.OverlayKey[] createOverlayStoreKeys() {
82
83                 ArrayList<OverlayKey> overlayKeys= new ArrayList<OverlayKey>();
84
85                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_MARK_OCCURRENCES));
86                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_MARK_TYPE_OCCURRENCES));
87                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_MARK_METHOD_OCCURRENCES));
88                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_MARK_CONSTANT_OCCURRENCES));
89                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_MARK_FIELD_OCCURRENCES));
90                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_MARK_LOCAL_VARIABLE_OCCURRENCES));
91                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_MARK_EXCEPTION_OCCURRENCES));
92                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_MARK_METHOD_EXIT_POINTS));
93                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_MARK_IMPLEMENTORS));
94                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_MARK_BREAK_CONTINUE_TARGETS));
95                 overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_STICKY_OCCURRENCES));
96
97                 OverlayPreferenceStore.OverlayKey[] keys= new OverlayPreferenceStore.OverlayKey[overlayKeys.size()];
98                 overlayKeys.toArray(keys);
99                 return keys;
100         }
101
102         /**
103          * Creates page for mark occurrences preferences.
104          *
105          * @param parent the parent composite
106          * @return the control for the preference page
107          */
108         public Control createControl(final Composite parent) {
109
110                 Composite composite= new Composite(parent, SWT.NONE);
111                 GridLayout layout= new GridLayout();
112                 layout.numColumns= 1;
113                 layout.marginHeight= 0;
114                 layout.marginWidth= 0;
115                 composite.setLayout(layout);
116
117                 Link link= new Link(composite, SWT.NONE);
118                 link.setText(PreferencesMessages.MarkOccurrencesConfigurationBlock_link);
119                 link.addSelectionListener(new SelectionAdapter() {
120                         @Override
121                         public void widgetSelected(SelectionEvent e) {
122                                 String data= null;
123                                 AnnotationPreference preference= EditorsUI.getAnnotationPreferenceLookup().getAnnotationPreference("org.eclipse.jdt.ui.occurrences"); //$NON-NLS-1$
124                                 if (preference != null)
125                                         data= preference.getPreferenceLabel();
126                                 PreferencesUtil.createPreferenceDialogOn(parent.getShell(), e.text, null, data);
127                         }
128                 });
129
130                 addFiller(composite);
131
132                 String label;
133
134                 label= PreferencesMessages.MarkOccurrencesConfigurationBlock_markOccurrences;
135                 Button master= addCheckBox(composite, label, PreferenceConstants.EDITOR_MARK_OCCURRENCES, 0);
136
137                 addFiller(composite);
138
139                 label= PreferencesMessages.MarkOccurrencesConfigurationBlock_markTypeOccurrences;
140                 Button slave= addCheckBox(composite, label, PreferenceConstants.EDITOR_MARK_TYPE_OCCURRENCES, 0);
141                 createDependency(master, PreferenceConstants.EDITOR_STICKY_OCCURRENCES, slave);
142
143                 label= PreferencesMessages.MarkOccurrencesConfigurationBlock_markMethodOccurrences;
144                 slave= addCheckBox(composite, label, PreferenceConstants.EDITOR_MARK_METHOD_OCCURRENCES, 0);
145                 createDependency(master, PreferenceConstants.EDITOR_MARK_METHOD_OCCURRENCES, slave);
146
147                 label= PreferencesMessages.MarkOccurrencesConfigurationBlock_markConstantOccurrences;
148                 slave= addCheckBox(composite, label, PreferenceConstants.EDITOR_MARK_CONSTANT_OCCURRENCES, 0);
149                 createDependency(master, PreferenceConstants.EDITOR_MARK_CONSTANT_OCCURRENCES, slave);
150
151                 label= PreferencesMessages.MarkOccurrencesConfigurationBlock_markFieldOccurrences;
152                 slave= addCheckBox(composite, label, PreferenceConstants.EDITOR_MARK_FIELD_OCCURRENCES, 0);
153                 createDependency(master, PreferenceConstants.EDITOR_MARK_FIELD_OCCURRENCES, slave);
154
155                 label= PreferencesMessages.MarkOccurrencesConfigurationBlock_markLocalVariableOccurrences;
156                 slave= addCheckBox(composite, label, PreferenceConstants.EDITOR_MARK_LOCAL_VARIABLE_OCCURRENCES, 0);
157                 createDependency(master, PreferenceConstants.EDITOR_MARK_LOCAL_VARIABLE_OCCURRENCES, slave);
158
159                 label= PreferencesMessages.MarkOccurrencesConfigurationBlock_markExceptionOccurrences;
160                 slave= addCheckBox(composite, label, PreferenceConstants.EDITOR_MARK_EXCEPTION_OCCURRENCES, 0);
161                 createDependency(master, PreferenceConstants.EDITOR_MARK_EXCEPTION_OCCURRENCES, slave);
162
163                 label= PreferencesMessages.MarkOccurrencesConfigurationBlock_markMethodExitPoints;
164                 slave= addCheckBox(composite, label, PreferenceConstants.EDITOR_MARK_METHOD_EXIT_POINTS, 0);
165                 createDependency(master, PreferenceConstants.EDITOR_MARK_METHOD_EXIT_POINTS, slave);
166
167                 label= PreferencesMessages.MarkOccurrencesConfigurationBlock_markImplementors;
168                 slave= addCheckBox(composite, label, PreferenceConstants.EDITOR_MARK_IMPLEMENTORS, 0);
169                 createDependency(master, PreferenceConstants.EDITOR_MARK_IMPLEMENTORS, slave);
170
171                 label= PreferencesMessages.MarkOccurrencesConfigurationBlock_markBreakContinueTargets;
172                 slave= addCheckBox(composite, label, PreferenceConstants.EDITOR_MARK_BREAK_CONTINUE_TARGETS, 0);
173                 createDependency(master, PreferenceConstants.EDITOR_MARK_BREAK_CONTINUE_TARGETS, slave);
174
175                 addFiller(composite);
176
177                 label= PreferencesMessages.MarkOccurrencesConfigurationBlock_stickyOccurrences;
178                 slave= addCheckBox(composite, label, PreferenceConstants.EDITOR_STICKY_OCCURRENCES, 0);
179                 createDependency(master, PreferenceConstants.EDITOR_STICKY_OCCURRENCES, slave);
180
181                 return composite;
182         }
183
184         private void addFiller(Composite composite) {
185                 PixelConverter pixelConverter= new PixelConverter(composite);
186
187                 Label filler= new Label(composite, SWT.LEFT );
188                 GridData gd= new GridData(GridData.HORIZONTAL_ALIGN_FILL);
189                 gd.horizontalSpan= 2;
190                 gd.heightHint= pixelConverter.convertHeightInCharsToPixels(1) / 2;
191                 filler.setLayoutData(gd);
192         }
193
194         private Button addCheckBox(Composite parent, String label, String key, int indentation) {
195                 Button checkBox= new Button(parent, SWT.CHECK);
196                 checkBox.setText(label);
197
198                 GridData gd= new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
199                 gd.horizontalIndent= indentation;
200                 gd.horizontalSpan= 2;
201                 checkBox.setLayoutData(gd);
202                 checkBox.addSelectionListener(fCheckBoxListener);
203
204                 fCheckBoxes.put(checkBox, key);
205
206                 return checkBox;
207         }
208
209         private void createDependency(final Button master, String masterKey, final Control slave) {
210                 indent(slave);
211                 boolean masterState= fStore.getBoolean(masterKey);
212                 slave.setEnabled(masterState);
213                 SelectionListener listener= new SelectionListener() {
214                         public void widgetSelected(SelectionEvent e) {
215                                 slave.setEnabled(master.getSelection());
216                         }
217
218                         public void widgetDefaultSelected(SelectionEvent e) {}
219                 };
220                 master.addSelectionListener(listener);
221                 fMasterSlaveListeners.add(listener);
222         }
223
224         private static void indent(Control control) {
225                 GridData gridData= new GridData();
226                 gridData.horizontalIndent= 10;
227                 control.setLayoutData(gridData);
228         }
229
230         public void initialize() {
231                 initializeFields();
232         }
233
234         void initializeFields() {
235
236                 Iterator<Button> iter= fCheckBoxes.keySet().iterator();
237                 while (iter.hasNext()) {
238                         Button b= iter.next();
239                         String key= fCheckBoxes.get(b);
240                         b.setSelection(fStore.getBoolean(key));
241                 }
242
243         // Update slaves
244         Iterator<SelectionListener> iter2= fMasterSlaveListeners.iterator();
245         while (iter2.hasNext()) {
246             SelectionListener listener= iter2.next();
247             listener.widgetSelected(null);
248         }
249
250         }
251
252         public void performOk() {
253         }
254
255         public void performDefaults() {
256                 restoreFromPreferences();
257                 initializeFields();
258         }
259
260         private void restoreFromPreferences() {
261
262         }
263
264         IStatus getStatus() {
265                 if (fStatus == null)
266                         fStatus= new StatusInfo();
267                 return fStatus;
268         }
269
270         /*
271          * @see org.eclipse.jdt.internal.ui.preferences.IPreferenceConfigurationBlock#dispose()
272          * @since 3.0
273          */
274         public void dispose() {
275         }
276 }