Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.navigation/src/org/eclipse/papyrus/infra/gmfdiag/navigation/menu/DefaultNavigationMenu.java')
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.navigation/src/org/eclipse/papyrus/infra/gmfdiag/navigation/menu/DefaultNavigationMenu.java99
1 files changed, 37 insertions, 62 deletions
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.navigation/src/org/eclipse/papyrus/infra/gmfdiag/navigation/menu/DefaultNavigationMenu.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.navigation/src/org/eclipse/papyrus/infra/gmfdiag/navigation/menu/DefaultNavigationMenu.java
index 8b6c5681164..ee2407e11f3 100644
--- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.navigation/src/org/eclipse/papyrus/infra/gmfdiag/navigation/menu/DefaultNavigationMenu.java
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.navigation/src/org/eclipse/papyrus/infra/gmfdiag/navigation/menu/DefaultNavigationMenu.java
@@ -1,5 +1,5 @@
/*****************************************************************************
- * Copyright (c) 2015 CEA LIST and others.
+* Copyright (c) 2015, 2017 CEA LIST and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
@@ -8,6 +8,7 @@
*
* Contributors:
* CEA LIST - Initial API and implementation
+ * Ansgar Radermacher (CEA LIST) - Bug 516459: Navigation mechanism with Alt+hover does not work on Linux
*
*****************************************************************************/
@@ -30,7 +31,7 @@ import org.eclipse.papyrus.infra.core.services.ServiceNotFoundException;
import org.eclipse.papyrus.infra.core.services.ServicesRegistry;
import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
import org.eclipse.papyrus.infra.gmfdiag.navigation.Activator;
-import org.eclipse.papyrus.infra.gmfdiag.navigation.menu.listener.SelectionMenuMouseTrackListener;
+import org.eclipse.papyrus.infra.gmfdiag.navigation.menu.listener.NavigationMenuKeyListener;
import org.eclipse.papyrus.infra.gmfdiag.navigation.menu.listener.SelectionMenuSelectionChangedListener;
import org.eclipse.papyrus.infra.gmfdiag.navigation.menu.provider.SelectionMenuLabelProvider;
import org.eclipse.papyrus.infra.services.navigation.service.ExtendedNavigableElement;
@@ -43,10 +44,7 @@ import org.eclipse.papyrus.infra.services.viewersearch.impl.ViewerSearchService;
import org.eclipse.papyrus.infra.widgets.editors.SelectionMenu;
import org.eclipse.papyrus.infra.widgets.providers.CollectionContentProvider;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.FocusEvent;
-import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TreeItem;
@@ -108,12 +106,14 @@ public class DefaultNavigationMenu implements NavigationMenu {
/**
* handle requests from graphical editor
+ * @Deprecated since 2.1.0, since handling is now uniform for graphical editor and model explorer
*
* @param request
* a selection request
* @param targetEditPart
* the selected edit part
*/
+ @Deprecated
public void handleRequest(SelectionRequest request, EditPart targetEditPart) {
if (targetEditPart != null) {
EObject model = EMFHelper.getEObject(targetEditPart);
@@ -130,12 +130,15 @@ public class DefaultNavigationMenu implements NavigationMenu {
/**
* handle request from model explorer
+ * @Deprecated since 2.1.0, since handling is now uniform for graphical editor and model explorer
*
* @param e
* a mouse event
* @param treeItem
* the tree item within the model explorer
+ *
*/
+ @Deprecated
public void handleRequest(MouseEvent e, TreeItem treeItem) {
if (treeItem != null) {
EObject model = EMFHelper.getEObject(treeItem.getData());
@@ -150,27 +153,22 @@ public class DefaultNavigationMenu implements NavigationMenu {
}
}
+ /**
+ * @deprecated since 2.1.0, since exit state only depends on model
+ */
@Deprecated
protected boolean isExitState(SelectionRequest request, EObject model) {
return isExitState(model);
}
protected boolean isExitState(EObject model) {
- if (currentModel == null) {
- return false;
- }
-
- if (model == null) {
- return true;
- }
-
- if (model != currentModel) {
- return true;
- }
-
- return false;
+ return currentModel != model || model == null;
}
+ /**
+ * @deprecated since 2.1.0, since enter state only depends on model
+ */
+ @Deprecated
protected boolean isEnterState(SelectionRequest request, EObject model) {
if (!request.isAltKeyPressed()) {
return false;
@@ -179,6 +177,10 @@ public class DefaultNavigationMenu implements NavigationMenu {
return isEnterState(model);
}
+ /**
+ * @deprecated since 2.1.0, since enter state only depends on model
+ */
+ @Deprecated
protected boolean isEnterState(MouseEvent e, EObject model) {
if ((e.stateMask & SWT.ALT) == 0) {
return false;
@@ -188,7 +190,7 @@ public class DefaultNavigationMenu implements NavigationMenu {
}
protected boolean isEnterState(EObject model) {
- if (model == currentModel) {
+ if (currentModel != null) {
return false;
}
@@ -201,6 +203,7 @@ public class DefaultNavigationMenu implements NavigationMenu {
return true;
}
+ @Deprecated
public boolean willEnter(SelectionRequest request, EditPart targetEditPart) {
EObject model = null;
if (targetEditPart != null) {
@@ -212,14 +215,6 @@ public class DefaultNavigationMenu implements NavigationMenu {
}
public boolean willEnter(EObject model) {
- if (model == currentModel) {
- return false;
- }
-
- if (model == null) {
- return false;
- }
-
return true;
}
@@ -313,33 +308,7 @@ public class DefaultNavigationMenu implements NavigationMenu {
}
selectionMenu.addSelectionChangedListener(new SelectionMenuSelectionChangedListener(DefaultNavigationMenu.this, selectionMenu, navigationMenuElements, umlElement, subMenus));
- selectionMenu.getTableViewer().getTable().addFocusListener(new FocusListener() {
-
- int focusGainedAt = 0;
-
- public void focusLost(FocusEvent e) {
- // The columnViewer of the model explorer has a tooltip that can be shown during the first 100ms
- // after a selection. It will cause a focus lost on the menu. In this case, make sure to set
- // focus to the menu again.
- if (e.time - focusGainedAt < 100) {
- Display.getDefault().asyncExec(new Runnable() {
-
- public void run() {
- // set focus again to get a new focus lost event
- selectionMenu.getTableViewer().getTable().setFocus();
- }
- });
- }
- else {
- exitItem();
- }
- }
-
- public void focusGained(FocusEvent e) {
- focusGainedAt = e.time;
- }
- });
-
+ selectionMenu.addKeyListener(new NavigationMenuKeyListener(this));
// selectionMenu.addMouseTrackListener(new SelectionMenuMouseTrackListener(DefaultNavigationMenu.this, selectionMenu, subMenus, umlElement));
}
@@ -517,12 +486,14 @@ public class DefaultNavigationMenu implements NavigationMenu {
* @param target
*/
public void handleRequest(Object request, Object target) {
- if (request instanceof SelectionRequest && target instanceof EditPart) {
- handleRequest((SelectionRequest) request, (EditPart) target);
+ EObject model = EMFHelper.getEObject(target);
+
+ if (isExitState(model)) {
+ exitItem();
}
- if (request instanceof MouseEvent && target instanceof TreeItem) {
- handleRequest((MouseEvent) request, (TreeItem) target);
+ if (isEnterState(model)) {
+ enterItem(target);
}
}
@@ -534,11 +505,14 @@ public class DefaultNavigationMenu implements NavigationMenu {
* @return
*/
public boolean willEnter(Object request, Object target) {
- if (request instanceof SelectionRequest && target instanceof EditPart) {
- return willEnter((SelectionRequest) request, (EditPart) target);
+ int modifierKeys = SWT.NONE;
+ if (request instanceof SelectionRequest) {
+ modifierKeys = ((SelectionRequest) request).getModifiers();
}
-
- return false;
+ else if (request instanceof MouseEvent) {
+ modifierKeys = ((MouseEvent) request).stateMask;
+ }
+ return (modifierKeys == SWT.CONTROL + SWT.SHIFT);
}
/**
@@ -599,6 +573,7 @@ public class DefaultNavigationMenu implements NavigationMenu {
*/
public void setParentShell(Shell parentShell) {
this.parentShell = parentShell;
+
}
@Deprecated

Back to the top