diff options
15 files changed, 591 insertions, 412 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 e4991d9d..e8355836 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 @@ -623,4 +623,5 @@ public class Messages { public String VWindowSharedElementsEditor_Area; public String ModelEditor_ExtractFragment; public String ModelEditor_ExtractFragment_NoParentId; + public String KeyBindingEditor_SequenceLowercase; }
\ No newline at end of file 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 8ac1069a..34ecbf8b 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 @@ -623,4 +623,5 @@ Special_UnknownElement=(unknown model element) Special_UnknownElement_Detail= Use an extension point! VWindowSharedElementsEditor_Area=Area ModelEditor_ExtractFragment=Extract into a fragment -ModelEditor_ExtractFragment_NoParentId=Can not extract because parent container has no id. \nAdd an id and try again.
\ No newline at end of file +ModelEditor_ExtractFragment_NoParentId=Can not extract because parent container has no id. \nAdd an id and try again. +KeyBindingEditor_SequenceLowercase=Key sequences should be specified in uppercase characters
\ 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/KeyBindingEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/KeyBindingEditor.java index 88532de6..9337dd64 100644 --- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/KeyBindingEditor.java +++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/KeyBindingEditor.java @@ -359,6 +359,10 @@ public class KeyBindingEditor extends AbstractComponentEditor { if (keySequence.isEmpty()) { return new Status(statusCode, "org.eclipse.e4.tools.emf.ui", Messages.KeyBindingEditor_SequenceEmpty); //$NON-NLS-1$ } + if (!value.toString().toUpperCase().equals(value.toString())) { + return new Status(IStatus.ERROR, "org.eclipse.e4.tools.emf.ui", Messages.KeyBindingEditor_SequenceLowercase); //$NON-NLS-1$ + } + return Status.OK_STATUS; } catch (Exception e) { return new Status(statusCode, "org.eclipse.e4.tools.emf.ui", e.getMessage(), e); //$NON-NLS-1$ diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/MenuContributionEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/MenuContributionEditor.java index e0e8e86f..d14fca00 100644 --- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/MenuContributionEditor.java +++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/MenuContributionEditor.java @@ -7,10 +7,13 @@ * * Contributors: * Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation + * Marco Descher <marco@descher.at> - https://bugs.eclipse.org/397650 ******************************************************************************/ package org.eclipse.e4.tools.emf.ui.internal.common.component; +import java.util.ArrayList; 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; @@ -37,6 +40,7 @@ import org.eclipse.emf.ecore.EObject; 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.WidgetProperties; import org.eclipse.jface.databinding.viewers.ObservableListContentProvider; @@ -66,6 +70,7 @@ public class MenuContributionEditor extends AbstractComponentEditor { private IListProperty ELEMENT_CONTAINER__CHILDREN = EMFProperties.list(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN); private EStackLayout stackLayout; + private List<Action> actions = new ArrayList<Action>(); private static class Struct { private final String label; @@ -84,6 +89,34 @@ public class MenuContributionEditor extends AbstractComponentEditor { super(); } + @PostConstruct + void init() { + actions.add(new Action(Messages.MenuEditor_AddHandledMenuItem, createImageDescriptor(ResourceProvider.IMG_HandledMenuItem)) { + @Override + public void run() { + handleAdd(MenuPackageImpl.Literals.HANDLED_MENU_ITEM, false); + } + }); + actions.add(new Action(Messages.MenuEditor_AddMenu, createImageDescriptor(ResourceProvider.IMG_Menu)) { + @Override + public void run() { + handleAdd(MenuPackageImpl.Literals.MENU, false); + } + }); + actions.add(new Action(Messages.MenuEditor_AddDirectMenuItem, createImageDescriptor(ResourceProvider.IMG_DirectMenuItem)) { + @Override + public void run() { + handleAdd(MenuPackageImpl.Literals.DIRECT_MENU_ITEM, false); + } + }); + actions.add(new Action(Messages.MenuEditor_AddSeparator, createImageDescriptor(ResourceProvider.IMG_MenuSeparator)) { + @Override + public void run() { + handleAdd(MenuPackageImpl.Literals.MENU_SEPARATOR, true); + } + }); + } + @Override public Image getImage(Object element, Display display) { if (element instanceof MUIElement) { @@ -327,4 +360,24 @@ public class MenuContributionEditor extends AbstractComponentEditor { public FeaturePath[] getLabelProperties() { return new FeaturePath[] { FeaturePath.fromList(UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED) }; } + + protected void handleAdd(EClass eClass, boolean separator) { + MMenuElement eObject = (MMenuElement) EcoreUtil.create(eClass); + setElementId(eObject); + Command cmd = AddCommand.create(getEditingDomain(), getMaster().getValue(), UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN, eObject); + + if (cmd.canExecute()) { + getEditingDomain().getCommandStack().execute(cmd); + if (!separator) { + getEditor().setSelection(eObject); + } + } + } + + @Override + public List<Action> getActions(Object element) { + ArrayList<Action> l = new ArrayList<Action>(super.getActions(element)); + l.addAll(actions); + return l; + } } diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ModelFragmentsEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ModelFragmentsEditor.java index 9984e587..f4bd0881 100644 --- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ModelFragmentsEditor.java +++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ModelFragmentsEditor.java @@ -35,7 +35,9 @@ import org.eclipse.emf.databinding.EMFProperties; import org.eclipse.emf.databinding.IEMFListProperty; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EClassifier; +import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EPackage; +import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.emf.edit.command.AddCommand; import org.eclipse.emf.edit.command.MoveCommand; import org.eclipse.emf.edit.command.RemoveCommand; @@ -117,8 +119,7 @@ public class ModelFragmentsEditor extends AbstractComponentEditor { { Composite fragCompo = new Composite(parent, SWT.NONE); - fragCompo.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false, 2, 1)); - fragCompo.setLayout(new GridLayout()); + fragCompo.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true, 3, 1)); GridLayout fragCompoLayout = new GridLayout(1, false); fragCompoLayout.marginLeft = 0; fragCompoLayout.marginRight = 0; @@ -129,8 +130,7 @@ public class ModelFragmentsEditor extends AbstractComponentEditor { final TableViewer viewer = new TableViewer(fragCompo); viewer.setContentProvider(new ObservableListContentProvider()); viewer.setLabelProvider(new ComponentLabelProvider(getEditor(), Messages)); - GridData gd = new GridData(GridData.FILL_HORIZONTAL); - gd.heightHint = 200; + GridData gd = new GridData(GridData.FILL_BOTH); viewer.getControl().setLayoutData(gd); IEMFListProperty prop = EMFProperties.list(FragmentPackageImpl.Literals.MODEL_FRAGMENTS__FRAGMENTS); @@ -138,7 +138,7 @@ public class ModelFragmentsEditor extends AbstractComponentEditor { Composite buttonComp = new Composite(parent, SWT.NONE); buttonComp.setLayoutData(new GridData(GridData.FILL, GridData.END, false, false)); - GridLayout gl = new GridLayout(); + GridLayout gl = new GridLayout(4, false); gl.marginLeft = 0; gl.marginRight = 0; gl.marginWidth = 0; @@ -250,7 +250,7 @@ public class ModelFragmentsEditor extends AbstractComponentEditor { ControlFactory.createXMIId(parent, this); } - ViewerElement tableElement = ViewerElement.create(context, parent, FragmentPackageImpl.Literals.MODEL_FRAGMENTS__IMPORTS, this); + final ViewerElement tableElement = ViewerElement.create(context, parent, this); tableElement.getViewer().setContentProvider(new ObservableListContentProvider()); tableElement.getViewer().setLabelProvider(new ComponentLabelProvider(getEditor(), Messages)); @@ -271,6 +271,80 @@ public class ModelFragmentsEditor extends AbstractComponentEditor { } }); + tableElement.getButtonAdd().addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + EClass eClass = ((FeatureClass) ((IStructuredSelection) tableElement.getDropDown().getSelection()).getFirstElement()).eClass; + EObject eObject = EcoreUtil.create(eClass); + + Command cmd = AddCommand.create(getEditingDomain(), getMaster().getValue(), FragmentPackageImpl.Literals.MODEL_FRAGMENTS__IMPORTS, eObject); + + if (cmd.canExecute()) { + getEditingDomain().getCommandStack().execute(cmd); + getEditor().setSelection(eObject); + } + } + }); + + tableElement.getButtonRemove().addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + if (!tableElement.getViewer().getSelection().isEmpty()) { + List<?> elements = ((IStructuredSelection) tableElement.getViewer().getSelection()).toList(); + + Command cmd = RemoveCommand.create(getEditingDomain(), getMaster().getValue(), FragmentPackageImpl.Literals.MODEL_FRAGMENTS__IMPORTS, elements); + if (cmd.canExecute()) { + getEditingDomain().getCommandStack().execute(cmd); + } + } + } + }); + + tableElement.getButtonDown().addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + if (!tableElement.getViewer().getSelection().isEmpty()) { + IStructuredSelection s = (IStructuredSelection) tableElement.getViewer().getSelection(); + if (s.size() == 1) { + Object obj = s.getFirstElement(); + MModelFragments container = (MModelFragments) getMaster().getValue(); + int idx = container.getImports().indexOf(obj) + 1; + if (idx < container.getImports().size()) { + Command cmd = MoveCommand.create(getEditingDomain(), getMaster().getValue(), FragmentPackageImpl.Literals.MODEL_FRAGMENTS__IMPORTS, obj, idx); + + if (cmd.canExecute()) { + getEditingDomain().getCommandStack().execute(cmd); + tableElement.getViewer().setSelection(new StructuredSelection(obj)); + } + } + + } + } + } + }); + + tableElement.getButtonUp().addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + if (!tableElement.getViewer().getSelection().isEmpty()) { + IStructuredSelection s = (IStructuredSelection) tableElement.getViewer().getSelection(); + if (s.size() == 1) { + Object obj = s.getFirstElement(); + MModelFragments container = (MModelFragments) getMaster().getValue(); + int idx = container.getImports().indexOf(obj) - 1; + if (idx >= 0) { + Command cmd = MoveCommand.create(getEditingDomain(), getMaster().getValue(), FragmentPackageImpl.Literals.MODEL_FRAGMENTS__IMPORTS, obj, idx); + + if (cmd.canExecute()) { + getEditingDomain().getCommandStack().execute(cmd); + tableElement.getViewer().setSelection(new StructuredSelection(obj)); + } + } + } + } + } + }); + List<FeatureClass> list = new ArrayList<FeatureClass>(); Util.addClasses(ApplicationPackageImpl.eINSTANCE, list); list.addAll(getEditor().getFeatureClasses(FragmentPackageImpl.Literals.MODEL_FRAGMENT, FragmentPackageImpl.Literals.MODEL_FRAGMENTS__IMPORTS)); diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/StringModelFragment.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/StringModelFragment.java index 7215a536..0ec25be9 100644 --- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/StringModelFragment.java +++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/StringModelFragment.java @@ -15,6 +15,7 @@ import java.util.List; import javax.inject.Inject; import org.eclipse.core.databinding.observable.list.IObservableList; import org.eclipse.core.databinding.property.list.IListProperty; +import org.eclipse.e4.core.contexts.IEclipseContext; import org.eclipse.e4.tools.emf.ui.common.IEditorFeature.FeatureClass; import org.eclipse.e4.tools.emf.ui.common.Util; import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor; @@ -23,6 +24,7 @@ import org.eclipse.e4.tools.emf.ui.internal.common.ComponentLabelProvider; import org.eclipse.e4.tools.emf.ui.internal.common.component.ControlFactory.TextPasteHandler; import org.eclipse.e4.tools.emf.ui.internal.common.component.dialogs.FeatureSelectionDialog; import org.eclipse.e4.tools.emf.ui.internal.common.component.dialogs.FindParentReferenceElementDialog; +import org.eclipse.e4.tools.emf.ui.internal.common.uistructure.ViewerElement; import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl; import org.eclipse.e4.ui.model.fragment.MModelFragment; import org.eclipse.e4.ui.model.fragment.MStringModelFragment; @@ -42,11 +44,9 @@ import org.eclipse.jface.databinding.swt.IWidgetValueProperty; import org.eclipse.jface.databinding.swt.WidgetProperties; import org.eclipse.jface.databinding.viewers.ObservableListContentProvider; import org.eclipse.jface.viewers.ArrayContentProvider; -import org.eclipse.jface.viewers.ComboViewer; 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.Viewer; import org.eclipse.jface.viewers.ViewerComparator; import org.eclipse.swt.SWT; @@ -70,6 +70,9 @@ public class StringModelFragment extends AbstractComponentEditor { private IListProperty MODEL_FRAGMENT__ELEMENTS = EMFProperties.list(FragmentPackageImpl.Literals.MODEL_FRAGMENT__ELEMENTS); @Inject + IEclipseContext eclipseContext; + + @Inject public StringModelFragment() { super(); } @@ -188,94 +191,40 @@ public class StringModelFragment extends AbstractComponentEditor { // ------------------------------------------------------------ { - Label l = new Label(parent, SWT.NONE); - l.setText(Messages.StringModelFragment_Elements); - l.setLayoutData(new GridData(GridData.END, GridData.BEGINNING, false, false)); - final TableViewer viewer = new TableViewer(parent); - viewer.setContentProvider(new ObservableListContentProvider()); - viewer.setLabelProvider(new ComponentLabelProvider(getEditor(), Messages)); - GridData gd = new GridData(GridData.FILL_HORIZONTAL); - gd.heightHint = 300; - viewer.getControl().setLayoutData(gd); + final ViewerElement tableElement = ViewerElement.create(eclipseContext, parent, this); - IEMFListProperty prop = EMFProperties.list(FragmentPackageImpl.Literals.MODEL_FRAGMENT__ELEMENTS); - viewer.setInput(prop.observeDetail(getMaster())); + tableElement.getViewer().setContentProvider(new ObservableListContentProvider()); + tableElement.getViewer().setLabelProvider(new ComponentLabelProvider(getEditor(), Messages)); - Composite buttonComp = new Composite(parent, SWT.NONE); - buttonComp.setLayoutData(new GridData(GridData.FILL, GridData.END, false, false)); - GridLayout gl = new GridLayout(2, false); - gl.marginLeft = 0; - gl.marginRight = 0; - gl.marginWidth = 0; - gl.marginHeight = 0; - buttonComp.setLayout(gl); - - Button b = new Button(buttonComp, SWT.PUSH | SWT.FLAT); - b.setText(Messages.ModelTooling_Common_Up); - b.setImage(createImage(ResourceProvider.IMG_Obj16_arrow_up)); - b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 2, 1)); - b.addSelectionListener(new SelectionAdapter() { + tableElement.getDropDown().setContentProvider(new ArrayContentProvider()); + tableElement.getDropDown().setLabelProvider(new LabelProvider() { @Override - public void widgetSelected(SelectionEvent e) { - if (!viewer.getSelection().isEmpty()) { - IStructuredSelection s = (IStructuredSelection) viewer.getSelection(); - if (s.size() == 1) { - Object obj = s.getFirstElement(); - MModelFragment container = (MModelFragment) getMaster().getValue(); - int idx = container.getElements().indexOf(obj) - 1; - if (idx >= 0) { - Command cmd = MoveCommand.create(getEditingDomain(), getMaster().getValue(), FragmentPackageImpl.Literals.MODEL_FRAGMENT__ELEMENTS, obj, idx); - - if (cmd.canExecute()) { - getEditingDomain().getCommandStack().execute(cmd); - viewer.setSelection(new StructuredSelection(obj)); - } - } - - } - } + public String getText(Object element) { + FeatureClass eclass = (FeatureClass) element; + return eclass.label; } }); - b = new Button(buttonComp, SWT.PUSH | SWT.FLAT); - b.setText(Messages.ModelTooling_Common_Down); - b.setImage(createImage(ResourceProvider.IMG_Obj16_arrow_down)); - b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 2, 1)); - b.addSelectionListener(new SelectionAdapter() { + tableElement.getDropDown().setComparator(new ViewerComparator() { @Override - public void widgetSelected(SelectionEvent e) { - if (!viewer.getSelection().isEmpty()) { - IStructuredSelection s = (IStructuredSelection) viewer.getSelection(); - if (s.size() == 1) { - Object obj = s.getFirstElement(); - MModelFragment container = (MModelFragment) getMaster().getValue(); - int idx = container.getElements().indexOf(obj) + 1; - if (idx < container.getElements().size()) { - Command cmd = MoveCommand.create(getEditingDomain(), getMaster().getValue(), FragmentPackageImpl.Literals.MODEL_FRAGMENT__ELEMENTS, obj, idx); - - if (cmd.canExecute()) { - getEditingDomain().getCommandStack().execute(cmd); - viewer.setSelection(new StructuredSelection(obj)); - } - } - - } - } + public int compare(Viewer viewer, Object e1, Object e2) { + FeatureClass eClass1 = (FeatureClass) e1; + FeatureClass eClass2 = (FeatureClass) e2; + return eClass1.label.compareTo(eClass2.label); } }); - final ComboViewer childrenDropDown = new ComboViewer(buttonComp); - childrenDropDown.getControl().setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false)); - childrenDropDown.setContentProvider(new ArrayContentProvider()); - childrenDropDown.setLabelProvider(new LabelProvider() { + tableElement.getDropDown().setContentProvider(new ArrayContentProvider()); + tableElement.getDropDown().setLabelProvider(new LabelProvider() { @Override public String getText(Object element) { FeatureClass eclass = (FeatureClass) element; return eclass.label; } }); - childrenDropDown.setComparator(new ViewerComparator() { + + tableElement.getDropDown().setComparator(new ViewerComparator() { @Override public int compare(Viewer viewer, Object e1, Object e2) { FeatureClass eClass1 = (FeatureClass) e1; @@ -284,21 +233,10 @@ public class StringModelFragment extends AbstractComponentEditor { } }); - List<FeatureClass> list = new ArrayList<FeatureClass>(); - Util.addClasses(ApplicationPackageImpl.eINSTANCE, list); - list.addAll(getEditor().getFeatureClasses(FragmentPackageImpl.Literals.MODEL_FRAGMENT, FragmentPackageImpl.Literals.MODEL_FRAGMENT__ELEMENTS)); - - childrenDropDown.setInput(list); - childrenDropDown.getCombo().select(0); - - b = new Button(buttonComp, SWT.PUSH | SWT.FLAT); - b.setImage(createImage(ResourceProvider.IMG_Obj16_table_add)); - b.setText(Messages.ModelTooling_Common_AddEllipsis); - b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false)); - b.addSelectionListener(new SelectionAdapter() { + tableElement.getButtonAdd().addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { - EClass eClass = ((FeatureClass) ((IStructuredSelection) childrenDropDown.getSelection()).getFirstElement()).eClass; + EClass eClass = ((FeatureClass) ((IStructuredSelection) tableElement.getDropDown().getSelection()).getFirstElement()).eClass; EObject eObject = EcoreUtil.create(eClass); setElementId(eObject); Command cmd = AddCommand.create(getEditingDomain(), getMaster().getValue(), FragmentPackageImpl.Literals.MODEL_FRAGMENT__ELEMENTS, eObject); @@ -310,15 +248,11 @@ public class StringModelFragment extends AbstractComponentEditor { } }); - b = new Button(buttonComp, SWT.PUSH | SWT.FLAT); - b.setText(Messages.ModelTooling_Common_Remove); - b.setImage(createImage(ResourceProvider.IMG_Obj16_table_delete)); - b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 2, 1)); - b.addSelectionListener(new SelectionAdapter() { + tableElement.getButtonRemove().addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { - if (!viewer.getSelection().isEmpty()) { - List<?> elements = ((IStructuredSelection) viewer.getSelection()).toList(); + if (!tableElement.getViewer().getSelection().isEmpty()) { + List<?> elements = ((IStructuredSelection) tableElement.getViewer().getSelection()).toList(); Command cmd = RemoveCommand.create(getEditingDomain(), getMaster().getValue(), FragmentPackageImpl.Literals.MODEL_FRAGMENT__ELEMENTS, elements); if (cmd.canExecute()) { @@ -327,6 +261,61 @@ public class StringModelFragment extends AbstractComponentEditor { } } }); + + tableElement.getButtonDown().addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + if (!tableElement.getViewer().getSelection().isEmpty()) { + IStructuredSelection s = (IStructuredSelection) tableElement.getViewer().getSelection(); + if (s.size() == 1) { + Object obj = s.getFirstElement(); + MModelFragment container = (MModelFragment) getMaster().getValue(); + int idx = container.getElements().indexOf(obj) + 1; + if (idx < container.getElements().size()) { + Command cmd = MoveCommand.create(getEditingDomain(), getMaster().getValue(), FragmentPackageImpl.Literals.MODEL_FRAGMENT__ELEMENTS, obj, idx); + + if (cmd.canExecute()) { + getEditingDomain().getCommandStack().execute(cmd); + tableElement.getViewer().setSelection(new StructuredSelection(obj)); + } + } + } + } + } + }); + + tableElement.getButtonUp().addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + if (!tableElement.getViewer().getSelection().isEmpty()) { + IStructuredSelection s = (IStructuredSelection) tableElement.getViewer().getSelection(); + if (s.size() == 1) { + Object obj = s.getFirstElement(); + MModelFragment container = (MModelFragment) getMaster().getValue(); + int idx = container.getElements().indexOf(obj) - 1; + if (idx >= 0) { + Command cmd = MoveCommand.create(getEditingDomain(), getMaster().getValue(), FragmentPackageImpl.Literals.MODEL_FRAGMENT__ELEMENTS, obj, idx); + + if (cmd.canExecute()) { + getEditingDomain().getCommandStack().execute(cmd); + tableElement.getViewer().setSelection(new StructuredSelection(obj)); + } + } + } + } + } + }); + + List<FeatureClass> list = new ArrayList<FeatureClass>(); + Util.addClasses(ApplicationPackageImpl.eINSTANCE, list); + list.addAll(getEditor().getFeatureClasses(FragmentPackageImpl.Literals.MODEL_FRAGMENT, FragmentPackageImpl.Literals.MODEL_FRAGMENT__ELEMENTS)); + + tableElement.getDropDown().setInput(list); + tableElement.getDropDown().getCombo().select(0); + + IEMFListProperty prop = EMFProperties.list(FragmentPackageImpl.Literals.MODEL_FRAGMENT__ELEMENTS); + tableElement.getViewer().setInput(prop.observeDetail(getMaster())); + } folder.setSelection(0); diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ToolBarContributionEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ToolBarContributionEditor.java index 87980782..2c16a0a9 100644 --- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ToolBarContributionEditor.java +++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ToolBarContributionEditor.java @@ -7,10 +7,13 @@ * * Contributors: * Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation + * Marco Descher <marco@descher.at> - https://bugs.eclipse.org/397650 ******************************************************************************/ package org.eclipse.e4.tools.emf.ui.internal.common.component; +import java.util.ArrayList; 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; @@ -40,6 +43,7 @@ import org.eclipse.emf.ecore.EObject; 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.WidgetProperties; import org.eclipse.jface.databinding.viewers.ObservableListContentProvider; @@ -70,6 +74,7 @@ public class ToolBarContributionEditor extends AbstractComponentEditor { private IListProperty ELEMENT_CONTAINER__CHILDREN = EMFProperties.list(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN); private EStackLayout stackLayout; + private List<Action> actions = new ArrayList<Action>(); @Inject @Optional @@ -92,6 +97,34 @@ public class ToolBarContributionEditor extends AbstractComponentEditor { super(); } + @PostConstruct + void init() { + actions.add(new Action(Messages.ToolBarEditor_AddHandledToolItem, createImageDescriptor(ResourceProvider.IMG_HandledToolItem)) { + @Override + public void run() { + handleAddChild(MenuPackageImpl.Literals.HANDLED_TOOL_ITEM, false); + } + }); + actions.add(new Action(Messages.ToolBarEditor_AddDirectToolItem, createImageDescriptor(ResourceProvider.IMG_DirectToolItem)) { + @Override + public void run() { + handleAddChild(MenuPackageImpl.Literals.DIRECT_TOOL_ITEM, false); + } + }); + actions.add(new Action(Messages.ToolBarEditor_AddToolControl, createImageDescriptor(ResourceProvider.IMG_ToolControl)) { + @Override + public void run() { + handleAddChild(MenuPackageImpl.Literals.TOOL_CONTROL, false); + } + }); + actions.add(new Action(Messages.ToolBarEditor_AddToolBarSeparator, createImageDescriptor(ResourceProvider.IMG_ToolBarSeparator)) { + @Override + public void run() { + handleAddChild(MenuPackageImpl.Literals.TOOL_BAR_SEPARATOR, true); + } + }); + } + @Override public Image getImage(Object element, Display display) { if (element instanceof MUIElement) { @@ -353,4 +386,25 @@ public class ToolBarContributionEditor extends AbstractComponentEditor { public FeaturePath[] getLabelProperties() { return new FeaturePath[] { FeaturePath.fromList(UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED) }; } + + @Override + public List<Action> getActions(Object element) { + ArrayList<Action> l = new ArrayList<Action>(super.getActions(element)); + l.addAll(actions); + return l; + } + + protected void handleAddChild(EClass eClass, boolean separator) { + MToolBarElement eObject = (MToolBarElement) EcoreUtil.create(eClass); + setElementId(eObject); + + Command cmd = AddCommand.create(getEditingDomain(), getMaster().getValue(), UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN, eObject); + + if (cmd.canExecute()) { + getEditingDomain().getCommandStack().execute(cmd); + if (!separator) { + getEditor().setSelection(eObject); + } + } + } } diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/TrimContributionEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/TrimContributionEditor.java index ab9254ff..5c56b500 100644 --- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/TrimContributionEditor.java +++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/TrimContributionEditor.java @@ -7,10 +7,13 @@ * * Contributors: * Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation + * Marco Descher <marco@descher.at> - https://bugs.eclipse.org/397650 ******************************************************************************/ package org.eclipse.e4.tools.emf.ui.internal.common.component; +import java.util.ArrayList; 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; @@ -39,6 +42,7 @@ import org.eclipse.emf.ecore.EObject; 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.WidgetProperties; import org.eclipse.jface.databinding.viewers.ObservableListContentProvider; @@ -69,6 +73,7 @@ public class TrimContributionEditor extends AbstractComponentEditor { private IListProperty ELEMENT_CONTAINER__CHILDREN = EMFProperties.list(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN); private EStackLayout stackLayout; + private List<Action> actions = new ArrayList<Action>(); @Inject @Optional @@ -79,6 +84,22 @@ public class TrimContributionEditor extends AbstractComponentEditor { super(); } + @PostConstruct + void init() { + actions.add(new Action(Messages.TrimBarEditor_AddToolBar, createImageDescriptor(ResourceProvider.IMG_ToolBar)) { + @Override + public void run() { + handleAddChild(MenuPackageImpl.Literals.TOOL_BAR); + } + }); + actions.add(new Action(Messages.TrimBarEditor_AddToolControl, createImageDescriptor(ResourceProvider.IMG_ToolControl)) { + @Override + public void run() { + handleAddChild(MenuPackageImpl.Literals.TOOL_CONTROL); + } + }); + } + @Override public Image getImage(Object element, Display display) { if (element instanceof MUIElement) { @@ -329,4 +350,23 @@ public class TrimContributionEditor extends AbstractComponentEditor { public FeaturePath[] getLabelProperties() { return new FeaturePath[] { FeaturePath.fromList(UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED) }; } + + protected void handleAddChild(EClass eClass) { + EObject toolbar = EcoreUtil.create(eClass); + setElementId(toolbar); + + Command cmd = AddCommand.create(getEditingDomain(), getMaster().getValue(), UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN, toolbar); + + if (cmd.canExecute()) { + getEditingDomain().getCommandStack().execute(cmd); + getEditor().setSelection(toolbar); + } + } + + @Override + public List<Action> getActions(Object element) { + ArrayList<Action> l = new ArrayList<Action>(super.getActions(element)); + l.addAll(actions); + return l; + } } diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VMenuEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VMenuEditor.java index 77ee666c..2f4fc4d4 100644 --- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VMenuEditor.java +++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VMenuEditor.java @@ -13,13 +13,15 @@ package org.eclipse.e4.tools.emf.ui.internal.common.component.virtual; import java.util.ArrayList; 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.core.contexts.IEclipseContext; 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.ui.model.application.commands.impl.CommandsPackageImpl; +import org.eclipse.e4.tools.emf.ui.internal.common.uistructure.ViewerElement; import org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl; import org.eclipse.e4.ui.model.application.ui.menu.MMenu; import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuFactoryImpl; @@ -36,30 +38,29 @@ import org.eclipse.emf.edit.command.RemoveCommand; import org.eclipse.jface.action.Action; import org.eclipse.jface.databinding.viewers.ObservableListContentProvider; import org.eclipse.jface.viewers.ArrayContentProvider; -import org.eclipse.jface.viewers.ComboViewer; 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.StructuredViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CTabFolder; import org.eclipse.swt.custom.CTabItem; 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.Display; public class VMenuEditor extends AbstractComponentEditor { private Composite composite; private EMFDataBindingContext context; - private TableViewer viewer; + private StructuredViewer viewer; private List<Action> actions = new ArrayList<Action>(); private EStructuralFeature feature; + @Inject + IEclipseContext eclipseContext; + public static final String VIEW_MENU_TAG = "ViewMenu"; //$NON-NLS-1$ enum Types { @@ -134,27 +135,12 @@ public class VMenuEditor extends AbstractComponentEditor { parent = createScrollableContainer(folder); item.setControl(parent.getParent()); - viewer = new TableViewer(parent); - ObservableListContentProvider cp = new ObservableListContentProvider(); - viewer.setContentProvider(cp); - GridData gd = new GridData(GridData.FILL_BOTH); - viewer.getControl().setLayoutData(gd); + final ViewerElement tableElement = ViewerElement.create(eclipseContext, parent, this); + viewer = tableElement.getViewer(); + viewer.setContentProvider(new ObservableListContentProvider()); viewer.setLabelProvider(new ComponentLabelProvider(getEditor(), Messages)); - Composite buttonComp = new Composite(parent, SWT.NONE); - buttonComp.setLayoutData(new GridData(GridData.FILL, GridData.END, false, false)); - GridLayout gl = new GridLayout(2, false); - gl.marginLeft = 0; - gl.marginRight = 0; - gl.marginWidth = 0; - gl.marginHeight = 0; - buttonComp.setLayout(gl); - - Button b = new Button(buttonComp, SWT.PUSH | SWT.FLAT); - b.setText(Messages.ModelTooling_Common_Up); - b.setImage(createImage(ResourceProvider.IMG_Obj16_arrow_up)); - b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 2, 1)); - b.addSelectionListener(new SelectionAdapter() { + tableElement.getButtonUp().addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (!viewer.getSelection().isEmpty()) { @@ -177,11 +163,7 @@ public class VMenuEditor extends AbstractComponentEditor { } }); - b = new Button(buttonComp, SWT.PUSH | SWT.FLAT); - b.setText(Messages.ModelTooling_Common_Down); - b.setImage(createImage(ResourceProvider.IMG_Obj16_arrow_down)); - b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 2, 1)); - b.addSelectionListener(new SelectionAdapter() { + tableElement.getButtonDown().addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (!viewer.getSelection().isEmpty()) { @@ -192,7 +174,7 @@ public class VMenuEditor extends AbstractComponentEditor { List<?> list = (List<?>) container.eGet(feature); int idx = list.indexOf(obj) + 1; if (idx < list.size()) { - Command cmd = MoveCommand.create(getEditingDomain(), getMaster().getValue(), CommandsPackageImpl.Literals.HANDLER_CONTAINER__HANDLERS, obj, idx); + Command cmd = MoveCommand.create(getEditingDomain(), getMaster().getValue(), feature, obj, idx); if (cmd.canExecute()) { getEditingDomain().getCommandStack().execute(cmd); @@ -205,10 +187,8 @@ public class VMenuEditor extends AbstractComponentEditor { } }); - final ComboViewer childrenDropDown = new ComboViewer(buttonComp); - childrenDropDown.getControl().setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false)); - childrenDropDown.setContentProvider(new ArrayContentProvider()); - childrenDropDown.setLabelProvider(new LabelProvider() { + tableElement.getDropDown().setContentProvider(new ArrayContentProvider()); + tableElement.getDropDown().setLabelProvider(new LabelProvider() { @Override public String getText(Object element) { if (element == Types.MENU) { @@ -219,17 +199,13 @@ public class VMenuEditor extends AbstractComponentEditor { return Messages.MenuEditor_Label_ViewMenu; } }); - childrenDropDown.setInput(Types.values()); - childrenDropDown.setSelection(new StructuredSelection(Types.MENU)); - - b = new Button(buttonComp, SWT.PUSH | SWT.FLAT); - b.setImage(createImage(ResourceProvider.IMG_Obj16_table_add)); - b.setText(Messages.ModelTooling_Common_AddEllipsis); - b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, false, false)); - b.addSelectionListener(new SelectionAdapter() { + tableElement.getDropDown().setInput(Types.values()); + tableElement.getDropDown().setSelection(new StructuredSelection(Types.MENU)); + + tableElement.getButtonAdd().addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { - Types t = (Types) ((IStructuredSelection) childrenDropDown.getSelection()).getFirstElement(); + Types t = (Types) ((IStructuredSelection) tableElement.getDropDown().getSelection()).getFirstElement(); if (t == Types.MENU) { handleAdd(MenuPackageImpl.Literals.MENU); } else if (t == Types.POPUP_MENU) { @@ -240,11 +216,7 @@ public class VMenuEditor extends AbstractComponentEditor { } }); - b = new Button(buttonComp, SWT.PUSH | SWT.FLAT); - b.setText(Messages.ModelTooling_Common_Remove); - b.setImage(createImage(ResourceProvider.IMG_Obj16_table_delete)); - b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 2, 1)); - b.addSelectionListener(new SelectionAdapter() { + tableElement.getButtonRemove().addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (!viewer.getSelection().isEmpty()) { diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VModelFragmentsEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VModelFragmentsEditor.java index 516e7f2d..d5aa32a9 100644 --- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VModelFragmentsEditor.java +++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VModelFragmentsEditor.java @@ -115,11 +115,12 @@ public class VModelFragmentsEditor extends AbstractComponentEditor { viewer.setLabelProvider(new ComponentLabelProvider(getEditor(), Messages)); GridData gd = new GridData(GridData.FILL_BOTH); + gd.horizontalSpan = 3; viewer.getControl().setLayoutData(gd); Composite buttonComp = new Composite(parent, SWT.NONE); buttonComp.setLayoutData(new GridData(GridData.FILL, GridData.END, false, false)); - GridLayout gl = new GridLayout(2, false); + GridLayout gl = new GridLayout(4, false); gl.marginLeft = 0; gl.marginRight = 0; gl.marginWidth = 0; @@ -129,7 +130,7 @@ public class VModelFragmentsEditor extends AbstractComponentEditor { Button b = new Button(buttonComp, SWT.PUSH | SWT.FLAT); b.setText(Messages.ModelTooling_Common_Up); b.setImage(createImage(ResourceProvider.IMG_Obj16_arrow_up)); - b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 2, 1)); + b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 1, 1)); b.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { @@ -156,7 +157,7 @@ public class VModelFragmentsEditor extends AbstractComponentEditor { b = new Button(buttonComp, SWT.PUSH | SWT.FLAT); b.setText(Messages.ModelTooling_Common_Down); b.setImage(createImage(ResourceProvider.IMG_Obj16_arrow_down)); - b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 2, 1)); + b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 1, 1)); b.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { @@ -197,7 +198,7 @@ public class VModelFragmentsEditor extends AbstractComponentEditor { b = new Button(buttonComp, SWT.PUSH | SWT.FLAT); b.setText(Messages.ModelTooling_Common_Remove); b.setImage(createImage(ResourceProvider.IMG_Obj16_table_delete)); - b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 2, 1)); + b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 1, 1)); b.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VModelImportsEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VModelImportsEditor.java index 16863519..482c9e14 100644 --- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VModelImportsEditor.java +++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VModelImportsEditor.java @@ -23,16 +23,28 @@ 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.common.uistructure.ViewerElement; import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl; +import org.eclipse.e4.ui.model.fragment.MModelFragments; import org.eclipse.e4.ui.model.fragment.impl.FragmentPackageImpl; +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.emf.edit.command.MoveCommand; +import org.eclipse.emf.edit.command.RemoveCommand; import org.eclipse.jface.databinding.viewers.ObservableListContentProvider; import org.eclipse.jface.viewers.ArrayContentProvider; +import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerComparator; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CTabFolder; import org.eclipse.swt.custom.CTabItem; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; @@ -92,7 +104,7 @@ public class VModelImportsEditor extends AbstractComponentEditor { parent = createScrollableContainer(folder); item.setControl(parent.getParent()); - tableElement = ViewerElement.create(eclipseContext, parent, FragmentPackageImpl.Literals.MODEL_FRAGMENTS__IMPORTS, this); + tableElement = ViewerElement.create(eclipseContext, parent, this); tableElement.getViewer().setContentProvider(new ObservableListContentProvider()); tableElement.getViewer().setLabelProvider(new ComponentLabelProvider(getEditor(), Messages)); @@ -113,6 +125,80 @@ public class VModelImportsEditor extends AbstractComponentEditor { } }); + tableElement.getButtonAdd().addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + EClass eClass = ((FeatureClass) ((IStructuredSelection) tableElement.getDropDown().getSelection()).getFirstElement()).eClass; + EObject eObject = EcoreUtil.create(eClass); + + Command cmd = AddCommand.create(getEditingDomain(), getMaster().getValue(), FragmentPackageImpl.Literals.MODEL_FRAGMENTS__IMPORTS, eObject); + + if (cmd.canExecute()) { + getEditingDomain().getCommandStack().execute(cmd); + getEditor().setSelection(eObject); + } + } + }); + + tableElement.getButtonRemove().addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + if (!tableElement.getViewer().getSelection().isEmpty()) { + List<?> elements = ((IStructuredSelection) tableElement.getViewer().getSelection()).toList(); + + Command cmd = RemoveCommand.create(getEditingDomain(), getMaster().getValue(), FragmentPackageImpl.Literals.MODEL_FRAGMENTS__IMPORTS, elements); + if (cmd.canExecute()) { + getEditingDomain().getCommandStack().execute(cmd); + } + } + } + }); + + tableElement.getButtonDown().addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + if (!tableElement.getViewer().getSelection().isEmpty()) { + IStructuredSelection s = (IStructuredSelection) tableElement.getViewer().getSelection(); + if (s.size() == 1) { + Object obj = s.getFirstElement(); + MModelFragments container = (MModelFragments) getMaster().getValue(); + int idx = container.getImports().indexOf(obj) + 1; + if (idx < container.getImports().size()) { + Command cmd = MoveCommand.create(getEditingDomain(), getMaster().getValue(), FragmentPackageImpl.Literals.MODEL_FRAGMENTS__IMPORTS, obj, idx); + + if (cmd.canExecute()) { + getEditingDomain().getCommandStack().execute(cmd); + tableElement.getViewer().setSelection(new StructuredSelection(obj)); + } + } + + } + } + } + }); + + tableElement.getButtonUp().addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + if (!tableElement.getViewer().getSelection().isEmpty()) { + IStructuredSelection s = (IStructuredSelection) tableElement.getViewer().getSelection(); + if (s.size() == 1) { + Object obj = s.getFirstElement(); + MModelFragments container = (MModelFragments) getMaster().getValue(); + int idx = container.getImports().indexOf(obj) - 1; + if (idx >= 0) { + Command cmd = MoveCommand.create(getEditingDomain(), getMaster().getValue(), FragmentPackageImpl.Literals.MODEL_FRAGMENTS__IMPORTS, obj, idx); + + if (cmd.canExecute()) { + getEditingDomain().getCommandStack().execute(cmd); + tableElement.getViewer().setSelection(new StructuredSelection(obj)); + } + } + } + } + } + }); + List<FeatureClass> list = new ArrayList<FeatureClass>(); Util.addClasses(ApplicationPackageImpl.eINSTANCE, list); list.addAll(getEditor().getFeatureClasses(FragmentPackageImpl.Literals.MODEL_FRAGMENT, FragmentPackageImpl.Literals.MODEL_FRAGMENTS__IMPORTS)); diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowControlEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowControlEditor.java index cd6e97a2..de2ff8d4 100644 --- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowControlEditor.java +++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowControlEditor.java @@ -16,11 +16,13 @@ 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.core.contexts.IEclipseContext; 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.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.common.uistructure.ViewerElement; 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; @@ -36,28 +38,26 @@ import org.eclipse.emf.edit.command.RemoveCommand; import org.eclipse.jface.action.Action; import org.eclipse.jface.databinding.viewers.ObservableListContentProvider; import org.eclipse.jface.viewers.ArrayContentProvider; -import org.eclipse.jface.viewers.ComboViewer; 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.swt.SWT; import org.eclipse.swt.custom.CTabFolder; import org.eclipse.swt.custom.CTabItem; 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.Display; public class VWindowControlEditor extends AbstractComponentEditor { private Composite composite; private EMFDataBindingContext context; - private TableViewer viewer; private List<Action> actions = new ArrayList<Action>(); + private ViewerElement tableElement; + + @Inject + IEclipseContext eclipseContext; @Inject public VWindowControlEditor() { @@ -136,7 +136,7 @@ public class VWindowControlEditor extends AbstractComponentEditor { composite = createForm(parent, context, getMaster()); } VirtualEntry<?> o = (VirtualEntry<?>) object; - viewer.setInput(o.getList()); + tableElement.getViewer().setInput(o.getList()); getMaster().setValue(o.getOriginalParent()); return composite; } @@ -151,62 +151,57 @@ public class VWindowControlEditor extends AbstractComponentEditor { item.setControl(parent.getParent()); { - viewer = new TableViewer(parent); - ObservableListContentProvider cp = new ObservableListContentProvider(); - viewer.setContentProvider(cp); - viewer.setLabelProvider(new ComponentLabelProvider(getEditor(), Messages)); - GridData gd = new GridData(GridData.FILL_BOTH); - viewer.getControl().setLayoutData(gd); - - Composite buttonComp = new Composite(parent, SWT.NONE); - buttonComp.setLayoutData(new GridData(GridData.FILL, GridData.END, false, false)); - GridLayout gl = new GridLayout(2, false); - gl.marginLeft = 0; - gl.marginRight = 0; - gl.marginWidth = 0; - gl.marginHeight = 0; - buttonComp.setLayout(gl); - - Button b = new Button(buttonComp, SWT.PUSH | SWT.FLAT); - b.setText(Messages.ModelTooling_Common_Up); - b.setImage(createImage(ResourceProvider.IMG_Obj16_arrow_up)); - b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 2, 1)); - b.addSelectionListener(new SelectionAdapter() { + + tableElement = ViewerElement.create(eclipseContext, parent, this); + tableElement.getViewer().setContentProvider(new ObservableListContentProvider()); + tableElement.getViewer().setLabelProvider(new ComponentLabelProvider(getEditor(), Messages)); + + tableElement.getDropDown().setContentProvider(new ArrayContentProvider()); + + tableElement.getDropDown().setLabelProvider(new LabelProvider() { + @Override + public String getText(Object element) { + EClass eclass = (EClass) element; + return eclass.getName(); + } + }); + + tableElement.getButtonAdd().addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { - if (!viewer.getSelection().isEmpty()) { - IStructuredSelection s = (IStructuredSelection) viewer.getSelection(); - if (s.size() == 1) { - Object obj = s.getFirstElement(); - MElementContainer<?> container = (MElementContainer<?>) getMaster().getValue(); - int idx = container.getChildren().indexOf(obj) - 1; - if (idx >= 0) { - if (Util.moveElementByIndex(getEditingDomain(), (MUIElement) obj, getEditor().isLiveModel(), idx)) { - viewer.setSelection(new StructuredSelection(obj)); - } - } + if (!tableElement.getDropDown().getSelection().isEmpty()) { + EClass eClass = (EClass) ((IStructuredSelection) tableElement.getDropDown().getSelection()).getFirstElement(); + handleAdd(eClass); + } + } + }); + tableElement.getButtonRemove().addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + if (!tableElement.getViewer().getSelection().isEmpty()) { + List<?> elements = ((IStructuredSelection) tableElement.getViewer().getSelection()).toList(); + + Command cmd = RemoveCommand.create(getEditingDomain(), getMaster().getValue(), UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN, elements); + if (cmd.canExecute()) { + getEditingDomain().getCommandStack().execute(cmd); } } } }); - b = new Button(buttonComp, SWT.PUSH | SWT.FLAT); - b.setText(Messages.ModelTooling_Common_Down); - b.setImage(createImage(ResourceProvider.IMG_Obj16_arrow_down)); - b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 2, 1)); - b.addSelectionListener(new SelectionAdapter() { + tableElement.getButtonDown().addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { - if (!viewer.getSelection().isEmpty()) { - IStructuredSelection s = (IStructuredSelection) viewer.getSelection(); + if (!tableElement.getViewer().getSelection().isEmpty()) { + IStructuredSelection s = (IStructuredSelection) tableElement.getViewer().getSelection(); if (s.size() == 1) { Object obj = s.getFirstElement(); MElementContainer<?> container = (MElementContainer<?>) getMaster().getValue(); int idx = container.getChildren().indexOf(obj) + 1; if (idx < container.getChildren().size()) { if (Util.moveElementByIndex(getEditingDomain(), (MUIElement) obj, getEditor().isLiveModel(), idx)) { - viewer.setSelection(new StructuredSelection(obj)); + tableElement.getViewer().setSelection(new StructuredSelection(obj)); } } } @@ -214,50 +209,29 @@ public class VWindowControlEditor extends AbstractComponentEditor { } }); - final ComboViewer childrenDropDown = new ComboViewer(buttonComp); - childrenDropDown.getControl().setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false)); - childrenDropDown.setContentProvider(new ArrayContentProvider()); - childrenDropDown.setLabelProvider(new LabelProvider() { - @Override - public String getText(Object element) { - EClass eclass = (EClass) element; - return eclass.getName(); - } - }); - childrenDropDown.setInput(new EClass[] { AdvancedPackageImpl.Literals.PERSPECTIVE_STACK, BasicPackageImpl.Literals.PART_SASH_CONTAINER, BasicPackageImpl.Literals.PART_STACK, BasicPackageImpl.Literals.PART, BasicPackageImpl.Literals.INPUT_PART, AdvancedPackageImpl.Literals.AREA }); - childrenDropDown.setSelection(new StructuredSelection(AdvancedPackageImpl.Literals.PERSPECTIVE_STACK)); - - b = new Button(buttonComp, SWT.PUSH | SWT.FLAT); - b.setText(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()) { - EClass eClass = (EClass) ((IStructuredSelection) childrenDropDown.getSelection()).getFirstElement(); - handleAdd(eClass); - } - } - }); - - b = new Button(buttonComp, SWT.PUSH | SWT.FLAT); - b.setText(Messages.ModelTooling_Common_Remove); - b.setImage(createImage(ResourceProvider.IMG_Obj16_table_delete)); - b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 2, 1)); - b.addSelectionListener(new SelectionAdapter() { + tableElement.getButtonUp().addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { - if (!viewer.getSelection().isEmpty()) { - List<?> elements = ((IStructuredSelection) viewer.getSelection()).toList(); + if (!tableElement.getViewer().getSelection().isEmpty()) { + IStructuredSelection s = (IStructuredSelection) tableElement.getViewer().getSelection(); + if (s.size() == 1) { + Object obj = s.getFirstElement(); + MElementContainer<?> container = (MElementContainer<?>) getMaster().getValue(); + int idx = container.getChildren().indexOf(obj) - 1; + if (idx >= 0) { + if (Util.moveElementByIndex(getEditingDomain(), (MUIElement) obj, getEditor().isLiveModel(), idx)) { + tableElement.getViewer().setSelection(new StructuredSelection(obj)); + } + } - Command cmd = RemoveCommand.create(getEditingDomain(), getMaster().getValue(), UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN, elements); - if (cmd.canExecute()) { - getEditingDomain().getCommandStack().execute(cmd); } } } }); + + tableElement.getDropDown().setInput(new EClass[] { AdvancedPackageImpl.Literals.PERSPECTIVE_STACK, BasicPackageImpl.Literals.PART_SASH_CONTAINER, BasicPackageImpl.Literals.PART_STACK, BasicPackageImpl.Literals.PART, BasicPackageImpl.Literals.INPUT_PART, AdvancedPackageImpl.Literals.AREA }); + tableElement.getDropDown().setSelection(new StructuredSelection(AdvancedPackageImpl.Literals.PERSPECTIVE_STACK)); + } folder.setSelection(0); diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowSharedElementsEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowSharedElementsEditor.java index bc378373..0681befa 100644 --- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowSharedElementsEditor.java +++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowSharedElementsEditor.java @@ -7,6 +7,7 @@ * * Contributors: * Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation + * Wim Jongman <wim.jongman@remainsoftware.com> - bug 400804 ******************************************************************************/ package org.eclipse.e4.tools.emf.ui.internal.common.component.virtual; @@ -16,11 +17,12 @@ 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.core.contexts.IEclipseContext; 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.ui.model.application.ui.MElementContainer; +import org.eclipse.e4.tools.emf.ui.internal.common.uistructure.ViewerElement; import org.eclipse.e4.ui.model.application.ui.advanced.impl.AdvancedPackageImpl; import org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl; import org.eclipse.emf.common.command.Command; @@ -36,30 +38,29 @@ import org.eclipse.emf.edit.command.RemoveCommand; import org.eclipse.jface.action.Action; import org.eclipse.jface.databinding.viewers.ObservableListContentProvider; import org.eclipse.jface.viewers.ArrayContentProvider; -import org.eclipse.jface.viewers.ComboViewer; 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.StructuredViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CTabFolder; import org.eclipse.swt.custom.CTabItem; 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.Display; public class VWindowSharedElementsEditor extends AbstractComponentEditor { private Composite composite; private EMFDataBindingContext context; - private TableViewer viewer; + private StructuredViewer viewer; private List<Action> actions = new ArrayList<Action>(); @Inject + IEclipseContext eclipseContext; + + @Inject public VWindowSharedElementsEditor() { super(); } @@ -144,39 +145,25 @@ public class VWindowSharedElementsEditor extends AbstractComponentEditor { item.setControl(parent.getParent()); { - viewer = new TableViewer(parent); - ObservableListContentProvider cp = new ObservableListContentProvider(); - viewer.setContentProvider(cp); - viewer.setLabelProvider(new ComponentLabelProvider(getEditor(), Messages)); - GridData gd = new GridData(GridData.FILL_BOTH); - viewer.getControl().setLayoutData(gd); + final ViewerElement tableElement = ViewerElement.create(eclipseContext, parent, this); + viewer = tableElement.getViewer(); + viewer.setContentProvider(new ObservableListContentProvider()); + viewer.setLabelProvider(new ComponentLabelProvider(getEditor(), Messages)); IEMFEditListProperty prop = EMFEditProperties.list(getEditingDomain(), BasicPackageImpl.Literals.WINDOW__SHARED_ELEMENTS); viewer.setInput(prop.observeDetail(getMaster())); - Composite buttonComp = new Composite(parent, SWT.NONE); - buttonComp.setLayoutData(new GridData(GridData.FILL, GridData.END, false, false)); - GridLayout gl = new GridLayout(2, false); - gl.marginLeft = 0; - gl.marginRight = 0; - gl.marginWidth = 0; - gl.marginHeight = 0; - buttonComp.setLayout(gl); - - Button b = new Button(buttonComp, SWT.PUSH | SWT.FLAT); - b.setText(Messages.ModelTooling_Common_Up); - b.setImage(createImage(ResourceProvider.IMG_Obj16_arrow_up)); - b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 2, 1)); - b.addSelectionListener(new SelectionAdapter() { + tableElement.getButtonUp().addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { + if (!viewer.getSelection().isEmpty()) { IStructuredSelection s = (IStructuredSelection) viewer.getSelection(); if (s.size() == 1) { Object obj = s.getFirstElement(); - MElementContainer<?> container = (MElementContainer<?>) getMaster().getValue(); - int idx = container.getChildren().indexOf(obj) - 1; + EObject container = (EObject) getMaster().getValue(); + int idx = ((List<?>) container.eGet(BasicPackageImpl.Literals.WINDOW__SHARED_ELEMENTS)).indexOf(obj) - 1; if (idx >= 0) { Command cmd = MoveCommand.create(getEditingDomain(), getMaster().getValue(), BasicPackageImpl.Literals.WINDOW__SHARED_ELEMENTS, obj, idx); @@ -185,26 +172,22 @@ public class VWindowSharedElementsEditor extends AbstractComponentEditor { viewer.setSelection(new StructuredSelection(obj)); } } - } } } }); - b = new Button(buttonComp, SWT.PUSH | SWT.FLAT); - b.setText(Messages.ModelTooling_Common_Down); - b.setImage(createImage(ResourceProvider.IMG_Obj16_arrow_down)); - b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 2, 1)); - b.addSelectionListener(new SelectionAdapter() { + tableElement.getButtonDown().addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (!viewer.getSelection().isEmpty()) { IStructuredSelection s = (IStructuredSelection) viewer.getSelection(); if (s.size() == 1) { Object obj = s.getFirstElement(); - MElementContainer<?> container = (MElementContainer<?>) getMaster().getValue(); - int idx = container.getChildren().indexOf(obj) + 1; - if (idx < container.getChildren().size()) { + EObject container = (EObject) getMaster().getValue(); + List<?> list = (List<?>) container.eGet(BasicPackageImpl.Literals.WINDOW__SHARED_ELEMENTS); + int idx = list.indexOf(obj) + 1; + if (idx < list.size()) { Command cmd = MoveCommand.create(getEditingDomain(), getMaster().getValue(), BasicPackageImpl.Literals.WINDOW__SHARED_ELEMENTS, obj, idx); if (cmd.canExecute()) { @@ -212,43 +195,33 @@ public class VWindowSharedElementsEditor extends AbstractComponentEditor { viewer.setSelection(new StructuredSelection(obj)); } } - } } } }); - final ComboViewer childrenDropDown = new ComboViewer(buttonComp); - childrenDropDown.getControl().setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false)); - childrenDropDown.setContentProvider(new ArrayContentProvider()); - childrenDropDown.setLabelProvider(new LabelProvider() { + tableElement.getDropDown().setContentProvider(new ArrayContentProvider()); + tableElement.getDropDown().setLabelProvider(new LabelProvider() { @Override public String getText(Object element) { EClass eclass = (EClass) element; return eclass.getName(); } }); - childrenDropDown.setInput(new EClass[] { BasicPackageImpl.Literals.PART_SASH_CONTAINER, BasicPackageImpl.Literals.PART, BasicPackageImpl.Literals.INPUT_PART, BasicPackageImpl.Literals.PART_STACK, AdvancedPackageImpl.Literals.AREA }); - childrenDropDown.setSelection(new StructuredSelection(BasicPackageImpl.Literals.PART)); + tableElement.getDropDown().setInput(new EClass[] { BasicPackageImpl.Literals.PART_SASH_CONTAINER, BasicPackageImpl.Literals.PART, BasicPackageImpl.Literals.INPUT_PART, BasicPackageImpl.Literals.PART_STACK, AdvancedPackageImpl.Literals.AREA }); + tableElement.getDropDown().setSelection(new StructuredSelection(BasicPackageImpl.Literals.PART)); - b = new Button(buttonComp, SWT.PUSH | SWT.FLAT); - b.setImage(createImage(ResourceProvider.IMG_Obj16_table_add)); - b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, false, false)); - b.addSelectionListener(new SelectionAdapter() { + tableElement.getButtonAdd().addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { - if (!childrenDropDown.getSelection().isEmpty()) { - EClass eClass = (EClass) ((IStructuredSelection) childrenDropDown.getSelection()).getFirstElement(); + if (!tableElement.getDropDown().getSelection().isEmpty()) { + EClass eClass = (EClass) ((IStructuredSelection) tableElement.getDropDown().getSelection()).getFirstElement(); handleAdd(eClass); } } }); - b = new Button(buttonComp, SWT.PUSH | SWT.FLAT); - b.setText(Messages.ModelTooling_Common_Remove); - b.setImage(createImage(ResourceProvider.IMG_Obj16_table_delete)); - b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 2, 1)); - b.addSelectionListener(new SelectionAdapter() { + tableElement.getButtonRemove().addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (!viewer.getSelection().isEmpty()) { diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/uistructure/ViewerElement.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/uistructure/ViewerElement.java index 46f9c641..5b5a547f 100644 --- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/uistructure/ViewerElement.java +++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/uistructure/ViewerElement.java @@ -10,33 +10,18 @@ ******************************************************************************/ package org.eclipse.e4.tools.emf.ui.internal.common.uistructure; -import java.util.List; import javax.inject.Inject; import org.eclipse.e4.core.contexts.ContextInjectionFactory; import org.eclipse.e4.core.contexts.IEclipseContext; -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.Messages; import org.eclipse.e4.tools.emf.ui.internal.ResourceProvider; import org.eclipse.e4.tools.services.Translation; -import org.eclipse.e4.ui.model.fragment.MModelFragments; -import org.eclipse.e4.ui.model.fragment.impl.FragmentPackageImpl; -import org.eclipse.emf.common.command.Command; -import org.eclipse.emf.ecore.EClass; -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.EReference; -import org.eclipse.emf.ecore.util.EcoreUtil; -import org.eclipse.emf.edit.command.AddCommand; -import org.eclipse.emf.edit.command.MoveCommand; -import org.eclipse.emf.edit.command.RemoveCommand; import org.eclipse.jface.viewers.ComboViewer; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.StructuredViewer; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; @@ -57,7 +42,12 @@ public class ViewerElement { private ComboViewer dropDown; private Button addButton; private Composite parent; - private EReference reference; + + private Button removeButton; + + private Button downButton; + + private Button upButton; /** * @param parent @@ -65,9 +55,8 @@ public class ViewerElement { * @param editor */ @Inject - public ViewerElement(@Translation Messages Messages, Composite parent, EReference reference, AbstractComponentEditor editor) { + public ViewerElement(@Translation Messages Messages, Composite parent, AbstractComponentEditor editor) { this.parent = parent; - this.reference = reference; this.editor = editor; this.Messages = Messages; createControl(); @@ -101,77 +90,61 @@ public class ViewerElement { gl.marginHeight = 0; buttonCompBot.setLayout(gl); - Button b = new Button(buttonCompBot, SWT.PUSH | SWT.FLAT); - b.setText(Messages.ModelTooling_Common_Up); - b.setImage(editor.createImage(ResourceProvider.IMG_Obj16_arrow_up)); - b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 1, 1)); - b.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - if (!viewer.getSelection().isEmpty()) { - IStructuredSelection s = (IStructuredSelection) viewer.getSelection(); - if (s.size() == 1) { - Object obj = s.getFirstElement(); - MModelFragments container = (MModelFragments) editor.getMaster().getValue(); - int idx = container.getImports().indexOf(obj) - 1; - if (idx >= 0) { - Command cmd = MoveCommand.create(editor.getEditingDomain(), editor.getMaster().getValue(), reference, obj, idx); - - if (cmd.canExecute()) { - editor.getEditingDomain().getCommandStack().execute(cmd); - viewer.setSelection(new StructuredSelection(obj)); - } - } - - } - } - } - }); - - b = new Button(buttonCompBot, SWT.PUSH | SWT.FLAT); - b.setText(Messages.ModelTooling_Common_Down); - b.setImage(editor.createImage(ResourceProvider.IMG_Obj16_arrow_down)); - b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 1, 1)); - b.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - if (!viewer.getSelection().isEmpty()) { - IStructuredSelection s = (IStructuredSelection) viewer.getSelection(); - if (s.size() == 1) { - Object obj = s.getFirstElement(); - MModelFragments container = (MModelFragments) editor.getMaster().getValue(); - int idx = container.getImports().indexOf(obj) + 1; - if (idx < container.getImports().size()) { - Command cmd = MoveCommand.create(editor.getEditingDomain(), editor.getMaster().getValue(), reference, obj, idx); - - if (cmd.canExecute()) { - editor.getEditingDomain().getCommandStack().execute(cmd); - viewer.setSelection(new StructuredSelection(obj)); - } - } - - } - } - } - }); - - b = new Button(buttonCompBot, SWT.PUSH | SWT.FLAT); - b.setText(Messages.ModelTooling_Common_Remove); - b.setImage(editor.createImage(ResourceProvider.IMG_Obj16_table_delete)); - b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 1, 1)); - b.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - if (!viewer.getSelection().isEmpty()) { - List<?> elements = ((IStructuredSelection) viewer.getSelection()).toList(); - - Command cmd = RemoveCommand.create(editor.getEditingDomain(), editor.getMaster().getValue(), reference, elements); - if (cmd.canExecute()) { - editor.getEditingDomain().getCommandStack().execute(cmd); - } - } - } - }); + upButton = new Button(buttonCompBot, SWT.PUSH | SWT.FLAT); + upButton.setText(Messages.ModelTooling_Common_Up); + upButton.setImage(editor.createImage(ResourceProvider.IMG_Obj16_arrow_up)); + upButton.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 1, 1)); + + downButton = new Button(buttonCompBot, SWT.PUSH | SWT.FLAT); + downButton.setText(Messages.ModelTooling_Common_Down); + downButton.setImage(editor.createImage(ResourceProvider.IMG_Obj16_arrow_down)); + downButton.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 1, 1)); + + removeButton = new Button(buttonCompBot, SWT.PUSH | SWT.FLAT); + removeButton.setText(Messages.ModelTooling_Common_Remove); + removeButton.setImage(editor.createImage(ResourceProvider.IMG_Obj16_table_delete)); + removeButton.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 1, 1)); + + } + + /** + * Returns the button that removes an element from the list. Use it to add + * your {@link SelectionListener} to it. + * + * @return + */ + public Button getButtonRemove() { + return removeButton; + } + + /** + * Returns the button that adds an element to the list. Use it to add your + * {@link SelectionListener} to it. + * + * @return + */ + public Button getButtonAdd() { + return addButton; + } + + /** + * Returns the button that moves an element down in the list. Use it to add + * your {@link SelectionListener} to it. + * + * @return + */ + public Button getButtonDown() { + return downButton; + } + + /** + * Returns the button that moves an element up in the list. Use it to add + * your {@link SelectionListener} to it. + * + * @return + */ + public Button getButtonUp() { + return upButton; } private void createTopButtons() { @@ -191,20 +164,6 @@ public class ViewerElement { addButton.setImage(editor.createImage(ResourceProvider.IMG_Obj16_table_add)); addButton.setText(Messages.ModelTooling_Common_AddEllipsis); addButton.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false)); - addButton.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - EClass eClass = ((FeatureClass) ((IStructuredSelection) dropDown.getSelection()).getFirstElement()).eClass; - EObject eObject = EcoreUtil.create(eClass); - - Command cmd = AddCommand.create(editor.getEditingDomain(), editor.getMaster().getValue(), reference, eObject); - - if (cmd.canExecute()) { - editor.getEditingDomain().getCommandStack().execute(cmd); - editor.getEditor().setSelection(eObject); - } - } - }); } @@ -222,11 +181,10 @@ public class ViewerElement { * @param editor * @return a new {@link ViewerElement} */ - public static ViewerElement create(IEclipseContext parentContext, Composite parent, EReference reference, AbstractComponentEditor editor) { + public static ViewerElement create(IEclipseContext parentContext, Composite parent, AbstractComponentEditor editor) { IEclipseContext mycontext = parentContext.createChild(); mycontext.set(Composite.class, parent); mycontext.set(AbstractComponentEditor.class, editor); - mycontext.set(EReference.class, FragmentPackageImpl.Literals.MODEL_FRAGMENTS__IMPORTS); return ContextInjectionFactory.make(ViewerElement.class, mycontext); } } diff --git a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/project/E4NewProjectWizard.java b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/project/E4NewProjectWizard.java index e7067fb5..5073493d 100644 --- a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/project/E4NewProjectWizard.java +++ b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/project/E4NewProjectWizard.java @@ -713,18 +713,17 @@ public class E4NewProjectWizard extends NewPluginProjectWizard { private class ContentWizard extends Wizard implements IBundleContentWizard { - String[] dependencies = new String[] { "javax.inject", - "org.eclipse.core.runtime", "org.eclipse.swt", - "org.eclipse.core.databinding", - "org.eclipse.core.databinding.beans", "org.eclipse.jface", - "org.eclipse.jface.databinding", "org.eclipse.e4.ui.services", - "org.eclipse.e4.ui.workbench", "org.eclipse.e4.core.services", - "org.eclipse.e4.core.di", "org.eclipse.e4.ui.di", + String[] dependencies = new String[] { + "javax.inject", + "org.eclipse.core.runtime", + "org.eclipse.swt", + "org.eclipse.jface", + "org.eclipse.e4.ui.services", + "org.eclipse.e4.ui.workbench", + "org.eclipse.e4.core.di", + "org.eclipse.e4.ui.di", "org.eclipse.e4.core.contexts", - "org.eclipse.e4.ui.workbench.swt", - "org.eclipse.core.databinding.property", - "org.eclipse.e4.ui.css.core", "org.w3c.css.sac", - "org.eclipse.e4.core.commands", "org.eclipse.e4.ui.bindings" }; + }; public void init(IFieldData data) { } |