Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaurent Redor2014-12-03 16:50:57 +0000
committerLaurent Redor2015-01-06 08:09:14 +0000
commit3f28d0bc08b9e19a5587425dbda7d58248c6fb2c (patch)
tree5b278d45f2e78ba34ac5866b7cd00bb66716794d
parent5dae0dea4848261a90234fa25ba8501271e9d6c2 (diff)
downloadorg.eclipse.sirius-3f28d0bc08b9e19a5587425dbda7d58248c6fb2c.tar.gz
org.eclipse.sirius-3f28d0bc08b9e19a5587425dbda7d58248c6fb2c.tar.xz
org.eclipse.sirius-3f28d0bc08b9e19a5587425dbda7d58248c6fb2c.zip
[454082] Correctly update router style button on tabbar.
This button should always call the last used action. If there is no last used action (first use), the default action has no effect (no command is executed). Bug: 454082 Change-Id: I703b593745fe18c2c72b603abd4c2be6e4224004 Signed-off-by: Laurent Redor <laurent.redor@obeo.fr>
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/actions/TabbarRouterMenuManager.java68
1 files changed, 65 insertions, 3 deletions
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/actions/TabbarRouterMenuManager.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/actions/TabbarRouterMenuManager.java
index 6cf466a255..ba22b22d4c 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/actions/TabbarRouterMenuManager.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/actions/TabbarRouterMenuManager.java
@@ -10,7 +10,12 @@
*******************************************************************************/
package org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.actions;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
import org.eclipse.gmf.runtime.common.ui.action.IDisposableAction;
+import org.eclipse.gmf.runtime.diagram.ui.actions.ActionIds;
+import org.eclipse.gmf.runtime.diagram.ui.actions.internal.RouterAction;
import org.eclipse.gmf.runtime.diagram.ui.actions.internal.RouterMenuManager;
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.IAction;
@@ -52,15 +57,72 @@ public class TabbarRouterMenuManager extends RouterMenuManager {
super.dispose();
}
+ /**
+ * Set the default action id for this menu manager.
+ *
+ * @param actionId
+ * the action id to set
+ */
+ public void setDefaultAction(String actionId) {
+ for (final IContributionItem item : getItems()) {
+ if (item instanceof ActionContributionItem) {
+ if (actionId.equals(((ActionContributionItem) item).getAction().getId())) {
+ final IAction defaultAction = ((ActionContributionItem) item).getAction();
+ setHandler(defaultAction);
+ super.setDefaultAction(defaultAction);
+ return;
+ }
+ }
+ }
+ }
+
+ /**
+ * We should use reflection to access the default handler method
+ *
+ * @param defaultAction
+ * the default action to set
+ */
+ private void setHandler(final IAction defaultAction) {
+ Method method;
+ try {
+ method = MenuCreatorAction.class.getDeclaredMethod("setActionHandler", IAction.class);
+ method.setAccessible(true);
+ method.invoke(super.action, defaultAction);
+ } catch (SecurityException e) {
+ /* do nothing should not happen */
+ } catch (NoSuchMethodException e) {
+ /* do nothing should not happen */
+ } catch (IllegalArgumentException e) {
+ /* do nothing should not happen */
+ } catch (IllegalAccessException e) {
+ /* do nothing should not happen */
+ } catch (InvocationTargetException e) {
+ /* do nothing should not happen */
+ }
+ }
+
@Override
public void setVisible(boolean visible) {
super.setVisible(visible);
if (isEmpty() && visible) {
IWorkbenchPage page = EclipseUIUtil.getActivePage();
if (page != null) {
- add(TabbarRouterAction.createRectilinearRouterAction(page));
- add(TabbarRouterAction.createObliqueRouterAction(page));
- add(TabbarRouterAction.createTreeRouterAction(page));
+ RouterAction rectilinearAction = TabbarRouterAction.createRectilinearRouterAction(page);
+ add(rectilinearAction);
+ RouterAction obliqueAction = TabbarRouterAction.createObliqueRouterAction(page);
+ add(obliqueAction);
+ RouterAction treeAction = TabbarRouterAction.createTreeRouterAction(page);
+ add(treeAction);
+ // Use the last used action as default action (until no action
+ // has been explicitly launched by expanding the combo, the
+ // button has no effect).
+ if (rectilinearAction.getText().equals(super.action.getText())) {
+ setDefaultAction(ActionIds.ACTION_ROUTER_RECTILINEAR);
+ } else if (obliqueAction.getText().equals(super.action.getText())) {
+ setDefaultAction(ActionIds.ACTION_ROUTER_OBLIQUE);
+ } else if (treeAction.getText().equals(super.action.getText())) {
+ setDefaultAction(ActionIds.ACTION_ROUTER_TREE);
+ }
}
}
}

Back to the top