package com.hilotec.elexis.toolbar; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.preference.FieldEditorPreferencePage; import org.eclipse.jface.preference.ListEditor; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IPerspectiveDescriptor; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.eclipse.ui.PlatformUI; import ch.elexis.core.data.activator.CoreHub; import ch.elexis.core.ui.preferences.SettingsPreferenceStore; import ch.elexis.core.ui.util.SWTHelper; import ch.rgw.tools.StringTool; public class Preferences extends FieldEditorPreferencePage implements IWorkbenchPreferencePage{ public static final String CFG_PERSPEKTIVEN = "hilotec/toolbar/perspektiven"; public Preferences() { super(GRID); setPreferenceStore(new SettingsPreferenceStore(CoreHub.localCfg)); } @Override public void init(IWorkbench workbench) { } @Override protected void createFieldEditors() { addField(new PerspektivenListe(CFG_PERSPEKTIVEN, "Perspektiven", getFieldEditorParent())); } } class PerspektivenListe extends ListEditor { public PerspektivenListe(String n, String i, Composite p){ super(n, i, p); } @Override protected String createList(String[] items){ return StringTool.join(items, ","); } @Override protected String getNewInputObject(){ PerspektivenAuswahl pa = new PerspektivenAuswahl(getShell()); if (pa.open() == Dialog.OK && pa.selection != null) { return pa.selection.getId(); } return null; } @Override protected String[] parseString(String stringList){ return stringList.split(","); //$NON-NLS-1$ } } class PerspektivenAuswahl extends Dialog { public IPerspectiveDescriptor selection; private Combo list; private IPerspectiveDescriptor[] plist; protected PerspektivenAuswahl(Shell parentShell){ super(parentShell); } @Override protected Control createDialogArea(Composite parent) { list = new Combo(parent, 0); list.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true)); plist = PlatformUI.getWorkbench().getPerspectiveRegistry(). getPerspectives(); for (IPerspectiveDescriptor pd: plist) { list.add(pd.getId()); } return list; } @Override public void create(){ super.create(); getShell().setText("Perspektivenauswahl"); } @Override protected void okPressed(){ int i = list.getSelectionIndex(); if (i == -1) selection = null; else selection = plist[i]; super.okPressed(); }; }