diff options
author | Thomas Schindl | 2010-04-19 13:44:57 +0000 |
---|---|---|
committer | Thomas Schindl | 2010-04-19 13:44:57 +0000 |
commit | d3b6e233892b8535b5b0f69d29e835c96ef2323a (patch) | |
tree | fb407fa120368bf80036139261519b1f7ada0e4c | |
parent | b023ef8d3f55b73e1f0f2e88477e9e5c0805ad61 (diff) | |
download | org.eclipse.e4.tools-d3b6e233892b8535b5b0f69d29e835c96ef2323a.tar.gz org.eclipse.e4.tools-d3b6e233892b8535b5b0f69d29e835c96ef2323a.tar.xz org.eclipse.e4.tools-d3b6e233892b8535b5b0f69d29e835c96ef2323a.zip |
[Bug 309616] - [UI][ModelEditor] No support for the new 'Addons' attribute in the editorsv20100419-1030a
6 files changed, 359 insertions, 12 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 d1602bed..a0e5788c 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 @@ -22,6 +22,7 @@ public class Messages { public static String ApplicationEditor_BindingTables; public static String ApplicationEditor_Commands; public static String ApplicationEditor_Windows; + public static String ApplicationEditor_Addons; public static String BindingTableEditor_Label; public static String BindingTableEditor_Description; @@ -293,16 +294,9 @@ public class Messages { public static String VBindingTableEditor_Add; public static String VBindingTableEditor_Remove; - - - - - - - - - - + public static String AddonsEditor_Id; + public static String AddonsEditor_ClassURI; + public static String AddonsEditor_Find; static { 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 290dd336..025e972b 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 @@ -16,6 +16,7 @@ ApplicationEditor_PartDescriptors=Part Descriptors ApplicationEditor_BindingTables=BindingTables ApplicationEditor_Commands=Commands ApplicationEditor_Windows=Windows +ApplicationEditor_Addons=Addons BindingTableEditor_Label=BindingTable BindingTableEditor_Description=BindingTable bla bla bla @@ -285,4 +286,8 @@ VBindingTableEditor_Id=Id VBindingTableEditor_Up=Up VBindingTableEditor_Down=Down VBindingTableEditor_Add=Add ... -VBindingTableEditor_Remove=Remove
\ No newline at end of file +VBindingTableEditor_Remove=Remove + +AddonsEditor_Id=Id +AddonsEditor_ClassURI=Class URI +AddonsEditor_Find=Find ...
\ No newline at end of file diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ModelEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ModelEditor.java index eef4517e..7c4c854e 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 @@ -30,6 +30,7 @@ import org.eclipse.core.runtime.Status; import org.eclipse.e4.tools.emf.ui.common.IModelResource; import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor; import org.eclipse.e4.tools.emf.ui.internal.ShadowComposite; +import org.eclipse.e4.tools.emf.ui.internal.common.component.AddonsEditor; import org.eclipse.e4.tools.emf.ui.internal.common.component.ApplicationEditor; import org.eclipse.e4.tools.emf.ui.internal.common.component.BindingTableEditor; import org.eclipse.e4.tools.emf.ui.internal.common.component.DirectMenuItemEditor; @@ -57,6 +58,7 @@ import org.eclipse.e4.tools.emf.ui.internal.common.component.ToolControlEditor; import org.eclipse.e4.tools.emf.ui.internal.common.component.TrimBarEditor; 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.VBindingTableEditor; import org.eclipse.e4.tools.emf.ui.internal.common.component.virtual.VCommandEditor; import org.eclipse.e4.tools.emf.ui.internal.common.component.virtual.VWindowControlEditor; @@ -110,6 +112,7 @@ public class ModelEditor { public static final int VIRTUAL_MODEL_COMP_BINDINGS = 9; public static final int VIRTUAL_PARTDESCRIPTOR_MENU = 10; public static final int VIRTUAL_TRIMMED_WINDOW_TRIMS = 11; + public static final int VIRTUAL_ADDONS = 12; private Map<EClass, AbstractComponentEditor> editorMap = new HashMap<EClass, AbstractComponentEditor>(); private AbstractComponentEditor[] virtualEditors; @@ -283,7 +286,8 @@ public class ModelEditor { new VCommandEditor(modelProvider.getEditingDomain(), this, ApplicationPackageImpl.Literals.MODEL_COMPONENT__COMMANDS), new VModelComponentBindingEditor(modelProvider.getEditingDomain(), this), new VMenuEditor(modelProvider.getEditingDomain(), this, org.eclipse.e4.ui.model.application.descriptor.basic.impl.BasicPackageImpl.Literals.PART_DESCRIPTOR__MENUS), - new VWindowTrimEditor(modelProvider.getEditingDomain(), this) + new VWindowTrimEditor(modelProvider.getEditingDomain(), this), + new VApplicationAddons(modelProvider.getEditingDomain(), this) }; } @@ -295,6 +299,8 @@ public class ModelEditor { registerEditor(ApplicationPackageImpl.Literals.APPLICATION, new ApplicationEditor(modelProvider.getEditingDomain())); registerEditor(ApplicationPackageImpl.Literals.MODEL_COMPONENTS, new ModelComponentsEditor(modelProvider.getEditingDomain(),this)); registerEditor(ApplicationPackageImpl.Literals.MODEL_COMPONENT, new ModelComponentEditor(modelProvider.getEditingDomain())); + registerEditor(ApplicationPackageImpl.Literals.ADDON, new AddonsEditor(modelProvider.getEditingDomain(),project)); + registerEditor(CommandsPackageImpl.Literals.KEY_BINDING, new KeyBindingEditor(modelProvider.getEditingDomain(),modelProvider)); registerEditor(CommandsPackageImpl.Literals.HANDLER, new HandlerEditor(modelProvider.getEditingDomain(),modelProvider,project)); diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/AddonsEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/AddonsEditor.java new file mode 100644 index 00000000..990de1fd --- /dev/null +++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/AddonsEditor.java @@ -0,0 +1,119 @@ +package org.eclipse.e4.tools.emf.ui.internal.common.component; + +import org.eclipse.core.databinding.observable.list.IObservableList; +import org.eclipse.core.resources.IProject; +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.common.component.dialogs.ContributionClassDialog; +import org.eclipse.e4.ui.model.application.MContribution; +import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl; +import org.eclipse.emf.databinding.EMFDataBindingContext; +import org.eclipse.emf.databinding.edit.EMFEditProperties; +import org.eclipse.emf.edit.domain.EditingDomain; +import org.eclipse.jface.databinding.swt.IWidgetValueProperty; +import org.eclipse.jface.databinding.swt.WidgetProperties; +import org.eclipse.swt.SWT; +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; +import org.eclipse.swt.widgets.Text; + +public class AddonsEditor extends AbstractComponentEditor { + private Composite composite; + private EMFDataBindingContext context; + private IProject project; + + public AddonsEditor(EditingDomain editingDomain, IProject project) { + super(editingDomain); + this.project = project; + } + + @Override + public Image getImage(Object element, Display display) { + return null; + } + + @Override + public String getLabel(Object element) { + return "Addon"; + } + + @Override + public String getDetailLabel(Object element) { + MContribution contrib = (MContribution) element; + if( contrib.getContributionURI() != null && contrib.getContributionURI().trim().length() > 0 ) { + return contrib.getContributionURI().substring(contrib.getContributionURI().lastIndexOf('/')+1); + } + return null; + } + + @Override + public String getDescription(Object element) { + return "Addon Bla Bla Bla"; + } + + @Override + public Composite getEditor(Composite parent, Object object) { + if( composite == null ) { + context = new EMFDataBindingContext(); + composite = createForm(parent,context); + } + getMaster().setValue(object); + return composite; + } + + protected Composite createForm(Composite parent, EMFDataBindingContext context) { + parent = new Composite(parent, SWT.NONE); + parent.setLayout(new GridLayout(3, false)); + + IWidgetValueProperty textProp = WidgetProperties.text(SWT.Modify); + + { + Label l = new Label(parent, SWT.NONE); + l.setText(Messages.AddonsEditor_Id); + + Text t = new Text(parent, SWT.BORDER); + GridData gd = new GridData(GridData.FILL_HORIZONTAL); + gd.horizontalSpan = 2; + t.setLayoutData(gd); + context.bindValue(textProp.observeDelayed(200,t), EMFEditProperties.value(getEditingDomain(), ApplicationPackageImpl.Literals.APPLICATION_ELEMENT__ELEMENT_ID).observeDetail(getMaster())); + } + + // ------------------------------------------------------------ + { + Label l = new Label(parent, SWT.NONE); + l.setText(Messages.AddonsEditor_ClassURI); + + Text t = new Text(parent, SWT.BORDER); + t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + context.bindValue(textProp.observeDelayed(200,t), EMFEditProperties.value(getEditingDomain(), ApplicationPackageImpl.Literals.CONTRIBUTION__CONTRIBUTION_URI).observeDetail(getMaster())); + + final Button b = new Button(parent, SWT.PUSH|SWT.FLAT); + b.setImage(getImage(t.getDisplay(), SEARCH_IMAGE)); + b.setText(Messages.AddonsEditor_Find); + b.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + ContributionClassDialog dialog = new ContributionClassDialog(b.getShell(),project,getEditingDomain(),(MContribution) getMaster().getValue()); + dialog.open(); + } + }); + } + +// ControlFactory.createBindingsWidget(parent, this); + + return parent; + } + + @Override + public IObservableList getChildList(Object element) { + return null; + } + +} 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 a63049b7..01dddf75 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 @@ -50,6 +50,7 @@ public class ApplicationEditor extends AbstractComponentEditor { private IListProperty APPLICATION__COMMANDS = EMFProperties.list(ApplicationPackageImpl.Literals.APPLICATION__COMMANDS); private IListProperty PART_DESCRIPTOR_CONTAINER__DESCRIPTORS = EMFProperties.list(BasicPackageImpl.Literals.PART_DESCRIPTOR_CONTAINER__DESCRIPTORS); private IListProperty ELEMENT_CONTAINER__CHILDREN = EMFProperties.list(UiPackageImpl.Literals.ELEMENT_CONTAINER__CHILDREN); + private IListProperty APPLICATION__ADDONS = EMFProperties.list(ApplicationPackageImpl.Literals.APPLICATION__ADDONS); public ApplicationEditor(EditingDomain editingDomain) { super(editingDomain); @@ -114,6 +115,15 @@ public class ApplicationEditor extends AbstractComponentEditor { @Override public IObservableList getChildList(Object element) { WritableList list = new WritableList(); + list.add(new VirtualEntry<Object>( ModelEditor.VIRTUAL_ADDONS, APPLICATION__ADDONS, element, Messages.ApplicationEditor_Addons) { + + @Override + protected boolean accepted(Object o) { + return true; + } + + }); + list.add(new VirtualEntry<Object>( ModelEditor.VIRTUAL_HANDLER, HANDLER_CONTAINER__HANDLERS, element, Messages.ApplicationEditor_Handlers) { @Override diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VApplicationAddons.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VApplicationAddons.java new file mode 100644 index 00000000..1dcc077c --- /dev/null +++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/component/virtual/VApplicationAddons.java @@ -0,0 +1,213 @@ +package org.eclipse.e4.tools.emf.ui.internal.common.component.virtual; + +import java.util.List; + +import org.eclipse.core.databinding.observable.list.IObservableList; +import org.eclipse.core.databinding.observable.value.WritableValue; +import org.eclipse.e4.tools.emf.ui.common.component.AbstractComponentEditor; +import org.eclipse.e4.tools.emf.ui.internal.ObservableColumnLabelProvider; +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.ui.model.application.MAddon; +import org.eclipse.e4.ui.model.application.MApplication; +import org.eclipse.e4.ui.model.application.MApplicationFactory; +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.impl.CommandsFactoryImpl; +import org.eclipse.e4.ui.model.application.commands.impl.CommandsPackageImpl; +import org.eclipse.e4.ui.model.application.impl.ApplicationPackageImpl; +import org.eclipse.emf.common.command.Command; +import org.eclipse.emf.databinding.EMFDataBindingContext; +import org.eclipse.emf.databinding.edit.EMFEditProperties; +import org.eclipse.emf.databinding.edit.IEMFEditValueProperty; +import org.eclipse.emf.edit.command.AddCommand; +import org.eclipse.emf.edit.command.MoveCommand; +import org.eclipse.emf.edit.command.RemoveCommand; +import org.eclipse.emf.edit.domain.EditingDomain; +import org.eclipse.jface.databinding.viewers.ObservableListContentProvider; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.jface.viewers.TableViewerColumn; +import org.eclipse.swt.SWT; +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 VApplicationAddons extends AbstractComponentEditor { + private Composite composite; + private ModelEditor editor; + private TableViewer viewer; + private EMFDataBindingContext context; + + public VApplicationAddons(EditingDomain editingDomain, ModelEditor editor) { + super(editingDomain); + this.editor = editor; + } + + @Override + public Image getImage(Object element, Display display) { + return null; + } + + @Override + public String getLabel(Object element) { + return "Addons"; + } + + @Override + public String getDetailLabel(Object element) { + return null; + } + + @Override + public String getDescription(Object element) { + return "Addons bla bla bla bla"; + } + + @Override + public Composite getEditor(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) { + parent = new Composite(parent,SWT.NONE); + parent.setLayout(new GridLayout(3, false)); + + { + Label l = new Label(parent, SWT.NONE); + l.setText("Commands"); + l.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING)); + + viewer = new TableViewer(parent); + ObservableListContentProvider cp = new ObservableListContentProvider(); + viewer.setContentProvider(cp); + GridData gd = new GridData(GridData.FILL_HORIZONTAL); + gd.heightHint = 300; + viewer.getControl().setLayoutData(gd); + viewer.getTable().setHeaderVisible(true); + viewer.setLabelProvider(new ComponentLabelProvider(editor)); + + Composite buttonComp = new Composite(parent, SWT.NONE); + buttonComp.setLayoutData(new GridData(GridData.FILL,GridData.END,false,false)); + GridLayout gl = new GridLayout(); + 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("Up"); + b.setImage(getImage(b.getDisplay(), ARROW_UP)); + b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false)); + 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(); + MApplication container = (MApplication) getMaster().getValue(); + int idx = container.getCommands().indexOf(obj) - 1; + if( idx >= 0 ) { + Command cmd = MoveCommand.create(getEditingDomain(), getMaster().getValue(), ApplicationPackageImpl.Literals.APPLICATION__ADDONS, obj, idx); + + if( cmd.canExecute() ) { + getEditingDomain().getCommandStack().execute(cmd); + viewer.setSelection(new StructuredSelection(obj)); + } + } + + } + } + } + }); + + b = new Button(buttonComp, SWT.PUSH | SWT.FLAT); + b.setText("Down"); + b.setImage(getImage(b.getDisplay(), ARROW_DOWN)); + b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false)); + 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(); + MApplication container = (MApplication) getMaster().getValue(); + int idx = container.getCommands().indexOf(obj) + 1; + if( idx < container.getCommands().size() ) { + Command cmd = MoveCommand.create(getEditingDomain(), getMaster().getValue(), ApplicationPackageImpl.Literals.APPLICATION__ADDONS, obj, idx); + + if( cmd.canExecute() ) { + getEditingDomain().getCommandStack().execute(cmd); + viewer.setSelection(new StructuredSelection(obj)); + } + } + + } + } + } + }); + + b = new Button(buttonComp, SWT.PUSH | SWT.FLAT); + b.setText("Add ..."); + b.setImage(getImage(b.getDisplay(), TABLE_ADD_IMAGE)); + b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false)); + b.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + MAddon command = MApplicationFactory.INSTANCE.createAddon(); + Command cmd = AddCommand.create(getEditingDomain(), getMaster().getValue(), ApplicationPackageImpl.Literals.APPLICATION__ADDONS, command); + + if( cmd.canExecute() ) { + getEditingDomain().getCommandStack().execute(cmd); + editor.setSelection(command); + } + } + }); + + b = new Button(buttonComp, SWT.PUSH | SWT.FLAT); + b.setText("Remove"); + b.setImage(getImage(b.getDisplay(), TABLE_DELETE_IMAGE)); + b.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false)); + b.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + if( ! viewer.getSelection().isEmpty() ) { + List<?> commands = ((IStructuredSelection)viewer.getSelection()).toList(); + Command cmd = RemoveCommand.create(getEditingDomain(), getMaster().getValue(), ApplicationPackageImpl.Literals.APPLICATION__ADDONS, commands); + if( cmd.canExecute() ) { + getEditingDomain().getCommandStack().execute(cmd); + } + } + } + }); + } + + return parent; + } + + @Override + public IObservableList getChildList(Object element) { + // TODO Auto-generated method stub + return null; + } + +} |