Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenedikt Kuntz2019-10-29 12:58:03 +0000
committerBenedikt Kuntz2019-10-30 16:02:32 +0000
commit7dfcbcf7c72f6ba45fb7965cfa1e2643cb70f512 (patch)
tree59679b6406ff98634ce438828a05aea7b2286ed3
parent9b9c02f4f588cd0f43d0aea1dd96f4569a546b1a (diff)
downloadeclipse.platform.ui.tools-7dfcbcf7c72f6ba45fb7965cfa1e2643cb70f512.tar.gz
eclipse.platform.ui.tools-7dfcbcf7c72f6ba45fb7965cfa1e2643cb70f512.tar.xz
eclipse.platform.ui.tools-7dfcbcf7c72f6ba45fb7965cfa1e2643cb70f512.zip
Bug 496833 - [Tools] Application model editor doesn’t allow to create aI20191102-1800I20191101-1800I20191101-0300I20191031-1800I20191031-1325
ToolBar for a CompositePart Create abstract superclass for Part Editors, extend GUI for CompositePart-Editors. Add VControlsEditor to configure sub-parts of CompositeParts Change-Id: Iefae092e39791c4a0cc3050cbbb6d3e8023a6606 Signed-off-by: Benedikt Kuntz <benedikt.kuntz@airbus.com>
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/Messages.java9
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/Messages.properties11
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ModelEditor.java4
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/AbstractPartEditor.java363
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/CompositePartEditor.java458
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartEditor.java308
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VControlsEditor.java253
7 files changed, 774 insertions, 632 deletions
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/Messages.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/Messages.java
index efdcdbf8..51904493 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/Messages.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/Messages.java
@@ -277,6 +277,7 @@ public class Messages {
public String PartEditor_ContainerData;
public String PartEditor_ToolBar;
public String PartEditor_BindingContexts;
+ public String PartEditor_Controls;
public String PartSashContainerEditor_Label;
public String PartSashContainerEditor_Description;
@@ -509,6 +510,9 @@ public class Messages {
public String VHandlerEditor_Handlers;
public String VHandlerEditor_AddHandler;
+ public String VControlsEditor_TreeLabel;
+ public String VControlsEditor_TreeLabelDescription;
+
public String VMenuContributionsEditor_TreeLabel;
public String VMenuContributionsEditor_TreeLabelDescription;
public String VMenuContributionsEditor_MenuContributions;
@@ -799,11 +803,6 @@ public class Messages {
public String CompositePartEditor_Horizontal;
public String CompositePartEditor_Vertical;
public String CompositePartEditor_SelectedElement;
- public String CompositePartEditor_ContainerData;
public String CompositePartEditor_Controls;
- public String CompositePartEditor_LabelLabel;
- public String CompositePartEditor_Tooltip;
- public String CompositePartEditor_IconURI;
- public String CompositePartEditor_IconURI_Tooltip;
}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/Messages.properties b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/Messages.properties
index 11afd83a..d0c86500 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/Messages.properties
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/Messages.properties
@@ -238,6 +238,7 @@ PartEditor_Handlers=Handlers
PartEditor_ContainerData=Container &Data\:
PartEditor_ToolBar=ToolBar
PartEditor_BindingContexts=Binding Contexts
+PartEditor_Controls=Controls
PartSashContainerEditor_Label=Part Sash Container
PartSashContainerEditor_Description=Sash
@@ -484,6 +485,9 @@ VHandlerEditor_TreeLabelDescription=Handlers
VHandlerEditor_Handlers=Handlers
VHandlerEditor_AddHandler=Handler
+VControlsEditor_TreeLabel=Controls
+VControlsEditor_TreeLabelDescription=Controls
+
VMenuContributionsEditor_TreeLabel=Menu Contributions
VMenuContributionsEditor_TreeLabelDescription=Menu Contributions
VMenuContributionsEditor_MenuContributions=Menu Contributions
@@ -806,9 +810,4 @@ CompositePartEditor_Orientation=&Orientation\:
CompositePartEditor_Horizontal=Horizontal
CompositePartEditor_Vertical=Vertical
CompositePartEditor_SelectedElement=&Selected Element\:
-CompositePartEditor_ContainerData=Container &Data\:
-CompositePartEditor_Controls=&Controls\:
-CompositePartEditor_LabelLabel=L&abel\:
-CompositePartEditor_Tooltip=T&ooltip\:
-CompositePartEditor_IconURI=&Icon URI\:
-CompositePartEditor_IconURI_Tooltip=Choose the icon of your part here \ No newline at end of file
+CompositePartEditor_Controls=&Controls\: \ No newline at end of file
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 cb625426..053c33d7 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
@@ -124,6 +124,7 @@ import org.eclipse.e4.tools.emf.ui.internal.common.component.virtual.VApplicatio
import org.eclipse.e4.tools.emf.ui.internal.common.component.virtual.VApplicationWindowEditor;
import org.eclipse.e4.tools.emf.ui.internal.common.component.virtual.VBindingTableEditor;
import org.eclipse.e4.tools.emf.ui.internal.common.component.virtual.VCommandEditor;
+import org.eclipse.e4.tools.emf.ui.internal.common.component.virtual.VControlsEditor;
import org.eclipse.e4.tools.emf.ui.internal.common.component.virtual.VHandlerEditor;
import org.eclipse.e4.tools.emf.ui.internal.common.component.virtual.VItemParametersEditor;
import org.eclipse.e4.tools.emf.ui.internal.common.component.virtual.VMenuContributionsEditor;
@@ -251,6 +252,7 @@ public class ModelEditor implements IGotoObject {
public static final String VIRTUAL_PART_MENU = "org.eclipse.e4.tools.emf.ui.VIRTUAL_PART_MENU"; //$NON-NLS-1$
public static final String VIRTUAL_HANDLER = "org.eclipse.e4.tools.emf.ui.VIRTUAL_HANDLER"; //$NON-NLS-1$
+ public static final String VIRTUAL_CONTROLS = "org.eclipse.e4.tools.emf.ui.VIRTUAL_CONTROLS"; //$NON-NLS-1$
public static final String VIRTUAL_BINDING_TABLE = "org.eclipse.e4.tools.emf.ui.VIRTUAL_BINDING_TABLE"; //$NON-NLS-1$
public static final String VIRTUAL_COMMAND = "org.eclipse.e4.tools.emf.ui.VIRTUAL_COMMAND"; //$NON-NLS-1$
public static final String VIRTUAL_APPLICATION_WINDOWS = "org.eclipse.e4.tools.emf.ui.VIRTUAL_APPLICATION_WINDOWS"; //$NON-NLS-1$
@@ -280,6 +282,7 @@ public class ModelEditor implements IGotoObject {
public static final int TAB_XMI = 1;
public static final int TAB_LIST = 2;
+
/**
* A map with key = eClass name or virtual key, value is an
* AbstractComponentEditor instance This map is filled on the fly when getting
@@ -1140,6 +1143,7 @@ public class ModelEditor implements IGotoObject {
private void registerVirtualEditors() {
registerEditor(VIRTUAL_PART_MENU, VPartMenuEditor.class);
registerEditor(VIRTUAL_HANDLER, VHandlerEditor.class);
+ registerEditor(VIRTUAL_CONTROLS, VControlsEditor.class);
registerEditor(VIRTUAL_BINDING_TABLE, VBindingTableEditor.class);
registerEditor(VIRTUAL_COMMAND, VCommandEditor.class);
registerEditor(VIRTUAL_APPLICATION_WINDOWS, VApplicationWindowEditor.class);
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/AbstractPartEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/AbstractPartEditor.java
new file mode 100644
index 00000000..67e42cc8
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/AbstractPartEditor.java
@@ -0,0 +1,363 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Airbus Defence and Space GmbH and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Benedikt Kuntz <benedikt.kuntz@airbus.com> - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.e4.tools.emf.ui.internal.common.component;
+
+import javax.inject.Inject;
+
+import org.eclipse.core.databinding.observable.list.IObservableList;
+import org.eclipse.core.databinding.observable.list.WritableList;
+import org.eclipse.core.databinding.observable.value.IObservableValue;
+import org.eclipse.core.databinding.observable.value.WritableValue;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.e4.core.contexts.IEclipseContext;
+import org.eclipse.e4.core.di.annotations.Optional;
+import org.eclipse.e4.tools.emf.ui.common.ImageTooltip;
+import org.eclipse.e4.tools.emf.ui.common.Util;
+import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
+import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
+import org.eclipse.e4.tools.emf.ui.internal.common.ModelEditor;
+import org.eclipse.e4.tools.emf.ui.internal.common.VirtualEntry;
+import org.eclipse.e4.tools.emf.ui.internal.common.component.ControlFactory.TextPasteHandler;
+import org.eclipse.e4.tools.emf.ui.internal.common.component.dialogs.PartIconDialogEditor;
+import org.eclipse.e4.tools.emf.ui.internal.common.objectdata.ObjectViewer;
+import org.eclipse.e4.tools.emf.ui.internal.common.uistructure.UIViewer;
+import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
+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.e4.ui.model.application.ui.menu.MMenuFactory;
+import org.eclipse.e4.ui.model.application.ui.menu.MToolBar;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.databinding.EMFDataBindingContext;
+import org.eclipse.emf.databinding.FeaturePath;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.command.SetCommand;
+import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
+import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.custom.CTabItem;
+import org.eclipse.swt.custom.StackLayout;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+public abstract class AbstractPartEditor<M extends MPart> extends AbstractComponentEditor<M> {
+ private Composite composite;
+ private EMFDataBindingContext context;
+ private Button createRemoveToolBarButton;
+ private StackLayout stackLayout;
+
+ @Inject
+ @Optional
+ private IProject project;
+
+ @Inject
+ private IEclipseContext eclipseContext;
+
+ @Inject
+ public AbstractPartEditor() {
+ super();
+ }
+
+ @Override
+ public FeaturePath[] getLabelProperties() {
+ return new FeaturePath[] { FeaturePath.fromList(UiPackageImpl.Literals.GENERIC_TILE__HORIZONTAL),
+ FeaturePath.fromList(UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED) };
+ }
+
+ @Override
+ public String getDetailLabel(Object element) {
+ return null;
+ }
+
+ @Override
+ public Composite doGetEditor(Composite parent, Object object) {
+ if (composite == null) {
+ context = new EMFDataBindingContext();
+ if (getEditor().isModelFragment()) {
+ composite = new Composite(parent, SWT.NONE);
+ stackLayout = new StackLayout();
+ composite.setLayout(stackLayout);
+ createForm(composite, context, getMaster(), false);
+ createForm(composite, context, getMaster(), true);
+ } else {
+ composite = createForm(parent, context, getMaster(), false);
+ }
+ }
+
+ if (getEditor().isModelFragment()) {
+ Control topControl;
+ if (Util.isImport((EObject) object)) {
+ topControl = composite.getChildren()[1];
+ } else {
+ topControl = composite.getChildren()[0];
+ }
+
+ if (stackLayout.topControl != topControl) {
+ stackLayout.topControl = topControl;
+ composite.layout(true, true);
+ }
+ }
+
+ if (createRemoveToolBarButton != null) {
+ createRemoveToolBarButton.setSelection(((MPart) object).getToolbar() != null);
+ }
+
+ return composite;
+ }
+
+ protected Composite createForm(Composite parent, final EMFDataBindingContext context,
+ WritableValue<M> master, boolean isImport) {
+
+ final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
+
+ CTabItem item = new CTabItem(folder, SWT.BORDER);
+ item.setText(Messages.ModelTooling_Common_TabDefault);
+
+ parent = createScrollableContainer(folder);
+ item.setControl(parent.getParent());
+
+ if (getEditor().isShowXMIId() || getEditor().isLiveModel()) {
+ ControlFactory.createXMIId(parent, this);
+ }
+
+ final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
+
+ if (isImport) {
+ ControlFactory.createFindImport(parent, Messages, this, context);
+ folder.setSelection(0);
+ return folder;
+ }
+
+ ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp,
+ E4Properties.elementId(getEditingDomain()));
+ ControlFactory.createTextField(parent, Messages.PartEditor_LabelLabel, master, context, textProp,
+ E4Properties.label(getEditingDomain()));
+ ControlFactory.createTextField(parent, Messages.ModelTooling_UIElement_AccessibilityPhrase, master, context,
+ textProp, E4Properties.accessibilityPhrase(getEditingDomain()));
+ ControlFactory.createTextField(parent, Messages.PartEditor_Tooltip, master, context, textProp,
+ E4Properties.tooltip(getEditingDomain()));
+
+ // ------------------------------------------------------------
+ {
+ final Label l = new Label(parent, SWT.NONE);
+ l.setText(Messages.PartEditor_IconURI);
+ l.setLayoutData(new GridData());
+ l.setToolTipText(Messages.PartEditor_IconURI_Tooltip);
+
+ final Text t = new Text(parent, SWT.BORDER);
+ TextPasteHandler.createFor(t);
+ t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ context.bindValue(
+ textProp.observeDelayed(200, t),
+ E4Properties.iconUri(getEditingDomain()).observeDetail(master));
+
+ new ImageTooltip(t, Messages, this);
+
+ Button b = ControlFactory.createFindButton(parent, resourcePool);
+ b.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ final PartIconDialogEditor dialog = new PartIconDialogEditor(b.getShell(), eclipseContext, project,
+ getEditingDomain(), getMaster().getValue(), Messages);
+ dialog.open();
+ }
+ });
+ }
+
+
+ ControlFactory.createClassURIField(parent, Messages, this, Messages.PartEditor_ClassURI,
+ ApplicationPackageImpl.Literals.CONTRIBUTION__CONTRIBUTION_URI,
+ getEditor().getContributionCreator(BasicPackageImpl.Literals.PART), project, context, eclipseContext);
+
+ // ------------------------------------------------------------
+ ControlFactory.createTextField(parent, Messages.PartEditor_ContainerData, master, context, textProp,
+ E4Properties.containerData(getEditingDomain()));
+
+ createSubformElements(parent, context, master);
+
+ {
+ final Label l = new Label(parent, SWT.NONE);
+ l.setText(Messages.PartEditor_ToolBar);
+ l.setLayoutData(new GridData());
+
+ createRemoveToolBarButton = new Button(parent, SWT.CHECK);
+ createRemoveToolBarButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ final MPart window = getMaster().getValue();
+ if (window.getToolbar() == null) {
+ addToolBar();
+ } else {
+ removeToolBar();
+ }
+ }
+ });
+ createRemoveToolBarButton
+ .setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER, false, false, 2, 1));
+ }
+
+ ControlFactory.createCheckBox(parent, Messages.PartEditor_Closeable, Messages.PartEditor_Closeable_Tooltip,
+ getMaster(), context, WidgetProperties.buttonSelection(),
+ E4Properties.partClosable(getEditingDomain()));
+
+ // ------------------------------------------------------------
+ ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_ToBeRendered, getMaster(), context,
+ WidgetProperties.buttonSelection(), E4Properties.toBeRendered(getEditingDomain()));
+ ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_Visible, getMaster(), context,
+ WidgetProperties.buttonSelection(), E4Properties.visible(getEditingDomain()));
+
+ ControlFactory.createBindingContextWiget(parent, Messages, this, Messages.PartEditor_BindingContexts);
+ ControlFactory.createMapProperties(parent, Messages, this, Messages.ModelTooling_Contribution_PersistedState,
+ ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__PERSISTED_STATE, VERTICAL_LIST_WIDGET_INDENT);
+ ControlFactory.createMapProperties(parent, Messages, this, Messages.ModelTooling_Context_Properties,
+ UiPackageImpl.Literals.CONTEXT__PROPERTIES, VERTICAL_LIST_WIDGET_INDENT);
+
+ item = new CTabItem(folder, SWT.NONE);
+ item.setText(Messages.ModelTooling_Common_TabSupplementary);
+
+ parent = createScrollableContainer(folder);
+ item.setControl(parent.getParent());
+
+ ControlFactory.createStringListWidget(parent, Messages, this, Messages.ModelTooling_Context_Variables,
+ Messages.ModelTooling_Context_Variables_Tooltip, UiPackageImpl.Literals.CONTEXT__VARIABLES,
+ VERTICAL_LIST_WIDGET_INDENT);
+ ControlFactory.createStringListWidget(parent, Messages, this, Messages.CategoryEditor_Tags,
+ ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__TAGS, VERTICAL_LIST_WIDGET_INDENT);
+
+ if (project == null) {
+ createInstanceInspection(folder);
+ createUITreeInspection(folder);
+ }
+
+ createContributedEditorTabs(folder, context, getMaster(), MPart.class);
+
+ folder.setSelection(0);
+
+ return folder;
+ }
+
+ protected void createSubformElements(Composite parent, EMFDataBindingContext context,
+ IObservableValue<M> master) {
+ // add nothing as default, allow to be overwritten
+ }
+
+ protected void addToolBar() {
+ final MToolBar menu = MMenuFactory.INSTANCE.createToolBar();
+ setElementId(menu);
+
+ final Command cmd = SetCommand.create(getEditingDomain(), getMaster().getValue(),
+ BasicPackageImpl.Literals.PART__TOOLBAR, menu);
+ if (cmd.canExecute()) {
+ getEditingDomain().getCommandStack().execute(cmd);
+ }
+ }
+
+ protected void removeToolBar() {
+ final Command cmd = SetCommand.create(getEditingDomain(), getMaster().getValue(),
+ BasicPackageImpl.Literals.PART__TOOLBAR, null);
+ if (cmd.canExecute()) {
+ getEditingDomain().getCommandStack().execute(cmd);
+ }
+ }
+
+ private void createInstanceInspection(CTabFolder folder) {
+ final CTabItem item = new CTabItem(folder, SWT.NONE);
+ item.setText(Messages.ModelTooling_Common_RuntimeContributionInstance);
+ final Composite container = new Composite(folder, SWT.NONE);
+ container.setLayout(new GridLayout());
+ item.setControl(container);
+
+ final ObjectViewer objectViewer = new ObjectViewer();
+ final TreeViewer viewer = objectViewer.createViewer(container,
+ ApplicationPackageImpl.Literals.CONTRIBUTION__OBJECT, getMaster(), resourcePool, Messages);
+ viewer.getControl().setLayoutData(new GridData(GridData.FILL_BOTH));
+ }
+
+ private void createUITreeInspection(CTabFolder folder) {
+ final CTabItem item = new CTabItem(folder, SWT.NONE);
+ item.setText(Messages.ModelTooling_Common_RuntimeWidgetTree);
+ final Composite container = new Composite(folder, SWT.NONE);
+ container.setLayout(new GridLayout());
+ item.setControl(container);
+
+ final UIViewer objectViewer = new UIViewer();
+ final TreeViewer viewer = objectViewer.createViewer(container, UiPackageImpl.Literals.UI_ELEMENT__WIDGET,
+ getMaster(), resourcePool, Messages);
+ viewer.getControl().setLayoutData(new GridData(GridData.FILL_BOTH));
+ }
+
+ @Override
+ public IObservableList<?> getChildList(Object element) {
+ final WritableList<Object> list = new WritableList<>();
+ final MPart part = (MPart) element;
+
+ if (getEditor().isModelFragment() && Util.isImport((EObject) element)) {
+ return list;
+ }
+
+ list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_PART_MENU, E4Properties.partMenus(), part,
+ Messages.PartEditor_Menus));
+ list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_HANDLER, E4Properties.handlers(), part,
+ Messages.PartEditor_Handlers));
+
+ if (part.getToolbar() != null) {
+ list.add(0, part.getToolbar());
+ }
+
+ E4Properties.partToolbar().observe(part).addValueChangeListener(event -> {
+ if (event.diff.getOldValue() != null) {
+ list.remove(event.diff.getOldValue());
+ if (getMaster().getValue() == element && !createRemoveToolBarButton.isDisposed()) {
+ createRemoveToolBarButton.setSelection(false);
+ }
+
+ }
+
+ if (event.diff.getNewValue() != null) {
+ list.add(0, event.diff.getNewValue());
+ if (getMaster().getValue() == element && !createRemoveToolBarButton.isDisposed()) {
+ createRemoveToolBarButton.setSelection(true);
+ }
+ }
+ });
+
+ addChildListEntries(part, list);
+
+ return list;
+ }
+
+
+ protected void addChildListEntries(MPart part, IObservableList<Object> list) {
+ // add nothing by default, allow to be overwritten
+ }
+
+
+ @Override
+ public void dispose() {
+ super.dispose();
+ if (context != null) {
+ context.dispose();
+ }
+ }
+
+}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/CompositePartEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/CompositePartEditor.java
index 97595e79..bf583e3a 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/CompositePartEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/CompositePartEditor.java
@@ -7,25 +7,18 @@ import javax.annotation.PostConstruct;
import javax.inject.Inject;
import org.eclipse.core.databinding.observable.list.IObservableList;
-import org.eclipse.core.databinding.observable.value.WritableValue;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.e4.core.contexts.IEclipseContext;
-import org.eclipse.e4.core.di.annotations.Optional;
+import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.e4.tools.emf.ui.common.IEditorFeature.FeatureClass;
-import org.eclipse.e4.tools.emf.ui.common.ImageTooltip;
import org.eclipse.e4.tools.emf.ui.common.Util;
-import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
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.FeatureClassLabelProvider;
import org.eclipse.e4.tools.emf.ui.internal.common.ModelEditor;
-import org.eclipse.e4.tools.emf.ui.internal.common.component.ControlFactory.TextPasteHandler;
-import org.eclipse.e4.tools.emf.ui.internal.common.component.dialogs.PartIconDialogEditor;
-import org.eclipse.e4.tools.emf.ui.internal.common.uistructure.UIViewer;
+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.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.MCompositePart;
@@ -42,12 +35,10 @@ import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.edit.command.AddCommand;
import org.eclipse.emf.edit.command.RemoveCommand;
import org.eclipse.jface.action.Action;
-import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
import org.eclipse.jface.databinding.viewers.IViewerValueProperty;
import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;
import org.eclipse.jface.databinding.viewers.typed.ViewerProperties;
-import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.resource.FontDescriptor;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
@@ -56,50 +47,28 @@ import org.eclipse.jface.viewers.IStructuredSelection;
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.window.Window;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CTabFolder;
-import org.eclipse.swt.custom.CTabItem;
-import org.eclipse.swt.custom.StackLayout;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-public class CompositePartEditor extends AbstractComponentEditor<MCompositePart> {
- private Composite composite;
- private EMFDataBindingContext context;
- private StackLayout stackLayout;
+public class CompositePartEditor extends AbstractPartEditor<MCompositePart> {
private final List<Action> actions = new ArrayList<>();
private final List<Action> actionsImport = new ArrayList<>();
@Inject
- @Optional
- private IProject project;
-
- @Inject
private Shell shell;
- @Inject
- IEclipseContext eclipseContext;
-
- @Inject
- public CompositePartEditor() {
- super();
- }
-
@PostConstruct
- void init() {
+ protected void init() {
actions.add(new Action(Messages.CompositePartEditor_AddPartSashContainer,
createImageDescriptor(ResourceProvider.IMG_PartSashContainer)) {
@Override
@@ -167,7 +136,6 @@ public class CompositePartEditor extends AbstractComponentEditor<MCompositePart>
return horizontal ? getImage(element, ResourceProvider.IMG_PartSashContainer)
: getImage(element, ResourceProvider.IMG_PartSashContainer_vertical);
-
}
@Override
@@ -176,101 +144,27 @@ public class CompositePartEditor extends AbstractComponentEditor<MCompositePart>
}
@Override
+ public FeaturePath[] getLabelProperties() {
+ return new FeaturePath[] { FeaturePath.fromList(UiPackageImpl.Literals.GENERIC_TILE__HORIZONTAL),
+ FeaturePath.fromList(UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED) };
+ }
+
+ @Override
public String getDescription(Object element) {
return Messages.CompositePartEditor_Description;
}
@Override
public Composite doGetEditor(Composite parent, Object object) {
- if (composite == null) {
- context = new EMFDataBindingContext();
- if (getEditor().isModelFragment()) {
- composite = new Composite(parent, SWT.NONE);
- stackLayout = new StackLayout();
- composite.setLayout(stackLayout);
- createForm(composite, context, getMaster(), false);
- createForm(composite, context, getMaster(), true);
- } else {
- composite = createForm(parent, context, getMaster(), false);
- }
- }
-
- if (getEditor().isModelFragment()) {
- Control topControl;
- if (Util.isImport((EObject) object)) {
- topControl = composite.getChildren()[1];
- } else {
- topControl = composite.getChildren()[0];
- }
-
- if (stackLayout.topControl != topControl) {
- stackLayout.topControl = topControl;
- composite.layout(true, true);
- }
- }
-
+ Composite composite = super.doGetEditor(parent, object);
getMaster().setValue((MCompositePart) object);
return composite;
}
- private Composite createForm(Composite parent, final EMFDataBindingContext context,
- WritableValue<MCompositePart> master, boolean isImport) {
- final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
-
- CTabItem item = new CTabItem(folder, SWT.NONE);
- item.setText(Messages.ModelTooling_Common_TabDefault);
-
- parent = createScrollableContainer(folder);
- item.setControl(parent.getParent());
-
- if (getEditor().isShowXMIId() || getEditor().isLiveModel()) {
- ControlFactory.createXMIId(parent, this);
- }
-
- final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
-
- if (isImport) {
- ControlFactory.createFindImport(parent, Messages, this, context);
- folder.setSelection(0);
- return folder;
- }
-
- ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp,
- E4Properties.elementId(getEditingDomain()));
- ControlFactory.createTextField(parent, Messages.ModelTooling_UIElement_AccessibilityPhrase, getMaster(),
- context, textProp, E4Properties.accessibilityPhrase(getEditingDomain()));
- ControlFactory.createTextField(parent, Messages.CompositePartEditor_LabelLabel, master, context, textProp,
- E4Properties.label(getEditingDomain()));
- ControlFactory.createTextField(parent, Messages.CompositePartEditor_Tooltip, master, context, textProp,
- E4Properties.tooltip(getEditingDomain()));
-
- // ------------------------------------------------------------
- {
- final Label l = new Label(parent, SWT.NONE);
- l.setText(Messages.CompositePartEditor_IconURI);
- l.setLayoutData(new GridData());
- l.setToolTipText(Messages.CompositePartEditor_IconURI_Tooltip);
-
- final Text t = new Text(parent, SWT.BORDER);
- TextPasteHandler.createFor(t);
- t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- context.bindValue(textProp.observeDelayed(200, t),
- E4Properties.iconUri(getEditingDomain()).observeDetail(master));
-
- new ImageTooltip(t, Messages, this);
-
- Button b = ControlFactory.createFindButton(parent, resourcePool);
- b.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- final PartIconDialogEditor dialog = new PartIconDialogEditor(b.getShell(), eclipseContext, project,
- getEditingDomain(), getMaster().getValue(), Messages);
- dialog.open();
- }
- });
- }
+ @Override
+ protected void createSubformElements(Composite parent, EMFDataBindingContext context,
+ IObservableValue<MCompositePart> master) {
- // ------------------------------------------------------------
{
final Label l = new Label(parent, SWT.NONE);
l.setText(Messages.CompositePartEditor_Orientation);
@@ -295,214 +189,146 @@ public class CompositePartEditor extends AbstractComponentEditor<MCompositePart>
}
ControlFactory.createSelectedElement(parent, this, context, Messages.CompositePartEditor_SelectedElement);
- ControlFactory.createTextField(parent, Messages.CompositePartEditor_ContainerData, master, context, textProp,
- E4Properties.containerData(getEditingDomain()));
-
- {
- final Label l = new Label(parent, SWT.NONE);
- l.setText(Messages.CompositePartEditor_Controls);
- l.setLayoutData(new GridData(GridData.BEGINNING, GridData.BEGINNING, false, false));
-
- final Composite buttonCompTop = new Composite(parent, SWT.NONE);
- final GridData span2 = new GridData(GridData.FILL, GridData.BEGINNING, false, false, 2, 1);
- buttonCompTop.setLayoutData(span2);
- final GridLayout gl = new GridLayout(2, false);
- gl.marginLeft = 0;
- gl.marginRight = 0;
- gl.marginWidth = 0;
- gl.marginHeight = 0;
- buttonCompTop.setLayout(gl);
-
- final ComboViewer childrenDropDown = new ComboViewer(buttonCompTop);
- childrenDropDown.setLabelProvider(new FeatureClassLabelProvider(getEditor()));
- childrenDropDown.setContentProvider(ArrayContentProvider.getInstance());
-
- final List<FeatureClass> eClassList = new ArrayList<>();
- eClassList.add(new FeatureClass("PartSashContainer", BasicPackageImpl.Literals.PART_SASH_CONTAINER)); //$NON-NLS-1$
- eClassList.add(new FeatureClass("PartStack", BasicPackageImpl.Literals.PART_STACK)); //$NON-NLS-1$
- eClassList.add(new FeatureClass("Part", BasicPackageImpl.Literals.PART)); //$NON-NLS-1$
- eClassList.add(new FeatureClass("Area", AdvancedPackageImpl.Literals.AREA)); //$NON-NLS-1$
- eClassList.add(new FeatureClass("Placeholder", AdvancedPackageImpl.Literals.PLACEHOLDER)); //$NON-NLS-1$
- eClassList.addAll(getEditor().getFeatureClasses(BasicPackageImpl.Literals.COMPOSITE_PART,
- UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN));
- childrenDropDown.setInput(eClassList);
- childrenDropDown.setSelection(new StructuredSelection(eClassList.get(0)));
-
- Button b = new Button(buttonCompTop, SWT.PUSH | SWT.FLAT);
- b.setText(org.eclipse.e4.tools.emf.ui.internal.Messages.ModelTooling_Common_AddEllipsis);
- b.setImage(createImage(ResourceProvider.IMG_Obj16_table_add));
- b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, false, false));
- b.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- if (!childrenDropDown.getSelection().isEmpty()) {
- final EClass eClass = ((FeatureClass) ((IStructuredSelection) childrenDropDown.getSelection())
- .getFirstElement()).eClass;
- handleAddChild(eClass);
- }
+ final Label l = new Label(parent, SWT.NONE);
+ l.setText(Messages.CompositePartEditor_Controls);
+ l.setLayoutData(new GridData(GridData.BEGINNING, GridData.BEGINNING, false, false));
+
+ final Composite buttonCompTop = new Composite(parent, SWT.NONE);
+ final GridData span2 = new GridData(GridData.FILL, GridData.BEGINNING, false, false, 2, 1);
+ buttonCompTop.setLayoutData(span2);
+ buttonCompTop.setLayout(GridLayoutFactory.fillDefaults().numColumns(2).create());
+
+ final ComboViewer childrenDropDown = new ComboViewer(buttonCompTop);
+ childrenDropDown.setLabelProvider(new FeatureClassLabelProvider(getEditor()));
+ childrenDropDown.setContentProvider(ArrayContentProvider.getInstance());
+
+ final List<FeatureClass> eClassList = new ArrayList<>();
+ eClassList.add(new FeatureClass("PartSashContainer", BasicPackageImpl.Literals.PART_SASH_CONTAINER)); //$NON-NLS-1$
+ eClassList.add(new FeatureClass("PartStack", BasicPackageImpl.Literals.PART_STACK)); //$NON-NLS-1$
+ eClassList.add(new FeatureClass("Part", BasicPackageImpl.Literals.PART)); //$NON-NLS-1$
+ eClassList.add(new FeatureClass("Area", AdvancedPackageImpl.Literals.AREA)); //$NON-NLS-1$
+ eClassList.add(new FeatureClass("Placeholder", AdvancedPackageImpl.Literals.PLACEHOLDER)); //$NON-NLS-1$
+ eClassList.addAll(getEditor().getFeatureClasses(BasicPackageImpl.Literals.COMPOSITE_PART,
+ UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN));
+ childrenDropDown.setInput(eClassList);
+ childrenDropDown.setSelection(new StructuredSelection(eClassList.get(0)));
+
+ Button b = new Button(buttonCompTop, SWT.PUSH | SWT.FLAT);
+ b.setText(org.eclipse.e4.tools.emf.ui.internal.Messages.ModelTooling_Common_AddEllipsis);
+ b.setImage(createImage(ResourceProvider.IMG_Obj16_table_add));
+ b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, false, false));
+ b.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ if (!childrenDropDown.getSelection().isEmpty()) {
+ final EClass eClass = ((FeatureClass) ((IStructuredSelection) childrenDropDown.getSelection())
+ .getFirstElement()).eClass;
+ handleAddChild(eClass);
}
- });
+ }
+ });
- new Label(parent, SWT.NONE);
+ new Label(parent, SWT.NONE);
- final TableViewer viewer = new TableViewer(parent);
- final GridData gd = new GridData(GridData.FILL, GridData.FILL, true, true, 2, 1);
- viewer.getControl().setLayoutData(gd);
- viewer.setContentProvider(new ObservableListContentProvider<>());
+ final TableViewer viewer = new TableViewer(parent);
+ final GridData gd = new GridData(GridData.FILL, GridData.FILL, true, true, 2, 1);
+ viewer.getControl().setLayoutData(gd);
+ viewer.setContentProvider(new ObservableListContentProvider<>());
- final FontDescriptor italicFontDescriptor = FontDescriptor.createFrom(viewer.getControl().getFont())
- .setStyle(SWT.ITALIC);
- viewer.setLabelProvider(new DelegatingStyledCellLabelProvider(
- new ComponentLabelProvider(getEditor(), Messages, italicFontDescriptor)));
+ final FontDescriptor italicFontDescriptor = FontDescriptor.createFrom(viewer.getControl().getFont())
+ .setStyle(SWT.ITALIC);
+ viewer.setLabelProvider(new DelegatingStyledCellLabelProvider(
+ new ComponentLabelProvider(getEditor(), Messages, italicFontDescriptor)));
- viewer.setInput(E4Properties.<MPartSashContainerElement>children().observeDetail(getMaster()));
+ viewer.setInput(E4Properties.<MPartSashContainerElement>children().observeDetail(getMaster()));
- viewer.addOpenListener(event -> {
- if (event.getSelection() instanceof IStructuredSelection) {
- IStructuredSelection selection = (IStructuredSelection) event.getSelection();
- if (selection.getFirstElement() instanceof EObject && getEditor() != null) {
- EObject selected = (EObject) selection.getFirstElement();
- getEditor().gotoEObject(ModelEditor.TAB_FORM, selected);
- }
+ viewer.addOpenListener(event -> {
+ if (event.getSelection() instanceof IStructuredSelection) {
+ IStructuredSelection selection = (IStructuredSelection) event.getSelection();
+ if (selection.getFirstElement() instanceof EObject && getEditor() != null) {
+ EObject selected = (EObject) selection.getFirstElement();
+ getEditor().gotoEObject(ModelEditor.TAB_FORM, selected);
}
- });
+ }
+ });
- new Label(parent, SWT.NONE);
+ new Label(parent, SWT.NONE);
- final Composite buttonCompBot = new Composite(parent, SWT.NONE);
- buttonCompBot.setLayoutData(new GridData(GridData.FILL, GridData.END, false, false, 2, 1));
- buttonCompBot.setLayout(new FillLayout());
+ final Composite buttonCompBot = new Composite(parent, SWT.NONE);
+ buttonCompBot.setLayoutData(new GridData(GridData.FILL, GridData.END, false, false, 2, 1));
+ buttonCompBot.setLayout(new FillLayout());
- b = new Button(buttonCompBot, SWT.PUSH | SWT.FLAT);
- b.setText(org.eclipse.e4.tools.emf.ui.internal.Messages.ModelTooling_Common_Up);
- b.setImage(createImage(ResourceProvider.IMG_Obj16_arrow_up));
- b.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- if (!viewer.getSelection().isEmpty()) {
- final IStructuredSelection s = (IStructuredSelection) viewer.getSelection();
- if (s.size() == 1) {
- final Object obj = s.getFirstElement();
- final int idx = getMaster().getValue().getChildren().indexOf(obj) - 1;
- if (idx >= 0) {
- if (Util.moveElementByIndex(getEditingDomain(), (MUIElement) obj, getEditor()
- .isLiveModel(), idx)) {
- viewer.setSelection(new StructuredSelection(obj));
- }
+ b = new Button(buttonCompBot, SWT.PUSH | SWT.FLAT);
+ b.setText(org.eclipse.e4.tools.emf.ui.internal.Messages.ModelTooling_Common_Up);
+ b.setImage(createImage(ResourceProvider.IMG_Obj16_arrow_up));
+ b.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ if (!viewer.getSelection().isEmpty()) {
+ final IStructuredSelection s = (IStructuredSelection) viewer.getSelection();
+ if (s.size() == 1) {
+ final Object obj = s.getFirstElement();
+ final int idx = getMaster().getValue().getChildren().indexOf(obj) - 1;
+ if (idx >= 0) {
+ if (Util.moveElementByIndex(getEditingDomain(), (MUIElement) obj, getEditor().isLiveModel(),
+ idx)) {
+ viewer.setSelection(new StructuredSelection(obj));
}
-
}
+
}
}
- });
+ }
+ });
- b = new Button(buttonCompBot, SWT.PUSH | SWT.FLAT);
- b.setText(org.eclipse.e4.tools.emf.ui.internal.Messages.ModelTooling_Common_Down);
- b.setImage(createImage(ResourceProvider.IMG_Obj16_arrow_down));
- b.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- if (!viewer.getSelection().isEmpty()) {
- final IStructuredSelection s = (IStructuredSelection) viewer.getSelection();
- if (s.size() == 1) {
- final Object obj = s.getFirstElement();
- final int idx = getMaster().getValue().getChildren().indexOf(obj) + 1;
- if (idx < getMaster().getValue().getChildren().size()) {
- if (Util.moveElementByIndex(getEditingDomain(), (MUIElement) obj, getEditor()
- .isLiveModel(), idx)) {
- viewer.setSelection(new StructuredSelection(obj));
- }
+ b = new Button(buttonCompBot, SWT.PUSH | SWT.FLAT);
+ b.setText(org.eclipse.e4.tools.emf.ui.internal.Messages.ModelTooling_Common_Down);
+ b.setImage(createImage(ResourceProvider.IMG_Obj16_arrow_down));
+ b.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ if (!viewer.getSelection().isEmpty()) {
+ final IStructuredSelection s = (IStructuredSelection) viewer.getSelection();
+ if (s.size() == 1) {
+ final Object obj = s.getFirstElement();
+ final int idx = getMaster().getValue().getChildren().indexOf(obj) + 1;
+ if (idx < getMaster().getValue().getChildren().size()) {
+ if (Util.moveElementByIndex(getEditingDomain(), (MUIElement) obj, getEditor().isLiveModel(),
+ idx)) {
+ viewer.setSelection(new StructuredSelection(obj));
}
-
}
+
}
}
- });
+ }
+ });
- b = new Button(buttonCompBot, SWT.PUSH | SWT.FLAT);
- b.setText(org.eclipse.e4.tools.emf.ui.internal.Messages.ModelTooling_Common_Remove);
- b.setImage(createImage(ResourceProvider.IMG_Obj16_table_delete));
- b.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- if (!viewer.getSelection().isEmpty()) {
- final List<?> elements = ((IStructuredSelection) viewer.getSelection()).toList();
-
- final Command cmd = RemoveCommand.create(getEditingDomain(), getMaster().getValue(),
- UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN, elements);
- if (cmd.canExecute()) {
- getEditingDomain().getCommandStack().execute(cmd);
- }
+ b = new Button(buttonCompBot, SWT.PUSH | SWT.FLAT);
+ b.setText(org.eclipse.e4.tools.emf.ui.internal.Messages.ModelTooling_Common_Remove);
+ b.setImage(createImage(ResourceProvider.IMG_Obj16_table_delete));
+ b.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ if (!viewer.getSelection().isEmpty()) {
+ final List<?> elements = ((IStructuredSelection) viewer.getSelection()).toList();
+
+ final Command cmd = RemoveCommand.create(getEditingDomain(), getMaster().getValue(),
+ UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN, elements);
+ if (cmd.canExecute()) {
+ getEditingDomain().getCommandStack().execute(cmd);
}
}
- });
- }
-
- ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_ToBeRendered, getMaster(), context,
- WidgetProperties.buttonSelection(), E4Properties.toBeRendered(getEditingDomain()));
- ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_Visible, getMaster(), context,
- WidgetProperties.buttonSelection(), E4Properties.visible(getEditingDomain()));
-
- Composite propComposite = ControlFactory.createMapProperties(parent, Messages, this,
- Messages.ModelTooling_Context_Properties, UiPackageImpl.Literals.CONTEXT__PROPERTIES,
- VERTICAL_LIST_WIDGET_INDENT);
- propComposite.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).span(3, 1).create());
-
- Composite variablesComposite = ControlFactory.createStringListWidget(parent, Messages, this,
- Messages.ModelTooling_Context_Variables, UiPackageImpl.Literals.CONTEXT__VARIABLES,
- VERTICAL_LIST_WIDGET_INDENT);
- variablesComposite.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).span(3, 1).create());
-
- item = new CTabItem(folder, SWT.NONE);
- item.setText(Messages.ModelTooling_Common_TabSupplementary);
-
- parent = createScrollableContainer(folder);
- item.setControl(parent.getParent());
-
- ControlFactory.createStringListWidget(parent, Messages, this, Messages.CategoryEditor_Tags,
- ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__TAGS, VERTICAL_LIST_WIDGET_INDENT);
- ControlFactory.createMapProperties(parent, Messages, this, Messages.ModelTooling_Contribution_PersistedState,
- ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__PERSISTED_STATE, VERTICAL_LIST_WIDGET_INDENT);
-
- if (project == null) {
- createUITreeInspection(folder);
- }
-
- createContributedEditorTabs(folder, context, getMaster(), MCompositePart.class);
-
- folder.setSelection(0);
-
- return folder;
- }
-
- private void createUITreeInspection(CTabFolder folder) {
- final CTabItem item = new CTabItem(folder, SWT.NONE);
- item.setText(Messages.ModelTooling_Common_RuntimeWidgetTree);
- final Composite container = new Composite(folder, SWT.NONE);
- container.setLayout(new GridLayout());
- item.setControl(container);
-
- final UIViewer objectViewer = new UIViewer();
- final TreeViewer viewer = objectViewer.createViewer(container, UiPackageImpl.Literals.UI_ELEMENT__WIDGET,
- getMaster(), resourcePool, Messages);
- viewer.getControl().setLayoutData(new GridData(GridData.FILL_BOTH));
- }
-
- @Override
- public IObservableList<?> getChildList(Object element) {
- return E4Properties.<MPartSashContainerElement>children().observe((MCompositePart) element);
- }
-
- @Override
- public String getDetailLabel(Object element) {
- return null;
+ }
+ });
}
+ @SuppressWarnings("unchecked")
@Override
- public FeaturePath[] getLabelProperties() {
- return new FeaturePath[] { FeaturePath.fromList(UiPackageImpl.Literals.GENERIC_TILE__HORIZONTAL),
- FeaturePath.fromList(UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED) };
+ protected void addChildListEntries(MPart part, IObservableList<Object> list) {
+ list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_CONTROLS, E4Properties.<MPartSashContainerElement>children(),
+ (MElementContainer<MPartSashContainerElement>) part, Messages.PartEditor_Controls));
}
protected void handleAddChild(EClass eClass) {
@@ -510,18 +336,6 @@ public class CompositePartEditor extends AbstractComponentEditor<MCompositePart>
addToModel(eObject);
}
- private void addToModel(EObject eObject) {
- setElementId(eObject);
-
- final Command cmd = AddCommand.create(getEditingDomain(), getMaster().getValue(),
- UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN, eObject);
-
- if (cmd.canExecute()) {
- getEditingDomain().getCommandStack().execute(cmd);
- getEditor().setSelection(eObject);
- }
- }
-
protected void handleImportChild(EClass eClass, String hint) {
if (eClass == BasicPackageImpl.Literals.PART) {
@@ -536,6 +350,18 @@ public class CompositePartEditor extends AbstractComponentEditor<MCompositePart>
}
}
+ private void addToModel(EObject eObject) {
+ setElementId(eObject);
+
+ final Command cmd = AddCommand.create(getEditingDomain(), getMaster().getValue(),
+ UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN, eObject);
+
+ if (cmd.canExecute()) {
+ getEditingDomain().getCommandStack().execute(cmd);
+ getEditor().setSelection(eObject);
+ }
+ }
+
@Override
public List<Action> getActions(Object element) {
final ArrayList<Action> l = new ArrayList<>(super.getActions(element));
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartEditor.java
index 94c9b98c..11d7359a 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PartEditor.java
@@ -15,73 +15,17 @@
******************************************************************************/
package org.eclipse.e4.tools.emf.ui.internal.common.component;
-import javax.inject.Inject;
-
-import org.eclipse.core.databinding.observable.list.IObservableList;
-import org.eclipse.core.databinding.observable.list.WritableList;
-import org.eclipse.core.databinding.observable.value.IObservableValue;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.e4.core.contexts.IEclipseContext;
-import org.eclipse.e4.core.di.annotations.Optional;
-import org.eclipse.e4.tools.emf.ui.common.ImageTooltip;
-import org.eclipse.e4.tools.emf.ui.common.Util;
-import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor;
-import org.eclipse.e4.tools.emf.ui.internal.E4Properties;
import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider;
-import org.eclipse.e4.tools.emf.ui.internal.common.ModelEditor;
-import org.eclipse.e4.tools.emf.ui.internal.common.VirtualEntry;
-import org.eclipse.e4.tools.emf.ui.internal.common.component.ControlFactory.TextPasteHandler;
-import org.eclipse.e4.tools.emf.ui.internal.common.component.dialogs.PartIconDialogEditor;
-import org.eclipse.e4.tools.emf.ui.internal.common.objectdata.ObjectViewer;
-import org.eclipse.e4.tools.emf.ui.internal.common.uistructure.UIViewer;
import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
import org.eclipse.e4.ui.model.application.ui.MUILabel;
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.e4.ui.model.application.ui.menu.MMenuFactory;
-import org.eclipse.e4.ui.model.application.ui.menu.MToolBar;
-import org.eclipse.emf.common.command.Command;
-import org.eclipse.emf.databinding.EMFDataBindingContext;
import org.eclipse.emf.databinding.FeaturePath;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.edit.command.SetCommand;
-import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
-import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CTabFolder;
-import org.eclipse.swt.custom.CTabItem;
-import org.eclipse.swt.custom.StackLayout;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-
-public class PartEditor extends AbstractComponentEditor<MPart> {
-
- private Composite composite;
- private EMFDataBindingContext context;
- private Button createRemoveToolBar;
- private StackLayout stackLayout;
-
- @Inject
- @Optional
- private IProject project;
-
- @Inject
- IEclipseContext eclipseContext;
- @Inject
- public PartEditor() {
- super();
- }
+public class PartEditor extends AbstractPartEditor<MPart> {
@Override
public Image getImage(Object element) {
@@ -103,36 +47,7 @@ public class PartEditor extends AbstractComponentEditor<MPart> {
@Override
public Composite doGetEditor(Composite parent, Object object) {
- if (composite == null) {
- context = new EMFDataBindingContext();
- if (getEditor().isModelFragment()) {
- composite = new Composite(parent, SWT.NONE);
- stackLayout = new StackLayout();
- composite.setLayout(stackLayout);
- createForm(composite, context, getMaster(), false);
- createForm(composite, context, getMaster(), true);
- } else {
- composite = createForm(parent, context, getMaster(), false);
- }
- }
-
- if (getEditor().isModelFragment()) {
- Control topControl;
- if (Util.isImport((EObject) object)) {
- topControl = composite.getChildren()[1];
- } else {
- topControl = composite.getChildren()[0];
- }
-
- if (stackLayout.topControl != topControl) {
- stackLayout.topControl = topControl;
- composite.layout(true, true);
- }
- }
-
- if (createRemoveToolBar != null) {
- createRemoveToolBar.setSelection(((MPart) object).getToolbar() != null);
- }
+ Composite composite = super.doGetEditor(parent, object);
getMaster().setValue((MPart) object);
enableIdGenerator(UiPackageImpl.Literals.UI_LABEL__LABEL,
@@ -141,223 +56,6 @@ public class PartEditor extends AbstractComponentEditor<MPart> {
return composite;
}
- protected Composite createForm(Composite parent, EMFDataBindingContext context, IObservableValue<MPart> master,
- boolean isImport) {
- final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
-
- CTabItem item = new CTabItem(folder, SWT.BORDER);
- item.setText(Messages.ModelTooling_Common_TabDefault);
-
- parent = createScrollableContainer(folder);
- item.setControl(parent.getParent());
-
- if (getEditor().isShowXMIId() || getEditor().isLiveModel()) {
- ControlFactory.createXMIId(parent, this);
- }
-
- final IWidgetValueProperty<Text, String> textProp = WidgetProperties.text(SWT.Modify);
-
- if (isImport) {
- ControlFactory.createFindImport(parent, Messages, this, context);
- folder.setSelection(0);
- return folder;
- }
-
- ControlFactory.createTextField(parent, Messages.ModelTooling_Common_Id, master, context, textProp,
- E4Properties.elementId(getEditingDomain()));
- ControlFactory.createTextField(parent, Messages.PartEditor_LabelLabel, master, context, textProp,
- E4Properties.label(getEditingDomain()));
- ControlFactory.createTextField(parent, Messages.ModelTooling_UIElement_AccessibilityPhrase, master, context,
- textProp, E4Properties.accessibilityPhrase(getEditingDomain()));
- ControlFactory.createTextField(parent, Messages.PartEditor_Tooltip, master, context, textProp,
- E4Properties.tooltip(getEditingDomain()));
-
- // ------------------------------------------------------------
- {
- final Label l = new Label(parent, SWT.NONE);
- l.setText(Messages.PartEditor_IconURI);
- l.setLayoutData(new GridData());
- l.setToolTipText(Messages.PartEditor_IconURI_Tooltip);
-
- final Text t = new Text(parent, SWT.BORDER);
- TextPasteHandler.createFor(t);
- t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- context.bindValue(
- textProp.observeDelayed(200, t),
- E4Properties.iconUri(getEditingDomain()).observeDetail(master));
-
- new ImageTooltip(t, Messages, this);
-
- Button b = ControlFactory.createFindButton(parent, resourcePool);
- b.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- final PartIconDialogEditor dialog = new PartIconDialogEditor(b.getShell(), eclipseContext, project,
- getEditingDomain(), getMaster().getValue(), Messages);
- dialog.open();
- }
- });
- }
-
-
- ControlFactory.createClassURIField(parent, Messages, this, Messages.PartEditor_ClassURI,
- ApplicationPackageImpl.Literals.CONTRIBUTION__CONTRIBUTION_URI,
- getEditor().getContributionCreator(BasicPackageImpl.Literals.PART), project, context, eclipseContext);
-
- // ------------------------------------------------------------
- ControlFactory.createTextField(parent, Messages.PartEditor_ContainerData, master, context, textProp,
- E4Properties.containerData(getEditingDomain()));
-
- createSubformElements(parent, context, master);
-
- {
- final Label l = new Label(parent, SWT.NONE);
- l.setText(Messages.PartEditor_ToolBar);
- l.setLayoutData(new GridData());
-
- createRemoveToolBar = new Button(parent, SWT.CHECK);
- createRemoveToolBar.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- final MPart window = getMaster().getValue();
- if (window.getToolbar() == null) {
- addToolBar();
- } else {
- removeToolBar();
- }
- }
- });
- createRemoveToolBar.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER, false, false, 2, 1));
- }
-
- ControlFactory.createCheckBox(parent, Messages.PartEditor_Closeable, Messages.PartEditor_Closeable_Tooltip,
- getMaster(), context, WidgetProperties.buttonSelection(),
- E4Properties.partClosable(getEditingDomain()));
-
- // ------------------------------------------------------------
- ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_ToBeRendered, getMaster(), context,
- WidgetProperties.buttonSelection(), E4Properties.toBeRendered(getEditingDomain()));
- ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_Visible, getMaster(), context,
- WidgetProperties.buttonSelection(), E4Properties.visible(getEditingDomain()));
-
- ControlFactory.createBindingContextWiget(parent, Messages, this, Messages.PartEditor_BindingContexts);
- ControlFactory.createMapProperties(parent, Messages, this, Messages.ModelTooling_Contribution_PersistedState,
- ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__PERSISTED_STATE, VERTICAL_LIST_WIDGET_INDENT);
- ControlFactory.createMapProperties(parent, Messages, this, Messages.ModelTooling_Context_Properties,
- UiPackageImpl.Literals.CONTEXT__PROPERTIES, VERTICAL_LIST_WIDGET_INDENT);
-
- item = new CTabItem(folder, SWT.NONE);
- item.setText(Messages.ModelTooling_Common_TabSupplementary);
-
- parent = createScrollableContainer(folder);
- item.setControl(parent.getParent());
-
- ControlFactory.createStringListWidget(parent, Messages, this, Messages.ModelTooling_Context_Variables,
- Messages.ModelTooling_Context_Variables_Tooltip, UiPackageImpl.Literals.CONTEXT__VARIABLES,
- VERTICAL_LIST_WIDGET_INDENT);
- ControlFactory.createStringListWidget(parent, Messages, this, Messages.CategoryEditor_Tags,
- ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__TAGS, VERTICAL_LIST_WIDGET_INDENT);
-
- if (project == null) {
- createInstanceInspection(folder);
- createUITreeInspection(folder);
- }
-
- createContributedEditorTabs(folder, context, getMaster(), MPart.class);
-
- folder.setSelection(0);
-
- return folder;
- }
-
- private void createInstanceInspection(CTabFolder folder) {
- final CTabItem item = new CTabItem(folder, SWT.NONE);
- item.setText(Messages.ModelTooling_Common_RuntimeContributionInstance);
- final Composite container = new Composite(folder, SWT.NONE);
- container.setLayout(new GridLayout());
- item.setControl(container);
-
- final ObjectViewer objectViewer = new ObjectViewer();
- final TreeViewer viewer = objectViewer.createViewer(container,
- ApplicationPackageImpl.Literals.CONTRIBUTION__OBJECT, getMaster(), resourcePool, Messages);
- viewer.getControl().setLayoutData(new GridData(GridData.FILL_BOTH));
- }
-
- private void createUITreeInspection(CTabFolder folder) {
- final CTabItem item = new CTabItem(folder, SWT.NONE);
- item.setText(Messages.ModelTooling_Common_RuntimeWidgetTree);
- final Composite container = new Composite(folder, SWT.NONE);
- container.setLayout(new GridLayout());
- item.setControl(container);
-
- final UIViewer objectViewer = new UIViewer();
- final TreeViewer viewer = objectViewer.createViewer(container, UiPackageImpl.Literals.UI_ELEMENT__WIDGET,
- getMaster(), resourcePool, Messages);
- viewer.getControl().setLayoutData(new GridData(GridData.FILL_BOTH));
- }
-
- private void addToolBar() {
- final MToolBar menu = MMenuFactory.INSTANCE.createToolBar();
- setElementId(menu);
-
- final Command cmd = SetCommand.create(getEditingDomain(), getMaster().getValue(),
- BasicPackageImpl.Literals.PART__TOOLBAR, menu);
- if (cmd.canExecute()) {
- getEditingDomain().getCommandStack().execute(cmd);
- }
- }
-
- private void removeToolBar() {
- final Command cmd = SetCommand.create(getEditingDomain(), getMaster().getValue(),
- BasicPackageImpl.Literals.PART__TOOLBAR, null);
- if (cmd.canExecute()) {
- getEditingDomain().getCommandStack().execute(cmd);
- }
- }
-
- protected void createSubformElements(Composite parent, EMFDataBindingContext context,
- IObservableValue<MPart> master) {
-
- }
-
- @Override
- public IObservableList<?> getChildList(final Object element) {
- final WritableList<Object> list = new WritableList<>();
- final MPart window = (MPart) element;
-
- if (getEditor().isModelFragment() && Util.isImport((EObject) element)) {
- return list;
- }
-
- list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_PART_MENU, E4Properties.partMenus(), window,
- Messages.PartEditor_Menus));
- list.add(new VirtualEntry<>(ModelEditor.VIRTUAL_HANDLER, E4Properties.handlers(), window,
- Messages.PartEditor_Handlers));
-
- if (window.getToolbar() != null) {
- list.add(0, window.getToolbar());
- }
-
- E4Properties.partToolbar().observe(window).addValueChangeListener(event -> {
- if (event.diff.getOldValue() != null) {
- list.remove(event.diff.getOldValue());
- if (getMaster().getValue() == element && !createRemoveToolBar.isDisposed()) {
- createRemoveToolBar.setSelection(false);
- }
-
- }
-
- if (event.diff.getNewValue() != null) {
- list.add(0, event.diff.getNewValue());
- if (getMaster().getValue() == element && !createRemoveToolBar.isDisposed()) {
- createRemoveToolBar.setSelection(true);
- }
- }
- });
-
- return list;
- }
-
@Override
public String getDetailLabel(Object element) {
return getLocalizedLabel((MUILabel) element);
@@ -369,4 +67,4 @@ public class PartEditor extends AbstractComponentEditor<MPart> {
FeaturePath.fromList(UiPackageImpl.Literals.UI_LABEL__ICON_URI),
FeaturePath.fromList(UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED) };
}
-} \ No newline at end of file
+}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VControlsEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VControlsEditor.java
new file mode 100644
index 00000000..b5253ef8
--- /dev/null
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VControlsEditor.java
@@ -0,0 +1,253 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Airbus Defence and Space GmbH and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Benedikt Kuntz <benedikt.kuntz@airbus.com> - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.e4.tools.emf.ui.internal.common.component.virtual;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.inject.Inject;
+
+import org.eclipse.core.databinding.observable.list.IObservableList;
+import org.eclipse.core.databinding.observable.value.WritableValue;
+import org.eclipse.e4.tools.emf.ui.common.IEditorFeature.FeatureClass;
+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.AbstractPickList;
+import org.eclipse.e4.tools.emf.ui.internal.common.AbstractPickList.PickListFeatures;
+import org.eclipse.e4.tools.emf.ui.internal.common.E4PickList;
+import org.eclipse.e4.tools.emf.ui.internal.common.EClassLabelProvider;
+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.MApplication;
+import org.eclipse.e4.ui.model.application.ui.MElementContainer;
+import org.eclipse.e4.ui.model.application.ui.advanced.impl.AdvancedPackageImpl;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
+import org.eclipse.e4.ui.model.application.ui.basic.MPartSashContainerElement;
+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;
+import org.eclipse.emf.databinding.EMFDataBindingContext;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.edit.command.AddCommand;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.window.Window;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.custom.CTabItem;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
+
+public class VControlsEditor extends AbstractComponentEditor<MElementContainer<MPartSashContainerElement>> {
+ private Composite composite;
+ private EMFDataBindingContext context;
+ private TableViewer viewer;
+ private final List<Action> actions = new ArrayList<>();
+ private final List<Action> actionsImport = new ArrayList<>();
+
+ @Inject
+ private Shell shell;
+
+ @Inject
+ public VControlsEditor() {
+ super();
+ }
+
+ @PostConstruct
+ void init() {
+ actions.add(new Action(Messages.CompositePartEditor_AddPartSashContainer,
+ createImageDescriptor(ResourceProvider.IMG_PartSashContainer)) {
+ @Override
+ public void run() {
+ handleAddChild(BasicPackageImpl.Literals.PART_SASH_CONTAINER);
+ }
+ });
+ actions.add(new Action(Messages.CompositePartEditor_AddPartStack,
+ createImageDescriptor(ResourceProvider.IMG_PartStack)) {
+ @Override
+ public void run() {
+ handleAddChild(BasicPackageImpl.Literals.PART_STACK);
+ }
+ });
+ actions.add(new Action(Messages.CompositePartEditor_AddPart, createImageDescriptor(ResourceProvider.IMG_Part)) {
+ @Override
+ public void run() {
+ handleAddChild(BasicPackageImpl.Literals.PART);
+ }
+ });
+
+ actions.add(new Action(Messages.CompositePartEditor_AddArea, createImageDescriptor(ResourceProvider.IMG_Area)) {
+ @Override
+ public void run() {
+ handleAddChild(AdvancedPackageImpl.Literals.AREA);
+ }
+ });
+ actions.add(new Action(Messages.CompositePartEditor_AddPlaceholder,
+ createImageDescriptor(ResourceProvider.IMG_Placeholder)) {
+ @Override
+ public void run() {
+ handleAddChild(AdvancedPackageImpl.Literals.PLACEHOLDER);
+ }
+ });
+ for (final FeatureClass c : getEditor().getFeatureClasses(BasicPackageImpl.Literals.PART_STACK,
+ UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN)) {
+ final EClass ec = c.eClass;
+ actions.add(new Action(c.label, createImageDescriptor(c.iconId)) {
+ @Override
+ public void run() {
+ handleAddChild(ec);
+ }
+ });
+ }
+
+ // --- Import Actions ---
+ actionsImport.add(new Action("Views", createImageDescriptor(ResourceProvider.IMG_Part)) { //$NON-NLS-1$
+ @Override
+ public void run() {
+ handleImportChild(BasicPackageImpl.Literals.PART, RegistryUtil.HINT_VIEW);
+ }
+ });
+ actionsImport.add(new Action("Editors", createImageDescriptor(ResourceProvider.IMG_Part)) { //$NON-NLS-1$
+ @Override
+ public void run() {
+ handleImportChild(BasicPackageImpl.Literals.PART, RegistryUtil.HINT_EDITOR);
+ }
+ });
+
+ }
+
+ @Override
+ public String getLabel(Object element) {
+ return Messages.VControlsEditor_TreeLabel;
+ }
+
+ @Override
+ public String getDetailLabel(Object element) {
+ return null;
+ }
+
+ @Override
+ public String getDescription(Object element) {
+ return Messages.VControlsEditor_TreeLabelDescription;
+ }
+
+ @Override
+ public Composite doGetEditor(Composite parent, Object object) {
+ if (composite == null) {
+ context = new EMFDataBindingContext();
+ composite = createForm(parent, context, getMaster());
+ }
+ @SuppressWarnings("unchecked")
+ final VirtualEntry<MElementContainer<MPartSashContainerElement>, ?> o = (VirtualEntry<MElementContainer<MPartSashContainerElement>, ?>) object;
+ viewer.setInput(o.getList());
+ getMaster().setValue(o.getOriginalParent());
+ return composite;
+ }
+
+ private Composite createForm(Composite parent, EMFDataBindingContext context,
+ WritableValue<MElementContainer<MPartSashContainerElement>> master) {
+ final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
+
+ final CTabItem item = new CTabItem(folder, SWT.NONE);
+ item.setText(Messages.ModelTooling_Common_TabDefault);
+
+ parent = createScrollableContainer(folder);
+ item.setControl(parent.getParent());
+
+ final AbstractPickList pickList = new E4PickList(parent, SWT.NONE, Arrays.asList(PickListFeatures.NO_GROUP),
+ this, UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN) {
+ @Override
+ protected void addPressed() {
+ final EClass eClass = (EClass) getSelection().getFirstElement();
+ handleAddChild(eClass);
+ }
+
+ @Override
+ protected List<?> getContainerChildren(Object container) {
+ return ((MApplication) container).getChildren();
+ }
+ };
+ pickList.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1));
+ viewer = pickList.getList();
+
+ pickList.setLabelProvider(new EClassLabelProvider(getEditor()));
+ pickList.setInput(
+ new EClass[] { BasicPackageImpl.Literals.PART_SASH_CONTAINER, BasicPackageImpl.Literals.PART_STACK,
+ BasicPackageImpl.Literals.PART, AdvancedPackageImpl.Literals.AREA,
+ AdvancedPackageImpl.Literals.PLACEHOLDER });
+ pickList.setSelection(new StructuredSelection(BasicPackageImpl.Literals.PART));
+
+ folder.setSelection(0);
+
+ return folder;
+ }
+
+ @Override
+ public IObservableList<?> getChildList(Object element) {
+ return null;
+ }
+
+ protected void handleAddChild(EClass eClass) {
+ final EObject eObject = EcoreUtil.create(eClass);
+ addToModel(eObject);
+ }
+
+ private void addToModel(EObject eObject) {
+ setElementId(eObject);
+
+ final Command cmd = AddCommand.create(getEditingDomain(), getMaster().getValue(),
+ UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN, eObject);
+
+ if (cmd.canExecute()) {
+ getEditingDomain().getCommandStack().execute(cmd);
+ getEditor().setSelection(eObject);
+ }
+ }
+
+ protected void handleImportChild(EClass eClass, String hint) {
+
+ if (eClass == BasicPackageImpl.Literals.PART) {
+ final ModelImportWizard wizard = new ModelImportWizard(MPart.class, this, hint, resourcePool);
+ final WizardDialog wizardDialog = new WizardDialog(shell, wizard);
+ if (wizardDialog.open() == Window.OK) {
+ final MPart[] parts = (MPart[]) wizard.getElements(MPart.class);
+ for (final MPart part : parts) {
+ addToModel((EObject) part);
+ }
+ }
+ }
+ }
+
+ @Override
+ public List<Action> getActions(Object element) {
+ final ArrayList<Action> l = new ArrayList<>(super.getActions(element));
+ l.addAll(actions);
+ return l;
+ }
+
+ @Override
+ public List<Action> getActionsImport(Object element) {
+ final ArrayList<Action> l = new ArrayList<>(super.getActionsImport(element));
+ l.addAll(actionsImport);
+ return l;
+ }
+} \ No newline at end of file

Back to the top