Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaurent Redor2016-08-02 15:28:27 +0000
committerLaurent Redor2016-08-09 08:55:13 +0000
commitdda4e01094ef362a91635282b4dd4f24bd350c69 (patch)
tree44b1b4caa4b2197827e7608e06ad9be2fb072506
parenteb1b1b6bfb44e5e4d2d68ad557ef8b99556fd86b (diff)
downloadorg.eclipse.sirius-dda4e01094ef362a91635282b4dd4f24bd350c69.tar.gz
org.eclipse.sirius-dda4e01094ef362a91635282b4dd4f24bd350c69.tar.xz
org.eclipse.sirius-dda4e01094ef362a91635282b4dd4f24bd350c69.zip
[496466] Add a drop down menu in the tabbar for Paste actions
Add a drop down menu in the tabbar instead of the current push button that only calls Paste Format. Bug: 496466 Change-Id: I074cfdfb6a7abf75440e8777be8eeffc97b6a63f 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/api/ui/actions/ActionIds.java3
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/layout/PasteFormatAction.java8
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/layout/PasteLayoutAction.java8
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/layout/PasteStyleAction.java8
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/actions/PasteFormatMenuManager.java49
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/actions/TabbarPasteFormatMenuManager.java117
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/contributions/TabbarContributionFactory.java11
7 files changed, 185 insertions, 19 deletions
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/ui/actions/ActionIds.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/ui/actions/ActionIds.java
index 8690a62a5d..3fec14ac3a 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/ui/actions/ActionIds.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/ui/actions/ActionIds.java
@@ -29,6 +29,9 @@ public interface ActionIds {
/** Action contribution id for the copy format (layout and style). */
String COPY_FORMAT = "copyFormatAction"; //$NON-NLS-1$
+ /** Id of menu that groups paste actions. **/
+ String MENU_PASTE_FORMAT = "pasteFormatMenu"; //$NON-NLS-1$
+
/** Action contribution id for the paste format (layout and style). */
String PASTE_FORMAT = "pasteFormatAction"; //$NON-NLS-1$
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/layout/PasteFormatAction.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/layout/PasteFormatAction.java
index 54fd74bb66..d95514074d 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/layout/PasteFormatAction.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/layout/PasteFormatAction.java
@@ -98,8 +98,8 @@ public class PasteFormatAction extends AbstractCopyPasteFormatAction {
Command pasteFormatCommand = UnexecutableCommand.INSTANCE;
if (SiriusLayoutDataManagerForSemanticElementsFactory.getInstance().getSiriusLayoutDataManager().containsData()) {
- // Create a compound command to hold the resize commands
- CompoundCommand doStoreFormatsCmd = new CompoundCommand(Messages.PasteFormatAction_restoreFormatCommandLabel);
+ // Create a compound command to hold the paste commands
+ CompoundCommand doPasteFormatsCmd = new CompoundCommand(Messages.PasteFormatAction_restoreFormatCommandLabel);
// Create an iterator for the selection
final Iterator<?> iter = getSelectedObjects().iterator();
@@ -114,12 +114,12 @@ public class PasteFormatAction extends AbstractCopyPasteFormatAction {
final Object next = iter.next();
if (next instanceof IGraphicalEditPart) {
final IGraphicalEditPart torestore = (IGraphicalEditPart) next;
- doStoreFormatsCmd.add(new ICommandProxy(new PasteFormatDataCommand(torestore.getEditingDomain(), diagram.get(), torestore)));
+ doPasteFormatsCmd.add(new ICommandProxy(new PasteFormatDataCommand(torestore.getEditingDomain(), diagram.get(), torestore)));
}
}
}
}
- pasteFormatCommand = doStoreFormatsCmd.unwrap();
+ pasteFormatCommand = doPasteFormatsCmd.unwrap();
}
return pasteFormatCommand;
}
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/layout/PasteLayoutAction.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/layout/PasteLayoutAction.java
index 836c020532..3193eae7a2 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/layout/PasteLayoutAction.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/layout/PasteLayoutAction.java
@@ -97,8 +97,8 @@ public class PasteLayoutAction extends AbstractCopyPasteFormatAction {
Command pasteLayoutCommand = UnexecutableCommand.INSTANCE;
if (SiriusLayoutDataManagerForSemanticElementsFactory.getInstance().getSiriusLayoutDataManager().containsData()) {
- // Create a compound command to hold the resize commands
- CompoundCommand doStoreLayoutsCmd = new CompoundCommand(Messages.PasteLayoutAction_restoreLayoutCommandLabel);
+ // Create a compound command to hold the paste commands
+ CompoundCommand doPasteLayoutsCmd = new CompoundCommand(Messages.PasteLayoutAction_restoreLayoutCommandLabel);
// Create an iterator for the selection
final Iterator<?> iter = getSelectedObjects().iterator();
@@ -113,12 +113,12 @@ public class PasteLayoutAction extends AbstractCopyPasteFormatAction {
final Object next = iter.next();
if (next instanceof IGraphicalEditPart) {
final IGraphicalEditPart torestore = (IGraphicalEditPart) next;
- doStoreLayoutsCmd.add(new ICommandProxy(new PasteLayoutDataCommand(torestore.getEditingDomain(), diagram.get(), torestore)));
+ doPasteLayoutsCmd.add(new ICommandProxy(new PasteLayoutDataCommand(torestore.getEditingDomain(), diagram.get(), torestore)));
}
}
}
}
- pasteLayoutCommand = doStoreLayoutsCmd.unwrap();
+ pasteLayoutCommand = doPasteLayoutsCmd.unwrap();
}
return pasteLayoutCommand;
}
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/layout/PasteStyleAction.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/layout/PasteStyleAction.java
index 44e0c6d3da..005bd24b22 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/layout/PasteStyleAction.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/layout/PasteStyleAction.java
@@ -96,8 +96,8 @@ public class PasteStyleAction extends AbstractCopyPasteFormatAction {
Command pasteStyleCommand = UnexecutableCommand.INSTANCE;
if (SiriusLayoutDataManagerForSemanticElementsFactory.getInstance().getSiriusLayoutDataManager().containsData()) {
- // Create a compound command to hold the resize commands
- CompoundCommand doStoreStylesCmd = new CompoundCommand(Messages.PasteStyleAction_restoreStyleCommandLabel);
+ // Create a compound command to hold the paste commands
+ CompoundCommand doPasteStylesCmd = new CompoundCommand(Messages.PasteStyleAction_restoreStyleCommandLabel);
// Create an iterator for the selection
final Iterator<?> iter = getSelectedObjects().iterator();
@@ -112,12 +112,12 @@ public class PasteStyleAction extends AbstractCopyPasteFormatAction {
final Object next = iter.next();
if (next instanceof IGraphicalEditPart) {
final IGraphicalEditPart torestore = (IGraphicalEditPart) next;
- doStoreStylesCmd.add(new ICommandProxy(new PasteStyleDataCommand(torestore.getEditingDomain(), diagram.get(), torestore)));
+ doPasteStylesCmd.add(new ICommandProxy(new PasteStyleDataCommand(torestore.getEditingDomain(), diagram.get(), torestore)));
}
}
}
}
- pasteStyleCommand = doStoreStylesCmd.unwrap();
+ pasteStyleCommand = doPasteStylesCmd.unwrap();
}
return pasteStyleCommand;
}
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/actions/PasteFormatMenuManager.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/actions/PasteFormatMenuManager.java
new file mode 100644
index 0000000000..78e463d9a6
--- /dev/null
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/actions/PasteFormatMenuManager.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2016 THALES GLOBAL SERVICES and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.actions;
+
+import org.eclipse.gmf.runtime.common.ui.action.ActionMenuManager;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.sirius.diagram.ui.provider.DiagramUIPlugin;
+import org.eclipse.sirius.diagram.ui.provider.Messages;
+import org.eclipse.sirius.diagram.ui.tools.api.image.DiagramImagesPath;
+import org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds;
+
+/**
+ * The paste format menu manager. It contains all paste format related actions
+ * (format, layout and style).
+ *
+ * @author <a href="mailto:laurent.redor@obeo.fr">Laurent Redor</a>
+ */
+public class PasteFormatMenuManager extends ActionMenuManager {
+
+ /**
+ * The paste format menu action containing the UI for the paste format menu
+ * manager
+ */
+ private static class PasteFormatMenuAction extends Action {
+ public PasteFormatMenuAction() {
+ setText(Messages.PasteFormatAction_text);
+ setToolTipText(Messages.PasteFormatAction_toolTipText);
+ ImageDescriptor imageDesc = DiagramUIPlugin.Implementation.getBundledImageDescriptor(DiagramImagesPath.PASTE_FORMAT_ICON);
+ setImageDescriptor(imageDesc);
+ setHoverImageDescriptor(imageDesc);
+ }
+ }
+
+ /**
+ * Creates a new instance of the distribute menu manager.
+ */
+ public PasteFormatMenuManager() {
+ super(ActionIds.MENU_PASTE_FORMAT, new PasteFormatMenuAction(), true);
+ }
+}
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/actions/TabbarPasteFormatMenuManager.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/actions/TabbarPasteFormatMenuManager.java
new file mode 100644
index 0000000000..24ea5f060e
--- /dev/null
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/actions/TabbarPasteFormatMenuManager.java
@@ -0,0 +1,117 @@
+/*******************************************************************************
+ * Copyright (c) 2016 THALES GLOBAL SERVICES.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+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.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil;
+import org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds;
+import org.eclipse.sirius.diagram.ui.tools.internal.actions.layout.PasteFormatAction;
+import org.eclipse.sirius.diagram.ui.tools.internal.actions.layout.PasteLayoutAction;
+import org.eclipse.sirius.diagram.ui.tools.internal.actions.layout.PasteStyleAction;
+import org.eclipse.ui.IWorkbenchPage;
+
+/**
+ * A paste format (layout and style) menu manager which handle cleanly
+ * {@link IDisposableAction} and set correctly handler for tabbar.
+ *
+ * @author <a href="mailto:laurent.redor@obeo.fr">Laurent Redor</a>
+ */
+public class TabbarPasteFormatMenuManager extends PasteFormatMenuManager {
+
+ @Override
+ public void add(IAction action) {
+ super.add(action);
+ if (action instanceof IDisposableAction) {
+ ((IDisposableAction) action).init();
+ }
+ }
+
+ @Override
+ protected void itemRemoved(IContributionItem item) {
+ if (item instanceof ActionContributionItem) {
+ IAction action = ((ActionContributionItem) item).getAction();
+ if (action instanceof IDisposableAction) {
+ ((IDisposableAction) action).dispose();
+ }
+ }
+ super.itemRemoved(item);
+ }
+
+ @Override
+ public void dispose() {
+ removeAll();
+ 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); //$NON-NLS-1$
+ 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(new PasteFormatAction(page));
+ add(new PasteLayoutAction(page));
+ add(new PasteStyleAction(page));
+ setDefaultAction(ActionIds.PASTE_FORMAT);
+ }
+ }
+ }
+}
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/contributions/TabbarContributionFactory.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/contributions/TabbarContributionFactory.java
index f3339d1e1b..144a760dea 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/contributions/TabbarContributionFactory.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/contributions/TabbarContributionFactory.java
@@ -38,7 +38,6 @@ import org.eclipse.sirius.diagram.ui.tools.internal.actions.SizeBothAction;
import org.eclipse.sirius.diagram.ui.tools.internal.actions.delete.DeleteFromDiagramAction;
import org.eclipse.sirius.diagram.ui.tools.internal.actions.delete.DeleteFromModelWithHookAction;
import org.eclipse.sirius.diagram.ui.tools.internal.actions.layout.CopyFormatAction;
-import org.eclipse.sirius.diagram.ui.tools.internal.actions.layout.PasteFormatAction;
import org.eclipse.sirius.diagram.ui.tools.internal.actions.refresh.RefreshDiagramAction;
import org.eclipse.sirius.diagram.ui.tools.internal.actions.style.ResetStylePropertiesToDefaultValuesAction;
import org.eclipse.sirius.diagram.ui.tools.internal.actions.style.SetStyleToWorkspaceImageAction;
@@ -52,6 +51,7 @@ import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.actions.Tabbar
import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.actions.TabbarArrangeMenuManager;
import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.actions.TabbarColorPropertyContributionItem;
import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.actions.TabbarDistributeMenuManager;
+import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.actions.TabbarPasteFormatMenuManager;
import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.actions.TabbarPinElementsEclipseAction;
import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.actions.TabbarRouterMenuManager;
import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.actions.TabbarSelectMenuManager;
@@ -628,12 +628,9 @@ public class TabbarContributionFactory {
* being initialized.
*/
public IContributionItem createPasteFormatContribution(IDiagramWorkbenchPart part) {
- IWorkbenchPartSite site = part.getSite();
- if (site != null) {
- PasteFormatAction pasteFormatAction = new PasteFormatAction(site.getPage(), part);
- return new ActionContributionItem(pasteFormatAction);
- }
- return null;
+ TabbarPasteFormatMenuManager pasteFormatMenu = new TabbarPasteFormatMenuManager();
+ pasteFormatMenu.setVisible(true);
+ return pasteFormatMenu;
}
/**

Back to the top