Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaurent Redor2014-12-03 16:50:57 +0000
committerLaurent Redor2015-01-06 08:33:44 +0000
commit47966b2f2bdee6f9f8aaf196836b1583bb208750 (patch)
treecf37d0cf0f454869d3ebec0cf850188e6b4fa226
parent97ae64c277a6c7d412d2dcab446ab7b13b8ad6b8 (diff)
downloadorg.eclipse.sirius-47966b2f2bdee6f9f8aaf196836b1583bb208750.tar.gz
org.eclipse.sirius-47966b2f2bdee6f9f8aaf196836b1583bb208750.tar.xz
org.eclipse.sirius-47966b2f2bdee6f9f8aaf196836b1583bb208750.zip
[456753] 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: 456753 Change-Id: I703b593745fe18c2c72b603abd4c2be6e4224004 Signed-off-by: Laurent Redor <laurent.redor@obeo.fr> Cherry-picked-from: 454082
-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