diff options
author | Thomas Schindl | 2011-05-12 17:13:14 +0000 |
---|---|---|
committer | Thomas Schindl | 2011-05-12 17:13:14 +0000 |
commit | 1679d8135e84e4c43e8dd16b0d5696062b18ee93 (patch) | |
tree | 2b4903ce79f611a90da4a3be9f59b913d403a255 | |
parent | 9d9f6252924b3adcf789db51db8f6238347ca3f5 (diff) | |
download | org.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
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 |