blob: edc26e01513cc9380c3df59668caf9cf0f70e956 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012, 2014 Obeo.
* 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.emf.compare.rcp.ui.internal.structuremergeviewer.actions;
import org.eclipse.emf.compare.Comparison;
import org.eclipse.emf.compare.rcp.ui.EMFCompareRCPUIPlugin;
import org.eclipse.emf.compare.rcp.ui.internal.EMFCompareRCPUIMessages;
import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.StructureMergeViewerGrouper;
import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.impl.DifferenceGroupManager;
import org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroupProvider;
import org.eclipse.emf.compare.scope.IComparisonScope;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuCreator;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.plugin.AbstractUIPlugin;
/**
* This menu will display actions that will allow the user to group differences together.
*
* @author <a href="mailto:laurent.goubet@obeo.fr">Laurent Goubet</a>
* @since 4.0
*/
public class GroupActionMenu extends Action implements IMenuCreator {
/** The viewer grouper that will be affected by this menu's actions. */
private final StructureMergeViewerGrouper structureMergeViewerGrouper;
/** Menu Manager that will contain our menu. */
private final MenuManager menuManager;
/** The registry that will be used to retrieve the displayed group providers. */
private final IDifferenceGroupProvider.Descriptor.Registry registry;
/**
* Constructs our grouping menu.
*
* @param structureMergeViewerGrouper
* The viewer grouper that will be affected by this menu's actions.
* @param registry
* The registry that contains the group provider..
*/
public GroupActionMenu(StructureMergeViewerGrouper structureMergeViewerGrouper,
IDifferenceGroupProvider.Descriptor.Registry registry) {
super("", IAction.AS_DROP_DOWN_MENU); //$NON-NLS-1$
this.registry = registry;
this.menuManager = new MenuManager();
this.structureMergeViewerGrouper = structureMergeViewerGrouper;
setToolTipText(EMFCompareRCPUIMessages.getString("GroupActionMenu.tooltip")); //$NON-NLS-1$
setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(EMFCompareRCPUIPlugin.PLUGIN_ID,
"icons/full/toolb16/group.gif")); //$NON-NLS-1$
setMenuCreator(this);
}
/**
* Create the grouping action in the given menu.
*
* @param scope
* The scope on which the groups will be applied.
* @param comparison
* The comparison which differences are to be split into groups.
*/
public void updateMenu(IComparisonScope scope, Comparison comparison) {
menuManager.removeAll();
DifferenceGroupManager groupManager = new DifferenceGroupManager(
EMFCompareRCPUIPlugin.getDefault().getItemDifferenceGroupProviderRegistry(),
EMFCompareRCPUIPlugin.getDefault().getPreferenceStore());
for (IDifferenceGroupProvider.Descriptor dgp : registry.getGroupProviders(scope, comparison)) {
IDifferenceGroupProvider gp = dgp.createGroupProvider();
if (gp != null) {
final IAction action;
if (gp.getClass() == structureMergeViewerGrouper.getProvider().getClass()) {
action = new GroupAction(structureMergeViewerGrouper, dgp,
structureMergeViewerGrouper.getProvider(), groupManager, comparison.isThreeWay());
action.setChecked(true);
} else {
action = new GroupAction(structureMergeViewerGrouper, dgp, gp, groupManager,
comparison.isThreeWay());
}
menuManager.add(action);
}
}
}
/**
* {@inheritDoc}
*
* @see IMenuCreator#dispose()
*/
public void dispose() {
menuManager.dispose();
}
/**
* {@inheritDoc}
*
* @see IMenuCreator#getMenu(Control)
*/
public Menu getMenu(Control parent) {
return menuManager.createContextMenu(parent);
}
/**
* {@inheritDoc}
*
* @see IMenuCreator#getMenu(Menu)
*/
public Menu getMenu(Menu parent) {
return null;
}
}