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
9 * IBM Corporation - initial API and implementation
10 *******************************************************************************/
12 package net.sourceforge.phpdt.internal.ui.preferences;
14 import java.util.ArrayList;
15 import java.util.Iterator;
16 import java.util.List;
17 import java.util.StringTokenizer;
19 import net.sourceforge.phpdt.core.Flags;
20 import net.sourceforge.phpdt.internal.ui.util.SWTUtil;
21 import net.sourceforge.phpdt.internal.ui.viewsupport.ImageDescriptorRegistry;
22 import net.sourceforge.phpdt.internal.ui.viewsupport.JavaElementImageProvider;
23 import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.ListDialogField;
24 import net.sourceforge.phpdt.ui.JavaElementImageDescriptor;
25 import net.sourceforge.phpdt.ui.PreferenceConstants;
26 import net.sourceforge.phpeclipse.PHPeclipsePlugin;
28 import org.eclipse.jface.dialogs.Dialog;
29 import org.eclipse.jface.preference.IPreferenceStore;
30 import org.eclipse.jface.preference.PreferencePage;
31 import org.eclipse.jface.resource.ImageDescriptor;
32 import org.eclipse.jface.viewers.LabelProvider;
33 import org.eclipse.swt.SWT;
34 import org.eclipse.swt.graphics.Image;
35 import org.eclipse.swt.layout.GridData;
36 import org.eclipse.swt.layout.GridLayout;
37 import org.eclipse.swt.widgets.Composite;
38 import org.eclipse.swt.widgets.Control;
39 import org.eclipse.ui.IWorkbench;
40 import org.eclipse.ui.IWorkbenchPreferencePage;
42 public class MembersOrderPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
44 private static final String ALL_ENTRIES= "T,SI,SF,SM,I,F,C,M"; //$NON-NLS-1$
45 private static final String PREF_OUTLINE_SORT_OPTION= PreferenceConstants.APPEARANCE_MEMBER_SORT_ORDER;
47 public static final String CONSTRUCTORS= "C"; //$NON-NLS-1$
48 public static final String FIELDS= "F"; //$NON-NLS-1$
49 public static final String METHODS= "M"; //$NON-NLS-1$
50 public static final String STATIC_METHODS= "SM"; //$NON-NLS-1$
51 public static final String STATIC_FIELDS= "SF"; //$NON-NLS-1$
52 public static final String INIT= "I"; //$NON-NLS-1$
53 public static final String STATIC_INIT= "SI"; //$NON-NLS-1$
54 public static final String TYPES= "T"; //$NON-NLS-1$
56 private ListDialogField fSortOrderList;
58 private static List getSortOrderList(String string) {
59 StringTokenizer tokenizer= new StringTokenizer(string, ","); //$NON-NLS-1$
60 List entries= new ArrayList();
61 for (int i= 0; tokenizer.hasMoreTokens(); i++) {
62 String token= tokenizer.nextToken();
68 private static boolean isValidEntries(List entries) {
69 StringTokenizer tokenizer= new StringTokenizer(ALL_ENTRIES, ","); //$NON-NLS-1$
71 for (; tokenizer.hasMoreTokens(); i++) {
72 String token= tokenizer.nextToken();
73 if (!entries.contains(token))
76 return i == entries.size();
79 public MembersOrderPreferencePage() {
80 //set the preference store
81 setPreferenceStore(PHPeclipsePlugin.getDefault().getPreferenceStore());
83 setDescription(PreferencesMessages.getString("MembersOrderPreferencePage.label.description")); //$NON-NLS-1$
85 String string= getPreferenceStore().getString(PREF_OUTLINE_SORT_OPTION);
87 String upLabel= PreferencesMessages.getString("MembersOrderPreferencePage.button.up"); //$NON-NLS-1$
88 String downLabel= PreferencesMessages.getString("MembersOrderPreferencePage.button.down"); //$NON-NLS-1$
89 String[] buttonlabels= new String[] { upLabel, downLabel };
91 fSortOrderList= new ListDialogField(null, buttonlabels, new MemberSortLabelProvider());
92 fSortOrderList.setDownButtonIndex(1);
93 fSortOrderList.setUpButtonIndex(0);
95 //validate entries stored in store, false get defaults
96 List entries= getSortOrderList(string);
97 if (!isValidEntries(entries)) {
98 string= PHPeclipsePlugin.getDefault().getPreferenceStore().getDefaultString(PREF_OUTLINE_SORT_OPTION);
99 entries= getSortOrderList(string);
102 fSortOrderList.setElements(entries);
106 * @see PreferencePage#createControl(Composite)
108 public void createControl(Composite parent) {
109 super.createControl(parent);
110 // WorkbenchHelp.setHelp(getControl(), IJavaHelpContextIds.SORT_ORDER_PREFERENCE_PAGE);
114 * @see org.eclipse.jface.preference.PreferencePage#createContents(Composite)
116 protected Control createContents(Composite parent) {
119 Composite composite= new Composite(parent, SWT.NONE);
121 GridLayout layout= new GridLayout();
122 layout.numColumns= 3;
123 layout.marginWidth= 0;
124 layout.marginHeight= 0;
125 composite.setLayout(layout);
127 GridData data= new GridData();
128 data.verticalAlignment= GridData.FILL;
129 data.horizontalAlignment= GridData.FILL_HORIZONTAL;
130 composite.setLayoutData(data);
132 createSortOrderListDialogField(composite, 3);
133 Dialog.applyDialogFont(composite);
137 private void createSortOrderListDialogField(Composite composite, int span) {
138 fSortOrderList.doFillIntoGrid(composite, span);
140 fSortOrderList.getLabelControl(null).dispose();
142 GridData data= (GridData) fSortOrderList.getListControl(null).getLayoutData();
143 data.grabExcessHorizontalSpace= true;
144 data.verticalAlignment= 0;
145 data.heightHint= SWTUtil.getTableHeightHint(fSortOrderList.getTableViewer().getTable(), 8);
149 * @see org.eclipse.ui.IWorkbenchPreferencePage#init(IWorkbench)
151 public void init(IWorkbench workbench) {
155 * @see org.eclipse.jface.preference.PreferencePage#performDefaults()
157 protected void performDefaults() {
158 String string= getPreferenceStore().getDefaultString(PREF_OUTLINE_SORT_OPTION);
159 fSortOrderList.setElements(getSortOrderList(string));
163 * @see org.eclipse.jface.preference.IPreferencePage#performOk()
165 //reorders elements in the Outline based on selection
166 public boolean performOk() {
167 //update outline view
170 IPreferenceStore store= getPreferenceStore();
172 StringBuffer buf= new StringBuffer();
173 List curr= fSortOrderList.getElements();
174 for (Iterator iter= curr.iterator(); iter.hasNext();) {
175 String s= (String) iter.next();
179 store.setValue(PREF_OUTLINE_SORT_OPTION, buf.toString());
180 PHPeclipsePlugin.getDefault().savePluginPreferences();
184 private class MemberSortLabelProvider extends LabelProvider {
186 public MemberSortLabelProvider() {
190 * @see org.eclipse.jface.viewers.ILabelProvider#getText(Object)
192 public String getText(Object element) {
194 if (element instanceof String) {
195 String s= (String) element;
196 if (s.equals(FIELDS)) {
197 return PreferencesMessages.getString("MembersOrderPreferencePage.fields.label"); //$NON-NLS-1$
198 } else if (s.equals(CONSTRUCTORS)) {
199 return PreferencesMessages.getString("MembersOrderPreferencePage.constructors.label"); //$NON-NLS-1$
200 } else if (s.equals(METHODS)) {
201 return PreferencesMessages.getString("MembersOrderPreferencePage.methods.label"); //$NON-NLS-1$
202 } else if (s.equals(STATIC_FIELDS)) {
203 return PreferencesMessages.getString("MembersOrderPreferencePage.staticfields.label"); //$NON-NLS-1$
204 } else if (s.equals(STATIC_METHODS)) {
205 return PreferencesMessages.getString("MembersOrderPreferencePage.staticmethods.label"); //$NON-NLS-1$
206 } else if (s.equals(INIT)) {
207 return PreferencesMessages.getString("MembersOrderPreferencePage.initialisers.label"); //$NON-NLS-1$
208 } else if (s.equals(STATIC_INIT)) {
209 return PreferencesMessages.getString("MembersOrderPreferencePage.staticinitialisers.label"); //$NON-NLS-1$
210 } else if (s.equals(TYPES)) {
211 return PreferencesMessages.getString("MembersOrderPreferencePage.types.label"); //$NON-NLS-1$
214 return ""; //$NON-NLS-1$
218 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(Object)
220 public Image getImage(Object element) {
221 //access to image registry
222 ImageDescriptorRegistry registry= PHPeclipsePlugin.getImageDescriptorRegistry();
223 ImageDescriptor descriptor= null;
225 if (element instanceof String) {
226 int visibility= Flags.AccPublic;
227 String s= (String) element;
228 if (s.equals(FIELDS)) {
229 //0 will give the default field image
230 descriptor= JavaElementImageProvider.getFieldImageDescriptor(false, visibility);
231 } else if (s.equals(CONSTRUCTORS)) {
232 descriptor= JavaElementImageProvider.getMethodImageDescriptor(false, visibility);
233 //add a constructor adornment to the image descriptor
234 descriptor= new JavaElementImageDescriptor(descriptor, JavaElementImageDescriptor.CONSTRUCTOR, JavaElementImageProvider.SMALL_SIZE);
235 } else if (s.equals(METHODS)) {
236 descriptor= JavaElementImageProvider.getMethodImageDescriptor(false, visibility);
237 } else if (s.equals(STATIC_FIELDS)) {
238 descriptor= JavaElementImageProvider.getFieldImageDescriptor(false, visibility);
239 //add a constructor adornment to the image descriptor
240 descriptor= new JavaElementImageDescriptor(descriptor, JavaElementImageDescriptor.STATIC, JavaElementImageProvider.SMALL_SIZE);
241 } else if (s.equals(STATIC_METHODS)) {
242 descriptor= JavaElementImageProvider.getMethodImageDescriptor(false, visibility);
243 //add a constructor adornment to the image descriptor
244 descriptor= new JavaElementImageDescriptor(descriptor, JavaElementImageDescriptor.STATIC, JavaElementImageProvider.SMALL_SIZE);
245 } else if (s.equals(INIT)) {
246 descriptor= JavaElementImageProvider.getMethodImageDescriptor(false, visibility);
247 } else if (s.equals(STATIC_INIT)) {
248 descriptor= JavaElementImageProvider.getMethodImageDescriptor(false, visibility);
249 descriptor= new JavaElementImageDescriptor(descriptor, JavaElementImageDescriptor.STATIC, JavaElementImageProvider.SMALL_SIZE);
250 } else if (s.equals(TYPES)) {
251 descriptor= JavaElementImageProvider.getTypeImageDescriptor(false, true, Flags.AccPublic);
253 descriptor= JavaElementImageProvider.getMethodImageDescriptor(false, Flags.AccPublic);
255 return registry.get(descriptor);