/******************************************************************************* * 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; } } }