diff options
author | ptessier | 2013-07-01 11:16:14 +0000 |
---|---|---|
committer | ptessier | 2013-07-01 11:16:14 +0000 |
commit | a793d4b6930be0bbf360047b39b957d374a97a14 (patch) | |
tree | aedb36f8663c1078bc2e1cd87e09a5796df7cec2 /extraplugins | |
parent | ab4a5ee51c77f82994232b3b217e324b83f1be4a (diff) | |
download | org.eclipse.papyrus-a793d4b6930be0bbf360047b39b957d374a97a14.tar.gz org.eclipse.papyrus-a793d4b6930be0bbf360047b39b957d374a97a14.tar.xz org.eclipse.papyrus-a793d4b6930be0bbf360047b39b957d374a97a14.zip |
411886: [Specialization] Adapt Papyrus to create Metamodel
https://bugs.eclipse.org/bugs/show_bug.cgi?id=411886
remove interface from the palette
Diffstat (limited to 'extraplugins')
2 files changed, 445 insertions, 18 deletions
diff --git a/extraplugins/domainmodel/org.eclipse.papyrus.uml.diagram.domain/src-gen/org/eclipse/papyrus/uml/diagram/domain/part/DomainDiagramEditor.java b/extraplugins/domainmodel/org.eclipse.papyrus.uml.diagram.domain/src-gen/org/eclipse/papyrus/uml/diagram/domain/part/DomainDiagramEditor.java index 4872eb733a5..3cd5dea2477 100644 --- a/extraplugins/domainmodel/org.eclipse.papyrus.uml.diagram.domain/src-gen/org/eclipse/papyrus/uml/diagram/domain/part/DomainDiagramEditor.java +++ b/extraplugins/domainmodel/org.eclipse.papyrus.uml.diagram.domain/src-gen/org/eclipse/papyrus/uml/diagram/domain/part/DomainDiagramEditor.java @@ -13,16 +13,58 @@ *****************************************************************************/ package org.eclipse.papyrus.uml.diagram.domain.part; +import java.util.EventObject; +import java.util.Set; + +import org.eclipse.core.commands.operations.IUndoableOperation; +import org.eclipse.core.resources.IMarker; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.emf.transaction.TransactionalEditingDomain; +import org.eclipse.gef.GraphicalViewer; +import org.eclipse.gef.KeyHandler; +import org.eclipse.gef.Tool; +import org.eclipse.gef.commands.CommandStackListener; +import org.eclipse.gef.palette.PaletteRoot; +import org.eclipse.gef.ui.palette.PaletteViewer; +import org.eclipse.gef.ui.palette.PaletteViewerProvider; +import org.eclipse.gmf.runtime.common.core.service.IProviderChangeListener; +import org.eclipse.gmf.runtime.common.core.service.ProviderChangeEvent; +import org.eclipse.gmf.runtime.common.ui.services.marker.MarkerNavigationService; import org.eclipse.gmf.runtime.diagram.core.preferences.PreferencesHint; +import org.eclipse.gmf.runtime.diagram.ui.actions.ActionIds; +import org.eclipse.gmf.runtime.diagram.ui.internal.parts.PaletteToolTransferDragSourceListener; +import org.eclipse.gmf.runtime.diagram.ui.providers.DiagramContextMenuProvider; +import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDocumentProvider; import org.eclipse.gmf.runtime.notation.Diagram; +import org.eclipse.jface.util.LocalSelectionTransfer; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.papyrus.infra.core.editor.IMultiDiagramEditor; import org.eclipse.papyrus.infra.core.services.ServiceException; import org.eclipse.papyrus.infra.core.services.ServicesRegistry; +import org.eclipse.papyrus.infra.gmfdiag.common.GmfMultiDiagramDocumentProvider; +import org.eclipse.papyrus.uml.diagram.common.listeners.DropTargetListener; +import org.eclipse.papyrus.uml.diagram.common.part.PapyrusPaletteContextMenuProvider; +import org.eclipse.papyrus.uml.diagram.common.part.PapyrusPaletteViewer; +import org.eclipse.papyrus.uml.diagram.common.part.UmlGmfDiagramEditor; +import org.eclipse.papyrus.uml.diagram.common.service.PapyrusPaletteService; import org.eclipse.papyrus.uml.diagram.domain.Activator; +import org.eclipse.swt.SWT; +import org.eclipse.swt.dnd.TransferData; +import org.eclipse.swt.events.KeyEvent; +import org.eclipse.swt.events.MouseEvent; +import org.eclipse.swt.events.MouseListener; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.ide.IGotoMarker; +import org.eclipse.ui.part.ShowInContext; /** * Diagram editor that extends the UMLDiagramEditor editor. */ -public class DomainDiagramEditor extends org.eclipse.papyrus.uml.diagram.clazz.part.UMLDiagramEditor { +public class DomainDiagramEditor extends UmlGmfDiagramEditor implements IProviderChangeListener, IGotoMarker { /** context used when trying to find services */ public static final String CONTEXT_ID = "org.eclipse.papyrus.uml.diagram.domain.part.DomainDiagramEditorID"; //$NON-NLS-1$ @@ -36,33 +78,416 @@ public class DomainDiagramEditor extends org.eclipse.papyrus.uml.diagram.clazz.p } /** - * {@inheritDoc} + * @generated + */ + private KeyHandler paletteKeyHandler = null; + + /** + * @generated + */ + private MouseListener paletteMouseListener = null; + + /** + * @generated + */ + private IUndoableOperation savedOperation = null; + + /** + * @generated + */ + private TransactionalEditingDomain editingDomain; + + /** + * @generated + */ + private IDocumentProvider documentProvider; + + /** + * @generated + */ + public DomainDiagramEditor(ServicesRegistry servicesRegistry, Diagram diagram) throws ServiceException { + super(servicesRegistry, diagram); + + // adds a listener to the palette service, which reacts to palette customizations + PapyrusPaletteService.getInstance().addProviderChangeListener(this); + + // Share the same editing provider + editingDomain = servicesRegistry.getService(TransactionalEditingDomain.class); + documentProvider = new GmfMultiDiagramDocumentProvider(editingDomain); + + // overrides editing domain created by super constructor + setDocumentProvider(documentProvider); + } + + /** + * @generated + */ + protected PaletteRoot createPaletteRoot(PaletteRoot existingPaletteRoot) { + PaletteRoot paletteRoot; + if(existingPaletteRoot == null) { + paletteRoot = PapyrusPaletteService.getInstance().createPalette(this, getDefaultPaletteContent()); + } else { + PapyrusPaletteService.getInstance().updatePalette(existingPaletteRoot, this, getDefaultPaletteContent()); + paletteRoot = existingPaletteRoot; + } + applyCustomizationsToPalette(paletteRoot); + return paletteRoot; + } + + /** + * @generated + */ + protected PreferencesHint getPreferencesHint() { + return Activator.DIAGRAM_PREFERENCES_HINT; + } + + /** + * @generated */ - @Override public String getContributorId() { return Activator.PLUGIN_ID; } /** - * {@inheritDoc} + * @generated + */ + protected final IDocumentProvider getDocumentProvider(IEditorInput input) { + return documentProvider; + } + + /** + * @generated + */ + public TransactionalEditingDomain getEditingDomain() { + return editingDomain; + } + + /** + * @generated + */ + protected final void setDocumentProvider(IEditorInput input) { + // Already set in the constructor + } + + /** + * @generated + */ + public void gotoMarker(IMarker marker) { + MarkerNavigationService.getInstance().gotoMarker(this, marker); + } + + /** + * @generated + */ + public boolean isSaveAsAllowed() { + return true; + } + + /** + * @generated + */ + public void doSaveAs() { + performSaveAs(new NullProgressMonitor()); + } + + /** + * @generated + */ + protected void performSaveAs(IProgressMonitor progressMonitor) { + // Nothing + } + + /** + * @generated + */ + public ShowInContext getShowInContext() { + return new ShowInContext(getEditorInput(), getGraphicalViewer().getSelection()); + } + + /** + * @generated + */ + protected void configureGraphicalViewer() { + super.configureGraphicalViewer(); + + // Replace diagram contextual menu removing default + // delete from model action. + DiagramContextMenuProvider provider = (DiagramContextMenuProvider)getDiagramGraphicalViewer().getContextMenu(); + Set<String> menuExclusions = provider.getExclusionSet(); + menuExclusions.add(ActionIds.ACTION_DELETE_FROM_MODEL); + provider.setExclusionSet(menuExclusions); + } + + /** + * @generated + */ + protected TransactionalEditingDomain createEditingDomain() { + // Already configured + return editingDomain; + } + + /** + * @generated + */ + protected void configureDiagramEditDomain() { + super.configureDiagramEditDomain(); + getDiagramEditDomain().getDiagramCommandStack().addCommandStackListener(new CommandStackListener() { + + public void commandStackChanged(EventObject event) { + firePropertyChange(IEditorPart.PROP_DIRTY); + } + }); + } + + /** + * @generated + */ + public void doSave(IProgressMonitor progressMonitor) { + // The saving of the resource is done by the CoreMultiDiagramEditor + savedOperation = getOperationHistory().getUndoOperation(getUndoContext()); + } + + /** + * @generated + */ + public boolean isDirty() { + IUndoableOperation op = getOperationHistory().getUndoOperation(getUndoContext()); + return savedOperation != op; + } + + /** + * @generated + */ + public void providerChanged(ProviderChangeEvent event) { + // update the palette if the palette service has changed + if(PapyrusPaletteService.getInstance().equals(event.getSource())) { + PapyrusPaletteService.getInstance().updatePalette(getPaletteViewer().getPaletteRoot(), this, getDefaultPaletteContent()); + } + } + + /** + * @generated + */ + public void dispose() { + // remove palette service listener + // remove preference listener + PapyrusPaletteService.getInstance().removeProviderChangeListener(this); + + super.dispose(); + } + + /** + * @generated + */ + protected PaletteViewer getPaletteViewer() { + return getEditDomain().getPaletteViewer(); + } + + /** + * @generated + */ + protected PaletteViewer constructPaletteViewer() { + return new PapyrusPaletteViewer(); + } + + /** + * @generated + */ + protected PaletteViewerProvider createPaletteViewerProvider() { + getEditDomain().setPaletteRoot(createPaletteRoot(null)); + return new PaletteViewerProvider(getEditDomain()) { + + /** + * Override to provide the additional behavior for the tools. Will intialize with a + * PaletteEditPartFactory that has a TrackDragger that understand how to handle the + * mouseDoubleClick event for shape creation tools. Also will initialize the palette + * with a defaultTool that is the SelectToolEx that undestands how to handle the enter + * key which will result in the creation of the shape also. + */ + protected void configurePaletteViewer(PaletteViewer viewer) { + super.configurePaletteViewer(viewer); + + // customize menu... + viewer.setContextMenu(new PapyrusPaletteContextMenuProvider(viewer)); + + viewer.getKeyHandler().setParent(getPaletteKeyHandler()); + viewer.getControl().addMouseListener(getPaletteMouseListener()); + + // Add a transfer drag target listener that is supported on + // palette template entries whose template is a creation tool. + // This will enable drag and drop of the palette shape creation + // tools. + viewer.addDragSourceListener(new PaletteToolTransferDragSourceListener(viewer)); + viewer.setCustomizer(createPaletteCustomizer()); + } + + public PaletteViewer createPaletteViewer(Composite parent) { + PaletteViewer pViewer = constructPaletteViewer(); + pViewer.createControl(parent); + configurePaletteViewer(pViewer); + hookPaletteViewer(pViewer); + return pViewer; + } + + /** + * @return Palette Key Handler for the palette + */ + private KeyHandler getPaletteKeyHandler() { + + if(paletteKeyHandler == null) { + + paletteKeyHandler = new KeyHandler() { + + /** + * Processes a <i>key released </i> event. This method is called by the Tool + * whenever a key is released, and the Tool is in the proper state. Override + * to support pressing the enter key to create a shape or connection + * (between two selected shapes) + * + * @param event + * the KeyEvent + * @return <code>true</code> if KeyEvent was handled in some way + */ + public boolean keyReleased(KeyEvent event) { + + if(event.keyCode == SWT.Selection) { + + Tool tool = getPaletteViewer().getActiveTool().createTool(); + + if(toolSupportsAccessibility(tool)) { + + tool.keyUp(event, getDiagramGraphicalViewer()); + + // deactivate current selection + getPaletteViewer().setActiveTool(null); + + return true; + } + + } + return super.keyReleased(event); + } + + }; + + } + return paletteKeyHandler; + } + + /** + * @return Palette Mouse listener for the palette + */ + private MouseListener getPaletteMouseListener() { + + if(paletteMouseListener == null) { + + paletteMouseListener = new MouseListener() { + + /** + * Flag to indicate that the current active tool should be cleared after a + * mouse double-click event. + */ + private boolean clearActiveTool = false; + + /** + * Override to support double-clicking a palette tool entry to create a + * shape or connection (between two selected shapes). + * + * @see MouseListener#mouseDoubleClick(MouseEvent) + */ + public void mouseDoubleClick(MouseEvent e) { + Tool tool = getPaletteViewer().getActiveTool().createTool(); + + if(toolSupportsAccessibility(tool)) { + + tool.setViewer(getDiagramGraphicalViewer()); + tool.setEditDomain(getDiagramGraphicalViewer().getEditDomain()); + tool.mouseDoubleClick(e, getDiagramGraphicalViewer()); + + // Current active tool should be deactivated, + // but if it is down here it will get + // reactivated deep in GEF palette code after + // receiving mouse up events. + clearActiveTool = true; + } + } + + public void mouseDown(MouseEvent e) { + // do nothing + } + + public void mouseUp(MouseEvent e) { + // Deactivate current active tool here if a + // double-click was handled. + if(clearActiveTool) { + getPaletteViewer().setActiveTool(null); + clearActiveTool = false; + } + + } + }; + + } + return paletteMouseListener; + } + + }; + } + + /** + * @generated */ @Override - protected PreferencesHint getPreferencesHint() { - return Activator.DIAGRAM_PREFERENCES_HINT; + public GraphicalViewer getGraphicalViewer() { + return super.getGraphicalViewer(); } /** - * Constructor. - * - * @param servicesRegistry - * registry to find services (label providers, editing domain, etc.) - * @param diagram - * edited diagram - * @throws ServiceException - * exception thrown ni case of issue during initialization + * @generated */ - public DomainDiagramEditor(ServicesRegistry servicesRegistry, Diagram diagram) throws ServiceException { - super(servicesRegistry, diagram); + @Override + protected void initializeGraphicalViewer() { + super.initializeGraphicalViewer(); + + // Enable Drop + getDiagramGraphicalViewer().addDropTargetListener(new DropTargetListener(getDiagramGraphicalViewer(), LocalSelectionTransfer.getTransfer()) { + + @Override + protected Object getJavaObject(TransferData data) { + return LocalSelectionTransfer.getTransfer().nativeToJava(data); + } + + @Override + protected TransactionalEditingDomain getTransactionalEditingDomain() { + return getEditingDomain(); + } + }); + } + /** + * @generated + */ + @Override + public void selectionChanged(IWorkbenchPart part, ISelection selection) { + if(getSite().getPage().getActiveEditor() instanceof IMultiDiagramEditor) { + IMultiDiagramEditor editor = (IMultiDiagramEditor)getSite().getPage().getActiveEditor(); + // If not the active editor, ignore selection changed. + if(this.equals(editor.getActiveEditor())) { + updateActions(getSelectionActions()); + super.selectionChanged(part, selection); + } else { + super.selectionChanged(part, selection); + } + } else { + super.selectionChanged(part, selection); + } + // from + // org.eclipse.gmf.runtime.diagram.ui.resources.editor.parts.DiagramDocumentEditor.selectionChanged(IWorkbenchPart, + // ISelection) + if(part == this) { + rebuildStatusLine(); + } + } } + diff --git a/extraplugins/domainmodel/org.eclipse.papyrus.uml.diagram.domain/src/org/eclipse/papyrus/uml/diagram/domain/policies/CustomDragDropEditPolicy.java b/extraplugins/domainmodel/org.eclipse.papyrus.uml.diagram.domain/src/org/eclipse/papyrus/uml/diagram/domain/policies/CustomDragDropEditPolicy.java index 8ed716f7935..30c2aa9877f 100644 --- a/extraplugins/domainmodel/org.eclipse.papyrus.uml.diagram.domain/src/org/eclipse/papyrus/uml/diagram/domain/policies/CustomDragDropEditPolicy.java +++ b/extraplugins/domainmodel/org.eclipse.papyrus.uml.diagram.domain/src/org/eclipse/papyrus/uml/diagram/domain/policies/CustomDragDropEditPolicy.java @@ -9,7 +9,7 @@ *****************************************************************************/
package org.eclipse.papyrus.uml.diagram.domain.policies;
-import org.eclipse.papyrus.uml.diagram.clazz.custom.policies.ClassDiagramDragDropEditPolicy;
+import org.eclipse.papyrus.uml.diagram.domain.edit.policy.DomainDiagramDragDropEditPolicy;
/**
* <pre>
@@ -19,6 +19,8 @@ import org.eclipse.papyrus.uml.diagram.clazz.custom.policies.ClassDiagramDragDro * related to elements that are not used currently in PackageDiagram.
* </pre>
*/
-public class CustomDragDropEditPolicy extends ClassDiagramDragDropEditPolicy {
+public class CustomDragDropEditPolicy extends DomainDiagramDragDropEditPolicy {
+
+
}
|