diff --git a/com.archimatetool.editor/plugin.xml b/com.archimatetool.editor/plugin.xml index 33131ffbe..a0e72cde1 100644 --- a/com.archimatetool.editor/plugin.xml +++ b/com.archimatetool.editor/plugin.xml @@ -1713,12 +1713,20 @@ + + + + + sequence="B A"> @@ -1738,9 +1746,9 @@ + sequence="B R"> diff --git a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/AbstractDiagramEditor.java b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/AbstractDiagramEditor.java index dea64048f..311ba5d83 100644 --- a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/AbstractDiagramEditor.java +++ b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/AbstractDiagramEditor.java @@ -84,6 +84,8 @@ import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PartInitException; import org.eclipse.ui.actions.ActionFactory; +import org.eclipse.ui.contexts.IContextActivation; +import org.eclipse.ui.contexts.IContextService; import org.eclipse.ui.handlers.IHandlerService; import org.eclipse.ui.views.contentoutline.IContentOutlinePage; import org.eclipse.ui.views.properties.IPropertySheetPage; @@ -94,7 +96,6 @@ import com.archimatetool.editor.diagram.actions.BorderColorAction; import com.archimatetool.editor.diagram.actions.BringForwardAction; import com.archimatetool.editor.diagram.actions.BringToFrontAction; -import com.archimatetool.editor.diagram.actions.LineWidthAction; import com.archimatetool.editor.diagram.actions.ConnectionRouterAction; import com.archimatetool.editor.diagram.actions.CopyAction; import com.archimatetool.editor.diagram.actions.CutAction; @@ -107,6 +108,7 @@ import com.archimatetool.editor.diagram.actions.FontColorAction; import com.archimatetool.editor.diagram.actions.FullScreenAction; import com.archimatetool.editor.diagram.actions.LineColorAction; +import com.archimatetool.editor.diagram.actions.LineWidthAction; import com.archimatetool.editor.diagram.actions.LockObjectAction; import com.archimatetool.editor.diagram.actions.OpacityAction; import com.archimatetool.editor.diagram.actions.OutlineOpacityAction; @@ -195,6 +197,11 @@ public abstract class AbstractDiagramEditor extends GraphicalEditorWithFlyoutPal */ protected AbstractPaletteRoot fPaletteRoot; + /** + * Context for key bindngs + */ + private IContextActivation contextActivation; + /** * Application Preference changed * @param event @@ -372,6 +379,9 @@ protected void configureGraphicalViewer() { if(rgb != null) { viewer.getControl().setBackground(new Color(rgb)); } + + // Activate Context + activateContext(); } private void hookSelectionListener() { @@ -955,6 +965,26 @@ protected void disableActions() { } } + /** + * Activate the context for key bindings for this site + */ + public IContextActivation activateContext() { + if(contextActivation == null) { + contextActivation = getSite().getService(IContextService.class).activateContext(PaletteKeyHandler.CONTEXT_ID); + } + return contextActivation; + } + + /** + * De-activate the context for key bindings for this site + */ + public void deactivateContext() { + if(contextActivation != null) { + contextActivation.getContextService().deactivateContext(contextActivation); + contextActivation = null; + } + } + @Override public void selectObjects(Object[] objects) { // Safety check in case this is called via Display#asyncExec() @@ -1089,6 +1119,8 @@ public void dispose() { fPaletteRoot.dispose(); } + contextActivation = null; + // Can now be garbage collected fDiagramModel = null; } diff --git a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/directedit/AbstractDirectEditManager.java b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/directedit/AbstractDirectEditManager.java index 15c037622..f093ea1fd 100644 --- a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/directedit/AbstractDirectEditManager.java +++ b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/directedit/AbstractDirectEditManager.java @@ -5,13 +5,16 @@ */ package com.archimatetool.editor.diagram.directedit; +import org.eclipse.gef.DefaultEditDomain; import org.eclipse.gef.GraphicalEditPart; import org.eclipse.gef.tools.CellEditorLocator; import org.eclipse.gef.tools.DirectEditManager; import org.eclipse.swt.events.VerifyEvent; import org.eclipse.swt.events.VerifyListener; import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.IEditorPart; +import com.archimatetool.editor.diagram.AbstractDiagramEditor; import com.archimatetool.editor.ui.UIUtils; import com.archimatetool.editor.ui.components.GlobalActionDisablementHandler; @@ -39,6 +42,12 @@ protected void initCellEditor() { // Filter out any illegal xml characters UIUtils.applyInvalidCharacterFilter(getTextControl()); + + // Deactivate key binding context + IEditorPart part = ((DefaultEditDomain)getEditPart().getViewer().getEditDomain()).getEditorPart(); + if(part instanceof AbstractDiagramEditor editor) { + editor.deactivateContext(); + } } protected void setNormalised() { @@ -72,6 +81,12 @@ protected void bringDown() { // Restore the global Action Handlers fGlobalActionHandler.restoreGlobalActions(); + // Reactivate key binding context + IEditorPart part = ((DefaultEditDomain)getEditPart().getViewer().getEditDomain()).getEditorPart(); + if(part instanceof AbstractDiagramEditor editor) { + editor.activateContext(); + } + super.bringDown(); } }