From 2a65310d1fddda95751fa7df69c410116af525cc Mon Sep 17 00:00:00 2001 From: Michael Valenta Date: Thu, 6 May 2004 02:47:54 +0000 Subject: *** empty log message *** --- bundles/org.eclipse.team.cvs.ui/plugin.xml | 203 --------------------- .../ccvs/ui/actions/CompareWithTagAction.java | 4 +- .../team/internal/ccvs/ui/merge/MergeWizard.java | 12 +- .../team/internal/ccvs/ui/messages.properties | 44 +++-- .../ui/subscriber/CVSActionDelegateWrapper.java | 43 +++++ .../ccvs/ui/subscriber/CVSParticipantAction.java | 25 ++- .../ccvs/ui/subscriber/CompareParticipant.java | 47 ++++- .../ccvs/ui/subscriber/CompareRevertAction.java | 5 + .../ccvs/ui/subscriber/ConfirmMergedAction.java | 5 + .../ui/subscriber/MergeSynchronizeParticipant.java | 91 ++++++--- .../ccvs/ui/subscriber/MergeUpdateAction.java | 5 + .../ui/subscriber/OverrideAndCommitAction.java | 5 + .../ui/subscriber/OverrideAndUpdateAction.java | 7 +- .../ui/subscriber/RefreshDirtyStateAction.java | 5 + .../ccvs/ui/subscriber/WorkspaceCommitAction.java | 5 + .../WorkspaceSynchronizeParticipant.java | 101 +++++++--- .../ccvs/ui/subscriber/WorkspaceUpdateAction.java | 5 + .../ui/wizards/SharingWizardPageActionGroup.java | 56 +++--- .../ccvs/ui/wizards/SharingWizardSyncPage.java | 2 +- .../ui/synchronize/ActionDelegateWrapper.java | 65 ++++--- .../ui/synchronize/StructuredViewerAdvisor.java | 77 ++++---- .../synchronize/SynchronizePageConfiguration.java | 1 - .../WorkbenchPartSynchronizePageSite.java | 7 + .../synchronize/ISynchronizePageConfiguration.java | 11 +- .../team/ui/synchronize/ISynchronizePageSite.java | 8 + .../synchronize/ParticipantPageSaveablePart.java | 6 + .../ui/synchronize/SynchronizeModelAction.java | 43 ++++- .../ui/synchronize/SynchronizePageActionGroup.java | 72 ++++---- 28 files changed, 529 insertions(+), 431 deletions(-) create mode 100644 bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CVSActionDelegateWrapper.java diff --git a/bundles/org.eclipse.team.cvs.ui/plugin.xml b/bundles/org.eclipse.team.cvs.ui/plugin.xml index 41c01f221..5f979d393 100644 --- a/bundles/org.eclipse.team.cvs.ui/plugin.xml +++ b/bundles/org.eclipse.team.cvs.ui/plugin.xml @@ -607,209 +607,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/CompareWithTagAction.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/CompareWithTagAction.java index 6d269f59d..8468da215 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/CompareWithTagAction.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/CompareWithTagAction.java @@ -18,7 +18,8 @@ import org.eclipse.jface.action.IAction; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.team.internal.ccvs.core.CVSCompareSubscriber; import org.eclipse.team.internal.ccvs.core.CVSTag; -import org.eclipse.team.internal.ccvs.ui.*; +import org.eclipse.team.internal.ccvs.ui.CVSUIPlugin; +import org.eclipse.team.internal.ccvs.ui.ICVSUIConstants; import org.eclipse.team.internal.ccvs.ui.Policy; import org.eclipse.team.internal.ccvs.ui.TagSelectionDialog; import org.eclipse.team.internal.ccvs.ui.subscriber.CompareParticipant; @@ -48,7 +49,6 @@ public class CompareWithTagAction extends WorkspaceAction { ISynchronizePageConfiguration.NAVIGATE_GROUP, ISynchronizePageConfiguration.MODE_GROUP, ISynchronizePageConfiguration.LAYOUT_GROUP }); - configuration.setProperty(ISynchronizePageConfiguration.P_OBJECT_CONTRIBUTION_ID, CVSCompareSubscriber.ID_MODAL); participant.refreshInDialog(getShell(), resources, Policy.bind("Participant.comparing"), participant.getName(), configuration, null); //$NON-NLS-1$ } } diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/merge/MergeWizard.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/merge/MergeWizard.java index 78da800a4..3c1f2fe1d 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/merge/MergeWizard.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/merge/MergeWizard.java @@ -18,13 +18,14 @@ import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.wizard.Wizard; import org.eclipse.team.internal.ccvs.core.CVSMergeSubscriber; import org.eclipse.team.internal.ccvs.core.CVSTag; -import org.eclipse.team.internal.ccvs.ui.*; +import org.eclipse.team.internal.ccvs.ui.CVSUIPlugin; +import org.eclipse.team.internal.ccvs.ui.ICVSUIConstants; +import org.eclipse.team.internal.ccvs.ui.Policy; import org.eclipse.team.internal.ccvs.ui.subscriber.MergeSynchronizeParticipant; import org.eclipse.team.internal.ui.Utils; import org.eclipse.team.ui.TeamUI; import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.eclipse.team.ui.synchronize.ISynchronizeParticipant; -import org.eclipse.ui.*; public class MergeWizard extends Wizard { MergeWizardStartPage startPage; @@ -52,12 +53,6 @@ public class MergeWizard extends Wizard { */ public boolean performFinish() { - IWorkbenchWindow wWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); - IWorkbenchPage activePage = null; - if(wWindow != null) { - activePage = wWindow.getActivePage(); - } - CVSTag startTag = startPage.getTag(); CVSTag endTag = endPage.getTag(); @@ -74,7 +69,6 @@ public class MergeWizard extends Wizard { ISynchronizePageConfiguration.NAVIGATE_GROUP, ISynchronizePageConfiguration.MODE_GROUP, ISynchronizePageConfiguration.LAYOUT_GROUP }); - configuration.setProperty(ISynchronizePageConfiguration.P_OBJECT_CONTRIBUTION_ID, CVSMergeSubscriber.ID_MODAL); participant.refreshInDialog(Utils.findShell(), s.roots(), Policy.bind("Participant.merging"), Policy.bind("Participant.mergingDetail", participant.getName()), configuration, null); //$NON-NLS-1$ //$NON-NLS-2$ } return true; diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/messages.properties b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/messages.properties index 5ce37dbb8..d4cf7a8a5 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/messages.properties +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/messages.properties @@ -1044,20 +1044,20 @@ RemoteRevisionQuickDiffProvider.closingFile=Error closing remote file RemoteRevisionQuickDiffProvider.fetchingFile=CVS QuickDiff: fetching remote contents for ''{0}'' RemoteCompareOperation.0=Comparing tags {0} and {1} of {2} -action.SynchronizeViewCommit.label=Commit -action.SynchronizeViewCommit.tooltip=Commit All Outgoing Changes... -action.SynchronizeViewCommit.description=Commit All Outgoing Changes... -action.SynchronizeViewCommit.image=checkin_action.gif +WorkspaceToolbarCommitAction.label=Commit +WorkspaceToolbarCommitAction.tooltip=Commit All Outgoing Changes... +WorkspaceToolbarCommitAction.description=Commit All Outgoing Changes... +WorkspaceToolbarCommitAction.image=checkin_action.gif -action.SynchronizeViewUpdate.label=Update -action.SynchronizeViewUpdate.tooltip=Update All Incoming Changes... -action.SynchronizeViewUpdate.description=Update All Incoming Changes... -action.SynchronizeViewUpdate.image=checkout_action.gif +WorkspaceToolbarUpdateAction.label=Update +WorkspaceToolbarUpdateAction.tooltip=Update All Incoming Changes... +WorkspaceToolbarUpdateAction.description=Update All Incoming Changes... +WorkspaceToolbarUpdateAction.image=checkout_action.gif -action.SharingWizardIgnore.label=Ignore -action.SharingWizardIgnore.tooltip=Ignore Selected Resources... -action.SharingWizardIgnore.description=Ignore Selected Resources... -action.SharingWizardIgnore.image=ignorefiles.gif +SharingWizardIgnore.label=Ignore +SharingWizardIgnore.tooltip=Ignore Selected Resources... +SharingWizardIgnore.description=Ignore Selected Resources... +SharingWizardIgnore.image=ignorefiles.gif WorkspaceUpdateAction.label=&Update WorkspaceUpdateAction.tooltip=Perform an update on the selected resources @@ -1083,6 +1083,21 @@ ConfirmMergedAction.label=&Mark as Merged ConfirmMergedAction.tooltip=Mark the conflict as merged by upgrading the base to match the remote ConfirmMergedAction.helpContextId=org.eclipse.team.cvs.ui.workspace_confirm_merged_action +BranchAction.label=&Branch... +BranchAction.tooltip=Branch + +IgnoreAction.label=A&dd to .cvsignore... +IgnoreAction.tooltip=Ignore the Selected Resources when Synchronizing + +ShowHistoryAction.label=Show in Resource &History +ShowHistoryAction.tooltip=Show in Resource History + +ShowAnnotationAction.label=Show &Annotation +ShowAnnotationAction.tooltip=Show Annotation + +GenerateDiff.label=Create &Patch... +GenerateDiff.tooltip=Compare your workspace contents with the server and generate a diff file that can be used as a patch file. + MergeUpdateAction.label=&Update MergeUpdateAction.tooltip=Perform an update merge on the selected resources MergeUpdateAction.helpContextId=org.eclipse.team.cvs.ui.merge_update_action @@ -1091,6 +1106,11 @@ CompareRevertAction.label=&Override and Update CompareRevertAction.tooltip=Revert the local file contents to match that of their corresponding remotes CompareRevertAction.helpContextId=org.eclipse.team.cvs.ui.compare_revert_action +SharingCommitAction.label=Commit +SharingCommitAction.tooltip=Commit All Changes... +SharingCommitAction.description=Commit All Changes... +SharingCommitAction.image=checkin_action.gif + MergeSynchronizeParticipant.8=Missing id initializing cvs merge participant MergeSynchronizeParticipant.9=Unable to initialize cvs merge subscriber MergeSynchronizeParticipant.10=Missing root nodes in cvs merge subscriber memento: {0} diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CVSActionDelegateWrapper.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CVSActionDelegateWrapper.java new file mode 100644 index 000000000..1cff07326 --- /dev/null +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CVSActionDelegateWrapper.java @@ -0,0 +1,43 @@ +/******************************************************************************* + * Copyright (c) 2000, 2004 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.team.internal.ccvs.ui.subscriber; + +import org.eclipse.team.internal.ccvs.ui.Policy; +import org.eclipse.team.internal.ui.Utils; +import org.eclipse.team.internal.ui.synchronize.ActionDelegateWrapper; +import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; +import org.eclipse.ui.IActionDelegate; + +/** + * Superclass of CVS participant action delegates that uses the classname as the key + * to access the text from the resource bundle + */ +public class CVSActionDelegateWrapper extends ActionDelegateWrapper { + + public CVSActionDelegateWrapper(IActionDelegate delegate, ISynchronizePageConfiguration configuration) { + super(delegate, configuration); + Utils.initAction(this, getBundleKeyPrefix(), Policy.getBundle()); + } + + /** + * Return the key to the action text in the resource bundle. + * The default is the class name followed by a dot (.). + * @return the bundle key prefix + */ + protected String getBundleKeyPrefix() { + String name = getDelegate().getClass().getName(); + int lastDot = name.lastIndexOf("."); //$NON-NLS-1$ + if (lastDot == -1) { + return name; + } + return name.substring(lastDot + 1) + "."; //$NON-NLS-1$ + } +} diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CVSParticipantAction.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CVSParticipantAction.java index 0100f4092..4b00b5a32 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CVSParticipantAction.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CVSParticipantAction.java @@ -10,18 +10,21 @@ *******************************************************************************/ package org.eclipse.team.internal.ccvs.ui.subscriber; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.team.internal.ccvs.ui.Policy; import org.eclipse.team.internal.ui.Utils; +import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.eclipse.team.ui.synchronize.SynchronizeModelAction; /** - * Superclass of CVS particpant actions that uses the classname as the key + * Superclass of CVS participant actions that uses the classname as the key * to access the text from the resource bundle */ public abstract class CVSParticipantAction extends SynchronizeModelAction { - protected CVSParticipantAction() { - super(null); + protected CVSParticipantAction(ISynchronizePageConfiguration configuration) { + super(null, configuration); Utils.initAction(this, getBundleKeyPrefix(), Policy.getBundle()); } @@ -31,6 +34,20 @@ public abstract class CVSParticipantAction extends SynchronizeModelAction { * @return the bundle key prefix */ protected String getBundleKeyPrefix() { - return getClass().getName() + "."; + String name = getClass().getName(); + int lastDot = name.lastIndexOf("."); //$NON-NLS-1$ + if (lastDot == -1) { + return name; + } + return name.substring(lastDot + 1) + "."; //$NON-NLS-1$ + } + + /** + * Set the selection of the action to the given object + * @param input the selected object + */ + public void setSelection(Object input) { + IStructuredSelection selection = new StructuredSelection(input); + selectionChanged(selection); } } diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CompareParticipant.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CompareParticipant.java index bc329caf1..10732c0dd 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CompareParticipant.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CompareParticipant.java @@ -21,12 +21,43 @@ import org.eclipse.team.core.synchronize.SyncInfoFilter; import org.eclipse.team.internal.ccvs.core.CVSCompareSubscriber; import org.eclipse.team.internal.ccvs.ui.CVSUIPlugin; import org.eclipse.team.internal.ccvs.ui.ICVSUIConstants; +import org.eclipse.team.internal.ccvs.ui.actions.ShowAnnotationAction; +import org.eclipse.team.internal.ccvs.ui.actions.ShowResourceInHistoryAction; import org.eclipse.team.ui.TeamUI; import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.eclipse.team.ui.synchronize.ISynchronizeParticipantDescriptor; +import org.eclipse.team.ui.synchronize.SynchronizePageActionGroup; public class CompareParticipant extends CVSParticipant implements IPropertyChangeListener { + public static final String CONTEXT_MENU_CONTRIBUTION_GROUP = "context_group_1"; //$NON-NLS-1$ + public static final String NON_MODAL_CONTEXT_MENU_CONTRIBUTION_GROUP = "context_group_2"; //$NON-NLS-1$ + + /** + * Actions for the compare particpant's toolbar + */ + public class CompareParticipantActionContribution extends SynchronizePageActionGroup { + public void initialize(ISynchronizePageConfiguration configuration) { + super.initialize(configuration); + + appendToGroup( + ISynchronizePageConfiguration.P_CONTEXT_MENU, + CONTEXT_MENU_CONTRIBUTION_GROUP, + new CompareRevertAction(configuration)); + + if (!configuration.getSite().isModal()) { + appendToGroup( + ISynchronizePageConfiguration.P_CONTEXT_MENU, + NON_MODAL_CONTEXT_MENU_CONTRIBUTION_GROUP, + new CVSActionDelegateWrapper(new ShowAnnotationAction(), configuration)); + appendToGroup( + ISynchronizePageConfiguration.P_CONTEXT_MENU, + NON_MODAL_CONTEXT_MENU_CONTRIBUTION_GROUP, + new CVSActionDelegateWrapper(new ShowResourceInHistoryAction(), configuration)); + } + } + } + private SyncInfoFilter contentComparison = new SyncInfoFilter() { private SyncInfoFilter contentCompare = new SyncInfoFilter.ContentComparisonSyncInfoFilter(); public boolean select(SyncInfo info, IProgressMonitor monitor) { @@ -64,13 +95,6 @@ public class CompareParticipant extends CVSParticipant implements IPropertyChang public String getName() { return getSubscriber().getName(); } - - /* (non-Javadoc) - * @see org.eclipse.team.ui.synchronize.AbstractSynchronizeParticipant#isPersistent() - */ - public boolean isPersistent() { - return false; - } /* (non-Javadoc) * @see org.eclipse.team.ui.synchronize.subscribers.SubscriberParticipant#initializeConfiguration(org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration) @@ -78,6 +102,15 @@ public class CompareParticipant extends CVSParticipant implements IPropertyChang protected void initializeConfiguration(ISynchronizePageConfiguration configuration) { super.initializeConfiguration(configuration); configuration.addMenuGroup(ISynchronizePageConfiguration.P_TOOLBAR_MENU, ISynchronizePageConfiguration.REMOVE_PARTICPANT_GROUP); + configuration.addMenuGroup( + ISynchronizePageConfiguration.P_CONTEXT_MENU, + CONTEXT_MENU_CONTRIBUTION_GROUP); + if (!configuration.getSite().isModal()) { + configuration.addMenuGroup( + ISynchronizePageConfiguration.P_CONTEXT_MENU, + NON_MODAL_CONTEXT_MENU_CONTRIBUTION_GROUP); + } + configuration.addActionContribution(new CompareParticipantActionContribution()); } /* (non-Javadoc) diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CompareRevertAction.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CompareRevertAction.java index beece89df..949181633 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CompareRevertAction.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CompareRevertAction.java @@ -11,6 +11,7 @@ package org.eclipse.team.internal.ccvs.ui.subscriber; import org.eclipse.compare.structuremergeviewer.IDiffElement; +import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.eclipse.team.ui.synchronize.SynchronizeModelOperation; import org.eclipse.ui.IWorkbenchPart; @@ -19,6 +20,10 @@ import org.eclipse.ui.IWorkbenchPart; */ public class CompareRevertAction extends CVSParticipantAction { + public CompareRevertAction(ISynchronizePageConfiguration configuration) { + super(configuration); + } + /* (non-Javadoc) * @see org.eclipse.team.internal.ui.actions.SubscriberAction#getSubscriberOperation(org.eclipse.compare.structuremergeviewer.IDiffElement[]) */ diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/ConfirmMergedAction.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/ConfirmMergedAction.java index 520c35831..6b57fba4f 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/ConfirmMergedAction.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/ConfirmMergedAction.java @@ -14,11 +14,16 @@ import org.eclipse.compare.structuremergeviewer.IDiffElement; import org.eclipse.team.core.synchronize.FastSyncInfoFilter; import org.eclipse.team.core.synchronize.SyncInfo; import org.eclipse.team.core.synchronize.FastSyncInfoFilter.SyncInfoDirectionFilter; +import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.eclipse.team.ui.synchronize.SynchronizeModelOperation; import org.eclipse.ui.IWorkbenchPart; public class ConfirmMergedAction extends CVSParticipantAction { + public ConfirmMergedAction(ISynchronizePageConfiguration configuration) { + super(configuration); + } + /* (non-Javadoc) * @see org.eclipse.team.ui.sync.SubscriberAction#getSyncInfoFilter() */ diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/MergeSynchronizeParticipant.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/MergeSynchronizeParticipant.java index 48b52e7ea..932037678 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/MergeSynchronizeParticipant.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/MergeSynchronizeParticipant.java @@ -12,19 +12,30 @@ package org.eclipse.team.internal.ccvs.ui.subscriber; import java.util.ArrayList; import java.util.List; + import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.*; -import org.eclipse.jface.action.IToolBarManager; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.QualifiedName; import org.eclipse.team.core.subscribers.Subscriber; -import org.eclipse.team.internal.ccvs.core.*; +import org.eclipse.team.internal.ccvs.core.CVSException; +import org.eclipse.team.internal.ccvs.core.CVSMergeSubscriber; +import org.eclipse.team.internal.ccvs.core.CVSProviderPlugin; +import org.eclipse.team.internal.ccvs.core.CVSStatus; +import org.eclipse.team.internal.ccvs.core.CVSTag; import org.eclipse.team.internal.ccvs.ui.CVSUIPlugin; import org.eclipse.team.internal.ccvs.ui.Policy; -import org.eclipse.team.internal.ui.Utils; -import org.eclipse.team.internal.ui.synchronize.ActionDelegateWrapper; +import org.eclipse.team.internal.ccvs.ui.actions.ShowAnnotationAction; +import org.eclipse.team.internal.ccvs.ui.actions.ShowResourceInHistoryAction; import org.eclipse.team.ui.TeamUI; -import org.eclipse.team.ui.synchronize.*; -import org.eclipse.ui.*; +import org.eclipse.team.ui.synchronize.ISynchronizeModelElement; +import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; +import org.eclipse.team.ui.synchronize.ISynchronizeParticipantDescriptor; +import org.eclipse.team.ui.synchronize.SynchronizePageActionGroup; +import org.eclipse.ui.IMemento; +import org.eclipse.ui.PartInitException; public class MergeSynchronizeParticipant extends CVSParticipant { @@ -32,9 +43,11 @@ public class MergeSynchronizeParticipant extends CVSParticipant { * The id of a workspace action group to which additions actions can * be added. */ - public static final String ACTION_GROUP = "cvs_merge_actions"; //$NON-NLS-1$ - + public static final String TOOLBAR_CONTRIBUTION_GROUP = "toolbar_group"; //$NON-NLS-1$ + public static final String CONTEXT_MENU_CONTRIBUTION_GROUP = "context_group_1"; //$NON-NLS-1$ + public static final String NON_MODAL_CONTEXT_MENU_CONTRIBUTION_GROUP = "context_group_2"; //$NON-NLS-1$ + private final static String CTX_ROOT = "root"; //$NON-NLS-1$ private final static String CTX_ROOT_PATH = "root_resource"; //$NON-NLS-1$ private final static String CTX_START_TAG = "start_tag"; //$NON-NLS-1$ @@ -46,23 +59,49 @@ public class MergeSynchronizeParticipant extends CVSParticipant { * Actions for the merge particpant's toolbar */ public class MergeParticipantActionContribution extends SynchronizePageActionGroup { - private ActionDelegateWrapper updateAdapter; + private MergeUpdateAction updateAction; public void initialize(ISynchronizePageConfiguration configuration) { super.initialize(configuration); - MergeUpdateAction action = new MergeUpdateAction(); - action.setPromptBeforeUpdate(true); - updateAdapter = new ActionDelegateWrapper(action, configuration.getSite().getPart()); - Utils.initAction(updateAdapter, "action.SynchronizeViewUpdate.", Policy.getBundle()); //$NON-NLS-1$ - super.initialize(configuration); + + updateAction = new MergeUpdateAction(configuration) { + protected void initialize(ISynchronizePageConfiguration configuration) { + // Override to avoid registering a selection listener + } + protected String getBundleKeyPrefix() { + return "WorkspaceToolbarUpdateAction."; //$NON-NLS-1$ + } + }; + updateAction.setPromptBeforeUpdate(true); + appendToGroup( + ISynchronizePageConfiguration.P_TOOLBAR_MENU, + TOOLBAR_CONTRIBUTION_GROUP, + updateAction); + + appendToGroup( + ISynchronizePageConfiguration.P_CONTEXT_MENU, + CONTEXT_MENU_CONTRIBUTION_GROUP, + new MergeUpdateAction(configuration)); + appendToGroup( + ISynchronizePageConfiguration.P_CONTEXT_MENU, + CONTEXT_MENU_CONTRIBUTION_GROUP, + new ConfirmMergedAction(configuration)); + + if (!configuration.getSite().isModal()) { + appendToGroup( + ISynchronizePageConfiguration.P_CONTEXT_MENU, + NON_MODAL_CONTEXT_MENU_CONTRIBUTION_GROUP, + new CVSActionDelegateWrapper(new ShowAnnotationAction(), configuration)); + appendToGroup( + ISynchronizePageConfiguration.P_CONTEXT_MENU, + NON_MODAL_CONTEXT_MENU_CONTRIBUTION_GROUP, + new CVSActionDelegateWrapper(new ShowResourceInHistoryAction(), configuration)); + } + } public void modelChanged(ISynchronizeModelElement input) { - if (updateAdapter == null) return; - updateAdapter.setSelection(input); - } - public void fillActionBars(IActionBars actionBars) { - IToolBarManager toolbar = actionBars.getToolBarManager(); - appendToGroup(toolbar, ACTION_GROUP, updateAdapter); - super.fillActionBars(actionBars); + if (updateAction != null) { + updateAction.setSelection(input); + } } } @@ -192,8 +231,14 @@ public class MergeSynchronizeParticipant extends CVSParticipant { */ protected void initializeConfiguration(ISynchronizePageConfiguration configuration) { super.initializeConfiguration(configuration); - configuration.addMenuGroup(ISynchronizePageConfiguration.P_TOOLBAR_MENU, ACTION_GROUP); + configuration.addMenuGroup(ISynchronizePageConfiguration.P_TOOLBAR_MENU, TOOLBAR_CONTRIBUTION_GROUP); configuration.addMenuGroup(ISynchronizePageConfiguration.P_TOOLBAR_MENU, ISynchronizePageConfiguration.REMOVE_PARTICPANT_GROUP); + configuration.addMenuGroup( + ISynchronizePageConfiguration.P_CONTEXT_MENU, + CONTEXT_MENU_CONTRIBUTION_GROUP); + configuration.addMenuGroup( + ISynchronizePageConfiguration.P_CONTEXT_MENU, + NON_MODAL_CONTEXT_MENU_CONTRIBUTION_GROUP); configuration.setSupportedModes(ISynchronizePageConfiguration.INCOMING_MODE | ISynchronizePageConfiguration.CONFLICTING_MODE); configuration.setMode(ISynchronizePageConfiguration.INCOMING_MODE); configuration.addActionContribution(new MergeParticipantActionContribution()); diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/MergeUpdateAction.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/MergeUpdateAction.java index 5cd8b01d6..1c285325c 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/MergeUpdateAction.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/MergeUpdateAction.java @@ -15,12 +15,17 @@ import org.eclipse.team.core.synchronize.FastSyncInfoFilter; import org.eclipse.team.core.synchronize.SyncInfo; import org.eclipse.team.core.synchronize.FastSyncInfoFilter.OrSyncInfoFilter; import org.eclipse.team.core.synchronize.FastSyncInfoFilter.SyncInfoDirectionFilter; +import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.eclipse.team.ui.synchronize.SynchronizeModelOperation; import org.eclipse.ui.IWorkbenchPart; public class MergeUpdateAction extends CVSParticipantAction { + public MergeUpdateAction(ISynchronizePageConfiguration configuration) { + super(configuration); + } + private boolean promptBeforeUpdate; /* (non-Javadoc) diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/OverrideAndCommitAction.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/OverrideAndCommitAction.java index 45279cdaf..5c47fcf44 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/OverrideAndCommitAction.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/OverrideAndCommitAction.java @@ -14,11 +14,16 @@ import org.eclipse.compare.structuremergeviewer.IDiffElement; import org.eclipse.team.core.synchronize.FastSyncInfoFilter; import org.eclipse.team.core.synchronize.SyncInfo; import org.eclipse.team.core.synchronize.FastSyncInfoFilter.SyncInfoDirectionFilter; +import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.eclipse.team.ui.synchronize.SynchronizeModelOperation; import org.eclipse.ui.IWorkbenchPart; public class OverrideAndCommitAction extends CVSParticipantAction { + public OverrideAndCommitAction(ISynchronizePageConfiguration configuration) { + super(configuration); + } + /* (non-Javadoc) * @see org.eclipse.team.internal.ui.actions.SubscriberAction#getSyncInfoFilter() */ diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/OverrideAndUpdateAction.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/OverrideAndUpdateAction.java index 3be4cfee0..5acdaeeeb 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/OverrideAndUpdateAction.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/OverrideAndUpdateAction.java @@ -14,6 +14,7 @@ import org.eclipse.compare.structuremergeviewer.IDiffElement; import org.eclipse.team.core.synchronize.FastSyncInfoFilter; import org.eclipse.team.core.synchronize.SyncInfo; import org.eclipse.team.core.synchronize.FastSyncInfoFilter.SyncInfoDirectionFilter; +import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.eclipse.team.ui.synchronize.SynchronizeModelOperation; import org.eclipse.ui.IWorkbenchPart; @@ -24,6 +25,10 @@ import org.eclipse.ui.IWorkbenchPart; */ public class OverrideAndUpdateAction extends CVSParticipantAction { + public OverrideAndUpdateAction(ISynchronizePageConfiguration configuration) { + super(configuration); + } + /* (non-Javadoc) * @see org.eclipse.team.ui.sync.SubscriberAction#getSyncInfoFilter() */ @@ -34,4 +39,4 @@ public class OverrideAndUpdateAction extends CVSParticipantAction { protected SynchronizeModelOperation getSubscriberOperation(IWorkbenchPart part, IDiffElement[] elements) { return new OverrideAndUpdateSubscriberOperation(part, elements); } -} +} \ No newline at end of file diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/RefreshDirtyStateAction.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/RefreshDirtyStateAction.java index 9a7897581..89a43eefd 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/RefreshDirtyStateAction.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/RefreshDirtyStateAction.java @@ -16,6 +16,7 @@ import org.eclipse.team.core.synchronize.SyncInfo; import org.eclipse.team.core.synchronize.FastSyncInfoFilter.AndSyncInfoFilter; import org.eclipse.team.core.synchronize.FastSyncInfoFilter.SyncInfoChangeTypeFilter; import org.eclipse.team.core.synchronize.FastSyncInfoFilter.SyncInfoDirectionFilter; +import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.eclipse.team.ui.synchronize.SynchronizeModelOperation; import org.eclipse.ui.IWorkbenchPart; @@ -24,6 +25,10 @@ import org.eclipse.ui.IWorkbenchPart; */ public class RefreshDirtyStateAction extends CVSParticipantAction { + public RefreshDirtyStateAction(ISynchronizePageConfiguration configuration) { + super(configuration); + } + /* (non-Javadoc) * @see org.eclipse.team.ui.sync.SubscriberAction#getSyncInfoFilter() */ diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/WorkspaceCommitAction.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/WorkspaceCommitAction.java index 226c2fafc..efb49809e 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/WorkspaceCommitAction.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/WorkspaceCommitAction.java @@ -14,11 +14,16 @@ import org.eclipse.compare.structuremergeviewer.IDiffElement; import org.eclipse.team.core.synchronize.FastSyncInfoFilter; import org.eclipse.team.core.synchronize.SyncInfo; import org.eclipse.team.core.synchronize.FastSyncInfoFilter.SyncInfoDirectionFilter; +import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.eclipse.team.ui.synchronize.SynchronizeModelOperation; import org.eclipse.ui.IWorkbenchPart; public class WorkspaceCommitAction extends CVSParticipantAction { + public WorkspaceCommitAction(ISynchronizePageConfiguration configuration) { + super(configuration); + } + /* (non-Javadoc) * @see org.eclipse.team.ui.sync.SubscriberAction#getSyncInfoFilter() */ diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/WorkspaceSynchronizeParticipant.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/WorkspaceSynchronizeParticipant.java index b0de5868d..b12f5b097 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/WorkspaceSynchronizeParticipant.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/WorkspaceSynchronizeParticipant.java @@ -10,16 +10,16 @@ *******************************************************************************/ package org.eclipse.team.internal.ccvs.ui.subscriber; -import org.eclipse.jface.action.IToolBarManager; import org.eclipse.team.core.subscribers.Subscriber; import org.eclipse.team.internal.ccvs.core.CVSProviderPlugin; -import org.eclipse.team.internal.ccvs.ui.Policy; -import org.eclipse.team.internal.ui.Utils; -import org.eclipse.team.internal.ui.synchronize.ActionDelegateWrapper; +import org.eclipse.team.internal.ccvs.ui.actions.BranchAction; +import org.eclipse.team.internal.ccvs.ui.actions.GenerateDiffFileAction; +import org.eclipse.team.internal.ccvs.ui.actions.IgnoreAction; +import org.eclipse.team.internal.ccvs.ui.actions.ShowAnnotationAction; +import org.eclipse.team.internal.ccvs.ui.actions.ShowResourceInHistoryAction; import org.eclipse.team.ui.synchronize.ISynchronizeModelElement; import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.eclipse.team.ui.synchronize.SynchronizePageActionGroup; -import org.eclipse.ui.IActionBars; import org.eclipse.ui.IMemento; import org.eclipse.ui.PartInitException; @@ -31,63 +31,104 @@ public class WorkspaceSynchronizeParticipant extends CVSParticipant { * The id of a workspace action group to which additions actions can * be added. */ - public static final String ACTION_GROUP = "cvs_workspace_actions"; //$NON-NLS-1$ + public static final String TOOLBAR_CONTRIBUTION_GROUP = "toolbar_group_1"; //$NON-NLS-1$ public static final String CONTEXT_MENU_CONTRIBUTION_GROUP_1 = "context_group_1"; //$NON-NLS-1$ public static final String CONTEXT_MENU_CONTRIBUTION_GROUP_2 = "context_group_2"; //$NON-NLS-1$ public static final String CONTEXT_MENU_CONTRIBUTION_GROUP_3 = "context_group_3"; //$NON-NLS-1$ public static final String CONTEXT_MENU_CONTRIBUTION_GROUP_4 = "context_group_4"; //$NON-NLS-1$ + /** * CVS workspace action contribution */ public class WorkspaceActionContribution extends SynchronizePageActionGroup { - private ActionDelegateWrapper commitToolbar; - private ActionDelegateWrapper updateToolbar; + private WorkspaceCommitAction commitToolbar; + private WorkspaceUpdateAction updateToolbar; public void initialize(ISynchronizePageConfiguration configuration) { super.initialize(configuration); - commitToolbar = new ActionDelegateWrapper(new WorkspaceCommitAction(), configuration.getSite().getPart()); - WorkspaceUpdateAction action = new WorkspaceUpdateAction(); - action.setPromptBeforeUpdate(true); - updateToolbar = new ActionDelegateWrapper(action, configuration.getSite().getPart()); - Utils.initAction(commitToolbar, "action.SynchronizeViewCommit.", Policy.getBundle()); //$NON-NLS-1$ - Utils.initAction(updateToolbar, "action.SynchronizeViewUpdate.", Policy.getBundle()); //$NON-NLS-1$ + + updateToolbar = new WorkspaceUpdateAction(configuration) { + protected void initialize(ISynchronizePageConfiguration configuration) { + // Override to prevent registering as a selection listener + } + protected String getBundleKeyPrefix() { + return "WorkspaceToolbarUpdateAction."; //$NON-NLS-1$ + } + }; + updateToolbar.setPromptBeforeUpdate(true); + appendToGroup( + ISynchronizePageConfiguration.P_TOOLBAR_MENU, + TOOLBAR_CONTRIBUTION_GROUP, + updateToolbar); + + commitToolbar = new WorkspaceCommitAction(configuration) { + protected void initialize(ISynchronizePageConfiguration configuration) { + // Override to prevent registering as a selection listener + } + protected String getBundleKeyPrefix() { + return "WorkspaceToolbarCommitAction."; //$NON-NLS-1$ + } + }; + appendToGroup( + ISynchronizePageConfiguration.P_TOOLBAR_MENU, + TOOLBAR_CONTRIBUTION_GROUP, + commitToolbar); appendToGroup( ISynchronizePageConfiguration.P_CONTEXT_MENU, CONTEXT_MENU_CONTRIBUTION_GROUP_1, - new WorkspaceUpdateAction()); + new WorkspaceUpdateAction(configuration)); appendToGroup( ISynchronizePageConfiguration.P_CONTEXT_MENU, CONTEXT_MENU_CONTRIBUTION_GROUP_1, - new WorkspaceCommitAction()); + new WorkspaceCommitAction(configuration)); appendToGroup( ISynchronizePageConfiguration.P_CONTEXT_MENU, CONTEXT_MENU_CONTRIBUTION_GROUP_2, - new OverrideAndUpdateAction()); + new OverrideAndUpdateAction(configuration)); appendToGroup( ISynchronizePageConfiguration.P_CONTEXT_MENU, CONTEXT_MENU_CONTRIBUTION_GROUP_2, - new OverrideAndCommitAction()); + new OverrideAndCommitAction(configuration)); appendToGroup( ISynchronizePageConfiguration.P_CONTEXT_MENU, CONTEXT_MENU_CONTRIBUTION_GROUP_2, - new ConfirmMergedAction()); + new ConfirmMergedAction(configuration)); + appendToGroup( + ISynchronizePageConfiguration.P_CONTEXT_MENU, + CONTEXT_MENU_CONTRIBUTION_GROUP_3, + new CVSActionDelegateWrapper(new IgnoreAction(), configuration)); + if (!configuration.getSite().isModal()) { + appendToGroup( + ISynchronizePageConfiguration.P_CONTEXT_MENU, + CONTEXT_MENU_CONTRIBUTION_GROUP_3, + new CVSActionDelegateWrapper(new GenerateDiffFileAction(), configuration)); + appendToGroup( + ISynchronizePageConfiguration.P_CONTEXT_MENU, + CONTEXT_MENU_CONTRIBUTION_GROUP_3, + new CVSActionDelegateWrapper(new BranchAction(), configuration)); + appendToGroup( + ISynchronizePageConfiguration.P_CONTEXT_MENU, + CONTEXT_MENU_CONTRIBUTION_GROUP_3, + new CVSActionDelegateWrapper(new ShowAnnotationAction(), configuration)); + appendToGroup( + ISynchronizePageConfiguration.P_CONTEXT_MENU, + CONTEXT_MENU_CONTRIBUTION_GROUP_3, + new CVSActionDelegateWrapper(new ShowResourceInHistoryAction(), configuration)); + } appendToGroup( ISynchronizePageConfiguration.P_CONTEXT_MENU, CONTEXT_MENU_CONTRIBUTION_GROUP_4, - new RefreshDirtyStateAction()); - } - public void fillActionBars(IActionBars actionBars) { - IToolBarManager toolbar = actionBars.getToolBarManager(); - appendToGroup(toolbar, ACTION_GROUP, updateToolbar); - appendToGroup(toolbar, ACTION_GROUP, commitToolbar); - super.fillActionBars(actionBars); + new RefreshDirtyStateAction(configuration)); } public void modelChanged(ISynchronizeModelElement element) { - if (commitToolbar == null) return; - commitToolbar.setSelection(element); - updateToolbar.setSelection(element); + if (commitToolbar != null) { + commitToolbar.setSelection(element); + } + if (updateToolbar != null) { + updateToolbar.setSelection(element); + } } } @@ -105,7 +146,7 @@ public class WorkspaceSynchronizeParticipant extends CVSParticipant { */ protected void initializeConfiguration(ISynchronizePageConfiguration configuration) { super.initializeConfiguration(configuration); - configuration.addMenuGroup(ISynchronizePageConfiguration.P_TOOLBAR_MENU, ACTION_GROUP); + configuration.addMenuGroup(ISynchronizePageConfiguration.P_TOOLBAR_MENU, TOOLBAR_CONTRIBUTION_GROUP); configuration.addActionContribution(new WorkspaceActionContribution()); configuration.setSupportedModes(ISynchronizePageConfiguration.ALL_MODES); configuration.setMode(ISynchronizePageConfiguration.BOTH_MODE); diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/WorkspaceUpdateAction.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/WorkspaceUpdateAction.java index 00caf2bc4..3b19ff84c 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/WorkspaceUpdateAction.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/WorkspaceUpdateAction.java @@ -14,6 +14,7 @@ import org.eclipse.compare.structuremergeviewer.IDiffElement; import org.eclipse.team.core.synchronize.FastSyncInfoFilter; import org.eclipse.team.core.synchronize.SyncInfo; import org.eclipse.team.core.synchronize.FastSyncInfoFilter.SyncInfoDirectionFilter; +import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.eclipse.team.ui.synchronize.SynchronizeModelOperation; import org.eclipse.ui.IWorkbenchPart; @@ -21,6 +22,10 @@ public class WorkspaceUpdateAction extends CVSParticipantAction { private boolean promptBeforeUpdate; + public WorkspaceUpdateAction(ISynchronizePageConfiguration configuration) { + super(configuration); + } + /* (non-Javadoc) * @see org.eclipse.team.ui.sync.SubscriberAction#getSyncInfoFilter() */ diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/SharingWizardPageActionGroup.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/SharingWizardPageActionGroup.java index 0eaeaf3dd..b1ddffac9 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/SharingWizardPageActionGroup.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/SharingWizardPageActionGroup.java @@ -11,17 +11,17 @@ package org.eclipse.team.internal.ccvs.ui.wizards; import org.eclipse.compare.structuremergeviewer.IDiffElement; -import org.eclipse.jface.action.IToolBarManager; import org.eclipse.team.core.synchronize.FastSyncInfoFilter; import org.eclipse.team.core.synchronize.SyncInfo; import org.eclipse.team.core.synchronize.FastSyncInfoFilter.SyncInfoDirectionFilter; -import org.eclipse.team.internal.ccvs.ui.Policy; import org.eclipse.team.internal.ccvs.ui.actions.IgnoreAction; +import org.eclipse.team.internal.ccvs.ui.subscriber.CVSActionDelegateWrapper; +import org.eclipse.team.internal.ccvs.ui.subscriber.CVSParticipantAction; import org.eclipse.team.internal.ccvs.ui.subscriber.WorkspaceCommitOperation; -import org.eclipse.team.internal.ui.Utils; -import org.eclipse.team.internal.ui.synchronize.ActionDelegateWrapper; -import org.eclipse.team.ui.synchronize.*; -import org.eclipse.ui.IActionBars; +import org.eclipse.team.ui.synchronize.ISynchronizeModelElement; +import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; +import org.eclipse.team.ui.synchronize.SynchronizeModelOperation; +import org.eclipse.team.ui.synchronize.SynchronizePageActionGroup; import org.eclipse.ui.IWorkbenchPart; /** @@ -29,14 +29,23 @@ import org.eclipse.ui.IWorkbenchPart; */ public class SharingWizardPageActionGroup extends SynchronizePageActionGroup { - private ActionDelegateWrapper commitAction; - private ActionDelegateWrapper ignoreAction; public static final String ACTION_GROUP = "cvs_sharing_page_actions"; //$NON-NLS-1$ + + private SharingCommitAction commitAction; /** * Custom commit that includes outgoing and conflicting. */ - class SharingCommitAction extends SynchronizeModelAction { + class SharingCommitAction extends CVSParticipantAction { + protected SharingCommitAction(ISynchronizePageConfiguration configuration) { + super(configuration); + } + protected void initialize(ISynchronizePageConfiguration configuration) { + // Override to avoid being registered as a selection listener + } + protected String getBundleKeyPrefix() { + return "SharingCommitAction."; //$NON-NLS-1$ + } protected FastSyncInfoFilter getSyncInfoFilter() { return new SyncInfoDirectionFilter(new int[] {SyncInfo.CONFLICTING, SyncInfo.OUTGOING}); } @@ -53,23 +62,20 @@ public class SharingWizardPageActionGroup extends SynchronizePageActionGroup { super.initialize(configuration); configuration.addMenuGroup(ISynchronizePageConfiguration.P_TOOLBAR_MENU, ACTION_GROUP); - commitAction = new ActionDelegateWrapper(new SharingCommitAction(), null /* view part */); - Utils.initAction(commitAction, "action.SynchronizeViewCommit.", Policy.getBundle()); //$NON-NLS-1$ - - ignoreAction = new ActionDelegateWrapper(new IgnoreAction(), null /* view part */); - Utils.initAction(ignoreAction, "action.SharingWizardIgnore.", Policy.getBundle()); //$NON-NLS-1$ - } + commitAction = new SharingCommitAction(configuration); + appendToGroup( + ISynchronizePageConfiguration.P_TOOLBAR_MENU, + ACTION_GROUP, + commitAction); - /* (non-Javadoc) - * @see org.eclipse.team.ui.synchronize.viewers.StructuredViewerAdvisor#setActionBars(org.eclipse.ui.IActionBars) - */ - public void fillActionBars(IActionBars actionBars) { - super.fillActionBars(actionBars); - IToolBarManager toolbar = actionBars.getToolBarManager(); - if (toolbar != null) { - appendToGroup(toolbar, ACTION_GROUP, commitAction); - appendToGroup(toolbar, ACTION_GROUP, ignoreAction); - } + appendToGroup( + ISynchronizePageConfiguration.P_TOOLBAR_MENU, + ACTION_GROUP, + new CVSActionDelegateWrapper(new IgnoreAction(), configuration){ + protected String getBundleKeyPrefix() { + return "SharingWizardIgnore."; //$NON-NLS-1$ + } + }); } /* (non-Javadoc) diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/SharingWizardSyncPage.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/SharingWizardSyncPage.java index fd0b1d365..ccaaad93a 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/SharingWizardSyncPage.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/SharingWizardSyncPage.java @@ -78,7 +78,7 @@ public class SharingWizardSyncPage extends CVSWizardPage implements ISyncInfoSet input = createCompareInput(); input.createPartControl(pageBook); syncPage = input.getControl(); - infos = (SyncInfoSet)configuration.getSyncInfoSet(); + infos = configuration.getSyncInfoSet(); infos.addSyncSetChangedListener(this); noChangesPage = createNoChangesPage(pageBook); diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ActionDelegateWrapper.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ActionDelegateWrapper.java index 625c038f8..d85b8878d 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ActionDelegateWrapper.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ActionDelegateWrapper.java @@ -11,20 +11,30 @@ package org.eclipse.team.internal.ui.synchronize; import org.eclipse.jface.action.Action; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.ui.*; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.swt.events.DisposeEvent; +import org.eclipse.swt.events.DisposeListener; +import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; +import org.eclipse.ui.IActionDelegate; +import org.eclipse.ui.IEditorActionDelegate; +import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.IObjectActionDelegate; +import org.eclipse.ui.IViewActionDelegate; +import org.eclipse.ui.IViewPart; +import org.eclipse.ui.IWorkbenchPart; /** * An Action that wraps IActionDelegates so they can be used programatically * in toolbars, etc. */ -public class ActionDelegateWrapper extends Action { +public class ActionDelegateWrapper extends Action implements ISelectionChangedListener { private IActionDelegate delegate; - public ActionDelegateWrapper(IActionDelegate delegate, IWorkbenchPart part) { + public ActionDelegateWrapper(IActionDelegate delegate, ISynchronizePageConfiguration configuration) { this.delegate = delegate; + IWorkbenchPart part = configuration.getSite().getPart(); if(part != null) { if (delegate instanceof IObjectActionDelegate) { ((IObjectActionDelegate)delegate).setActivePart(this, part); @@ -38,17 +48,38 @@ public class ActionDelegateWrapper extends Action { ((IEditorActionDelegate)delegate).setActiveEditor(this, (IEditorPart)part); } } - // Assume there is no selection until told otherwise - setSelection(StructuredSelection.EMPTY); + initialize(configuration); } + /** + * Method invoked from the constructor when a configuration is provided. + * The default implementation registers the action as a selection change + * listener. Subclass may override. + * @param configuration the synchronize page configuration + */ + protected void initialize(final ISynchronizePageConfiguration configuration) { + configuration.getSite().getSelectionProvider().addSelectionChangedListener(this); + configuration.getPage().getViewer().getControl().addDisposeListener(new DisposeListener() { + public void widgetDisposed(DisposeEvent e) { + configuration.getSite().getSelectionProvider().removeSelectionChangedListener(ActionDelegateWrapper.this); + } + }); + } + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent) + */ + public void selectionChanged(SelectionChangedEvent event) { + getDelegate().selectionChanged(this, event.getSelection()); + } + /* (non-Javadoc) * @see org.eclipse.jface.action.IAction#run() */ public void run() { - delegate.run(this); + getDelegate().run(this); } - + /** * Return the delegate associated with this action. * @return the delegate associated with this action @@ -57,20 +88,4 @@ public class ActionDelegateWrapper extends Action { return delegate; } - /** - * Set the selection of the action - * @param selection the selection - */ - public void setSelection(ISelection selection) { - getDelegate().selectionChanged(this, selection); - } - - /** - * Set the selection of the action to the given object - * @param input the selected object - */ - public void setSelection(Object input) { - ISelection selection = new StructuredSelection(input); - setSelection(selection); - } } diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/StructuredViewerAdvisor.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/StructuredViewerAdvisor.java index 5f5ee60fa..96d538a0f 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/StructuredViewerAdvisor.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/StructuredViewerAdvisor.java @@ -11,27 +11,54 @@ package org.eclipse.team.internal.ui.synchronize; import org.eclipse.compare.internal.INavigatable; -import org.eclipse.compare.internal.IOpenable; -import org.eclipse.compare.structuremergeviewer.*; +import org.eclipse.compare.structuremergeviewer.DiffNode; +import org.eclipse.compare.structuremergeviewer.ICompareInput; +import org.eclipse.compare.structuremergeviewer.ICompareInputChangeListener; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.jface.action.*; +import org.eclipse.jface.action.ActionContributionItem; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.action.IContributionItem; +import org.eclipse.jface.action.IMenuListener; +import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.IStatusLineManager; +import org.eclipse.jface.action.IToolBarManager; +import org.eclipse.jface.action.MenuManager; +import org.eclipse.jface.action.Separator; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; -import org.eclipse.jface.viewers.*; -import org.eclipse.swt.events.*; +import org.eclipse.jface.viewers.DoubleClickEvent; +import org.eclipse.jface.viewers.IDoubleClickListener; +import org.eclipse.jface.viewers.ILabelDecorator; +import org.eclipse.jface.viewers.ILabelProvider; +import org.eclipse.jface.viewers.IOpenListener; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.IStructuredContentProvider; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.OpenEvent; +import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.jface.viewers.StructuredViewer; +import org.eclipse.swt.events.DisposeEvent; +import org.eclipse.swt.events.DisposeListener; +import org.eclipse.swt.events.MenuEvent; +import org.eclipse.swt.events.MenuListener; import org.eclipse.swt.widgets.Menu; import org.eclipse.team.core.synchronize.SyncInfoSet; import org.eclipse.team.internal.core.Assert; -import org.eclipse.team.internal.ui.*; +import org.eclipse.team.internal.ui.IPreferenceIds; +import org.eclipse.team.internal.ui.TeamUIPlugin; import org.eclipse.team.internal.ui.synchronize.actions.StatusLineContributionGroup; import org.eclipse.team.internal.ui.synchronize.actions.WorkingSetFilterActionGroup; -import org.eclipse.team.ui.synchronize.*; -import org.eclipse.ui.*; +import org.eclipse.team.ui.synchronize.ISynchronizeModelElement; +import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; +import org.eclipse.team.ui.synchronize.ISynchronizeParticipant; +import org.eclipse.team.ui.synchronize.SynchronizeModelAction; +import org.eclipse.team.ui.synchronize.SynchronizePageActionGroup; +import org.eclipse.ui.IActionBars; +import org.eclipse.ui.IWorkingSet; import org.eclipse.ui.actions.ActionContext; import org.eclipse.ui.actions.ActionGroup; -import org.eclipse.ui.internal.PluginAction; import org.eclipse.ui.model.BaseWorkbenchContentProvider; /** @@ -85,7 +112,6 @@ public abstract class StructuredViewerAdvisor implements IAdaptable { private SynchronizeModelManager modelManager; private INavigatable nav; - private IOpenable openable; // Property change listener which reponds to: // - working set selection by the user @@ -125,7 +151,7 @@ public abstract class StructuredViewerAdvisor implements IAdaptable { if(modelManager == null) { modelManager = createModelManager(configuration); } - Assert.isNotNull(modelManager, "model manager must be set"); + Assert.isNotNull(modelManager, "model manager must be set"); //$NON-NLS-1$ modelManager.setViewerAdvisor(this); } @@ -442,14 +468,7 @@ public abstract class StructuredViewerAdvisor implements IAdaptable { * @see fillContextMenu(StructuredViewer, IMenuManager) */ private void hookContextMenu(final StructuredViewer viewer) { - String targetID; - Object o = configuration.getProperty(ISynchronizePageConfiguration.P_OBJECT_CONTRIBUTION_ID); - if (o instanceof String) { - targetID = (String)o; - } else { - targetID = null; - } - final MenuManager menuMgr = new MenuManager(targetID); //$NON-NLS-1$ + final MenuManager menuMgr = new MenuManager(null); //$NON-NLS-1$ menuMgr.setRemoveAllWhenShown(true); menuMgr.addMenuListener(new IMenuListener() { @@ -467,33 +486,21 @@ public abstract class StructuredViewerAdvisor implements IAdaptable { // state before the menu is shown. This is required when // the state of the selection changes and the contributions // need to update enablement based on this. + // TODO: Is this hack still needed public void menuShown(MenuEvent e) { IContributionItem[] items = menuMgr.getItems(); for (int i = 0; i < items.length; i++) { IContributionItem item = items[i]; if (item instanceof ActionContributionItem) { IAction actionItem = ((ActionContributionItem) item).getAction(); - if (actionItem instanceof PluginAction) { - ((PluginAction) actionItem).selectionChanged(viewer.getSelection()); + if (actionItem instanceof SynchronizeModelAction) { + ((SynchronizeModelAction) actionItem).selectionChanged(viewer.getSelection()); } } } } }); viewer.getControl().setMenu(menu); - if (targetID != null) { - IWorkbenchSite workbenchSite = configuration.getSite().getWorkbenchSite(); - IWorkbenchPartSite ws = null; - if (workbenchSite instanceof IWorkbenchPartSite) - ws = (IWorkbenchPartSite)workbenchSite; - if (ws == null) - ws = Utils.findSite(); - if (ws != null) { - ws.registerContextMenu(targetID, menuMgr, viewer); - } else { - TeamUIPlugin.log(IStatus.ERROR, "Cannot add menu contributions because the site cannot be found: " + targetID, null); //$NON-NLS-1$ - } - } } /* diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizePageConfiguration.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizePageConfiguration.java index 997f51567..6dfcd5d4f 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizePageConfiguration.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizePageConfiguration.java @@ -109,7 +109,6 @@ public class SynchronizePageConfiguration extends SynchronizePageActionGroup imp */ public SynchronizePageConfiguration(ISynchronizeParticipant participant) { this.participant = participant; - setProperty(P_OBJECT_CONTRIBUTION_ID, participant.getId()); setProperty(P_CONTEXT_MENU, DEFAULT_CONTEXT_MENU); setProperty(P_TOOLBAR_MENU, DEFAULT_TOOLBAR_MENU); setProperty(P_VIEW_MENU, DEFAULT_VIEW_MENU); diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/WorkbenchPartSynchronizePageSite.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/WorkbenchPartSynchronizePageSite.java index 254475c0d..6334c0410 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/WorkbenchPartSynchronizePageSite.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/WorkbenchPartSynchronizePageSite.java @@ -94,4 +94,11 @@ public class WorkbenchPartSynchronizePageSite implements ISynchronizePageSite { public IActionBars getActionBars() { return site.getActionBars(); } + + /* (non-Javadoc) + * @see org.eclipse.team.ui.synchronize.ISynchronizePageSite#isModal() + */ + public boolean isModal() { + return false; + } } diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ISynchronizePageConfiguration.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ISynchronizePageConfiguration.java index 6bb6e1ba2..1a763e520 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ISynchronizePageConfiguration.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ISynchronizePageConfiguration.java @@ -14,7 +14,6 @@ import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.viewers.ILabelDecorator; import org.eclipse.team.core.synchronize.SyncInfoSet; import org.eclipse.team.internal.ui.TeamUIPlugin; -import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkingSet; /** @@ -74,14 +73,6 @@ public interface ISynchronizePageConfiguration { */ public static final String P_VIEW_MENU = TeamUIPlugin.ID + ".P_VIEW_MENU"; //$NON-NLS-1$ - /** - * The configuration property that defines the filter id that - * determines which object contribution actions appear in the - * context menu for the page. This defaults to the id of the - * participant but can be set to another id or null - */ - public static final String P_OBJECT_CONTRIBUTION_ID = TeamUIPlugin.ID + ".P_OBJECT_CONTRIBUTION_ID"; //$NON-NLS-1$ - /** * Property constant for the working set used to filter the visible * elements of the model. The value can be any IWorkingSet @@ -175,7 +166,7 @@ public interface ISynchronizePageConfiguration { * Clients can remove, add and change the ordering for groups in * the context menu. */ - public static final String[] DEFAULT_CONTEXT_MENU = new String[] { FILE_GROUP, EDIT_GROUP, SYNCHRONIZE_GROUP, NAVIGATE_GROUP, OBJECT_CONTRIBUTIONS_GROUP}; + public static final String[] DEFAULT_CONTEXT_MENU = new String[] { FILE_GROUP, EDIT_GROUP, SYNCHRONIZE_GROUP, NAVIGATE_GROUP}; /** * These are the default groups used for the toolbar of a page. diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ISynchronizePageSite.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ISynchronizePageSite.java index 7d1b18646..df2f9d6b4 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ISynchronizePageSite.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ISynchronizePageSite.java @@ -97,4 +97,12 @@ public interface ISynchronizePageSite { * @return the action bars */ IActionBars getActionBars(); + + /** + * Returns whether the site is associated with a page being + * shown in a modal dialog + * @return whether the site is associated with a page being + * shown in a modal dialog + */ + boolean isModal(); } diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ParticipantPageSaveablePart.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ParticipantPageSaveablePart.java index 6c2566269..0196e5c7c 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ParticipantPageSaveablePart.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ParticipantPageSaveablePart.java @@ -115,6 +115,12 @@ public class ParticipantPageSaveablePart extends SaveablePartAdapter implements } public IActionBars getActionBars() { return ParticipantPageSaveablePart.this.getActionBars(); + } + /* (non-Javadoc) + * @see org.eclipse.team.ui.synchronize.ISynchronizePageSite#isModal() + */ + public boolean isModal() { + return true; } } diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/SynchronizeModelAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/SynchronizeModelAction.java index f3729e208..7b1dad5bb 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/SynchronizeModelAction.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/SynchronizeModelAction.java @@ -13,9 +13,12 @@ package org.eclipse.team.ui.synchronize; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; - import org.eclipse.compare.structuremergeviewer.IDiffElement; +import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.swt.events.DisposeEvent; +import org.eclipse.swt.events.DisposeListener; import org.eclipse.team.core.synchronize.FastSyncInfoFilter; import org.eclipse.team.core.synchronize.SyncInfo; import org.eclipse.team.core.synchronize.SyncInfoSet; @@ -44,15 +47,30 @@ public abstract class SynchronizeModelAction extends BaseSelectionListenerAction private IWorkbenchPart part; /** - * Creates a new action with the given text. - * - * @param text the string used as the text for the action, - * or null if there is no text + * Create an action with the given text and configuration. + * @param text the action's text + * @param configuration the actions synchronize page configuration */ - protected SynchronizeModelAction(String text) { + protected SynchronizeModelAction(String text, ISynchronizePageConfiguration configuration) { super(text); + initialize(configuration); } + /** + * Method invoked from the constructor when a configuration is provided. + * The default implementation registers the action as a selection change + * listener. Subclass may override. + * @param configuration the synchronize page configuration + */ + protected void initialize(final ISynchronizePageConfiguration configuration) { + configuration.getSite().getSelectionProvider().addSelectionChangedListener(this); + configuration.getPage().getViewer().getControl().addDisposeListener(new DisposeListener() { + public void widgetDisposed(DisposeEvent e) { + configuration.getSite().getSelectionProvider().removeSelectionChangedListener(SynchronizeModelAction.this); + } + }); + } + /* (non-Javadoc) * @see org.eclipse.jface.action.Action#run() */ @@ -134,4 +152,17 @@ public abstract class SynchronizeModelAction extends BaseSelectionListenerAction } return (IDiffElement[]) filtered.toArray(new IDiffElement[filtered.size()]); } + + /** + * Set the selection of this action to the given selection + * @param selection the selection + */ + public void selectionChanged(ISelection selection) { + if (selection instanceof IStructuredSelection) { + selectionChanged((IStructuredSelection)selection); + } else { + selectionChanged(StructuredSelection.EMPTY); + } + + } } \ No newline at end of file diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/SynchronizePageActionGroup.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/SynchronizePageActionGroup.java index b804914f2..778d35025 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/SynchronizePageActionGroup.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/SynchronizePageActionGroup.java @@ -20,9 +20,8 @@ import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.action.IContributionManager; import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.viewers.ISelectionChangedListener; -import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.team.internal.ui.synchronize.SynchronizePageConfiguration; +import org.eclipse.ui.IActionBars; import org.eclipse.ui.actions.ActionGroup; /** @@ -101,30 +100,6 @@ public abstract class SynchronizePageActionGroup extends ActionGroup { if (configuration != null) { configuration.removeActionContribution(this); } - disposeMenu(ISynchronizePageConfiguration.P_CONTEXT_MENU); - disposeMenu(ISynchronizePageConfiguration.P_TOOLBAR_MENU); - disposeMenu(ISynchronizePageConfiguration.P_VIEW_MENU); - } - - private void disposeMenu(String menuId) { - Map groups = (Map)menuContributions.get(menuId); - if (groups != null) { - for (Iterator iter = groups.keySet().iterator(); iter.hasNext(); ) { - String groupId = (String) iter.next(); - List actions = (List)groups.get(groupId); - if (actions != null) { - for (Iterator iter2 = actions.iterator(); iter2.hasNext();) { - Object element = iter2.next(); - if (element instanceof ISelectionChangedListener) { - ISelectionProvider selectionProvider = configuration.getSite().getSelectionProvider(); - if (selectionProvider != null) { - selectionProvider.removeSelectionChangedListener((ISelectionChangedListener)element); - } - } - } - } - } - } } /** @@ -197,17 +172,46 @@ public abstract class SynchronizePageActionGroup extends ActionGroup { * @param groupId the group id in the menu to which the action is to be added * @param action the action to be added */ - public void appendToGroup(String menuId, String groupId, IAction action) { + protected void appendToGroup(String menuId, String groupId, IAction action) { internalAppendToGroup(menuId, groupId, action); } + /** + * Helper method that can be invoked during initialization to add an + * item to a particular menu (one of P_TOOLBAR_MENU, P_VIEW_MENU, P_CONTEXT_MENU + * from ISynchronizePageConfiguration). The item is added to the given group + * if it is present. Otherwise the item is not added to the menu. + * @param menuId the menu id (one of P_TOOLBAR_MENU, P_VIEW_MENU, P_CONTEXT_MENU + * from ISynchronizePageConfiguration) + * @param groupId the group id in the menu to which the item is to be added + * @param item the item to be added + */ + protected void appendToGroup(String menuId, String groupId, IContributionItem item) { + internalAppendToGroup(menuId, groupId, item); + } + /* (non-Javadoc) * @see org.eclipse.ui.actions.ActionGroup#fillContextMenu(org.eclipse.jface.action.IMenuManager) */ public void fillContextMenu(IMenuManager menu) { super.fillContextMenu(menu); - Map groups = (Map)menuContributions.get(ISynchronizePageConfiguration.P_CONTEXT_MENU); - if (groups != null) { + fillMenu(menu, ISynchronizePageConfiguration.P_CONTEXT_MENU); + } + + /* (non-Javadoc) + * @see org.eclipse.ui.actions.ActionGroup#fillActionBars(org.eclipse.ui.IActionBars) + */ + public void fillActionBars(IActionBars actionBars) { + super.fillActionBars(actionBars); + if (actionBars != null) { + fillMenu(actionBars.getMenuManager(), ISynchronizePageConfiguration.P_VIEW_MENU); + fillMenu(actionBars.getToolBarManager(), ISynchronizePageConfiguration.P_TOOLBAR_MENU); + } + } + + private void fillMenu(IContributionManager menu, String menuId) { + Map groups = (Map)menuContributions.get(menuId); + if (menu != null && groups != null) { for (Iterator iter = groups.keySet().iterator(); iter.hasNext(); ) { String groupId = (String) iter.next(); List actions = (List)groups.get(groupId); @@ -224,24 +228,18 @@ public abstract class SynchronizePageActionGroup extends ActionGroup { } } } - + private void internalAppendToGroup(String menuId, String groupId, Object action) { Map groups = (Map)menuContributions.get(menuId); if (groups == null) { groups = new HashMap(); menuContributions.put(menuId, groups); } - List actions = (List)menuContributions.get(groupId); + List actions = (List)groups.get(groupId); if (actions == null) { actions = new ArrayList(); groups.put(groupId, actions); } actions.add(action); - if (action instanceof ISelectionChangedListener) { - ISelectionProvider selectionProvider = configuration.getSite().getSelectionProvider(); - if (selectionProvider != null) { - selectionProvider.addSelectionChangedListener((ISelectionChangedListener)action); - } - } } } -- cgit v1.2.3