diff options
author | Wim Jongman | 2013-03-18 21:44:53 +0000 |
---|---|---|
committer | Wim Jongman | 2013-03-18 21:44:53 +0000 |
commit | cbf88c33aa113b83faa7e28b5ffdf82a9aff7955 (patch) | |
tree | a40d090e8cbede30072e08369863099aa3ea106c | |
parent | 2808885da2dea5c7a2cc9c7206e7883e16b92bba (diff) | |
download | eclipse.platform.ui.tools-cbf88c33aa113b83faa7e28b5ffdf82a9aff7955.tar.gz eclipse.platform.ui.tools-cbf88c33aa113b83faa7e28b5ffdf82a9aff7955.tar.xz eclipse.platform.ui.tools-cbf88c33aa113b83faa7e28b5ffdf82a9aff7955.zip |
Bug 402875 Added support for editors
https://bugs.eclipse.org/bugs/show_bug.cgi?id=402875
7 files changed, 259 insertions, 24 deletions
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ModelEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ModelEditor.java index 82203d48..4c933c0a 100644 --- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ModelEditor.java +++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ModelEditor.java @@ -695,7 +695,7 @@ public class ModelEditor { if (actions.size() > 0) { // TODO WIM - extract nls - MenuManager menu = new MenuManager("Import"); + MenuManager menu = new MenuManager("Import 3x"); for (Action a : actions) { addSeparator = true; menu.add(a); diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartSashContainerEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartSashContainerEditor.java index 4d1006dc..de1733f5 100644 --- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartSashContainerEditor.java +++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartSashContainerEditor.java @@ -26,10 +26,12 @@ import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider; import org.eclipse.e4.tools.emf.ui.internal.common.ComponentLabelProvider; import org.eclipse.e4.tools.emf.ui.internal.common.uistructure.UIViewer; import org.eclipse.e4.tools.emf.ui.internal.imp.ModelImportWizard; +import org.eclipse.e4.tools.emf.ui.internal.imp.RegistryUtil; import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl; import org.eclipse.e4.ui.model.application.ui.MElementContainer; import org.eclipse.e4.ui.model.application.ui.MUIElement; import org.eclipse.e4.ui.model.application.ui.advanced.impl.AdvancedPackageImpl; +import org.eclipse.e4.ui.model.application.ui.basic.MInputPart; import org.eclipse.e4.ui.model.application.ui.basic.MPart; import org.eclipse.e4.ui.model.application.ui.basic.MPartSashContainer; import org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl; @@ -137,10 +139,16 @@ public class PartSashContainerEditor extends AbstractComponentEditor { }); // --- Import Actions --- - actionsImport.add(new Action(Messages.PartSashContainerEditor_AddPart, createImageDescriptor(ResourceProvider.IMG_Part)) { + actionsImport.add(new Action("Views", createImageDescriptor(ResourceProvider.IMG_Part)) { @Override public void run() { - handleImportChild(BasicPackageImpl.Literals.PART); + handleImportChild(BasicPackageImpl.Literals.PART, RegistryUtil.HINT_VIEW); + } + }); + actionsImport.add(new Action("Editors", createImageDescriptor(ResourceProvider.IMG_Part)) { + @Override + public void run() { + handleImportChild(BasicPackageImpl.Literals.INPUT_PART, RegistryUtil.HINT_EDITOR); } }); @@ -451,10 +459,10 @@ public class PartSashContainerEditor extends AbstractComponentEditor { } } - protected void handleImportChild(EClass eClass) { + protected void handleImportChild(EClass eClass, String hint) { if (eClass == BasicPackageImpl.Literals.PART) { - ModelImportWizard wizard = new ModelImportWizard(MPart.class, this); + ModelImportWizard wizard = new ModelImportWizard(MPart.class, this, hint); WizardDialog wizardDialog = new WizardDialog(shell, wizard); if (wizardDialog.open() == WizardDialog.OK) { MPart[] parts = (MPart[]) wizard.getElements(MPart.class); @@ -463,6 +471,17 @@ public class PartSashContainerEditor extends AbstractComponentEditor { } } } + + if (eClass == BasicPackageImpl.Literals.INPUT_PART) { + ModelImportWizard wizard = new ModelImportWizard(MInputPart.class, this); + WizardDialog wizardDialog = new WizardDialog(shell, wizard); + if (wizardDialog.open() == WizardDialog.OK) { + MInputPart[] parts = (MInputPart[]) wizard.getElements(MInputPart.class); + for (MInputPart part : parts) { + addToModel((EObject) part); + } + } + } } @Override diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartStackEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartStackEditor.java index 40f22b5a..eea40876 100644 --- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartStackEditor.java +++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartStackEditor.java @@ -25,10 +25,13 @@ import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor; import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider; import org.eclipse.e4.tools.emf.ui.internal.common.ComponentLabelProvider; import org.eclipse.e4.tools.emf.ui.internal.common.uistructure.UIViewer; +import org.eclipse.e4.tools.emf.ui.internal.imp.ModelImportWizard; import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl; import org.eclipse.e4.ui.model.application.ui.MElementContainer; import org.eclipse.e4.ui.model.application.ui.MUIElement; import org.eclipse.e4.ui.model.application.ui.advanced.impl.AdvancedPackageImpl; +import org.eclipse.e4.ui.model.application.ui.basic.MInputPart; +import org.eclipse.e4.ui.model.application.ui.basic.MPart; import org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl; import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl; import org.eclipse.emf.common.command.Command; @@ -53,6 +56,7 @@ import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CTabFolder; import org.eclipse.swt.custom.CTabItem; @@ -77,6 +81,7 @@ public class PartStackEditor extends AbstractComponentEditor { private IListProperty ELEMENT_CONTAINER__CHILDREN = EMFProperties.list(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN); private StackLayout stackLayout; private List<Action> actions = new ArrayList<Action>(); + private List<Action> actionsImport = new ArrayList<Action>(); @Inject @Optional @@ -108,6 +113,21 @@ public class PartStackEditor extends AbstractComponentEditor { handleAddChild(AdvancedPackageImpl.Literals.PLACEHOLDER); } }); + + // --- Import Actions --- + actionsImport.add(new Action("Views", createImageDescriptor(ResourceProvider.IMG_Part)) { + @Override + public void run() { + handleImportChild(BasicPackageImpl.Literals.PART); + } + }); + actionsImport.add(new Action("Editors", createImageDescriptor(ResourceProvider.IMG_Part)) { + @Override + public void run() { + handleImportChild(BasicPackageImpl.Literals.INPUT_PART); + } + }); + } @Override @@ -365,6 +385,10 @@ public class PartStackEditor extends AbstractComponentEditor { protected void handleAddChild(EClass eClass) { EObject eObject = EcoreUtil.create(eClass); + addToModel(eObject); + } + + private void addToModel(EObject eObject) { setElementId(eObject); Command cmd = AddCommand.create(getEditingDomain(), getMaster().getValue(), UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN, eObject); @@ -375,10 +399,42 @@ public class PartStackEditor extends AbstractComponentEditor { } } + protected void handleImportChild(EClass eClass) { + + if (eClass == BasicPackageImpl.Literals.PART) { + ModelImportWizard wizard = new ModelImportWizard(MPart.class, this); + WizardDialog wizardDialog = new WizardDialog(viewer.getControl().getShell(), wizard); + if (wizardDialog.open() == WizardDialog.OK) { + MPart[] parts = (MPart[]) wizard.getElements(MPart.class); + for (MPart part : parts) { + addToModel((EObject) part); + } + } + } + + if (eClass == BasicPackageImpl.Literals.INPUT_PART) { + ModelImportWizard wizard = new ModelImportWizard(MInputPart.class, this); + WizardDialog wizardDialog = new WizardDialog(viewer.getControl().getShell(), wizard); + if (wizardDialog.open() == WizardDialog.OK) { + MInputPart[] parts = (MInputPart[]) wizard.getElements(MInputPart.class); + for (MInputPart part : parts) { + addToModel((EObject) part); + } + } + } + } + @Override public List<Action> getActions(Object element) { ArrayList<Action> l = new ArrayList<Action>(super.getActions(element)); l.addAll(actions); return l; } + + @Override + public List<Action> getActionsImport(Object element) { + ArrayList<Action> l = new ArrayList<Action>(super.getActionsImport(element)); + l.addAll(actionsImport); + return l; + } } diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPartDescriptor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPartDescriptor.java index be122480..22a9bd94 100644 --- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPartDescriptor.java +++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPartDescriptor.java @@ -20,12 +20,15 @@ import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor; import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider; import org.eclipse.e4.tools.emf.ui.internal.common.ComponentLabelProvider; import org.eclipse.e4.tools.emf.ui.internal.common.VirtualEntry; +import org.eclipse.e4.tools.emf.ui.internal.imp.ModelImportWizard; +import org.eclipse.e4.tools.emf.ui.internal.imp.RegistryUtil; import org.eclipse.e4.ui.model.application.descriptor.basic.MBasicFactory; import org.eclipse.e4.ui.model.application.descriptor.basic.MPartDescriptor; import org.eclipse.e4.ui.model.application.descriptor.basic.MPartDescriptorContainer; import org.eclipse.e4.ui.model.application.descriptor.basic.impl.BasicPackageImpl; import org.eclipse.emf.common.command.Command; import org.eclipse.emf.databinding.EMFDataBindingContext; +import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.edit.command.AddCommand; import org.eclipse.emf.edit.command.MoveCommand; import org.eclipse.emf.edit.command.RemoveCommand; @@ -34,6 +37,7 @@ import org.eclipse.jface.databinding.viewers.ObservableListContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CTabFolder; import org.eclipse.swt.custom.CTabItem; @@ -51,6 +55,7 @@ public class VPartDescriptor extends AbstractComponentEditor { private EMFDataBindingContext context; private TableViewer viewer; private List<Action> actions = new ArrayList<Action>(); + private List<Action> actionsImport = new ArrayList<Action>(); @Inject public VPartDescriptor() { @@ -65,6 +70,20 @@ public class VPartDescriptor extends AbstractComponentEditor { handleAdd(); } }); + + // --- Import Actions --- + actionsImport.add(new Action("Views", createImageDescriptor(ResourceProvider.IMG_Part)) { + @Override + public void run() { + handleImportChild(BasicPackageImpl.Literals.PART_DESCRIPTOR, RegistryUtil.HINT_VIEW); + } + }); + actionsImport.add(new Action("Editors", createImageDescriptor(ResourceProvider.IMG_Part)) { + @Override + public void run() { + handleImportChild(BasicPackageImpl.Literals.PART_DESCRIPTOR, RegistryUtil.HINT_EDITOR); + } + }); } @Override @@ -219,14 +238,32 @@ public class VPartDescriptor extends AbstractComponentEditor { } protected void handleAdd() { - MPartDescriptor command = MBasicFactory.INSTANCE.createPartDescriptor(); - setElementId(command); + MPartDescriptor partDescription = MBasicFactory.INSTANCE.createPartDescriptor(); + addToModel(partDescription); + } + + private void addToModel(MPartDescriptor partDescription) { + setElementId(partDescription); - Command cmd = AddCommand.create(getEditingDomain(), getMaster().getValue(), BasicPackageImpl.Literals.PART_DESCRIPTOR_CONTAINER__DESCRIPTORS, command); + Command cmd = AddCommand.create(getEditingDomain(), getMaster().getValue(), BasicPackageImpl.Literals.PART_DESCRIPTOR_CONTAINER__DESCRIPTORS, partDescription); if (cmd.canExecute()) { getEditingDomain().getCommandStack().execute(cmd); - getEditor().setSelection(command); + getEditor().setSelection(partDescription); + } + } + + protected void handleImportChild(EClass eClass, String hint) { + + if (eClass == BasicPackageImpl.Literals.PART_DESCRIPTOR) { + ModelImportWizard wizard = new ModelImportWizard(MPartDescriptor.class, this, hint); + WizardDialog wizardDialog = new WizardDialog(viewer.getControl().getShell(), wizard); + if (wizardDialog.open() == WizardDialog.OK) { + MPartDescriptor[] parts = (MPartDescriptor[]) wizard.getElements(MPartDescriptor.class); + for (MPartDescriptor part : parts) { + addToModel(part); + } + } } } @@ -236,4 +273,11 @@ public class VPartDescriptor extends AbstractComponentEditor { l.addAll(actions); return l; } + + @Override + public List<Action> getActionsImport(Object element) { + ArrayList<Action> l = new ArrayList<Action>(super.getActionsImport(element)); + l.addAll(actionsImport); + return l; + } } diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/imp/ModelImportPage1.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/imp/ModelImportPage1.java index f85a8147..a3badfda 100644 --- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/imp/ModelImportPage1.java +++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/imp/ModelImportPage1.java @@ -94,8 +94,8 @@ public class ModelImportPage1 extends WizardPage { */ public ModelImportPage1() { super("wizardPage"); - setTitle("Import Commands"); - setDescription("Select plug-in and commands to import"); + setTitle("Import "); + setDescription("Select plug-in and elements to import"); wizard = (ModelImportWizard) getWizard(); setPageComplete(false); } @@ -137,7 +137,7 @@ public class ModelImportPage1 extends WizardPage { public void selectionChanged(SelectionChangedEvent event) { String bundle = ((IStructuredSelection) event.getSelection()).getFirstElement().toString(); - RegistryStruct struct = RegistryUtil.getStruct(wizard.getApplicationElement()); + RegistryStruct struct = RegistryUtil.getStruct(wizard.getApplicationElement(), wizard.getHint()); struct.setBundle(bundle); checkboxTableViewer.setInput(struct); @@ -159,6 +159,14 @@ public class ModelImportPage1 extends WizardPage { @Override public void setWizard(IWizard newWizard) { this.wizard = (ModelImportWizard) newWizard; + setTitle("Import " + wizard.getApplicationElement().getSimpleName()); + + String hint = wizard.getHint(); + if (hint != null && hint.length() > 0) { + setDescription("Select plug-in and elements (" + hint + ") to import"); + // else already set + } + super.setWizard(newWizard); } diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/imp/ModelImportWizard.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/imp/ModelImportWizard.java index 85e994a4..b53e6ec3 100644 --- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/imp/ModelImportWizard.java +++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/imp/ModelImportWizard.java @@ -28,12 +28,19 @@ public class ModelImportWizard extends Wizard { private AbstractComponentEditor editor; + private final String hint; + public ModelImportWizard(Class<? extends MApplicationElement> applicationElement, AbstractComponentEditor editor) { + this(applicationElement, editor, ""); + } + + public ModelImportWizard(Class<? extends MApplicationElement> applicationElement, AbstractComponentEditor editor, String hint) { this.applicationElement = applicationElement; this.editor = editor; + this.hint = hint; this.application = (MApplication) editor.getEditor().getModelProvider().getRoot().get(0); - setWindowTitle("Model Command Import Wizard"); - Assert.isNotNull(RegistryUtil.getStruct(applicationElement), "Unknown Element: " + applicationElement.getClass().getName()); + setWindowTitle("Model " + applicationElement.getSimpleName() + " Import Wizard"); + Assert.isNotNull(RegistryUtil.getStruct(applicationElement, getHint()), "Unknown Element: " + applicationElement.getClass().getName()); } @Override @@ -64,7 +71,7 @@ public class ModelImportWizard extends Wizard { * @see #getApplicationElement() */ protected String getExtensionPointName() { - return RegistryUtil.getStruct(applicationElement).getExtensionPointName(); + return RegistryUtil.getStruct(applicationElement, getHint()).getExtensionPointName(); } /** @@ -75,7 +82,7 @@ public class ModelImportWizard extends Wizard { * @see #getApplicationElement() */ protected String getExtensionPoint() { - return RegistryUtil.getStruct(applicationElement).getExtensionPoint(); + return RegistryUtil.getStruct(applicationElement, getHint()).getExtensionPoint(); } /** @@ -84,7 +91,7 @@ public class ModelImportWizard extends Wizard { * @see #MAPPING_NAME */ protected String getMappingName() { - return RegistryUtil.getStruct(applicationElement).getMappingName(); + return RegistryUtil.getStruct(applicationElement, getHint()).getMappingName(); } /** @@ -96,7 +103,7 @@ public class ModelImportWizard extends Wizard { * @return */ public MApplicationElement[] getElements(Class<? extends MApplicationElement> type) { - return RegistryUtil.getModelElements(type, application, page1.getConfigurationElements()); + return RegistryUtil.getModelElements(type, getHint(), application, page1.getConfigurationElements()); } public AbstractComponentEditor getEditor() { @@ -111,4 +118,13 @@ public class ModelImportWizard extends Wizard { public boolean isLiveModel() { return editor.getEditor().isLiveModel(); } + + /** + * Returns the hint that explains the meaning of the caller. + * + * @return + */ + public String getHint() { + return hint; + } } diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/imp/RegistryUtil.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/imp/RegistryUtil.java index c4c7cf32..7e35e8ff 100644 --- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/imp/RegistryUtil.java +++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/imp/RegistryUtil.java @@ -26,8 +26,10 @@ import org.eclipse.e4.ui.model.application.commands.MCategory; import org.eclipse.e4.ui.model.application.commands.MCommand; import org.eclipse.e4.ui.model.application.commands.MCommandsFactory; import org.eclipse.e4.ui.model.application.commands.MHandler; +import org.eclipse.e4.ui.model.application.descriptor.basic.MPartDescriptor; import org.eclipse.e4.ui.model.application.ui.advanced.MAdvancedFactory; import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective; +import org.eclipse.e4.ui.model.application.ui.basic.MInputPart; import org.eclipse.e4.ui.model.application.ui.basic.MPart; import org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl; import org.eclipse.e4.ui.model.application.ui.menu.MMenuFactory; @@ -40,6 +42,9 @@ import org.osgi.framework.ServiceReference; public class RegistryUtil { + public final static String HINT_VIEW = "view"; + public final static String HINT_EDITOR = "editor"; + /** * * @param t @@ -47,7 +52,7 @@ public class RegistryUtil { * @param elements * @return */ - public static MApplicationElement[] getModelElements(Class<? extends MApplicationElement> t, MApplication application, IConfigurationElement... elements) { + public static MApplicationElement[] getModelElements(Class<? extends MApplicationElement> t, String hint, MApplication application, IConfigurationElement... elements) { Assert.isNotNull(t); Assert.isNotNull(elements); @@ -60,9 +65,15 @@ public class RegistryUtil { } else if (t.equals(MPerspective.class)) { return getPerspectives(elements); } else if (t.equals(MPart.class)) { - return getParts(elements); + return getViews(elements); + } else if (t.equals(MInputPart.class)) { + return getEditors(elements); } else if (t.equals(MHandler.class)) { return getHandlers(elements, application); + } else if (t.equals(MPartDescriptor.class) && HINT_EDITOR.equals(hint)) { + return getEditorPartDescriptors(elements); + } else if (t.equals(MPartDescriptor.class) && HINT_VIEW.equals(hint)) { + return getViewPartDescriptors(elements); } return new MApplicationElement[0]; } @@ -135,7 +146,7 @@ public class RegistryUtil { return result.toArray(new MCategory[0]); } - private static MPart[] getParts(IConfigurationElement[] elements) { + private static MPart[] getViews(IConfigurationElement[] elements) { ArrayList<MPart> result = new ArrayList<MPart>(); for (IConfigurationElement element : elements) { @@ -154,6 +165,69 @@ public class RegistryUtil { return result.toArray(new MPart[0]); } + private static MInputPart[] getEditors(IConfigurationElement[] elements) { + + ArrayList<MInputPart> result = new ArrayList<MInputPart>(); + for (IConfigurationElement element : elements) { + MInputPart part = (MInputPart) EcoreUtil.create(BasicPackageImpl.Literals.INPUT_PART); + part.setElementId(element.getAttribute("id")); + part.setLabel(element.getAttribute("name")); + part.setIconURI(getIconURI(element, "icon")); + if (element.getAttribute("class") != null) { + part.setContributionURI(getContributionURI(element, "class")); + } else { + part.setContributionURI(getContributionURI(element, "launcher")); + } + part.setToBeRendered(true); + part.setVisible(true); + part.setToolbar(MMenuFactory.INSTANCE.createToolBar()); + part.setCloseable(true); + result.add(part); + } + + return result.toArray(new MInputPart[0]); + } + + private static MPartDescriptor[] getEditorPartDescriptors(IConfigurationElement[] elements) { + + ArrayList<MPartDescriptor> result = new ArrayList<MPartDescriptor>(); + for (IConfigurationElement element : elements) { + MPartDescriptor part = (MPartDescriptor) EcoreUtil.create(org.eclipse.e4.ui.model.application.descriptor.basic.impl.BasicPackageImpl.Literals.PART_DESCRIPTOR); + part.setElementId(element.getAttribute("id")); + part.setLabel(element.getAttribute("name")); + part.setIconURI(getIconURI(element, "icon")); + if (element.getAttribute("class") != null) { + part.setContributionURI(getContributionURI(element, "class")); + } else { + part.setContributionURI(getContributionURI(element, "launcher")); + } + part.setDirtyable(true); + part.setAllowMultiple(true); + part.setToolbar(MMenuFactory.INSTANCE.createToolBar()); + part.setCloseable(true); + result.add(part); + } + + return result.toArray(new MPartDescriptor[0]); + } + + private static MPartDescriptor[] getViewPartDescriptors(IConfigurationElement[] elements) { + + ArrayList<MPartDescriptor> result = new ArrayList<MPartDescriptor>(); + for (IConfigurationElement element : elements) { + MPartDescriptor part = (MPartDescriptor) EcoreUtil.create(org.eclipse.e4.ui.model.application.descriptor.basic.impl.BasicPackageImpl.Literals.PART_DESCRIPTOR); + part.setElementId(element.getAttribute("id")); + part.setLabel(element.getAttribute("name")); + part.setIconURI(getIconURI(element, "icon")); + part.setContributionURI(getContributionURI(element, "class")); + part.setToolbar(MMenuFactory.INSTANCE.createToolBar()); + part.setCloseable(true); + result.add(part); + } + + return result.toArray(new MPartDescriptor[0]); + } + private static MHandler[] getHandlers(IConfigurationElement[] elements, MApplication application) { ArrayList<MHandler> result = new ArrayList<MHandler>(); @@ -179,7 +253,13 @@ public class RegistryUtil { } private static String getIconURI(IConfigurationElement element, String attribute) { - // FIXME don't assume local icon + if (element.getAttribute(attribute) == null) { + return ""; + } + // FIXME any other cases? + if (element.getAttribute(attribute).startsWith("platform:")) { + return element.getAttribute(attribute); + } return "platform:/plugin/" + element.getContributor().getName() + "/" + element.getAttribute(attribute); } @@ -259,7 +339,7 @@ public class RegistryUtil { * @return the structure that matches the extension registry to the passed * {@link ApplicationElement} */ - public static RegistryStruct getStruct(Class<? extends MApplicationElement> applicationElement) { + public static RegistryStruct getStruct(Class<? extends MApplicationElement> applicationElement, String hint) { if (applicationElement == MCommand.class) return new RegistryStruct("", "org.eclipse.ui.commands", "command", "name"); @@ -276,8 +356,20 @@ public class RegistryUtil { else if (applicationElement == MHandler.class) return new RegistryStruct("", "org.eclipse.ui.handlers", "handler", "commandId"); - else if (applicationElement == MPart.class) + else if (applicationElement == MPart.class) { return new RegistryStruct("", "org.eclipse.ui.views", "view", "name"); + } + + else if (applicationElement == MInputPart.class) { + return new RegistryStruct("", "org.eclipse.ui.editors", "editor", "name"); + } + + else if (applicationElement == MPartDescriptor.class) { + if (hint == HINT_EDITOR) + return new RegistryStruct("", "org.eclipse.ui.editors", "editor", "name"); + if (hint == HINT_VIEW) + return new RegistryStruct("", "org.eclipse.ui.views", "view", "name"); + } return null; } |