Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/CompareToolBar.java')
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/CompareToolBar.java162
1 files changed, 70 insertions, 92 deletions
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/CompareToolBar.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/CompareToolBar.java
index 025f8bf25..9501178ae 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/CompareToolBar.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/CompareToolBar.java
@@ -14,12 +14,11 @@ import static com.google.common.base.Predicates.instanceOf;
import static com.google.common.collect.Iterables.any;
import static com.google.common.collect.Lists.newArrayListWithCapacity;
+import com.google.common.eventbus.Subscribe;
+
import java.util.EnumSet;
import java.util.List;
-import java.util.Set;
-import org.eclipse.emf.compare.Comparison;
-import org.eclipse.emf.compare.domain.ICompareEditingDomain;
import org.eclipse.emf.compare.ide.ui.internal.configuration.EMFCompareConfiguration;
import org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.actions.CollapseAllModelAction;
import org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.actions.DropDownMergeMenuAction;
@@ -29,22 +28,24 @@ import org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.actions.Merg
import org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.actions.SaveComparisonModelAction;
import org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.actions.SelectNextDiffAction;
import org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.actions.SelectPreviousDiffAction;
-import org.eclipse.emf.compare.ide.ui.internal.util.SWTUtil;
import org.eclipse.emf.compare.internal.merge.MergeMode;
import org.eclipse.emf.compare.merge.IMerger;
import org.eclipse.emf.compare.rcp.EMFCompareRCPPlugin;
-import org.eclipse.emf.compare.rcp.ui.internal.configuration.EMFCompareConfigurationChangeListener;
+import org.eclipse.emf.compare.rcp.ui.EMFCompareRCPUIPlugin;
+import org.eclipse.emf.compare.rcp.ui.internal.configuration.ICompareEditingDomainChange;
+import org.eclipse.emf.compare.rcp.ui.internal.configuration.IComparisonAndScopeChange;
import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.actions.FilterActionMenu;
import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.actions.GroupActionMenu;
-import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.filters.IDifferenceFilter;
+import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.filters.IDifferenceFilterChange;
import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.filters.StructureMergeViewerFilter;
import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.filters.impl.CascadingDifferencesFilter;
import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.StructureMergeViewerGrouper;
-import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.impl.DefaultGroupProvider;
-import org.eclipse.emf.compare.scope.IComparisonScope;
+import org.eclipse.emf.compare.rcp.ui.internal.util.SWTUtil;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.viewers.AbstractTreeViewer;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.menus.IMenuService;
import org.eclipse.ui.services.IServiceLocator;
@@ -52,44 +53,46 @@ import org.eclipse.ui.services.IServiceLocator;
/**
* @author <a href="mailto:mikael.barbero@obeo.fr">Mikael Barbero</a>
*/
-public class CompareToolBar {
+public class CompareToolBar implements ISelectionChangedListener {
private final GroupActionMenu groupActionMenu;
private final FilterActionMenu filterActionMenu;
- private final List<MergeAction> mergeActions = newArrayListWithCapacity(2);
-
- private final List<MergeAllNonConflictingAction> mergeAllNonConflictingActions = newArrayListWithCapacity(2);
+ private final List<MergeAction> mergeActions;
- private final CompareConfigurationListener configurationChangeListener;
+ private final List<MergeAllNonConflictingAction> mergeAllNonConflictingActions;
private final EMFCompareConfiguration compareConfiguration;
- private final AbstractTreeViewer viewer;
-
/**
*
*/
- public CompareToolBar(AbstractTreeViewer viewer, ToolBarManager toolbarManager,
- StructureMergeViewerGrouper viewerGrouper, StructureMergeViewerFilter viewerFilter,
+ public CompareToolBar(StructureMergeViewerGrouper viewerGrouper, StructureMergeViewerFilter viewerFilter,
EMFCompareConfiguration compareConfiguration) {
- this.viewer = viewer;
this.compareConfiguration = compareConfiguration;
+ mergeActions = newArrayListWithCapacity(2);
+ mergeAllNonConflictingActions = newArrayListWithCapacity(2);
+
+ groupActionMenu = new GroupActionMenu(viewerGrouper, EMFCompareRCPUIPlugin.getDefault()
+ .getDifferenceGroupProviderRegistry());
+
+ filterActionMenu = new FilterActionMenu(viewerFilter, EMFCompareRCPUIPlugin.getDefault()
+ .getDifferenceFilterRegistry());
+ }
+
+ public final void initToolbar(ToolBarManager toolbarManager, AbstractTreeViewer viewer) {
+ compareConfiguration.getEventBus().register(this);
+
// Add extension point contributions to the structure merge viewer toolbar
IServiceLocator workbench = PlatformUI.getWorkbench();
+
IMenuService menuService = (IMenuService)workbench.getService(IMenuService.class);
if (menuService != null) {
menuService.populateContributionManager(toolbarManager,
"toolbar:org.eclipse.emf.compare.structuremergeviewer.toolbar");
}
- configurationChangeListener = new CompareConfigurationListener();
- compareConfiguration.addChangeListener(configurationChangeListener);
-
- groupActionMenu = new GroupActionMenu(viewerGrouper, new DefaultGroupProvider());
- filterActionMenu = new FilterActionMenu(viewerFilter);
-
boolean leftEditable = compareConfiguration.isLeftEditable();
boolean rightEditable = compareConfiguration.isRightEditable();
@@ -102,10 +105,10 @@ public class CompareToolBar {
toolbarManager.add(new DropDownMergeMenuAction(compareConfiguration, modes));
for (MergeMode mode : modes) {
- toolbarManager.add(createMergeAction(mode));
+ toolbarManager.add(createMergeAction(mode, compareConfiguration));
}
for (MergeMode mode : modes) {
- toolbarManager.add(createMergeAllNonConflictingAction(mode));
+ toolbarManager.add(createMergeAllNonConflictingAction(mode, compareConfiguration));
}
toolbarManager.add(new Separator());
@@ -116,105 +119,80 @@ public class CompareToolBar {
toolbarManager.add(new CollapseAllModelAction(viewer));
toolbarManager.add(new Separator());
toolbarManager.add(groupActionMenu);
+ groupActionMenu.updateMenu(compareConfiguration.getComparisonScope(), compareConfiguration
+ .getComparison());
toolbarManager.add(filterActionMenu);
+ filterActionMenu.updateMenu(compareConfiguration.getComparisonScope(), compareConfiguration
+ .getComparison());
toolbarManager.add(new Separator());
toolbarManager.add(new SaveComparisonModelAction(compareConfiguration));
toolbarManager.update(true);
}
- private MergeAction createMergeAction(MergeMode mergeMode) {
- EMFCompareConfiguration cc = compareConfiguration;
+ private MergeAction createMergeAction(MergeMode mergeMode, EMFCompareConfiguration cc) {
IMerger.Registry mergerRegistry = EMFCompareRCPPlugin.getDefault().getMergerRegistry();
MergeAction mergeAction = new MergeAction(cc.getEditingDomain(), mergerRegistry, mergeMode, cc
.isLeftEditable(), cc.isRightEditable());
- viewer.addSelectionChangedListener(mergeAction);
mergeActions.add(mergeAction);
return mergeAction;
}
- private MergeAction createMergeAllNonConflictingAction(MergeMode mergeMode) {
- EMFCompareConfiguration cc = compareConfiguration;
+ private MergeAction createMergeAllNonConflictingAction(MergeMode mergeMode, EMFCompareConfiguration cc) {
IMerger.Registry mergerRegistry = EMFCompareRCPPlugin.getDefault().getMergerRegistry();
MergeAllNonConflictingAction mergeAction = new MergeAllNonConflictingAction(cc.getEditingDomain(), cc
.getComparison(), mergerRegistry, mergeMode, cc.isLeftEditable(), cc.isRightEditable());
- viewer.addSelectionChangedListener(mergeAction);
mergeAllNonConflictingActions.add(mergeAction);
return mergeAction;
}
public void dispose() {
- compareConfiguration.addChangeListener(configurationChangeListener);
+ compareConfiguration.getEventBus().unregister(this);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
+ */
+ public void selectionChanged(SelectionChangedEvent event) {
+ // forward event to merge actions
+
for (MergeAction mergeAction : mergeActions) {
- viewer.removeSelectionChangedListener(mergeAction);
+ mergeAction.selectionChanged(event);
}
for (MergeAllNonConflictingAction mergeAllNonConflictingAction : mergeAllNonConflictingActions) {
- viewer.removeSelectionChangedListener(mergeAllNonConflictingAction);
+ mergeAllNonConflictingAction.selectionChanged(event);
}
}
- private class CompareConfigurationListener extends EMFCompareConfigurationChangeListener {
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.rcp.ui.internal.configuration.EMFCompareConfigurationChangeListener#editingDomainChange(org.eclipse.emf.compare.domain.ICompareEditingDomain,
- * org.eclipse.emf.compare.domain.ICompareEditingDomain)
- */
- @Override
- public void editingDomainChange(ICompareEditingDomain oldValue, ICompareEditingDomain newValue) {
- for (MergeAction mergeAction : mergeActions) {
- mergeAction.setEditingDomain(newValue);
- }
+ @Subscribe
+ public void editingDomainChange(ICompareEditingDomainChange event) {
+ for (MergeAction mergeAction : mergeActions) {
+ mergeAction.setEditingDomain(event.getNewValue());
}
+ }
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.rcp.ui.internal.configuration.EMFCompareConfigurationChangeListener#selectedDifferenceFiltersChange(java.util.Set,
- * java.util.Set)
- */
- @Override
- public void selectedDifferenceFiltersChange(Set<IDifferenceFilter> oldValue,
- Set<IDifferenceFilter> newValue) {
- final boolean enabled = any(newValue, instanceOf(CascadingDifferencesFilter.class));
- for (MergeAction mergeAction : mergeActions) {
- mergeAction.setCascadingDifferencesFilterEnabled(enabled);
- }
+ @Subscribe
+ public void selectedDifferenceFiltersChange(IDifferenceFilterChange event) {
+ final boolean enabled = any(event.getSelectedDifferenceFilters(),
+ instanceOf(CascadingDifferencesFilter.class));
+ for (MergeAction mergeAction : mergeActions) {
+ mergeAction.setCascadingDifferencesFilterEnabled(enabled);
}
+ }
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.rcp.ui.internal.configuration.EMFCompareConfigurationChangeListener#comparisonChange(org.eclipse.emf.compare.Comparison,
- * org.eclipse.emf.compare.Comparison)
- */
- @Override
- public void comparisonChange(Comparison oldValue, final Comparison newValue) {
- SWTUtil.safeSyncExec(new Runnable() {
- public void run() {
- groupActionMenu.createActions(compareConfiguration.getComparisonScope(), newValue);
- filterActionMenu.createActions(compareConfiguration.getComparisonScope(), newValue);
- }
- });
- for (MergeAllNonConflictingAction mergeAction : mergeAllNonConflictingActions) {
- mergeAction.setComparison(newValue);
+ @Subscribe
+ public void comparisonAndScopeChange(final IComparisonAndScopeChange event) {
+ SWTUtil.safeAsyncExec(new Runnable() {
+ public void run() {
+ filterActionMenu.updateMenu(event.getNewScope(), event.getNewComparison());
+ groupActionMenu.updateMenu(event.getNewScope(), event.getNewComparison());
}
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.rcp.ui.internal.configuration.EMFCompareConfigurationChangeListener#comparisonScopeChange(org.eclipse.emf.compare.scope.IComparisonScope,
- * org.eclipse.emf.compare.scope.IComparisonScope)
- */
- @Override
- public void comparisonScopeChange(IComparisonScope oldValue, final IComparisonScope newValue) {
- SWTUtil.safeSyncExec(new Runnable() {
- public void run() {
- groupActionMenu.createActions(newValue, compareConfiguration.getComparison());
- filterActionMenu.createActions(newValue, compareConfiguration.getComparison());
- }
- });
+ });
+ for (MergeAllNonConflictingAction mergeAction : mergeAllNonConflictingActions) {
+ mergeAction.setComparison(event.getNewComparison());
}
}
+
}

Back to the top