1) Moved net.sourceforge.phpeclipse.ui\src\net\sourceforge\phpdt back to net.sourcefo...
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / ui / preferences / MembersOrderPreferencePage.java
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/MembersOrderPreferencePage.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/MembersOrderPreferencePage.java
new file mode 100644 (file)
index 0000000..74e8649
--- /dev/null
@@ -0,0 +1,307 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package net.sourceforge.phpdt.internal.ui.preferences;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import net.sourceforge.phpdt.core.Flags;
+import net.sourceforge.phpdt.internal.ui.util.SWTUtil;
+import net.sourceforge.phpdt.internal.ui.viewsupport.ImageDescriptorRegistry;
+import net.sourceforge.phpdt.internal.ui.viewsupport.JavaElementImageProvider;
+import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.ListDialogField;
+import net.sourceforge.phpdt.ui.JavaElementImageDescriptor;
+import net.sourceforge.phpdt.ui.PreferenceConstants;
+import net.sourceforge.phpeclipse.PHPeclipsePlugin;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+public class MembersOrderPreferencePage extends PreferencePage implements
+               IWorkbenchPreferencePage {
+
+       private static final String ALL_ENTRIES = "T,SI,SF,SM,I,F,C,M"; //$NON-NLS-1$
+
+       private static final String PREF_OUTLINE_SORT_OPTION = PreferenceConstants.APPEARANCE_MEMBER_SORT_ORDER;
+
+       public static final String CONSTRUCTORS = "C"; //$NON-NLS-1$
+
+       public static final String FIELDS = "F"; //$NON-NLS-1$
+
+       public static final String METHODS = "M"; //$NON-NLS-1$
+
+       public static final String STATIC_METHODS = "SM"; //$NON-NLS-1$
+
+       public static final String STATIC_FIELDS = "SF"; //$NON-NLS-1$
+
+       public static final String INIT = "I"; //$NON-NLS-1$
+
+       public static final String STATIC_INIT = "SI"; //$NON-NLS-1$
+
+       public static final String TYPES = "T"; //$NON-NLS-1$
+
+       private ListDialogField fSortOrderList;
+
+       private static List getSortOrderList(String string) {
+               StringTokenizer tokenizer = new StringTokenizer(string, ","); //$NON-NLS-1$
+               List entries = new ArrayList();
+               for (int i = 0; tokenizer.hasMoreTokens(); i++) {
+                       String token = tokenizer.nextToken();
+                       entries.add(token);
+               }
+               return entries;
+       }
+
+       private static boolean isValidEntries(List entries) {
+               StringTokenizer tokenizer = new StringTokenizer(ALL_ENTRIES, ","); //$NON-NLS-1$
+               int i = 0;
+               for (; tokenizer.hasMoreTokens(); i++) {
+                       String token = tokenizer.nextToken();
+                       if (!entries.contains(token))
+                               return false;
+               }
+               return i == entries.size();
+       }
+
+       public MembersOrderPreferencePage() {
+               // set the preference store
+               setPreferenceStore(PHPeclipsePlugin.getDefault().getPreferenceStore());
+
+               setDescription(PreferencesMessages
+                               .getString("MembersOrderPreferencePage.label.description")); //$NON-NLS-1$
+
+               String string = getPreferenceStore()
+                               .getString(PREF_OUTLINE_SORT_OPTION);
+
+               String upLabel = PreferencesMessages
+                               .getString("MembersOrderPreferencePage.button.up"); //$NON-NLS-1$
+               String downLabel = PreferencesMessages
+                               .getString("MembersOrderPreferencePage.button.down"); //$NON-NLS-1$
+               String[] buttonlabels = new String[] { upLabel, downLabel };
+
+               fSortOrderList = new ListDialogField(null, buttonlabels,
+                               new MemberSortLabelProvider());
+               fSortOrderList.setDownButtonIndex(1);
+               fSortOrderList.setUpButtonIndex(0);
+
+               // validate entries stored in store, false get defaults
+               List entries = getSortOrderList(string);
+               if (!isValidEntries(entries)) {
+                       string = PHPeclipsePlugin.getDefault().getPreferenceStore()
+                                       .getDefaultString(PREF_OUTLINE_SORT_OPTION);
+                       entries = getSortOrderList(string);
+               }
+
+               fSortOrderList.setElements(entries);
+       }
+
+       /*
+        * @see PreferencePage#createControl(Composite)
+        */
+       public void createControl(Composite parent) {
+               super.createControl(parent);
+               // WorkbenchHelp.setHelp(getControl(),
+               // IJavaHelpContextIds.SORT_ORDER_PREFERENCE_PAGE);
+       }
+
+       /*
+        * @see org.eclipse.jface.preference.PreferencePage#createContents(Composite)
+        */
+       protected Control createContents(Composite parent) {
+
+               Composite composite = new Composite(parent, SWT.NONE);
+
+               GridLayout layout = new GridLayout();
+               layout.numColumns = 3;
+               layout.marginWidth = 0;
+               layout.marginHeight = 0;
+               composite.setLayout(layout);
+
+               GridData data = new GridData();
+               data.verticalAlignment = GridData.FILL;
+               data.horizontalAlignment = GridData.FILL_HORIZONTAL;
+               composite.setLayoutData(data);
+
+               createSortOrderListDialogField(composite, 3);
+               Dialog.applyDialogFont(composite);
+               return composite;
+       }
+
+       private void createSortOrderListDialogField(Composite composite, int span) {
+               fSortOrderList.doFillIntoGrid(composite, span);
+
+               fSortOrderList.getLabelControl(null).dispose();
+
+               GridData data = (GridData) fSortOrderList.getListControl(null)
+                               .getLayoutData();
+               data.grabExcessHorizontalSpace = true;
+               data.verticalAlignment = 0;
+               data.heightHint = SWTUtil.getTableHeightHint(fSortOrderList
+                               .getTableViewer().getTable(), 8);
+       }
+
+       /*
+        * @see org.eclipse.ui.IWorkbenchPreferencePage#init(IWorkbench)
+        */
+       public void init(IWorkbench workbench) {
+       }
+
+       /*
+        * @see org.eclipse.jface.preference.PreferencePage#performDefaults()
+        */
+       protected void performDefaults() {
+               String string = getPreferenceStore().getDefaultString(
+                               PREF_OUTLINE_SORT_OPTION);
+               fSortOrderList.setElements(getSortOrderList(string));
+       }
+
+       /*
+        * @see org.eclipse.jface.preference.IPreferencePage#performOk()
+        */
+       // reorders elements in the Outline based on selection
+       public boolean performOk() {
+               // update outline view
+
+               // save preferences
+               IPreferenceStore store = getPreferenceStore();
+
+               StringBuffer buf = new StringBuffer();
+               List curr = fSortOrderList.getElements();
+               for (Iterator iter = curr.iterator(); iter.hasNext();) {
+                       String s = (String) iter.next();
+                       buf.append(s);
+                       buf.append(',');
+               }
+               store.setValue(PREF_OUTLINE_SORT_OPTION, buf.toString());
+               PHPeclipsePlugin.getDefault().savePluginPreferences();
+               return true;
+       }
+
+       private class MemberSortLabelProvider extends LabelProvider {
+
+               public MemberSortLabelProvider() {
+               }
+
+               /*
+                * @see org.eclipse.jface.viewers.ILabelProvider#getText(Object)
+                */
+               public String getText(Object element) {
+
+                       if (element instanceof String) {
+                               String s = (String) element;
+                               if (s.equals(FIELDS)) {
+                                       return PreferencesMessages
+                                                       .getString("MembersOrderPreferencePage.fields.label"); //$NON-NLS-1$
+                               } else if (s.equals(CONSTRUCTORS)) {
+                                       return PreferencesMessages
+                                                       .getString("MembersOrderPreferencePage.constructors.label"); //$NON-NLS-1$
+                               } else if (s.equals(METHODS)) {
+                                       return PreferencesMessages
+                                                       .getString("MembersOrderPreferencePage.methods.label"); //$NON-NLS-1$
+                               } else if (s.equals(STATIC_FIELDS)) {
+                                       return PreferencesMessages
+                                                       .getString("MembersOrderPreferencePage.staticfields.label"); //$NON-NLS-1$
+                               } else if (s.equals(STATIC_METHODS)) {
+                                       return PreferencesMessages
+                                                       .getString("MembersOrderPreferencePage.staticmethods.label"); //$NON-NLS-1$
+                               } else if (s.equals(INIT)) {
+                                       return PreferencesMessages
+                                                       .getString("MembersOrderPreferencePage.initialisers.label"); //$NON-NLS-1$
+                               } else if (s.equals(STATIC_INIT)) {
+                                       return PreferencesMessages
+                                                       .getString("MembersOrderPreferencePage.staticinitialisers.label"); //$NON-NLS-1$
+                               } else if (s.equals(TYPES)) {
+                                       return PreferencesMessages
+                                                       .getString("MembersOrderPreferencePage.types.label"); //$NON-NLS-1$
+                               }
+                       }
+                       return ""; //$NON-NLS-1$
+               }
+
+               /*
+                * @see org.eclipse.jface.viewers.ILabelProvider#getImage(Object)
+                */
+               public Image getImage(Object element) {
+                       // access to image registry
+                       ImageDescriptorRegistry registry = PHPeclipsePlugin
+                                       .getImageDescriptorRegistry();
+                       ImageDescriptor descriptor = null;
+
+                       if (element instanceof String) {
+                               int visibility = Flags.AccPublic;
+                               String s = (String) element;
+                               if (s.equals(FIELDS)) {
+                                       // 0 will give the default field image
+                                       descriptor = JavaElementImageProvider
+                                                       .getFieldImageDescriptor(false, visibility);
+                               } else if (s.equals(CONSTRUCTORS)) {
+                                       descriptor = JavaElementImageProvider
+                                                       .getMethodImageDescriptor(false, visibility);
+                                       // add a constructor adornment to the image descriptor
+                                       descriptor = new JavaElementImageDescriptor(descriptor,
+                                                       JavaElementImageDescriptor.CONSTRUCTOR,
+                                                       JavaElementImageProvider.SMALL_SIZE);
+                               } else if (s.equals(METHODS)) {
+                                       descriptor = JavaElementImageProvider
+                                                       .getMethodImageDescriptor(false, visibility);
+                               } else if (s.equals(STATIC_FIELDS)) {
+                                       descriptor = JavaElementImageProvider
+                                                       .getFieldImageDescriptor(false, visibility);
+                                       // add a constructor adornment to the image descriptor
+                                       descriptor = new JavaElementImageDescriptor(descriptor,
+                                                       JavaElementImageDescriptor.STATIC,
+                                                       JavaElementImageProvider.SMALL_SIZE);
+                               } else if (s.equals(STATIC_METHODS)) {
+                                       descriptor = JavaElementImageProvider
+                                                       .getMethodImageDescriptor(false, visibility);
+                                       // add a constructor adornment to the image descriptor
+                                       descriptor = new JavaElementImageDescriptor(descriptor,
+                                                       JavaElementImageDescriptor.STATIC,
+                                                       JavaElementImageProvider.SMALL_SIZE);
+                               } else if (s.equals(INIT)) {
+                                       descriptor = JavaElementImageProvider
+                                                       .getMethodImageDescriptor(false, visibility);
+                               } else if (s.equals(STATIC_INIT)) {
+                                       descriptor = JavaElementImageProvider
+                                                       .getMethodImageDescriptor(false, visibility);
+                                       descriptor = new JavaElementImageDescriptor(descriptor,
+                                                       JavaElementImageDescriptor.STATIC,
+                                                       JavaElementImageProvider.SMALL_SIZE);
+                               } else if (s.equals(TYPES)) {
+                                       descriptor = JavaElementImageProvider
+                                                       .getTypeImageDescriptor(false, true,
+                                                                       Flags.AccPublic);
+                               } else {
+                                       descriptor = JavaElementImageProvider
+                                                       .getMethodImageDescriptor(false, Flags.AccPublic);
+                               }
+                               return registry.get(descriptor);
+                       }
+                       return null;
+               }
+
+       }
+
+}