X-Git-Url: http://secure.phpeclipse.com 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 index 0000000..74e8649 --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/MembersOrderPreferencePage.java @@ -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; + } + + } + +}