Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Schindl2011-05-12 17:13:14 +0000
committerThomas Schindl2011-05-12 17:13:14 +0000
commit1679d8135e84e4c43e8dd16b0d5696062b18ee93 (patch)
tree2b4903ce79f611a90da4a3be9f59b913d403a255
parent9d9f6252924b3adcf789db51db8f6238347ca3f5 (diff)
downloadorg.eclipse.e4.tools-1679d8135e84e4c43e8dd16b0d5696062b18ee93.tar.gz
org.eclipse.e4.tools-1679d8135e84e4c43e8dd16b0d5696062b18ee93.tar.xz
org.eclipse.e4.tools-1679d8135e84e4c43e8dd16b0d5696062b18ee93.zip
Bug 345629 - [ModelTooling] Removeing element leaves dangling references
-rw-r--r--bundles/org.eclipse.e4.tools.emf.liveeditor/src/org/eclipse/e4/tools/emf/liveeditor/MemoryModelResource.java2
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/XMIModelResource.java3
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/Messages.java1
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/Messages.properties5
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ModelEditor.java15
-rw-r--r--bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/ApplicationEditor.java476
6 files changed, 490 insertions, 12 deletions
diff --git a/bundles/org.eclipse.e4.tools.emf.liveeditor/src/org/eclipse/e4/tools/emf/liveeditor/MemoryModelResource.java b/bundles/org.eclipse.e4.tools.emf.liveeditor/src/org/eclipse/e4/tools/emf/liveeditor/MemoryModelResource.java
index 74172dd1..d80f725a 100644
--- a/bundles/org.eclipse.e4.tools.emf.liveeditor/src/org/eclipse/e4/tools/emf/liveeditor/MemoryModelResource.java
+++ b/bundles/org.eclipse.e4.tools.emf.liveeditor/src/org/eclipse/e4/tools/emf/liveeditor/MemoryModelResource.java
@@ -23,6 +23,7 @@ import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
public class MemoryModelResource implements IModelResource {
private WritableList list = new WritableList();
@@ -32,6 +33,7 @@ public class MemoryModelResource implements IModelResource {
list.add(application);
BasicCommandStack commandStack = new BasicCommandStack();
ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+ adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack);
}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/XMIModelResource.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/XMIModelResource.java
index ab131ba7..bca1aab9 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/XMIModelResource.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/common/XMIModelResource.java
@@ -39,6 +39,7 @@ import org.eclipse.emf.edit.command.RemoveCommand;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
public class XMIModelResource implements IModelResource {
private EditingDomain editingDomain;
@@ -49,6 +50,8 @@ public class XMIModelResource implements IModelResource {
public XMIModelResource(URI uri) {
ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+ adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
+
ResourceSet resourceSet = new ResourceSetImpl();
BasicCommandStack commandStack = new BasicCommandStack();
commandStack.addCommandStackListener(new CommandStackListener() {
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 97ca0695..42e3378c 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
@@ -604,4 +604,5 @@ public class Messages {
public String ObjectViewer_Tooltip_InjectionKey;
public String ObjectViewer_Script;
+ public String CommandWizard_ShellTitle;
} \ 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 d5170110..41dbdadb 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
@@ -600,4 +600,7 @@ ExternalizeStringHandler_Dialog_DialogMessage=Externalizing manifest files extra
ObjectViewer_Tooltip_Value=Value
ObjectViewer_Tooltip_InjectionKey=Injection key
-ObjectViewer_Script=Execute Script \ No newline at end of file
+ObjectViewer_Script=Execute Script
+
+
+CommandWizard_ShellTitle=Command/Handler wizard
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 486a16d7..381dd8bc 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
@@ -156,9 +156,9 @@ import org.eclipse.emf.ecore.resource.Resource.Diagnostic;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.edit.command.AddCommand;
import org.eclipse.emf.edit.command.CommandParameter;
+import org.eclipse.emf.edit.command.DeleteCommand;
import org.eclipse.emf.edit.command.MoveCommand;
import org.eclipse.emf.edit.command.RemoveCommand;
-import org.eclipse.emf.edit.command.SetCommand;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuListener;
@@ -602,16 +602,9 @@ public class ModelEditor {
addSeparator = true;
manager.add(new Action(messages.ModelEditor_Delete, ImageDescriptor.createFromImage(resourcePool.getImageUnchecked(ResourceProvider.IMG_Obj16_cross))) {
public void run() {
- if (o.eContainingFeature().isMany()) {
- Command cmd = RemoveCommand.create(ModelEditor.this.modelProvider.getEditingDomain(), o.eContainer(), o.eContainingFeature(), o);
- if (cmd.canExecute()) {
- ModelEditor.this.modelProvider.getEditingDomain().getCommandStack().execute(cmd);
- }
- } else {
- Command cmd = SetCommand.create(ModelEditor.this.modelProvider.getEditingDomain(), o.eContainer(), o.eContainingFeature(), null);
- if (cmd.canExecute()) {
- ModelEditor.this.modelProvider.getEditingDomain().getCommandStack().execute(cmd);
- }
+ Command cmd = DeleteCommand.create(ModelEditor.this.modelProvider.getEditingDomain(), o);
+ if (cmd.canExecute()) {
+ ModelEditor.this.modelProvider.getEditingDomain().getCommandStack().execute(cmd);
}
}
});
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 85f51b69..93ef8987 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
@@ -10,6 +10,11 @@
******************************************************************************/
package org.eclipse.e4.tools.emf.ui.internal.common.component;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+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;
@@ -18,30 +23,63 @@ import org.eclipse.core.resources.IProject;
import org.eclipse.e4.core.di.annotations.Optional;
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.uistructure.UIViewer;
+import org.eclipse.e4.ui.model.application.MApplication;
+import org.eclipse.e4.ui.model.application.commands.MCommand;
+import org.eclipse.e4.ui.model.application.commands.MHandler;
+import org.eclipse.e4.ui.model.application.commands.MKeyBinding;
+import org.eclipse.e4.ui.model.application.commands.impl.CommandsFactoryImpl;
import org.eclipse.e4.ui.model.application.commands.impl.CommandsPackageImpl;
import org.eclipse.e4.ui.model.application.descriptor.basic.impl.BasicPackageImpl;
import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl;
import org.eclipse.e4.ui.model.application.ui.MUIElement;
import org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl;
+import org.eclipse.e4.ui.model.application.ui.menu.ItemType;
+import org.eclipse.e4.ui.model.application.ui.menu.MMenu;
+import org.eclipse.e4.ui.model.application.ui.menu.MToolBar;
import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuPackageImpl;
+import org.eclipse.emf.common.command.CompoundCommand;
import org.eclipse.emf.databinding.EMFDataBindingContext;
import org.eclipse.emf.databinding.EMFProperties;
import org.eclipse.emf.databinding.FeaturePath;
import org.eclipse.emf.databinding.edit.EMFEditProperties;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.edit.command.AddCommand;
+import org.eclipse.jface.action.Action;
import org.eclipse.jface.databinding.swt.IWidgetValueProperty;
import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.ComboViewer;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StyledCellLabelProvider;
+import org.eclipse.jface.viewers.StyledString;
+import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.ViewerCell;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
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;
+import org.eclipse.swt.widgets.Text;
public class ApplicationEditor extends AbstractComponentEditor {
@@ -65,11 +103,33 @@ public class ApplicationEditor extends AbstractComponentEditor {
@Optional
private IProject project;
+ private List<Action> actions = new ArrayList<Action>();
+
@Inject
public ApplicationEditor() {
super();
}
+ @PostConstruct
+ void init() {
+ // actions.add(new Action("Command Wizard ...") {
+ // @Override
+ // public void run() {
+ // doCreateCommandWizard();
+ // }
+ // });
+ }
+
+ @Override
+ public List<Action> getActions(Object element) {
+ return actions;
+ }
+
+ void doCreateCommandWizard() {
+ WizardDialog dialog = new WizardDialog(composite.getShell(), new CommandWizard((MApplication) getMaster().getValue()));
+ dialog.open();
+ }
+
@Override
public Image getImage(Object element, Display display) {
if (element instanceof MUIElement) {
@@ -289,4 +349,420 @@ public class ApplicationEditor extends AbstractComponentEditor {
public FeaturePath[] getLabelProperties() {
return new FeaturePath[] { FeaturePath.fromList(UiPackageImpl.Literals.UI_ELEMENT__TO_BE_RENDERED) };
}
+
+ class CommandWizard extends Wizard {
+ private MApplication application;
+
+ private HandlerCommandPage handlerPage;
+ private KeybindingPage keyPage;
+ private MenuWizardPage menuPage;
+ private ToolbarWizardPage toolbarPage;
+
+ public CommandWizard(MApplication application) {
+ this.application = application;
+ }
+
+ @Override
+ public void addPages() {
+ getShell().setText(Messages.CommandWizard_ShellTitle);
+ setDefaultPageImageDescriptor(ImageDescriptor.createFromImage(resourcePool.getImageUnchecked(ResourceProvider.IMG_Wizban16_newexp_wiz)));
+ handlerPage = new HandlerCommandPage("Handler and Command");
+ addPage(handlerPage);
+
+ keyPage = new KeybindingPage("Keybinding", application);
+ addPage(keyPage);
+
+ menuPage = new MenuWizardPage("Menu", application);
+ addPage(menuPage);
+
+ toolbarPage = new ToolbarWizardPage("Toolbar", application);
+ addPage(toolbarPage);
+ }
+
+ @Override
+ public boolean performFinish() {
+
+ MCommand command = CommandsFactoryImpl.eINSTANCE.createCommand();
+ MHandler handler = CommandsFactoryImpl.eINSTANCE.createHandler();
+ MKeyBinding keyBinding = null;
+
+ String parentId = application.getElementId();
+
+ String prefix = parentId != null && parentId.trim().length() > 0 ? parentId + "." : ""; //$NON-NLS-1$ //$NON-NLS-2$
+
+ if (handlerPage.idField.getText().trim().length() > 0) {
+ command.setElementId(prefix + "commands." + handlerPage.idField.getText().trim()); //$NON-NLS-1$
+ handler.setElementId(prefix + "handlers." + handlerPage.idField.getText().trim()); //$NON-NLS-1$
+ }
+
+ if (!application.getBindingTables().isEmpty()) {
+ if (keyPage.keyField.getText().trim().length() > 0 && !keyPage.bindtableViewer.getSelection().isEmpty()) {
+ keyBinding = CommandsFactoryImpl.eINSTANCE.createKeyBinding();
+ keyBinding.setKeySequence(keyPage.keyField.getText().trim());
+ keyBinding.setCommand(command);
+
+ }
+ }
+
+ command.setCommandName(handlerPage.nameField.getText());
+ handler.setCommand(command);
+
+ CompoundCommand cmd = new CompoundCommand();
+ cmd.append(AddCommand.create(getEditingDomain(), application, ApplicationPackageImpl.Literals.APPLICATION__COMMANDS, command));
+ cmd.append(AddCommand.create(getEditingDomain(), application, CommandsPackageImpl.Literals.HANDLER_CONTAINER__HANDLERS, handler));
+
+ if (keyBinding != null) {
+ cmd.append(AddCommand.create(getEditingDomain(), ((IStructuredSelection) keyPage.bindtableViewer.getSelection()).getFirstElement(), CommandsPackageImpl.Literals.BINDING_TABLE__BINDINGS, keyBinding));
+ }
+
+ if (cmd.canExecute()) {
+ getEditingDomain().getCommandStack().execute(cmd);
+ return true;
+ }
+
+ return false;
+ }
+ }
+
+ class HandlerCommandPage extends WizardPage {
+ public Text idField;
+ public Text nameField;
+
+ public HandlerCommandPage(String pageName) {
+ super(pageName);
+ }
+
+ public void createControl(Composite parent) {
+ setTitle("Command/Handler");
+ setMessage("Insert informations for Command and Handler");
+
+ Composite group = new Composite(parent, SWT.NONE);
+ group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ group.setLayout(new GridLayout(3, false));
+
+ {
+ Label l = new Label(group, SWT.NONE);
+ l.setText("Id");
+
+ idField = new Text(group, SWT.BORDER);
+ idField.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 2, 1));
+ }
+
+ {
+ Label l = new Label(group, SWT.NONE);
+ l.setText("Name" + "*");
+
+ nameField = new Text(group, SWT.BORDER);
+ nameField.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 2, 1));
+ nameField.addModifyListener(new ModifyListener() {
+
+ public void modifyText(ModifyEvent e) {
+ setPageComplete(nameField.getText().trim().length() > 0);
+ }
+ });
+ }
+
+ {
+ Label l = new Label(group, SWT.NONE);
+ l.setText("Class");
+
+ Text t = new Text(group, SWT.BORDER);
+ t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ Button b = new Button(group, SWT.PUSH | SWT.FLAT);
+ b.setText(Messages.ModelTooling_Common_FindEllipsis);
+ }
+
+ setControl(group);
+ }
+
+ @Override
+ public boolean isPageComplete() {
+ return nameField.getText().trim().length() > 0;
+ }
+ }
+
+ class KeybindingPage extends WizardPage {
+
+ private Text keyField;
+ private TableViewer bindtableViewer;
+ private MApplication application;
+
+ public KeybindingPage(String pageName, MApplication application) {
+ super(pageName);
+ this.application = application;
+ }
+
+ public void createControl(Composite parent) {
+ setTitle("Keybinding");
+ setMessage("Insert informations for a keybinding");
+
+ Composite group = new Composite(parent, SWT.NONE);
+ group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ group.setLayout(new GridLayout(2, false));
+
+ {
+ Label l = new Label(group, SWT.NONE);
+ l.setText("Sequence");
+
+ keyField = new Text(group, SWT.BORDER);
+ keyField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ keyField.addModifyListener(new ModifyListener() {
+
+ public void modifyText(ModifyEvent e) {
+ bindtableViewer.getControl().setEnabled(isPageComplete());
+ setPageComplete(isPageComplete());
+ }
+ });
+ }
+
+ {
+ Label l = new Label(group, SWT.NONE);
+ l.setText("Binding Table");
+ l.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
+
+ bindtableViewer = new TableViewer(group);
+ bindtableViewer.setLabelProvider(new ComponentLabelProvider(getEditor(), Messages));
+ bindtableViewer.setContentProvider(new ArrayContentProvider());
+ bindtableViewer.setInput(application.getBindingTables());
+ bindtableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+
+ public void selectionChanged(SelectionChangedEvent event) {
+ setPageComplete(isPageComplete());
+ }
+ });
+ bindtableViewer.setSelection(new StructuredSelection(application.getBindingTables().get(0)));
+ GridData gd = new GridData(GridData.FILL_BOTH);
+ gd.heightHint = bindtableViewer.getTable().getItemHeight() * 5;
+ bindtableViewer.getControl().setLayoutData(gd);
+ bindtableViewer.getControl().setEnabled(false);
+ }
+
+ setControl(group);
+ }
+
+ @Override
+ public boolean isPageComplete() {
+ if (keyField.getText().trim().isEmpty()) {
+ return true;
+ } else {
+ return !bindtableViewer.getSelection().isEmpty();
+ }
+ }
+ }
+
+ class MenuWizardPage extends WizardPage {
+ private MApplication application;
+ private Text labelField;
+ private Text iconField;
+ private ComboViewer typeViewer;
+ private TableViewer menuViewer;
+
+ public MenuWizardPage(String pageName, MApplication application) {
+ super(pageName);
+ this.application = application;
+ }
+
+ public void createControl(Composite parent) {
+ setTitle("Handled Menu Item");
+ setMessage("Insert informations for a Handled Menu Item");
+
+ Composite group = new Composite(parent, SWT.NONE);
+ group.setLayout(new GridLayout(2, false));
+ group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ {
+ Label l = new Label(group, SWT.NONE);
+ l.setText("Label");
+
+ labelField = new Text(group, SWT.BORDER);
+ labelField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ }
+
+ {
+ Label l = new Label(group, SWT.NONE);
+ l.setText("Icon");
+
+ iconField = new Text(group, SWT.BORDER);
+ iconField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ }
+
+ {
+ Label l = new Label(group, SWT.NONE);
+ l.setText("Type");
+
+ typeViewer = new ComboViewer(group, SWT.READ_ONLY);
+ typeViewer.setContentProvider(new ArrayContentProvider());
+ typeViewer.setInput(ItemType.values());
+ typeViewer.setSelection(new StructuredSelection(ItemType.PUSH));
+ }
+
+ {
+ Label l = new Label(group, SWT.NONE);
+ l.setText("Parent");
+ l.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
+
+ menuViewer = new TableViewer(group);
+ menuViewer.setLabelProvider(new HiearchyLabelProvider());
+ menuViewer.setContentProvider(new ArrayContentProvider());
+
+ List<MMenu> menuList = new ArrayList<MMenu>();
+ Iterator<EObject> it = EcoreUtil.getAllContents(Collections.singleton(application));
+ while (it.hasNext()) {
+ EObject o = it.next();
+ if (MenuPackageImpl.Literals.MENU.isSuperTypeOf(o.eClass())) {
+ menuList.add((MMenu) o);
+ }
+ }
+ menuViewer.setInput(menuList);
+ menuViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+
+ public void selectionChanged(SelectionChangedEvent event) {
+ setPageComplete(isPageComplete());
+ }
+ });
+ GridData gd = new GridData(GridData.FILL_BOTH);
+ gd.heightHint = menuViewer.getTable().getItemHeight() * 5;
+ menuViewer.getControl().setLayoutData(gd);
+ menuViewer.setSelection(new StructuredSelection(menuList.get(0)));
+ }
+
+ setControl(group);
+ }
+
+ @Override
+ public boolean isPageComplete() {
+ if (labelField.getText().trim().isEmpty() && iconField.getText().trim().isEmpty()) {
+ return true;
+ } else {
+ return !menuViewer.getSelection().isEmpty();
+ }
+ }
+ }
+
+ class ToolbarWizardPage extends WizardPage {
+ private MApplication application;
+ private Text labelField;
+ private Text iconField;
+ private ComboViewer typeViewer;
+ private TableViewer toolbarViewer;
+
+ public ToolbarWizardPage(String pageName, MApplication application) {
+ super(pageName);
+ this.application = application;
+ }
+
+ public void createControl(Composite parent) {
+ setTitle("Handled Toolbar Item");
+ setMessage("Insert informations for a Toolbar Item");
+
+ Composite group = new Composite(parent, SWT.NONE);
+ group.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, true, false, 2, 1));
+ group.setLayout(new GridLayout(2, false));
+
+ {
+ Label l = new Label(group, SWT.NONE);
+ l.setText("Label");
+
+ labelField = new Text(group, SWT.BORDER);
+ labelField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ }
+
+ {
+ Label l = new Label(group, SWT.NONE);
+ l.setText("Icon");
+
+ iconField = new Text(group, SWT.BORDER);
+ iconField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ }
+
+ {
+ Label l = new Label(group, SWT.NONE);
+ l.setText("Type");
+
+ typeViewer = new ComboViewer(group, SWT.READ_ONLY);
+ // viewer.setLabelProvider(labelProvider)
+ typeViewer.setContentProvider(new ArrayContentProvider());
+ typeViewer.setInput(ItemType.values());
+ }
+
+ {
+ Label l = new Label(group, SWT.NONE);
+ l.setText("Parent");
+ l.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
+
+ toolbarViewer = new TableViewer(group);
+ toolbarViewer.setLabelProvider(new HiearchyLabelProvider());
+ toolbarViewer.setContentProvider(new ArrayContentProvider());
+
+ List<MToolBar> toolbarList = new ArrayList<MToolBar>();
+ Iterator<EObject> it = EcoreUtil.getAllContents(Collections.singleton(application));
+ while (it.hasNext()) {
+ EObject o = it.next();
+ if (MenuPackageImpl.Literals.TOOL_BAR.isSuperTypeOf(o.eClass())) {
+ toolbarList.add((MToolBar) o);
+ }
+ }
+ toolbarViewer.setInput(toolbarList);
+ toolbarViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+
+ public void selectionChanged(SelectionChangedEvent event) {
+ setPageComplete(isPageComplete());
+ }
+ });
+ GridData gd = new GridData(GridData.FILL_BOTH);
+ gd.heightHint = toolbarViewer.getTable().getItemHeight() * 5;
+ toolbarViewer.getControl().setLayoutData(gd);
+ toolbarViewer.setSelection(new StructuredSelection(toolbarList.get(0)));
+ }
+
+ setControl(group);
+ }
+
+ @Override
+ public boolean isPageComplete() {
+ if (labelField.getText().trim().isEmpty() && iconField.getText().trim().isEmpty()) {
+ return true;
+ } else {
+ return !toolbarViewer.getSelection().isEmpty();
+ }
+ }
+ }
+
+ class HiearchyLabelProvider extends StyledCellLabelProvider {
+
+ @Override
+ public void update(ViewerCell cell) {
+ EObject o = (EObject) cell.getElement();
+
+ String label = ""; //$NON-NLS-1$
+ Image img = null;
+ AbstractComponentEditor elementEditor = getEditor().getEditor(o.eClass());
+ if (elementEditor != null) {
+ label = elementEditor.getDetailLabel(o);
+ label = label == null ? elementEditor.getLabel(o) : label;
+ img = elementEditor.getImage(o, composite.getDisplay());
+ }
+
+ List<String> parentPath = new ArrayList<String>();
+ while (o.eContainer() != null) {
+ o = o.eContainer();
+ elementEditor = getEditor().getEditor(o.eClass());
+ if (elementEditor != null) {
+ parentPath.add(0, elementEditor.getLabel(o));
+ }
+ }
+
+ String parentString = ""; //$NON-NLS-1$
+ for (String p : parentPath) {
+ parentString += "/" + p; //$NON-NLS-1$
+ }
+
+ StyledString s = new StyledString(label);
+ s.append(" - " + parentString, StyledString.DECORATIONS_STYLER); //$NON-NLS-1$
+ cell.setStyleRanges(s.getStyleRanges());
+ cell.setText(s.getString());
+ cell.setImage(img);
+ }
+ }
} \ No newline at end of file

Back to the top