diff options
Diffstat (limited to 'plugins/toolsmiths/gmf-tooling/org.eclipse.papyrus.gmf.codegen.xtend/xtend/xpt/editor/Editor.xtend')
-rw-r--r-- | plugins/toolsmiths/gmf-tooling/org.eclipse.papyrus.gmf.codegen.xtend/xtend/xpt/editor/Editor.xtend | 889 |
1 files changed, 589 insertions, 300 deletions
diff --git a/plugins/toolsmiths/gmf-tooling/org.eclipse.papyrus.gmf.codegen.xtend/xtend/xpt/editor/Editor.xtend b/plugins/toolsmiths/gmf-tooling/org.eclipse.papyrus.gmf.codegen.xtend/xtend/xpt/editor/Editor.xtend index f29487c024f..d0cd9154cf6 100644 --- a/plugins/toolsmiths/gmf-tooling/org.eclipse.papyrus.gmf.codegen.xtend/xtend/xpt/editor/Editor.xtend +++ b/plugins/toolsmiths/gmf-tooling/org.eclipse.papyrus.gmf.codegen.xtend/xtend/xpt/editor/Editor.xtend @@ -1,38 +1,44 @@ -/******************************************************************************* - * Copyright (c) 2006, 2020 Borland Software Corporation, CEA LIST, Artal and others - * +/***************************************************************************** + * Copyright (c) 2006, 2017, 2021 Borland Software Corporation, CEA LIST, Artal and others + * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-2.0/ - * + * https://www.eclipse.org/legal/epl-2.0/ + * * SPDX-License-Identifier: EPL-2.0 * - * Contributors: - * Alexander Shatalin (Borland) - initial API and implementation - * Michael Golubev (Montages) - #386838 - migrate to Xtend2 - * Aurelien Didier (ARTAL) - aurelien.didier51@gmail.com - Bug 569174 + * 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 + * Mickael ADAM (ALL4TEC) mickael.adam@all4tec.net - Bug 512343 + * Etienne Allogo (ARTAL) - etienne.allogo@artal.fr - Bug 569174 : 1.4 Merge papyrus extension templates into codegen.xtend + * Etienne Allogo (ARTAL) - etienne.allogo@artal.fr - Bug 569174 : L1.2 clean up *****************************************************************************/ + package xpt.editor import com.google.inject.Inject +import com.google.inject.Singleton import java.util.List import org.eclipse.papyrus.gmf.codegen.gmfgen.GenEditorView import org.eclipse.papyrus.gmf.codegen.gmfgen.GenNavigator import org.eclipse.papyrus.gmf.codegen.gmfgen.Palette import org.eclipse.papyrus.gmf.codegen.xtend.annotations.Localization import plugin.Activator +import xpt.CodeStyle import xpt.Common -import xpt.Common_qvto import xpt.Externalizer import xpt.ExternalizerUtils_qvto +import xpt.navigator.NavigatorItem import xpt.navigator.NavigatorLinkHelper -import xpt.editor.palette.PaletteFactory -import xpt.navigator.NavigatorItem
import xpt.CodeStyle +import xpt.navigator.Utils_qvto -@com.google.inject.Singleton class Editor { +@Singleton class Editor { @Inject extension Common; - @Inject extension Common_qvto; @Inject extension CodeStyle; @Inject extension ExternalizerUtils_qvto; @@ -41,7 +47,8 @@ import xpt.navigator.NavigatorItem
import xpt.CodeStyle @Inject NavigatorLinkHelper xptNavigatorLinkHelper; @Inject NavigatorItem xptNavigatorItem; @Inject DiagramEditorContextMenuProvider xptDiagramEditorContextMenuProvider; - @Inject PaletteFactory pallette; + + @Inject extension Utils_qvto; def className(GenEditorView it) '''«it.className»''' @@ -51,115 +58,13 @@ import xpt.navigator.NavigatorItem
import xpt.CodeStyle def fullPath(GenEditorView it) '''«qualifiedClassName(it)»''' - def extendsList(GenEditorView it) '''extends org.eclipse.gmf.runtime.diagram.ui.resources.editor.parts.DiagramDocumentEditor''' - def implementsList(GenEditorView it) '''«implementsList(buildImplementsList(it))»''' - def implementsList(Iterable<String> list) '''«IF list.notEmpty»implements «FOR next : list SEPARATOR ', '»«next»«ENDFOR»«ENDIF»''' - - def Editor(GenEditorView it) ''' - «copyright(editorGen)» - package «packageName(it)»; - - «generatedClassComment» - public class «className(it)» «extendsList(it)» «implementsList(it)» { - - «attributes(it)» - - «constructor(it)» - - «getContextID(it)» - - «IF editorGen.diagram.palette != null» - «createPaletteRoot(editorGen.diagram.palette)» - «ENDIF» - - «getPreferencesHint(it)» - - «getContributorId(it)» - - «getAdapter(it)» - - «getDocumentProvider(it)» - - «getEditingDomain(it)» - - «setDocumentProvider(it)» - «IF isIDEMode(it)» - - «gotoMarker(it)» - - «isSaveAsAllowed(it)» - - «doSaveAs(it)» - - «performSaveAs(it)» - - «getShowInContext(it)» - - «IF hasNavigator(it)» - «getNavigatorSelection(it.editorGen.navigator)» - «ENDIF» - «ENDIF» - - «configureGraphicalViewer(it)» - - «IF editorGen.diagram.generateCreateShortcutAction» - - «initializeGraphicalViewer(it)» - - «controlLastClickPositionProviderService» - - «dispose» - - «DropTargetListener(it)» - «ENDIF» - - «additions(it)» - } - ''' - - def attributes(GenEditorView it) ''' - «generatedMemberComment» - public static final String ID = "«ID»"; «nonNLS(1)» - - «generatedMemberComment» - public static final String CONTEXT_ID = "«contextID»"; «nonNLS(1)» - - «IF editorGen.diagram.generateCreateShortcutAction()» - «generatedMemberComment» - private org.eclipse.gmf.tooling.runtime.part.LastClickPositionProvider myLastClickPositionProvider; - «ENDIF» - ''' - - def constructor(GenEditorView it) ''' - «generatedMemberComment» - public «className(it)»() { - super(«null != editorGen.diagram.palette && editorGen.diagram.palette.flyout»); - } - ''' - - def getContextID(GenEditorView it) ''' - «generatedMemberComment» - protected String getContextID() { - return CONTEXT_ID; - } - ''' - - def createPaletteRoot(Palette it) ''' - - «generatedMemberComment» - protected org.eclipse.gef.palette.PaletteRoot createPaletteRoot(org.eclipse.gef.palette.PaletteRoot existingPaletteRoot) { - org.eclipse.gef.palette.PaletteRoot root = super.createPaletteRoot(existingPaletteRoot); - new «pallette.qualifiedClassName(it)»().fillPalette(root); - return root; - } - ''' - def getPreferencesHint(GenEditorView it) ''' «generatedMemberComment» + «overrideC» protected org.eclipse.gmf.runtime.diagram.core.preferences.PreferencesHint getPreferencesHint() { - «/** + «/** * seems better we use preference store directly (in configureGraphicalViewer) instead all these indirect ids */»return «xptActivator.preferenceHintAccess(editorGen)»; } @@ -167,72 +72,17 @@ import xpt.navigator.NavigatorItem
import xpt.CodeStyle def getContributorId(GenEditorView it) ''' «generatedMemberComment» + «overrideC» public String getContributorId() { return «xptActivator.qualifiedClassName(editorGen.plugin)».ID; } ''' - def 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() { - public String[] getShowInTargetIds() { - return new String[] { org.eclipse.ui.navigator.resources.ProjectExplorer.VIEW_ID }; - } - }; - } - «ENDIF» - return super.getAdapter(type); - } - «ENDIF» - ''' - - def getDocumentProvider(GenEditorView it) ''' - «generatedMemberComment» - protected org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDocumentProvider getDocumentProvider(org.eclipse.ui.IEditorInput input) { - if («checkEditorInput(it)») { - return «xptActivator.qualifiedClassName(editorGen.plugin)».getInstance().getDocumentProvider(); - } - return super.getDocumentProvider(input); - } - ''' - - def getEditingDomain(GenEditorView it) ''' - «generatedMemberComment» - public org.eclipse.emf.transaction.TransactionalEditingDomain getEditingDomain() { - org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDocument document = getEditorInput() != null ? getDocumentProvider().getDocument(getEditorInput()) : null; - if (document instanceof org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDiagramDocument) { - return ((org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDiagramDocument) document).getEditingDomain(); - } - return super.getEditingDomain(); - } - ''' - - def setDocumentProvider(GenEditorView it) ''' - «generatedMemberComment» - protected void setDocumentProvider(org.eclipse.ui.IEditorInput input) { - if («checkEditorInput(it)») { - setDocumentProvider(«xptActivator.qualifiedClassName(editorGen.plugin)».getInstance().getDocumentProvider()); - } else { - super.setDocumentProvider(input); - } - } - ''' - def checkEditorInput(GenEditorView it) '''«IF isIDEMode(it)»input instanceof org.eclipse.ui.IFileEditorInput || «ENDIF»input instanceof org.eclipse.emf.common.ui.URIEditorInput''' def gotoMarker(GenEditorView it) ''' «generatedMemberComment» + «overrideC» public void gotoMarker(org.eclipse.core.resources.IMarker marker) { org.eclipse.gmf.runtime.common.ui.services.marker.MarkerNavigationService.getInstance().gotoMarker(this, marker); } @@ -240,6 +90,7 @@ import xpt.navigator.NavigatorItem
import xpt.CodeStyle def isSaveAsAllowed(GenEditorView it) ''' «generatedMemberComment» + «overrideC» public boolean isSaveAsAllowed() { return true; } @@ -247,102 +98,23 @@ import xpt.navigator.NavigatorItem
import xpt.CodeStyle def doSaveAs(GenEditorView it) ''' «generatedMemberComment» + «overrideC» public void doSaveAs() { performSaveAs(new org.eclipse.core.runtime.NullProgressMonitor()); } ''' - def performSaveAs(GenEditorView it) ''' - «generatedMemberComment» - protected void performSaveAs(org.eclipse.core.runtime.IProgressMonitor progressMonitor) { - org.eclipse.swt.widgets.Shell shell = getSite().getShell(); - org.eclipse.ui.IEditorInput input = getEditorInput(); - org.eclipse.ui.dialogs.SaveAsDialog dialog = new org.eclipse.ui.dialogs.SaveAsDialog(shell); - org.eclipse.core.resources.IFile original = input instanceof org.eclipse.ui.IFileEditorInput ? ((org.eclipse.ui.IFileEditorInput) input).getFile() : null; - if (original != null) { - dialog.setOriginalFile(original); - } - dialog.create(); - org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDocumentProvider provider = getDocumentProvider(); - if (provider == null) { - // editor has been programmatically closed while the dialog was open - return; - } - if (provider.isDeleted(input) && original != null) { - String message = org.eclipse.osgi.util.NLS.bind(«xptExternalizer.accessorCall(editorGen, - i18nKeyForSavingDeletedFile(it))», original.getName()); - dialog.setErrorMessage(null); - dialog.setMessage(message, org.eclipse.jface.dialogs.IMessageProvider.WARNING); - } - if (dialog.open() == org.eclipse.jface.window.Window.CANCEL) { - if (progressMonitor != null) { - progressMonitor.setCanceled(true); - } - return; - } - org.eclipse.core.runtime.IPath filePath = dialog.getResult(); - if (filePath == null) { - if (progressMonitor != null) { - progressMonitor.setCanceled(true); - } - return; - } - org.eclipse.core.resources.IWorkspaceRoot workspaceRoot = org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot(); - org.eclipse.core.resources.IFile file = workspaceRoot.getFile(filePath); - final org.eclipse.ui.IEditorInput newInput = new org.eclipse.ui.part.FileEditorInput(file); - // Check if the editor is already open - org.eclipse.ui.IEditorMatchingStrategy matchingStrategy = getEditorDescriptor().getEditorMatchingStrategy(); - org.eclipse.ui.IEditorReference[] editorRefs = org.eclipse.ui.PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getEditorReferences(); - for (int i = 0; i < editorRefs.length; i++) { - if (matchingStrategy.matches(editorRefs[i], newInput)) { - org.eclipse.jface.dialogs.MessageDialog.openWarning(shell, «xptExternalizer.accessorCall(editorGen, - titleKey(i18nKeyForSaveAsProblems(it)))», «xptExternalizer.accessorCall(editorGen, - messageKey(i18nKeyForSaveAsProblems(it)))»); - return; - } - } - boolean success = false; - try { - provider.aboutToChange(newInput); - getDocumentProvider(newInput).saveDocument(progressMonitor, newInput, getDocumentProvider().getDocument(getEditorInput()), true); - success = true; - } catch (org.eclipse.core.runtime.CoreException x) { - org.eclipse.core.runtime.IStatus status = x.getStatus(); - if (status == null || status.getSeverity() != org.eclipse.core.runtime.IStatus.CANCEL) { - org.eclipse.jface.dialogs.ErrorDialog.openError(shell, «xptExternalizer.accessorCall(editorGen, - titleKey(i18nKeyForSaveProblems(it)))», «xptExternalizer.accessorCall(editorGen, - messageKey(i18nKeyForSaveProblems(it)))», x.getStatus()); - } - } finally { - provider.changed(newInput); - if (success) { - setInput(newInput); - } - } - if (progressMonitor != null) { - progressMonitor.setCanceled(!success); - } - } - ''' - def getShowInContext(GenEditorView it) ''' «generatedMemberComment» + «overrideC» public org.eclipse.ui.part.ShowInContext getShowInContext() { return new org.eclipse.ui.part.ShowInContext(getEditorInput(), «IF hasNavigator(it)»getNavigatorSelection()«ELSE»getGraphicalViewer().getSelection()«ENDIF»); } ''' - def getNavigatorSelection(GenNavigator it) ''' - - «generatedMemberComment» - private org.eclipse.jface.viewers.ISelection getNavigatorSelection() { - org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDiagramDocument document = getDiagramDocument(); - «xptNavigatorLinkHelper.findSelectionBody(it)» - } - ''' - def configureGraphicalViewer(GenEditorView it) ''' «generatedMemberComment» + «overrideC» protected void configureGraphicalViewer() { super.configureGraphicalViewer(); «xptDiagramEditorContextMenuProvider.qualifiedClassName(it.editorGen.diagram)» provider = @@ -352,16 +124,6 @@ import xpt.navigator.NavigatorItem
import xpt.CodeStyle } ''' - def initializeGraphicalViewer(GenEditorView it) ''' - «generatedMemberComment» - protected void initializeGraphicalViewer() { - super.initializeGraphicalViewer(); - «addDropTargetListener('org.eclipse.jface.util.LocalSelectionTransfer.getTransfer()')» - «addDropTargetListener('org.eclipse.emf.edit.ui.dnd.LocalTransfer.getInstance()')» - startupLastClickPositionProvider(); - } - ''' - def controlLastClickPositionProviderService(GenEditorView it)''' «generatedMemberComment» protected void startupLastClickPositionProvider() { @@ -381,36 +143,25 @@ import xpt.navigator.NavigatorItem
import xpt.CodeStyle } ''' - def dispose(GenEditorView it)''' - «generatedMemberComment» - «overrideC(editorGen.diagram)» - public void dispose() { - shutDownLastClickPositionProvider(); - super.dispose(); - } - ''' - def addDropTargetListener(GenEditorView it, String transferAccessor) ''' getDiagramGraphicalViewer().addDropTargetListener(new DropTargetListener(getDiagramGraphicalViewer(), «transferAccessor») { - + protected Object getJavaObject(org.eclipse.swt.dnd.TransferData data) { return «transferAccessor».nativeToJava(data); } - + }); ''' def DropTargetListener(GenEditorView it) ''' «generatedClassComment» private abstract class DropTargetListener extends org.eclipse.gmf.runtime.diagram.ui.parts.DiagramDropTargetListener { - + «DTL_constructor(it)» - + «DTL_getObjectsBeingDropped(it)» - + «DTL_getJavaObject(it)» - - «DTL_additions(it)» } ''' @@ -425,8 +176,8 @@ import xpt.navigator.NavigatorItem
import xpt.CodeStyle «generatedMemberComment» protected java.util.List getObjectsBeingDropped() { org.eclipse.swt.dnd.TransferData data = getCurrentEvent().currentDataType; - java.util.HashSet<org.eclipse.emf.common.util.URI> uris = new java.util.HashSet<org.eclipse.emf.common.util.URI>(); - + java.util.HashSet<org.eclipse.emf.common.util.URI> uris = new java.util.HashSet<«it.editorGen.diagram.diamondOp('org.eclipse.emf.common.util.URI')»>(); + Object transferedObject = getJavaObject(data); if (transferedObject instanceof org.eclipse.jface.viewers.IStructuredSelection) { org.eclipse.jface.viewers.IStructuredSelection selection = (org.eclipse.jface.viewers.IStructuredSelection) transferedObject; @@ -444,15 +195,15 @@ import xpt.navigator.NavigatorItem
import xpt.CodeStyle org.eclipse.core.runtime.IAdaptable adaptable = (org.eclipse.core.runtime.IAdaptable) nextSelectedObject; nextSelectedObject = adaptable.getAdapter(org.eclipse.emf.ecore.EObject.class); } - + if (nextSelectedObject instanceof org.eclipse.emf.ecore.EObject) { org.eclipse.emf.ecore.EObject modelElement = (org.eclipse.emf.ecore.EObject) nextSelectedObject; uris.add(org.eclipse.emf.ecore.util.EcoreUtil.getURI(modelElement)); } } } - - java.util.ArrayList<org.eclipse.emf.ecore.EObject> result = new java.util.ArrayList<org.eclipse.emf.ecore.EObject>(uris.size()); + + java.util.ArrayList<org.eclipse.emf.ecore.EObject> result = new java.util.ArrayList<«it.editorGen.diagram.diamondOp('org.eclipse.emf.ecore.EObject')»>(uris.size()); for (org.eclipse.emf.common.util.URI nextURI : uris) { org.eclipse.emf.ecore.EObject modelObject = getEditingDomain().getResourceSet().getEObject(nextURI, true); result.add(modelObject); @@ -466,15 +217,10 @@ import xpt.navigator.NavigatorItem
import xpt.CodeStyle protected abstract Object getJavaObject(org.eclipse.swt.dnd.TransferData data); ''' - def DTL_additions(GenEditorView it) '''''' - - def additions(GenEditorView it) '''''' - @Localization def i18nValues(GenEditorView it) ''' «xptExternalizer.messageEntry(i18nKeyForSavingDeletedFile(it), 'The original file \"{0}\" has been deleted.')» «xptExternalizer.messageEntry(titleKey(i18nKeyForSaveAsProblems(it)), 'Problem During Save As...')» - «xptExternalizer.messageEntry(messageKey(i18nKeyForSaveAsProblems(it)), - 'Save could not be completed. Target file is already open in another editor.')» + «xptExternalizer.messageEntry(messageKey(i18nKeyForSaveAsProblems(it)), 'Save could not be completed. Target file is already open in another editor.')» «xptExternalizer.messageEntry(titleKey(i18nKeyForSaveProblems(it)), 'Save Problems')» «xptExternalizer.messageEntry(messageKey(i18nKeyForSaveProblems(it)), 'Could not save file.')» ''' @@ -509,21 +255,564 @@ import xpt.navigator.NavigatorItem
import xpt.CodeStyle result.add('org.eclipse.ui.ide.IGotoMarker'); } if (hasPropertySheet(it) && it.editorGen.propertySheet.readOnly) { - result.add( - 'org.eclipse.gmf.runtime.diagram.ui.properties.views.IReadOnlyDiagramPropertySheetPageContributor'); + result.add('org.eclipse.gmf.runtime.diagram.ui.properties.views.IReadOnlyDiagramPropertySheetPageContributor'); } return result; } def boolean isIDEMode(GenEditorView it) { - return null == it.editorGen.application; + return null === it.editorGen.application; } def boolean hasPropertySheet(GenEditorView it) { - return it.editorGen.propertySheet != null + return it.editorGen.propertySheet !== null } def boolean hasNavigator(GenEditorView it) { - return it.editorGen.navigator != null + return it.editorGen.navigator !== null } + + def extendsList(GenEditorView it) '''extends org.eclipse.papyrus.uml.diagram.common.part.UmlGmfDiagramEditor''' + + def 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; + ''' + + def 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 + } + ''' + + def 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)» + } + ''' + + def createPaletteRoot (Palette it)''' + «generatedMemberComment» + «overrideC» + 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; + } + ''' + +// FIXME - This has been overrided to comment the test on the palette tag in the gmfgen + def Editor(GenEditorView it) ''' + «copyright(editorGen)» + package «packageName(it)»; + + «generatedClassComment» + @SuppressWarnings({"deprecation", "restriction"}) + public class «className(it)» «extendsList(it)» «implementsList(it)» { + + «attributes(it)» + «constructor(it)» +««« «IF editorGen.diagram.palette != null» + «createPaletteRoot(editorGen.diagram.palette)» +««« «ENDIF» + «getContextID(it)» + «getPreferencesHint(it)» + «getContributorId(it)» + «getAdapter(it)» + «getDocumentProvider(it)» + «getEditingDomain(it)» + «setDocumentProvider(it)» + «IF isIDEMode(it)» + «gotoMarker(it)» + «isSaveAsAllowed(it)» + «doSaveAs(it)» + «performSaveAs(it)» + «getShowInContext(it)» + «IF hasNavigator(it)» + «getNavigatorSelection(it.editorGen.navigator)» + «ENDIF» + «ENDIF» + «configureGraphicalViewer(it)» + «IF editorGen.diagram.generateCreateShortcutAction» + «initializeGraphicalViewer(it)» + «controlLastClickPositionProviderService» + «dispose» + «DropTargetListener(it)» + «ENDIF» + «additions(it)» + } + ''' + + 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()); + } + ''' + + def 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» + «overrideC» + 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» + «overrideC» + protected org.eclipse.gef.ui.palette.PaletteViewer constructPaletteViewer() { + return new org.eclipse.papyrus.infra.gmfdiag.common.service.palette.PapyrusPaletteViewer(); + } + ''' + + def dispose(GenEditorView it)''' + «generatedMemberComment» + «overrideC» + 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(); + } + ''' + + def 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» + «overrideC» + 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» + 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» + 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» + 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» + 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» + public void mouseDown(org.eclipse.swt.events.MouseEvent e) { + // do nothing + } + + «overrideI» + 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 + def performSaveAs (GenEditorView it)''' + «generatedMemberComment» + «overrideC» + protected void performSaveAs(org.eclipse.core.runtime.IProgressMonitor progressMonitor) { + // Nothing + } + ''' + + //Share the same editing domain + def getEditingDomain (GenEditorView it)''' + «generatedMemberComment» + «overrideC» + public org.eclipse.emf.transaction.TransactionalEditingDomain getEditingDomain() { + return editingDomain; + } + ''' + + def createEditingDomain (GenEditorView it)''' + «generatedMemberComment» + «overrideC» + protected org.eclipse.emf.transaction.TransactionalEditingDomain createEditingDomain() { + // Already configured + return editingDomain; + } + ''' + + def configureDiagramEditDomain (GenEditorView it)''' + «generatedMemberComment» + «overrideC» + protected void configureDiagramEditDomain() { + super.configureDiagramEditDomain(); + getDiagramEditDomain().getDiagramCommandStack().addCommandStackListener(new org.eclipse.gef.commands.CommandStackListener() { + + «overrideI» + 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» + «overrideC» + 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» + «overrideC» + 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» + «overrideC» + public boolean isDirty() { + return getDirtyState().isDirty(); + } + ''' + + //Code refactoring moved in UMLDiagramEditor + def getDocumentProvider (GenEditorView it)''' + «generatedMemberComment» + «overrideC» + protected final org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDocumentProvider getDocumentProvider(org.eclipse.ui.IEditorInput input) { + return documentProvider; + } + ''' + + def setDocumentProvider (GenEditorView it)''' + «generatedMemberComment» + «overrideC» + protected final void setDocumentProvider(org.eclipse.ui.IEditorInput input) { + // Already set in the constructor + } + ''' + + def getGraphicalViewer (GenEditorView it)''' + «generatedMemberComment» + «overrideC» + public org.eclipse.gef.GraphicalViewer getGraphicalViewer() { + return super.getGraphicalViewer(); + } + ''' + + def initializeGraphicalViewer (GenEditorView it)''' + «generatedMemberComment» + «overrideC» + 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» + «overrideC» + 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(); + } + } + ''' + + def getContextID (GenEditorView it)''' + «generatedMemberComment» + «overrideC» + protected String getContextID() { + return CONTEXT_ID; + } + ''' + + def getAdapter(GenEditorView it) ''' + «IF !hasPropertySheet(it) || hasNavigator(it)» + «generatedMemberComment» + «overrideC» + @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» + public String[] getShowInTargetIds() { + return new String[] { org.eclipse.ui.navigator.resources.ProjectExplorer.VIEW_ID }; + } + }; + } + «ENDIF» + return super.getAdapter(type); + } + «ENDIF» + ''' + } |