diff options
author | Thomas Schindl | 2011-03-15 18:49:11 +0000 |
---|---|---|
committer | Thomas Schindl | 2011-03-15 18:49:11 +0000 |
commit | f862bd204ad2d2e56daa9fa24f32a9c48a7be20b (patch) | |
tree | 99c0dd82bc5c3cade050f84dfd48bacd0a4afbb4 | |
parent | e75f17acbe82c3262cd3ea1e7cc5915a746dae07 (diff) | |
download | org.eclipse.e4.tools-f862bd204ad2d2e56daa9fa24f32a9c48a7be20b.tar.gz org.eclipse.e4.tools-f862bd204ad2d2e56daa9fa24f32a9c48a7be20b.tar.xz org.eclipse.e4.tools-f862bd204ad2d2e56daa9fa24f32a9c48a7be20b.zip |
Bug 340042 - [ModelTooling] Perspective tree node in the editor doesn't include windowsv20110316-0300
11 files changed, 408 insertions, 153 deletions
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/Util.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/Util.java index 9c41f212..caa82113 100644 --- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/Util.java +++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/Util.java @@ -146,6 +146,31 @@ public class Util { return packs; } + public static boolean moveElementByIndex(EditingDomain editingDomain, MUIElement element, boolean liveModel, int index, EStructuralFeature feature) { + if (liveModel) { + EObject container = ((EObject) element).eContainer(); + List<Object> l = (List<Object>) container.eGet(feature); + l.remove(element); + + if (index >= 0) { + l.add(index, element); + } else { + l.add(element); + } + + return true; + } else { + EObject container = ((EObject) element).eContainer(); + Command cmd = MoveCommand.create(editingDomain, container, feature, element, index); + + if (cmd.canExecute()) { + editingDomain.getCommandStack().execute(cmd); + return true; + } + return false; + } + } + public static boolean moveElementByIndex(EditingDomain editingDomain, MUIElement element, boolean liveModel, int index) { if (liveModel) { MElementContainer<MUIElement> container = element.getParent(); 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 7b184305..19c35dcc 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 @@ -99,6 +99,7 @@ import org.eclipse.e4.tools.emf.ui.internal.common.component.TrimmedWindowEditor import org.eclipse.e4.tools.emf.ui.internal.common.component.WindowEditor; import org.eclipse.e4.tools.emf.ui.internal.common.component.virtual.VApplicationAddons; import org.eclipse.e4.tools.emf.ui.internal.common.component.virtual.VApplicationCategoriesEditor; +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.VHandlerEditor; @@ -109,13 +110,15 @@ import org.eclipse.e4.tools.emf.ui.internal.common.component.virtual.VModelImpor import org.eclipse.e4.tools.emf.ui.internal.common.component.virtual.VPartDescriptor; import org.eclipse.e4.tools.emf.ui.internal.common.component.virtual.VPartDescriptorMenuEditor; import org.eclipse.e4.tools.emf.ui.internal.common.component.virtual.VPartMenuEditor; +import org.eclipse.e4.tools.emf.ui.internal.common.component.virtual.VPerspectiveControlEditor; +import org.eclipse.e4.tools.emf.ui.internal.common.component.virtual.VPerspectiveWindowsEditor; import org.eclipse.e4.tools.emf.ui.internal.common.component.virtual.VRootBindingContexts; import org.eclipse.e4.tools.emf.ui.internal.common.component.virtual.VToolBarContributionsEditor; import org.eclipse.e4.tools.emf.ui.internal.common.component.virtual.VTrimContributionsEditor; import org.eclipse.e4.tools.emf.ui.internal.common.component.virtual.VWindowControlEditor; -import org.eclipse.e4.tools.emf.ui.internal.common.component.virtual.VWindowEditor; import org.eclipse.e4.tools.emf.ui.internal.common.component.virtual.VWindowSharedElementsEditor; import org.eclipse.e4.tools.emf.ui.internal.common.component.virtual.VWindowTrimEditor; +import org.eclipse.e4.tools.emf.ui.internal.common.component.virtual.VWindowWindowsEditor; import org.eclipse.e4.tools.emf.ui.internal.common.properties.ExternalizeStringHandler; import org.eclipse.e4.tools.emf.ui.internal.common.properties.ProjectOSGiTranslationProvider; import org.eclipse.e4.tools.emf.ui.internal.common.xml.AnnotationAccess; @@ -212,7 +215,9 @@ public class ModelEditor { public static final String VIRTUAL_HANDLER = ModelEditor.class.getName() + ".VIRTUAL_HANDLER"; //$NON-NLS-1$ public static final String VIRTUAL_BINDING_TABLE = ModelEditor.class.getName() + ".VIRTUAL_BINDING_TABLE"; //$NON-NLS-1$ public static final String VIRTUAL_COMMAND = ModelEditor.class.getName() + ".VIRTUAL_COMMAND"; //$NON-NLS-1$ - public static final String VIRTUAL_WINDOWS = ModelEditor.class.getName() + ".VIRTUAL_WINDOWS"; //$NON-NLS-1$ + public static final String VIRTUAL_APPLICATION_WINDOWS = ModelEditor.class.getName() + ".VIRTUAL_APPLICATION_WINDOWS"; //$NON-NLS-1$ + public static final String VIRTUAL_PERSPECTIVE_WINDOWS = ModelEditor.class.getName() + ".VIRTUAL_PERSPECTIVE_WINDOWS"; //$NON-NLS-1$ + public static final String VIRTUAL_WINDOW_WINDOWS = ModelEditor.class.getName() + ".VIRTUAL_WINDOW_WINDOWS"; //$NON-NLS-1$ public static final String VIRTUAL_WINDOW_CONTROLS = ModelEditor.class.getName() + ".VIRTUAL_WINDOW_CONTROLS"; //$NON-NLS-1$ public static final String VIRTUAL_PART_DESCRIPTORS = ModelEditor.class.getName() + ".VIRTUAL_PART_DESCRIPTORS"; //$NON-NLS-1$ public static final String VIRTUAL_PARTDESCRIPTOR_MENU = ModelEditor.class.getName() + ".VIRTUAL_PARTDESCRIPTOR_MENU"; //$NON-NLS-1$ @@ -228,6 +233,7 @@ public class ModelEditor { public static final String VIRTUAL_PARAMETERS = ModelEditor.class.getName() + ".VIRTUAL_PARAMETERS"; //$NON-NLS-1$ public static final String VIRTUAL_MENUELEMENTS = ModelEditor.class.getName() + ".VIRTUAL_MENUELEMENTS"; //$NON-NLS-1$ public static final String VIRTUAL_ROOT_CONTEXTS = ModelEditor.class.getName() + ".VIRTUAL_ROOT_CONTEXTS"; //$NON-NLS-1$ + public static final String VIRTUAL_PERSPECTIVE_CONTROLS = ModelEditor.class.getName() + "VIRTUAL_PERSPECTIVE_CONTROLS"; //$NON-NLS-1$ private static final int VERTICAL_RULER_WIDTH = 20; @@ -855,7 +861,9 @@ public class ModelEditor { registerVirtualEditor(VIRTUAL_HANDLER, ContextInjectionFactory.make(VHandlerEditor.class, context)); registerVirtualEditor(VIRTUAL_BINDING_TABLE, ContextInjectionFactory.make(VBindingTableEditor.class, context)); registerVirtualEditor(VIRTUAL_COMMAND, ContextInjectionFactory.make(VCommandEditor.class, context)); - registerVirtualEditor(VIRTUAL_WINDOWS, ContextInjectionFactory.make(VWindowEditor.class, context)); + registerVirtualEditor(VIRTUAL_APPLICATION_WINDOWS, ContextInjectionFactory.make(VApplicationWindowEditor.class, context)); + registerVirtualEditor(VIRTUAL_WINDOW_WINDOWS, ContextInjectionFactory.make(VWindowWindowsEditor.class, context)); + registerVirtualEditor(VIRTUAL_PERSPECTIVE_WINDOWS, ContextInjectionFactory.make(VPerspectiveWindowsEditor.class, context)); registerVirtualEditor(VIRTUAL_WINDOW_CONTROLS, ContextInjectionFactory.make(VWindowControlEditor.class, context)); registerVirtualEditor(VIRTUAL_PART_DESCRIPTORS, ContextInjectionFactory.make(VPartDescriptor.class, context)); registerVirtualEditor(VIRTUAL_PARTDESCRIPTOR_MENU, ContextInjectionFactory.make(VPartDescriptorMenuEditor.class, context)); @@ -870,6 +878,7 @@ public class ModelEditor { registerVirtualEditor(VIRTUAL_CATEGORIES, ContextInjectionFactory.make(VApplicationCategoriesEditor.class, context)); registerVirtualEditor(VIRTUAL_PARAMETERS, ContextInjectionFactory.make(VItemParametersEditor.class, context)); registerVirtualEditor(VIRTUAL_ROOT_CONTEXTS, ContextInjectionFactory.make(VRootBindingContexts.class, context)); + registerVirtualEditor(VIRTUAL_PERSPECTIVE_CONTROLS, ContextInjectionFactory.make(VPerspectiveControlEditor.class, context)); } private void registerVirtualEditor(String id, AbstractComponentEditor editor) { diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ApplicationEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ApplicationEditor.java index f926d05c..85f51b69 100644 --- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ApplicationEditor.java +++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ApplicationEditor.java @@ -222,7 +222,7 @@ public class ApplicationEditor extends AbstractComponentEditor { }); - list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_WINDOWS, ELEMENT_CONTAINER__CHILDREN, element, Messages.ApplicationEditor_Windows) { + list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_APPLICATION_WINDOWS, ELEMENT_CONTAINER__CHILDREN, element, Messages.ApplicationEditor_Windows) { @Override protected boolean accepted(Object o) { diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PerspectiveEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PerspectiveEditor.java index c5f8bc06..59361c49 100644 --- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PerspectiveEditor.java +++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/PerspectiveEditor.java @@ -15,6 +15,7 @@ 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.list.WritableList; import org.eclipse.core.databinding.observable.value.WritableValue; import org.eclipse.core.databinding.property.list.IListProperty; import org.eclipse.core.resources.IProject; @@ -24,12 +25,12 @@ 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.ResourceProvider; -import org.eclipse.e4.tools.emf.ui.internal.common.ComponentLabelProvider; +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.PerspectiveIconDialogEditor; 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.MElementContainer; import org.eclipse.e4.ui.model.application.ui.MUIElement; import org.eclipse.e4.ui.model.application.ui.MUILabel; import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective; @@ -41,23 +42,14 @@ import org.eclipse.emf.common.util.URI; import org.eclipse.emf.databinding.EMFDataBindingContext; import org.eclipse.emf.databinding.EMFProperties; import org.eclipse.emf.databinding.FeaturePath; -import org.eclipse.emf.databinding.IEMFListProperty; import org.eclipse.emf.databinding.edit.EMFEditProperties; 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.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; -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.TreeViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CTabFolder; @@ -79,6 +71,7 @@ public class PerspectiveEditor extends AbstractComponentEditor { private EMFDataBindingContext context; private IListProperty ELEMENT_CONTAINER__CHILDREN = EMFProperties.list(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN); + private IListProperty PERSPECTIVE__WINDOWS = EMFProperties.list(AdvancedPackageImpl.Literals.PERSPECTIVE__WINDOWS); private EStackLayout stackLayout; private List<Action> actions = new ArrayList<Action>(); @@ -259,123 +252,6 @@ public class PerspectiveEditor extends AbstractComponentEditor { }); } - { - Label l = new Label(parent, SWT.NONE); - l.setText(Messages.PerspectiveEditor_Controls); - l.setLayoutData(new GridData(GridData.END, GridData.BEGINNING, false, false)); - - final TableViewer viewer = new TableViewer(parent); - GridData gd = new GridData(GridData.FILL_BOTH); - viewer.getControl().setLayoutData(gd); - ObservableListContentProvider cp = new ObservableListContentProvider(); - viewer.setContentProvider(cp); - viewer.setLabelProvider(new ComponentLabelProvider(getEditor(), Messages)); - - IEMFListProperty prop = EMFProperties.list(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN); - 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() { - @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)); - } - } - - } - } - } - }); - - 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() { - @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()) { - if (Util.moveElementByIndex(getEditingDomain(), (MUIElement) obj, getEditor().isLiveModel(), idx)) { - 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() { - @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_STACK, BasicPackageImpl.Literals.PART, BasicPackageImpl.Literals.INPUT_PART, AdvancedPackageImpl.Literals.AREA, AdvancedPackageImpl.Literals.PLACEHOLDER }); - childrenDropDown.setSelection(new StructuredSelection(BasicPackageImpl.Literals.PART_SASH_CONTAINER)); - - 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() { - @Override - public void widgetSelected(SelectionEvent e) { - if (!childrenDropDown.getSelection().isEmpty()) { - EClass eClass = (EClass) ((IStructuredSelection) childrenDropDown.getSelection()).getFirstElement(); - handleAddChild(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() { - @Override - public void widgetSelected(SelectionEvent e) { - if (!viewer.getSelection().isEmpty()) { - List<?> elements = ((IStructuredSelection) viewer.getSelection()).toList(); - - 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.selection(), EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED)); ControlFactory.createCheckBox(parent, Messages.ModelTooling_UIElement_Visible, getMaster(), context, WidgetProperties.selection(), EMFEditProperties.value(getEditingDomain(), UiPackageImpl.Literals.UI_ELEMENT__VISIBLE)); @@ -413,7 +289,24 @@ public class PerspectiveEditor extends AbstractComponentEditor { @Override public IObservableList getChildList(Object element) { - return ELEMENT_CONTAINER__CHILDREN.observe(element); + final WritableList list = new WritableList(); + list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_PERSPECTIVE_WINDOWS, PERSPECTIVE__WINDOWS, element, Messages.WindowEditor_Windows) { + + @Override + protected boolean accepted(Object o) { + return true; + } + }); + + list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_PERSPECTIVE_CONTROLS, ELEMENT_CONTAINER__CHILDREN, element, Messages.PerspectiveEditor_Controls) { + + @Override + protected boolean accepted(Object o) { + return true; + } + }); + + return list; } protected void handleAddChild(EClass eClass) { diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/WindowEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/WindowEditor.java index efc20524..15f57398 100644 --- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/WindowEditor.java +++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/WindowEditor.java @@ -348,7 +348,7 @@ public class WindowEditor extends AbstractComponentEditor { }); - list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_WINDOWS, WINDOW__WINDOWS, element, Messages.WindowEditor_Windows) { + list.add(new VirtualEntry<Object>(ModelEditor.VIRTUAL_WINDOW_WINDOWS, WINDOW__WINDOWS, element, Messages.WindowEditor_Windows) { @Override protected boolean accepted(Object o) { diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VApplicationWindowEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VApplicationWindowEditor.java new file mode 100644 index 00000000..325af803 --- /dev/null +++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VApplicationWindowEditor.java @@ -0,0 +1,13 @@ +package org.eclipse.e4.tools.emf.ui.internal.common.component.virtual; + +import javax.inject.Inject; +import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl; + +public class VApplicationWindowEditor extends VWindowEditor { + + @Inject + public VApplicationWindowEditor() { + super(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN); + } + +}
\ 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/VPerspectiveControlEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPerspectiveControlEditor.java new file mode 100644 index 00000000..9aaba3ec --- /dev/null +++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPerspectiveControlEditor.java @@ -0,0 +1,289 @@ +/******************************************************************************* + * Copyright (c) 2010 BestSolution.at and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation + ******************************************************************************/ +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.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.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.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.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; +import org.eclipse.swt.widgets.Label; + +public class VPerspectiveControlEditor extends AbstractComponentEditor { + private Composite composite; + private EMFDataBindingContext context; + private TableViewer viewer; + private List<Action> actions = new ArrayList<Action>(); + + @Inject + public VPerspectiveControlEditor() { + super(); + } + + @PostConstruct + void init() { + actions.add(new Action(Messages.VWindowControlEditor_AddPartSashContainer, createImageDescriptor(ResourceProvider.IMG_PartSashContainer_vertical)) { + @Override + public void run() { + handleAdd(BasicPackageImpl.Literals.PART_SASH_CONTAINER); + } + }); + + actions.add(new Action(Messages.VWindowControlEditor_AddPartStack, createImageDescriptor(ResourceProvider.IMG_PartStack)) { + @Override + public void run() { + handleAdd(BasicPackageImpl.Literals.PART_STACK); + } + }); + + actions.add(new Action(Messages.VWindowControlEditor_AddPart, createImageDescriptor(ResourceProvider.IMG_Part)) { + @Override + public void run() { + handleAdd(BasicPackageImpl.Literals.PART); + } + }); + + actions.add(new Action(Messages.VWindowControlEditor_AddInputPart, createImageDescriptor(ResourceProvider.IMG_Part)) { + @Override + public void run() { + handleAdd(BasicPackageImpl.Literals.PART); + } + }); + + actions.add(new Action(Messages.VWindowControlEditor_AddArea, createImageDescriptor(ResourceProvider.IMG_Area_vertical)) { + @Override + public void run() { + handleAdd(AdvancedPackageImpl.Literals.AREA); + } + }); + } + + @Override + public Image getImage(Object element, Display display) { + return null; + } + + @Override + public String getLabel(Object element) { + return Messages.VWindowControlEditor_TreeLabel; + } + + @Override + public String getDetailLabel(Object element) { + return null; + } + + @Override + public String getDescription(Object element) { + return Messages.VWindowControlEditor_TreeLabelDescription; + } + + @Override + public Composite doGetEditor(Composite parent, Object object) { + if (composite == null) { + context = new EMFDataBindingContext(); + composite = createForm(parent, context, getMaster()); + } + VirtualEntry<?> o = (VirtualEntry<?>) object; + viewer.setInput(o.getList()); + getMaster().setValue(o.getOriginalParent()); + return composite; + } + + private Composite createForm(Composite parent, EMFDataBindingContext context, WritableValue master) { + 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()); + + { + Label l = new Label(parent, SWT.NONE); + l.setText(Messages.VWindowControlEditor_Controls); + l.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING)); + + 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() { + @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)); + } + } + + } + } + } + }); + + 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() { + @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()) { + if (Util.moveElementByIndex(getEditingDomain(), (MUIElement) obj, getEditor().isLiveModel(), idx)) { + 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() { + @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_STACK, BasicPackageImpl.Literals.PART, BasicPackageImpl.Literals.INPUT_PART, AdvancedPackageImpl.Literals.AREA, AdvancedPackageImpl.Literals.PLACEHOLDER }); + childrenDropDown.setSelection(new StructuredSelection(BasicPackageImpl.Literals.PART_SASH_CONTAINER)); + + 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() { + @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() { + @Override + public void widgetSelected(SelectionEvent e) { + if (!viewer.getSelection().isEmpty()) { + List<?> elements = ((IStructuredSelection) viewer.getSelection()).toList(); + + Command cmd = RemoveCommand.create(getEditingDomain(), getMaster().getValue(), UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN, elements); + if (cmd.canExecute()) { + getEditingDomain().getCommandStack().execute(cmd); + } + } + } + }); + } + + folder.setSelection(0); + + return folder; + } + + @Override + public IObservableList getChildList(Object element) { + return null; + } + + private void handleAdd(EClass eClass) { + EObject eObject = 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); + getEditor().setSelection(eObject); + } + } + + @Override + public List<Action> getActions(Object element) { + ArrayList<Action> l = new ArrayList<Action>(super.getActions(element)); + l.addAll(actions); + return l; + } +}
\ 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/VPerspectiveWindowsEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPerspectiveWindowsEditor.java new file mode 100644 index 00000000..3d3865a7 --- /dev/null +++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VPerspectiveWindowsEditor.java @@ -0,0 +1,13 @@ +package org.eclipse.e4.tools.emf.ui.internal.common.component.virtual; + +import javax.inject.Inject; +import org.eclipse.e4.ui.model.application.ui.advanced.impl.AdvancedPackageImpl; + +public class VPerspectiveWindowsEditor extends VWindowEditor { + + @Inject + public VPerspectiveWindowsEditor() { + super(AdvancedPackageImpl.Literals.PERSPECTIVE__WINDOWS); + } + +}
\ 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/VWindowEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowEditor.java index 9a78f130..500042f7 100644 --- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowEditor.java +++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowEditor.java @@ -13,7 +13,6 @@ 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.tools.emf.ui.common.Util; @@ -24,11 +23,11 @@ import org.eclipse.e4.tools.emf.ui.internal.common.VirtualEntry; 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.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.EStructuralFeature; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.emf.edit.command.AddCommand; import org.eclipse.emf.edit.command.RemoveCommand; @@ -53,15 +52,16 @@ import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; -public class VWindowEditor extends AbstractComponentEditor { +public abstract class VWindowEditor extends AbstractComponentEditor { private Composite composite; private EMFDataBindingContext context; private TableViewer viewer; private List<Action> actions = new ArrayList<Action>(); + private EStructuralFeature targetFeature; - @Inject - public VWindowEditor() { + public VWindowEditor(EStructuralFeature targetFeature) { super(); + this.targetFeature = targetFeature; } @PostConstruct @@ -147,16 +147,18 @@ public class VWindowEditor extends AbstractComponentEditor { b.setImage(createImage(ResourceProvider.IMG_Obj16_arrow_up)); b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 2, 1)); b.addSelectionListener(new SelectionAdapter() { + @SuppressWarnings("unchecked") @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(); + List<Object> l = (List<Object>) container.eGet(targetFeature); + int idx = l.indexOf(obj) - 1; if (idx >= 0) { - if (Util.moveElementByIndex(getEditingDomain(), (MUIElement) obj, getEditor().isLiveModel(), idx)) { + if (Util.moveElementByIndex(getEditingDomain(), (MUIElement) obj, getEditor().isLiveModel(), idx, targetFeature)) { viewer.setSelection(new StructuredSelection(obj)); } } @@ -171,16 +173,18 @@ public class VWindowEditor extends AbstractComponentEditor { b.setImage(createImage(ResourceProvider.IMG_Obj16_arrow_down)); b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 2, 1)); b.addSelectionListener(new SelectionAdapter() { + @SuppressWarnings("unchecked") @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()) { - if (Util.moveElementByIndex(getEditingDomain(), (MUIElement) obj, getEditor().isLiveModel(), idx)) { + EObject container = (EObject) getMaster().getValue(); + List<Object> l = (List<Object>) container.eGet(targetFeature); + int idx = l.indexOf(obj) + 1; + if (idx < l.size()) { + if (Util.moveElementByIndex(getEditingDomain(), (MUIElement) obj, getEditor().isLiveModel(), idx, targetFeature)) { viewer.setSelection(new StructuredSelection(obj)); } } @@ -223,7 +227,7 @@ public class VWindowEditor extends AbstractComponentEditor { if (!viewer.getSelection().isEmpty()) { List<?> windows = ((IStructuredSelection) viewer.getSelection()).toList(); MElementContainer<?> container = (MElementContainer<?>) getMaster().getValue(); - Command cmd = RemoveCommand.create(getEditingDomain(), container, UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN, windows); + Command cmd = RemoveCommand.create(getEditingDomain(), container, targetFeature, windows); if (cmd.canExecute()) { getEditingDomain().getCommandStack().execute(cmd); if (container.getChildren().size() > 0) { @@ -255,7 +259,7 @@ public class VWindowEditor extends AbstractComponentEditor { EObject handler = EcoreUtil.create(eClass); setElementId(handler); - Command cmd = AddCommand.create(getEditingDomain(), getMaster().getValue(), UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN, handler); + Command cmd = AddCommand.create(getEditingDomain(), getMaster().getValue(), targetFeature, handler); if (cmd.canExecute()) { getEditingDomain().getCommandStack().execute(cmd); diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowWindowsEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowWindowsEditor.java new file mode 100644 index 00000000..7e1dd2df --- /dev/null +++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VWindowWindowsEditor.java @@ -0,0 +1,13 @@ +package org.eclipse.e4.tools.emf.ui.internal.common.component.virtual; + +import javax.inject.Inject; +import org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl; + +public class VWindowWindowsEditor extends VWindowEditor { + + @Inject + public VWindowWindowsEditor() { + super(BasicPackageImpl.Literals.WINDOW__WINDOWS); + } + +}
\ No newline at end of file diff --git a/bundles/org.eclipse.e4.tools.services/build.properties b/bundles/org.eclipse.e4.tools.services/build.properties index e611dd6a..67344cd6 100644 --- a/bundles/org.eclipse.e4.tools.services/build.properties +++ b/bundles/org.eclipse.e4.tools.services/build.properties @@ -2,9 +2,5 @@ output.. = bin/ bin.includes = META-INF/,\ .,\ about.html,\ - OSGI-INF/,\ - OSGI-INF/resourcepoolfunction.xml,\ - OSGI-INF/resourceservice.xml,\ - OSGI-INF/messagefactoryservice.xml,\ - OSGI-INF/translationsupplier.xml + OSGI-INF/ source.. = src/ |