Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/toolsmiths/org.eclipse.papyrus.def/xtend/aspects/xpt/editor/Editor.xtend')
-rw-r--r--plugins/toolsmiths/org.eclipse.papyrus.def/xtend/aspects/xpt/editor/Editor.xtend550
1 files changed, 550 insertions, 0 deletions
diff --git a/plugins/toolsmiths/org.eclipse.papyrus.def/xtend/aspects/xpt/editor/Editor.xtend b/plugins/toolsmiths/org.eclipse.papyrus.def/xtend/aspects/xpt/editor/Editor.xtend
new file mode 100644
index 00000000000..435690d4f88
--- /dev/null
+++ b/plugins/toolsmiths/org.eclipse.papyrus.def/xtend/aspects/xpt/editor/Editor.xtend
@@ -0,0 +1,550 @@
+/**
+ * Copyright (c) 2006, 2017 Borland Software Corporation, CEA, 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:
+ * Alexander Shatalin (Borland) - initial API and implementation
+ * Michael Golubev (Montages) - #386838 - migrate to Xtend2
+ * Emilien Perico (Atos Origin) - add code to refactor some classes
+ * Christian W. Damus (CEA) - bug 430648
+ * Christian W. Damus (CEA) - bug 431023
+ * Mickaël ADAM (ALL4TEC) mickael.adam@all4tec.net - Bug 512343
+ */
+package aspects.xpt.editor
+
+import aspects.xpt.navigator.NavigatorLinkHelper
+import com.google.inject.Inject
+import com.google.inject.Singleton
+import org.eclipse.gmf.codegen.gmfgen.GenEditorView
+import org.eclipse.gmf.codegen.gmfgen.GenNavigator
+import org.eclipse.gmf.codegen.gmfgen.Palette
+import xpt.Common
+import xpt.navigator.Utils_qvto
+import xpt.CodeStyle
+
+@Singleton class Editor extends xpt.editor.Editor {
+ @Inject extension Common;
+ @Inject NavigatorLinkHelper xptNavigatorLinkHelper;
+ @Inject extension Utils_qvto;
+ @Inject extension CodeStyle
+
+ override extendsList(GenEditorView it) '''extends org.eclipse.papyrus.uml.diagram.common.part.UmlGmfDiagramEditor'''
+
+ override attributes(GenEditorView it) '''
+ «generatedMemberComment»
+ public static final String ID = "«ID»"; «nonNLS»
+
+ «generatedMemberComment»
+public static final String CONTEXT_ID = "«contextID»"; «nonNLS»
+
+
+ ««« Documentation. adds listener for papyrus editors
+ «generatedMemberComment»
+ private org.eclipse.gef.KeyHandler paletteKeyHandler = null;
+
+ «generatedMemberComment»
+ private org.eclipse.swt.events.MouseListener paletteMouseListener = null;
+
+ ««« Helps to handle correctly the dirty state
+ «generatedMemberComment»
+ private org.eclipse.papyrus.commands.util.OperationHistoryDirtyState dirtyState;
+
+ «generatedMemberComment»
+ private org.eclipse.emf.transaction.TransactionalEditingDomain editingDomain;
+
+ «generatedMemberComment»
+ private org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDocumentProvider documentProvider;
+ '''
+
+ override constructor(GenEditorView it) '''
+ «generatedMemberComment»
+ public «className»(org.eclipse.papyrus.infra.core.services.ServicesRegistry servicesRegistry, org.eclipse.gmf.runtime.notation.Diagram diagram) throws org.eclipse.papyrus.infra.core.services.ServiceException{
+ super(servicesRegistry, diagram);
+
+ ««« Documentation. adds listener for papyrus palette service
+ // adds a listener to the palette service, which reacts to palette customizations
+ org.eclipse.papyrus.infra.gmfdiag.common.service.palette.PapyrusPaletteService.getInstance().addProviderChangeListener(this);
+
+ «««Share the same editing domain
+ // Share the same editing provider
+ editingDomain = servicesRegistry.getService(org.eclipse.emf.transaction.TransactionalEditingDomain.class);
+ documentProvider = new org.eclipse.papyrus.infra.gmfdiag.common.GmfMultiDiagramDocumentProvider(editingDomain);
+
+ // overrides editing domain created by super constructor
+ setDocumentProvider(documentProvider);
+
+ «««end of listeners addition
+ }
+ '''
+
+ override getNavigatorSelection(GenNavigator it) '''
+
+ «generatedMemberComment»
+ private org.eclipse.jface.viewers.ISelection getNavigatorSelection() {
+ «IF getDiagramTopReference(it) !=null»
+ org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDiagramDocument document = getDiagramDocument();
+ «ENDIF»
+ «xptNavigatorLinkHelper.findSelectionBody(it)»
+ }
+ '''
+
+override createPaletteRoot (Palette it)'''
+ «generatedMemberComment»
+ protected org.eclipse.gef.palette.PaletteRoot createPaletteRoot(org.eclipse.gef.palette.PaletteRoot existingPaletteRoot) {
+ org.eclipse.gef.palette.PaletteRoot paletteRoot;
+ if (existingPaletteRoot == null) {
+ paletteRoot = org.eclipse.papyrus.infra.gmfdiag.common.service.palette.PapyrusPaletteService.getInstance().createPalette(this, getDefaultPaletteContent());
+ } else {
+ org.eclipse.papyrus.infra.gmfdiag.common.service.palette.PapyrusPaletteService.getInstance().updatePalette(existingPaletteRoot, this, getDefaultPaletteContent());
+ paletteRoot = existingPaletteRoot;
+ }
+ applyCustomizationsToPalette(paletteRoot);
+ return paletteRoot;
+ }
+'''
+
+def createPaletteCustomizer (GenEditorView it)'''
+ «generatedMemberComment»
+ protected org.eclipse.gef.ui.palette.PaletteCustomizer createPaletteCustomizer() {
+ return new org.eclipse.papyrus.infra.gmfdiag.common.service.palette.PapyrusPaletteCustomizer(getPreferenceStore());
+ }
+'''
+
+override additions (GenEditorView it)'''
+
+ «createEditingDomain(it)»
+
+ « configureDiagramEditDomain(it)»
+
+ « doSave(it)»
+
+ « getDirtyState(it)»
+
+ « setUndoContext(it)»
+
+ « isDirty(it)»
+
+ «««Documentation. adds method to handle palette changes
+ « handlePaletteChange(it)»
+
+ « dispose(it)»
+
+ « getPaletteViewer(it)»
+
+ ««« Documentation: (RS) advanced customization abilities
+ ««« « createPaletteCustomizer»
+
+
+ « constructPaletteViewer(it)»
+
+ « createPaletteviewerProvider(it)»
+
+ «getGraphicalViewer(it)»
+
+ «initializeGraphicalViewer(it)»
+
+ «selectionChanged(it)»
+'''
+
+def handlePaletteChange (GenEditorView it) '''
+ «generatedMemberComment»
+ public void providerChanged(org.eclipse.gmf.runtime.common.core.service.ProviderChangeEvent event) {
+ // update the palette if the palette service has changed
+ if (org.eclipse.papyrus.infra.gmfdiag.common.service.palette.PapyrusPaletteService.getInstance().equals(event.getSource())) {
+ org.eclipse.papyrus.infra.gmfdiag.common.service.palette.PapyrusPaletteService.getInstance().updatePalette(getPaletteViewer().getPaletteRoot(), this,
+ getDefaultPaletteContent());
+ }
+ }
+'''
+
+def constructPaletteViewer (GenEditorView it) '''
+ «generatedMemberComment»
+ protected org.eclipse.gef.ui.palette.PaletteViewer constructPaletteViewer() {
+ return new org.eclipse.papyrus.infra.gmfdiag.common.service.palette.PapyrusPaletteViewer();
+ }
+'''
+
+override dispose(GenEditorView it)'''
+ «generatedMemberComment»
+ public void dispose() {
+ // remove palette service listener
+ // remove preference listener
+ org.eclipse.papyrus.infra.gmfdiag.common.service.palette.PapyrusPaletteService.getInstance().removeProviderChangeListener(this);
+
+ if(dirtyState != null) {
+ dirtyState.dispose();
+ dirtyState = null;
+ }
+
+ super.dispose();
+ }
+'''
+
+def getPaletteViewer (GenEditorView it)'''
+ «generatedMemberComment»
+ protected org.eclipse.gef.ui.palette.PaletteViewer getPaletteViewer() {
+ return getEditDomain().getPaletteViewer();
+ }
+'''
+
+override implementsList(Iterable<String> it)'''
+ implements org.eclipse.gmf.runtime.common.core.service.IProviderChangeListener
+ «IF ! it.isEmpty»,
+ «FOR string : it SEPARATOR ', '»
+ «implementsListEntry(string)»
+ «ENDFOR»
+ «ENDIF»
+'''
+
+def implementsListEntry (String it)'''«it»'''
+
+def createPaletteviewerProvider (GenEditorView it)'''
+«generatedMemberComment»
+protected org.eclipse.gef.ui.palette.PaletteViewerProvider createPaletteViewerProvider() {
+ getEditDomain().setPaletteRoot(createPaletteRoot(null));
+ return new org.eclipse.gef.ui.palette.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.
+ */
+ «overrideC(it.editorGen.diagram)»
+ protected void configurePaletteViewer(org.eclipse.gef.ui.palette.PaletteViewer viewer) {
+ super.configurePaletteViewer(viewer);
+
+ // customize menu...
+ viewer.setContextMenu(new org.eclipse.papyrus.infra.gmfdiag.common.service.palette.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 org.eclipse.gmf.runtime.diagram.ui.internal.parts.PaletteToolTransferDragSourceListener(viewer));
+ viewer.setCustomizer(createPaletteCustomizer());
+ }
+
+ «overrideC(it.editorGen.diagram)»
+ public org.eclipse.gef.ui.palette.PaletteViewer createPaletteViewer(org.eclipse.swt.widgets.Composite parent) {
+ org.eclipse.gef.ui.palette.PaletteViewer pViewer = constructPaletteViewer();
+ pViewer.createControl(parent);
+ configurePaletteViewer(pViewer);
+ hookPaletteViewer(pViewer);
+ return pViewer;
+ }
+
+ /**
+ * @return Palette Key Handler for the palette
+ */
+ private org.eclipse.gef.KeyHandler getPaletteKeyHandler() {
+
+ if (paletteKeyHandler == null) {
+
+ paletteKeyHandler = new org.eclipse.gef.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
+ */
+ «overrideC(it.editorGen.diagram)»
+ public boolean keyReleased(org.eclipse.swt.events.KeyEvent event) {
+
+ if (event.keyCode == org.eclipse.swt.SWT.Selection) {
+
+ org.eclipse.gef.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 org.eclipse.swt.events.MouseListener getPaletteMouseListener() {
+
+ if (paletteMouseListener == null) {
+
+ paletteMouseListener = new org.eclipse.swt.events.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 org.eclipse.swt.events.MouseListener#mouseDoubleClick(org.eclipse.swt.events.MouseEvent)
+ */
+ «overrideI(it.editorGen.diagram)»
+ public void mouseDoubleClick(org.eclipse.swt.events.MouseEvent e) {
+ org.eclipse.gef.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;
+ }
+ }
+
+ «overrideI(it.editorGen.diagram)»
+ public void mouseDown(org.eclipse.swt.events.MouseEvent e) {
+ // do nothing
+ }
+
+ «overrideI(it.editorGen.diagram)»
+ public void mouseUp(org.eclipse.swt.events.MouseEvent e) {
+ // Deactivate current active tool here if a
+ // double-click was handled.
+ if (clearActiveTool) {
+ getPaletteViewer().setActiveTool(null);
+ clearActiveTool = false;
+ }
+
+ }
+ };
+
+ }
+ return paletteMouseListener;
+ }
+
+ };
+ }
+'''
+
+//Not used
+override performSaveAs (GenEditorView it)'''
+ «generatedMemberComment»
+protected void performSaveAs(org.eclipse.core.runtime.IProgressMonitor progressMonitor) {
+ // Nothing
+}
+'''
+
+//Share the same editing domain
+override getEditingDomain (GenEditorView it)'''
+ «generatedMemberComment»
+ public org.eclipse.emf.transaction.TransactionalEditingDomain getEditingDomain() {
+ return editingDomain;
+ }
+'''
+
+def createEditingDomain (GenEditorView it)'''
+«generatedMemberComment»
+ protected org.eclipse.emf.transaction.TransactionalEditingDomain createEditingDomain() {
+ // Already configured
+ return editingDomain;
+ }
+'''
+
+
+def configureDiagramEditDomain (GenEditorView it)'''
+«generatedMemberComment»
+ protected void configureDiagramEditDomain() {
+ super.configureDiagramEditDomain();
+ getDiagramEditDomain().getDiagramCommandStack().addCommandStackListener(new org.eclipse.gef.commands.CommandStackListener() {
+
+ «overrideI(it.editorGen.diagram)»
+ public void commandStackChanged(java.util.EventObject event) {
+ if (org.eclipse.swt.widgets.Display.getCurrent() == null) {
+ org.eclipse.swt.widgets.Display.getDefault().asyncExec(new Runnable() {
+
+ @Override
+ public void run() {
+ firePropertyChange(org.eclipse.ui.IEditorPart.PROP_DIRTY);
+ }
+ });
+ } else {
+ firePropertyChange(org.eclipse.ui.IEditorPart.PROP_DIRTY);
+ }
+ }
+ });
+ }
+'''
+
+def doSave (GenEditorView it)'''
+«generatedMemberComment»
+ public void doSave(org.eclipse.core.runtime.IProgressMonitor progressMonitor) {
+ // The saving of the resource is done by the CoreMultiDiagramEditor
+ getDirtyState().saved();
+ }
+'''
+
+def getDirtyState (GenEditorView it)'''
+«generatedMemberComment»
+ protected org.eclipse.papyrus.commands.util.OperationHistoryDirtyState getDirtyState() {
+ if(dirtyState == null) {
+ dirtyState = org.eclipse.papyrus.commands.util.OperationHistoryDirtyState.newInstance(getUndoContext(), getOperationHistory());
+ }
+ return dirtyState;
+ }
+'''
+
+def setUndoContext (GenEditorView it)'''
+«generatedMemberComment»
+ protected void setUndoContext(org.eclipse.core.commands.operations.IUndoContext context) {
+ if(dirtyState != null) {
+ dirtyState.dispose();
+ dirtyState = null;
+ }
+
+ super.setUndoContext(context);
+ }
+'''
+
+//Fix the dirty state
+def isDirty (GenEditorView it)'''
+«generatedMemberComment»
+ public boolean isDirty() {
+ return getDirtyState().isDirty();
+ }
+'''
+
+//Code refactoring moved in UMLDiagramEditor
+override getDocumentProvider (GenEditorView it)'''
+ «generatedMemberComment»
+ protected final org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDocumentProvider getDocumentProvider(org.eclipse.ui.IEditorInput input) {
+ return documentProvider;
+ }
+'''
+
+override setDocumentProvider (GenEditorView it)'''
+ «generatedMemberComment»
+ protected final void setDocumentProvider(org.eclipse.ui.IEditorInput input) {
+ // Already set in the constructor
+ }
+'''
+
+def getGraphicalViewer (GenEditorView it)'''
+«generatedMemberComment»
+ @Override
+ public org.eclipse.gef.GraphicalViewer getGraphicalViewer() {
+ return super.getGraphicalViewer();
+ }
+'''
+
+
+override initializeGraphicalViewer (GenEditorView it)'''
+«generatedMemberComment»
+ @Override
+ protected void initializeGraphicalViewer() {
+ super.initializeGraphicalViewer();
+
+ // Enable Drop
+ getDiagramGraphicalViewer().addDropTargetListener(
+ new org.eclipse.papyrus.uml.diagram.common.listeners.DropTargetListener(getDiagramGraphicalViewer(), org.eclipse.jface.util.LocalSelectionTransfer.getTransfer()) {
+
+ @Override
+ protected Object getJavaObject(org.eclipse.swt.dnd.TransferData data) {
+ // It is usual for the transfer data not to be set because it is available locally
+ return LocalSelectionTransfer.getTransfer().getSelection();
+ }
+
+ @Override
+ protected org.eclipse.emf.transaction.TransactionalEditingDomain getTransactionalEditingDomain() {
+ return getEditingDomain();
+ }
+ });
+
+ }
+'''
+
+def selectionChanged (GenEditorView it)'''
+«generatedMemberComment»
+ @Override
+ public void selectionChanged(org.eclipse.ui.IWorkbenchPart part, org.eclipse.jface.viewers.ISelection selection) {
+ if (getSite().getPage().getActiveEditor() instanceof org.eclipse.papyrus.infra.ui.editor.IMultiDiagramEditor) {
+ org.eclipse.papyrus.infra.ui.editor.IMultiDiagramEditor editor = (org.eclipse.papyrus.infra.ui.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();
+ }
+ }
+'''
+
+override getContextID (GenEditorView it)'''
+ «generatedMemberComment»
+protected String getContextID() {
+ return CONTEXT_ID;
+}
+'''
+
+ override getAdapter(GenEditorView it) '''
+ «IF !hasPropertySheet(it) || hasNavigator(it)»
+
+ «generatedMemberComment»
+ @SuppressWarnings("rawtypes")
+ public Object getAdapter(Class type) {
+ «IF !hasPropertySheet(it)»
+ if (type == org.eclipse.ui.views.properties.IPropertySheetPage.class) {
+ return null;
+ }
+ «ENDIF»
+ «IF hasNavigator(it)»
+ if (type == org.eclipse.ui.part.IShowInTargetList.class) {
+ return new org.eclipse.ui.part.IShowInTargetList() {
+
+ «overrideI(it.editorGen.diagram)»
+ public String[] getShowInTargetIds() {
+ return new String[] { org.eclipse.ui.navigator.resources.ProjectExplorer.VIEW_ID };
+ }
+ };
+ }
+ «ENDIF»
+ return super.getAdapter(type);
+ }
+ «ENDIF»
+ '''
+
+}

Back to the top