diff options
author | Michael Valenta | 2006-02-23 21:54:44 +0000 |
---|---|---|
committer | Michael Valenta | 2006-02-23 21:54:44 +0000 |
commit | 4eb505447d3075cb779a49ba0ee8744b117a26a7 (patch) | |
tree | 6d6459e5157e20cb0697c493709ebd576fbb4f84 | |
parent | d6429caf6f8dfe8f5a6d4bfced686f610fc1c415 (diff) | |
download | eclipse.platform.team-4eb505447d3075cb779a49ba0ee8744b117a26a7.tar.gz eclipse.platform.team-4eb505447d3075cb779a49ba0ee8744b117a26a7.tar.xz eclipse.platform.team-4eb505447d3075cb779a49ba0ee8744b117a26a7.zip |
Bug 120191 [Model Sync] Add ability to turn on/off model content
9 files changed, 347 insertions, 26 deletions
diff --git a/bundles/org.eclipse.team.ui/plugin.properties b/bundles/org.eclipse.team.ui/plugin.properties index f92074868..6e39d88e7 100644 --- a/bundles/org.eclipse.team.ui/plugin.properties +++ b/bundles/org.eclipse.team.ui/plugin.properties @@ -63,4 +63,5 @@ TeamContentProvider = Team Content Providers TeamDecorators = Team Decorators HistoryView = History ModelSyncParticipant = Synchronization -ResourcesContentExtension = Resources
\ No newline at end of file +ResourcesContentExtension = Resources +EnabledModels = Models
\ No newline at end of file diff --git a/bundles/org.eclipse.team.ui/plugin.xml b/bundles/org.eclipse.team.ui/plugin.xml index 2c1928f27..e9643bfe2 100644 --- a/bundles/org.eclipse.team.ui/plugin.xml +++ b/bundles/org.eclipse.team.ui/plugin.xml @@ -40,6 +40,11 @@ id="org.eclipse.team.ui.IgnorePreferences"> <keywordReference id="org.eclipse.team.ui.team"/> </page> + <page + category="org.eclipse.team.ui.TeamPreferences" + class="org.eclipse.team.internal.ui.mapping.ModelEnablementPreferencePage" + id="org.eclipse.team.ui.enabledModels" + name="%EnabledModels"/> </extension> <!-- ****************** POPUP ACTIONS *************** --> <extension diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamUIPlugin.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamUIPlugin.java index 4ecc9d7d6..6c60b83ba 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamUIPlugin.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamUIPlugin.java @@ -17,6 +17,7 @@ import java.util.*; import org.eclipse.core.runtime.*; import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.jface.dialogs.MessageDialogWithToggle; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.preference.IPreferenceStore; @@ -379,5 +380,9 @@ public class TeamUIPlugin extends AbstractUIPlugin { } catch (InterruptedException e2) { // Nothing to be done } - } + } + + public org.osgi.service.prefs.Preferences getInstancePreferences() { + return new InstanceScope().getNode(getBundle().getSymbolicName()); + } } diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/CommonViewerAdvisor.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/CommonViewerAdvisor.java index e888f3c73..a1e213b93 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/CommonViewerAdvisor.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/CommonViewerAdvisor.java @@ -16,6 +16,8 @@ import org.eclipse.core.resources.mapping.ResourceMapping; import org.eclipse.core.resources.mapping.ResourceTraversal; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; +import org.eclipse.jface.util.IPropertyChangeListener; +import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.viewers.*; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; @@ -37,7 +39,7 @@ import org.eclipse.ui.part.IPageSite; /** * Provides a Common Navigator based viewer for use by a {@link ModelSynchronizePage}. */ -public class CommonViewerAdvisor extends AbstractTreeViewerAdvisor implements INavigatorContentServiceListener, IEmptyTreeListener { +public class CommonViewerAdvisor extends AbstractTreeViewerAdvisor implements INavigatorContentServiceListener, IEmptyTreeListener, IPropertyChangeListener { public static final class NavigableCommonViewer extends CommonViewer implements ITreeViewerAccessor { private final IEmptyTreeListener listener; @@ -121,6 +123,7 @@ public class CommonViewerAdvisor extends AbstractTreeViewerAdvisor implements IN final CommonViewer v = new NavigableCommonViewer(configuration.getViewerId(), parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL, listener); v.setSorter(new TeamViewerSorter(new CommonViewerSorter())); ISynchronizationScope scope = getScope(configuration); + bindTeamContentProviders(v); scope.addScopeChangeListener(new ISynchronizationScopeChangeListener() { public void scopeChanged(final ISynchronizationScope scope, ResourceMapping[] newMappings, ResourceTraversal[] newTraversals) { @@ -139,9 +142,19 @@ public class CommonViewerAdvisor extends AbstractTreeViewerAdvisor implements IN } private static void enableContentProviders(CommonViewer v, ISynchronizationScope scope) { - v.getNavigatorContentService().bindExtensions(TeamUI.getTeamContentProviderManager().getContentProviderIds(scope), true); v.getNavigatorContentService().getActivationService().activateExtensions(TeamUI.getTeamContentProviderManager().getContentProviderIds(scope), true); } + + private static void bindTeamContentProviders(CommonViewer v) { + ITeamContentProviderManager teamContentProviderManager = TeamUI.getTeamContentProviderManager(); + ITeamContentProviderDescriptor[] descriptors = teamContentProviderManager.getDescriptors(); + Set toBind = new HashSet(); + for (int i = 0; i < descriptors.length; i++) { + ITeamContentProviderDescriptor descriptor = descriptors[i]; + toBind.add(descriptor.getContentExtensionId()); + } + v.getNavigatorContentService().bindExtensions((String[]) toBind.toArray(new String[toBind.size()]), true); + } private static ISynchronizationScope getScope(ISynchronizePageConfiguration configuration) { return (ISynchronizationScope)configuration.getProperty(ITeamContentProviderManager.P_SYNCHRONIZATION_SCOPE); @@ -155,6 +168,7 @@ public class CommonViewerAdvisor extends AbstractTreeViewerAdvisor implements IN public CommonViewerAdvisor(Composite parent, ISynchronizePageConfiguration configuration) { super(configuration); final CommonViewer viewer = CommonViewerAdvisor.createViewer(parent, configuration, this); + TeamUI.getTeamContentProviderManager().addPropertyChangeListener(this); GridData data = new GridData(GridData.FILL_BOTH); viewer.getControl().setLayoutData(data); viewer.getNavigatorContentService().addListener(this); @@ -261,6 +275,7 @@ public class CommonViewerAdvisor extends AbstractTreeViewerAdvisor implements IN * @see org.eclipse.team.internal.ui.synchronize.StructuredViewerAdvisor#dispose() */ public void dispose() { + TeamUI.getTeamContentProviderManager().removePropertyChangeListener(this); actionService.dispose(); super.dispose(); } @@ -305,4 +320,10 @@ public class CommonViewerAdvisor extends AbstractTreeViewerAdvisor implements IN emptyTreeListener.notEmpty(viewer); } + public void propertyChange(PropertyChangeEvent event) { + if (event.getProperty().equals(ITeamContentProviderManager.PROP_ENABLED_MODEL_PROVIDERS)) { + enableContentProviders((CommonViewer)getViewer(), getScope(getConfiguration())); + } + } + } diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ModelEnablementPreferencePage.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ModelEnablementPreferencePage.java new file mode 100644 index 000000000..cdb9f1f67 --- /dev/null +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ModelEnablementPreferencePage.java @@ -0,0 +1,168 @@ +/******************************************************************************* + * Copyright (c) 2006 IBM Corporation 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: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.team.internal.ui.mapping; + +import java.util.*; + +import org.eclipse.core.resources.mapping.IModelProviderDescriptor; +import org.eclipse.core.resources.mapping.ModelProvider; +import org.eclipse.jface.preference.PreferencePage; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.viewers.*; +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.*; +import org.eclipse.team.internal.ui.SWTUtils; +import org.eclipse.team.internal.ui.TeamUIPlugin; +import org.eclipse.team.internal.ui.registry.TeamContentProviderDescriptor; +import org.eclipse.team.internal.ui.registry.TeamContentProviderManager; +import org.eclipse.team.ui.TeamUI; +import org.eclipse.team.ui.mapping.ITeamContentProviderDescriptor; +import org.eclipse.team.ui.mapping.ITeamContentProviderManager; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPreferencePage; + +public class ModelEnablementPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { + + private Set previosulyEnabled = new HashSet(); + + public ModelEnablementPreferencePage() { + setTitle("Models"); + setPreferenceStore(TeamUIPlugin.getPlugin().getPreferenceStore()); + } + + private CheckboxTableViewer tableViewer; + + protected Control createContents(Composite parent) { + + Composite composite = new Composite(parent, SWT.NONE); + composite.setLayout(new GridLayout()); + composite.setLayoutData(new GridData(GridData.FILL_BOTH)); + + Label l = SWTUtils.createLabel(composite, "&Select the model types that should be available when synchronizing"); + l.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + tableViewer = CheckboxTableViewer.newCheckList(composite, SWT.BORDER); + tableViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH)); + tableViewer.setContentProvider(new IStructuredContentProvider() { + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + // noting to do + } + public void dispose() { + // nothing to do + } + public Object[] getElements(Object element) { + if (element instanceof ITeamContentProviderManager) { + ITeamContentProviderManager manager = (ITeamContentProviderManager) element; + return manager.getDescriptors(); + } + return new Object[0]; + } + }); + tableViewer.setLabelProvider(new LabelProvider() { + Map images = new HashMap(); + public String getText(Object element) { + if (element instanceof ITeamContentProviderDescriptor) { + ITeamContentProviderDescriptor desc = (ITeamContentProviderDescriptor) element; + return getTextFor(desc.getModelProviderId()); + } + return super.getText(element); + } + private String getTextFor(String modelProviderId) { + IModelProviderDescriptor desc = ModelProvider.getModelProviderDescriptor(modelProviderId); + if (desc != null) { + return desc.getLabel(); + } + return modelProviderId; + } + public Image getImage(Object element) { + if (element instanceof ITeamContentProviderDescriptor) { + ITeamContentProviderDescriptor desc = (ITeamContentProviderDescriptor) element; + Image image = (Image)images.get(desc); + if (image == null) { + ImageDescriptor idesc = desc.getImageDescriptor(); + if (idesc != null) { + image = idesc.createImage(); + if (image != null) { + images.put(desc, image); + } + } + } + return image; + } + return super.getImage(element); + } + public void dispose() { + for (Iterator iter = images.values().iterator(); iter.hasNext();) { + Image image = (Image) iter.next(); + image.dispose(); + } + super.dispose(); + } + }); + tableViewer.setInput(TeamUI.getTeamContentProviderManager()); + updateChecks(); + applyDialogFont(composite); + return composite; + } + + private void updateChecks() { + ITeamContentProviderDescriptor[] descriptors = TeamUI.getTeamContentProviderManager().getDescriptors(); + for (int i = 0; i < descriptors.length; i++) { + ITeamContentProviderDescriptor descriptor = descriptors[i]; + if (descriptor.isEnabled()) { + previosulyEnabled.add(descriptor); + } + } + tableViewer.setCheckedElements(previosulyEnabled.toArray()); + } + + public boolean performOk() { + boolean changed = false; + Object[] checked = tableViewer.getCheckedElements(); + Set nowEnabled = new HashSet(); + nowEnabled.addAll(Arrays.asList(checked)); + ITeamContentProviderDescriptor[] descriptors = TeamUI.getTeamContentProviderManager().getDescriptors(); + for (int i = 0; i < descriptors.length; i++) { + ITeamContentProviderDescriptor descriptor = descriptors[i]; + boolean enable = false; + for (int j = 0; j < checked.length; j++) { + ITeamContentProviderDescriptor checkedDesc = (ITeamContentProviderDescriptor)checked[j]; + if (checkedDesc.getModelProviderId().equals(descriptor.getModelProviderId())) { + enable = true; + break; + } + } + if (descriptor.isEnabled() != enable) { + ((TeamContentProviderDescriptor)descriptor).setEnabled(enable); + changed = true; + } + } + if (changed) { + ((TeamContentProviderManager)TeamUI.getTeamContentProviderManager()).enablementChanged( + (ITeamContentProviderDescriptor[]) previosulyEnabled.toArray(new ITeamContentProviderDescriptor[previosulyEnabled.size()]), + (ITeamContentProviderDescriptor[]) nowEnabled.toArray(new ITeamContentProviderDescriptor[nowEnabled.size()])); + previosulyEnabled = nowEnabled; + } + return true; + } + + protected void performDefaults() { + tableViewer.setCheckedElements(TeamUI.getTeamContentProviderManager().getDescriptors()); + } + + public void init(IWorkbench workbench) { + // ignore + } + +} diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ModelSelectionDropDownAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ModelSelectionDropDownAction.java index 4ceb59cdf..196f2b7b4 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ModelSelectionDropDownAction.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ModelSelectionDropDownAction.java @@ -10,6 +10,9 @@ *******************************************************************************/ package org.eclipse.team.internal.ui.mapping; +import java.util.HashSet; +import java.util.Set; + import org.eclipse.core.resources.mapping.*; import org.eclipse.jface.action.*; import org.eclipse.jface.viewers.Viewer; @@ -17,6 +20,8 @@ import org.eclipse.osgi.util.NLS; import org.eclipse.swt.widgets.*; import org.eclipse.team.core.mapping.*; import org.eclipse.team.internal.ui.*; +import org.eclipse.team.ui.TeamUI; +import org.eclipse.team.ui.mapping.ITeamContentProviderDescriptor; import org.eclipse.team.ui.mapping.ITeamContentProviderManager; import org.eclipse.team.ui.synchronize.*; @@ -31,13 +36,17 @@ public class ModelSelectionDropDownAction extends Action implements IMenuCreator Utils.initAction(this, "action.pickModels."); //$NON-NLS-1$ this.configuration = configuration; listener = new org.eclipse.jface.util.IPropertyChangeListener() { - public void propertyChange(org.eclipse.jface.util.PropertyChangeEvent event) { - if (event.getProperty() == ModelSynchronizeParticipant.P_VISIBLE_MODEL_PROVIDER) { - update(); - } - } - }; + public void propertyChange(org.eclipse.jface.util.PropertyChangeEvent event) { + if (event.getProperty() == ModelSynchronizeParticipant.P_VISIBLE_MODEL_PROVIDER) { + update(); + } + if (event.getProperty().equals(ITeamContentProviderManager.PROP_ENABLED_MODEL_PROVIDERS)) { + rebuildMenu(); + } + } + }; this.configuration.addPropertyChangeListener(listener); + TeamUI.getTeamContentProviderManager().addPropertyChangeListener(listener); getSynchronizationContext().getScope().addScopeChangeListener(this); showAllAction = new Action(TeamUIMessages.ModelSelectionDropDownAction_0) { public void run() { @@ -68,6 +77,7 @@ public class ModelSelectionDropDownAction extends Action implements IMenuCreator } getSynchronizationContext().getScope().removeScopeChangeListener(this); configuration.removePropertyChangeListener(listener); + TeamUI.getTeamContentProviderManager().removePropertyChangeListener(listener); } public Menu getMenu(Control parent) { @@ -76,7 +86,7 @@ public class ModelSelectionDropDownAction extends Action implements IMenuCreator menuManager = new MenuManager(); fMenu = menuManager.createContextMenu(parent); menuManager.add(showAllAction); - ModelProvider[] modelProviders = ((ModelSynchronizeParticipant)configuration.getParticipant()).getEnabledModelProviders(); + ModelProvider[] modelProviders = getEnabledModelProviders(); if (modelProviders.length > 0) menuManager.add(new Separator()); addModelsToMenu(modelProviders); @@ -88,6 +98,19 @@ public class ModelSelectionDropDownAction extends Action implements IMenuCreator return fMenu; } + private ModelProvider[] getEnabledModelProviders() { + Set result = new HashSet(); + ModelProvider[] providers = ((ModelSynchronizeParticipant)configuration.getParticipant()).getEnabledModelProviders(); + for (int i = 0; i < providers.length; i++) { + ModelProvider provider = providers[i]; + ITeamContentProviderDescriptor desc = TeamUI.getTeamContentProviderManager().getDescriptor(provider.getId()); + if (desc != null && desc.isEnabled()) { + result.add(provider); + } + } + return (ModelProvider[]) result.toArray(new ModelProvider[result.size()]); + } + private void addModelsToMenu(ModelProvider[] modelProviders) { String id = getActiveProviderId(); for (int i = 0; i < modelProviders.length; i++) { @@ -164,16 +187,20 @@ public class ModelSelectionDropDownAction extends Action implements IMenuCreator */ public void scopeChanged(ISynchronizationScope scope, ResourceMapping[] newMappings, ResourceTraversal[] newTraversals) { if (newMappings.length > 0) { - Display display = TeamUIPlugin.getStandardDisplay(); - display.asyncExec(new Runnable() { - public void run() { - if(menuManager != null) { - menuManager.dispose(); - menuManager = null; - } - update(); - } - }); + rebuildMenu(); } } + + private void rebuildMenu() { + Display display = TeamUIPlugin.getStandardDisplay(); + display.asyncExec(new Runnable() { + public void run() { + if(menuManager != null) { + menuManager.dispose(); + menuManager = null; + } + update(); + } + }); + } } diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/registry/TeamContentProviderDescriptor.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/registry/TeamContentProviderDescriptor.java index ec311ef71..fe12d9fde 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/registry/TeamContentProviderDescriptor.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/registry/TeamContentProviderDescriptor.java @@ -17,6 +17,8 @@ import org.eclipse.osgi.util.NLS; import org.eclipse.team.internal.ui.TeamUIMessages; import org.eclipse.team.internal.ui.TeamUIPlugin; import org.eclipse.team.ui.mapping.ITeamContentProviderDescriptor; +import org.osgi.service.prefs.BackingStoreException; +import org.osgi.service.prefs.Preferences; /** * A team content provider descriptor associates a model provider @@ -30,6 +32,9 @@ public class TeamContentProviderDescriptor implements ITeamContentProviderDescri private static final String ATT_CONTENT_EXTENSION_ID = "contentExtensionId"; //$NON-NLS-1$ private static final String ATT_ICON = "icon"; //$NON-NLS-1$ private static final String ATT_PREFERENCE_PAGE = "preferencePage"; //$NON-NLS-1$ + + private static final String PREF_TEAM_CONTENT_DESCRIPTORS = "teamContentDescriptors"; //$NON-NLS-1$ + private static final String PREF_ENABLED = "enabled"; //$NON-NLS-1$ private String modelProviderId; private String contentExtensionId; @@ -111,6 +116,73 @@ public class TeamContentProviderDescriptor implements ITeamContentProviderDescri * @see org.eclipse.team.ui.mapping.ITeamContentProviderDescriptor#isEnabled() */ public boolean isEnabled() { - return true; + if (!hasPreferences()) { + return true; + } + return getPreferences().getBoolean(PREF_ENABLED, true); + } + + public void setEnabled(boolean enable) { + if (isEnabled() != enable) { + getPreferences().putBoolean(PREF_ENABLED, enable); + flushPreferences(); + } + } + + public Preferences getParentPreferences() { + return TeamUIPlugin.getPlugin().getInstancePreferences().node(PREF_TEAM_CONTENT_DESCRIPTORS); + } + /* + * Return the preferences node for this repository + */ + public Preferences getPreferences() { + if (!hasPreferences()) { + ensurePreferencesStored(); + } + return internalGetPreferences(); + } + + private Preferences internalGetPreferences() { + return getParentPreferences().node(getPreferenceName()); + } + + private boolean hasPreferences() { + try { + return getParentPreferences().nodeExists(getPreferenceName()); + } catch (BackingStoreException e) { + TeamUIPlugin.log(IStatus.ERROR, NLS.bind("Error accessing team content preference store for {0}", new String[] { getModelProviderId() }), e); //$NON-NLS-1$ + return false; + } + } + + /** + * Return a unique name that identifies this location but + * does not contain any slashes (/). Also, do not use ':'. + * Although a valid path character, the initial core implementation + * didn't handle it well. + */ + private String getPreferenceName() { + return getModelProviderId(); + } + + public void storePreferences() { + Preferences prefs = internalGetPreferences(); + // Must store at least one preference in the node + prefs.putBoolean(PREF_ENABLED, true); + flushPreferences(); + } + + private void flushPreferences() { + try { + internalGetPreferences().flush(); + } catch (BackingStoreException e) { + TeamUIPlugin.log(IStatus.ERROR, NLS.bind("Error flushing team content preference store for {0}", new String[] { getModelProviderId() }), e); //$NON-NLS-1$ + } + } + + private void ensurePreferencesStored() { + if (!hasPreferences()) { + storePreferences(); + } } } diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/registry/TeamContentProviderManager.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/registry/TeamContentProviderManager.java index b6c485a0c..b56094696 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/registry/TeamContentProviderManager.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/registry/TeamContentProviderManager.java @@ -14,6 +14,7 @@ import java.util.*; import org.eclipse.core.runtime.*; import org.eclipse.jface.util.IPropertyChangeListener; +import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.team.core.mapping.ISynchronizationScope; import org.eclipse.team.internal.ui.TeamUIPlugin; import org.eclipse.team.ui.mapping.ITeamContentProviderDescriptor; @@ -30,6 +31,8 @@ public class TeamContentProviderManager implements ITeamContentProviderManager { Map descriptors; + private ListenerList listeners = new ListenerList(ListenerList.IDENTITY); + public static ITeamContentProviderManager getInstance() { if (instance == null) instance = new TeamContentProviderManager(); @@ -85,12 +88,29 @@ public class TeamContentProviderManager implements ITeamContentProviderManager { } public void addPropertyChangeListener(IPropertyChangeListener listener) { - // TODO Auto-generated method stub - + listeners.add(listener); } public void removePropertyChangeListener(IPropertyChangeListener listener) { - // TODO Auto-generated method stub - + listeners.remove(listener); + } + + private void firePropertyChange(final PropertyChangeEvent event) { + Object[] allListeners = listeners.getListeners(); + for (int i = 0; i < allListeners.length; i++) { + final IPropertyChangeListener listener = (IPropertyChangeListener)allListeners[i]; + SafeRunner.run(new ISafeRunnable() { + public void run() throws Exception { + listener.propertyChange(event); + } + public void handleException(Throwable exception) { + // handler by runner + } + }); + } + } + + public void enablementChanged(ITeamContentProviderDescriptor[] oldEnabled, ITeamContentProviderDescriptor[] newEnabled) { + firePropertyChange(new PropertyChangeEvent(this, PROP_ENABLED_MODEL_PROVIDERS, oldEnabled, newEnabled)); } } diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ModelSynchronizeParticipant.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ModelSynchronizeParticipant.java index ef0eabee1..15ea2ec24 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ModelSynchronizeParticipant.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ModelSynchronizeParticipant.java @@ -22,6 +22,7 @@ import org.eclipse.swt.widgets.Shell; import org.eclipse.team.core.mapping.*; import org.eclipse.team.core.mapping.provider.*; import org.eclipse.team.internal.ui.*; +import org.eclipse.team.internal.ui.mapping.ModelEnablementPreferencePage; import org.eclipse.team.internal.ui.mapping.ModelSynchronizePage; import org.eclipse.team.internal.ui.synchronize.*; import org.eclipse.team.ui.TeamUI; @@ -604,6 +605,7 @@ public class ModelSynchronizeParticipant extends PreferencePage page = preferencePages[i]; pages.add(page); } + pages.add(new ModelEnablementPreferencePage()); ITeamContentProviderDescriptor[] descriptors = TeamUI.getTeamContentProviderManager().getDescriptors(); for (int i = 0; i < descriptors.length; i++) { ITeamContentProviderDescriptor descriptor = descriptors[i]; |