--- /dev/null
+/*******************************************************************************
+ * 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 net.sourceforge.phpeclipse.ui.WebUI;
+
+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(WebUI.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 = WebUI.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());
+ WebUI.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 = WebUI
+ .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;
+ }
+
+ }
+
+}