diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsProviderTab.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsProviderTab.java
index 81086f767c1..fb56c8fb081 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsProviderTab.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsProviderTab.java
@@ -117,6 +117,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
private Button enableProvidersCheckBox;
private StatusMessageLine fStatusLine;
+ private Button globalProviderCheckBox = null;
private Link linkWorkspacePreferences = null;
private Button projectStorageCheckBox = null;
@@ -356,6 +357,37 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
return link;
}
+ // Called from globalProviderCheckBox listener
+ private ILanguageSettingsProvider toggleGlobalProvider(ILanguageSettingsProvider oldProvider, boolean toGlobal) {
+ ILanguageSettingsProvider newProvider = null;
+
+ String id = oldProvider.getId();
+ if (toGlobal) {
+ newProvider = LanguageSettingsManager.getWorkspaceProvider(id);
+ } else {
+ // Local provider instance chosen
+ try {
+ ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(oldProvider);
+ if (rawProvider instanceof ILanguageSettingsEditableProvider) {
+ newProvider = ((ILanguageSettingsEditableProvider) rawProvider).cloneShallow();
+ }
+ } catch (CloneNotSupportedException e) {
+ CUIPlugin.log("Error cloning provider " + oldProvider.getId(), e);
+ }
+ }
+ if (newProvider!=null) {
+ replaceSelectedProvider(newProvider);
+
+ ICConfigurationDescription cfgDescription = getConfigurationDescription();
+ initializeOptionsPage(newProvider, cfgDescription);
+ displaySelectedOptionPage();
+ } else {
+ newProvider = oldProvider;
+ }
+
+ return newProvider;
+ }
+
private void replaceSelectedProvider(ILanguageSettingsProvider newProvider) {
int pos = tableProviders.getSelectionIndex();
presentedProviders.set(pos, newProvider);
@@ -388,6 +420,29 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
groupOptionsPage.setLayout(new GridLayout(2, false));
if (!page.isForPrefs()) {
+ if (globalProviderCheckBox==null) {
+ globalProviderCheckBox = new Button(groupOptionsPage, SWT.CHECK);
+ globalProviderCheckBox.setText("Share setting entries between projects (global provider)");
+ globalProviderCheckBox.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ boolean isGlobal = globalProviderCheckBox.getSelection();
+ ILanguageSettingsProvider provider = getSelectedProvider();
+ if (isGlobal != LanguageSettingsManager.isWorkspaceProvider(provider)) {
+ provider = toggleGlobalProvider(provider, isGlobal);
+ }
+ projectStorageCheckBox.setSelection(provider instanceof LanguageSettingsSerializableProvider
+ && LanguageSettingsManager.isStoringEntriesInProjectArea((LanguageSettingsSerializableProvider) provider));
+ }
+
+ @Override
+ public void widgetDefaultSelected(SelectionEvent e) {
+ widgetSelected(e);
+ }
+
+ });
+ }
+
if (projectStorageCheckBox == null) {
projectStorageCheckBox = new Button(groupOptionsPage, SWT.CHECK);
projectStorageCheckBox.setText("Store entries in project settings folder (easing project miration)");
@@ -576,6 +631,11 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
boolean isChecked = tableProvidersViewer.getChecked(provider);
if (!page.isForPrefs()) {
+ boolean isRawProviderEditable = rawProvider instanceof ILanguageSettingsEditableProvider;
+ globalProviderCheckBox.setSelection(isGlobal);
+ globalProviderCheckBox.setEnabled(isChecked && isRawProviderEditable);
+ globalProviderCheckBox.setVisible(provider!=null);
+
projectStorageCheckBox.setEnabled(!isGlobal);
projectStorageCheckBox.setVisible(rawProvider instanceof LanguageSettingsSerializableProvider);
projectStorageCheckBox.setSelection(provider instanceof LanguageSettingsSerializableProvider
@@ -583,7 +643,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
boolean needPreferencesLink=isGlobal && currentOptionsPage!=null;
// TODO: message
- final String linkMsg = needPreferencesLink ? "Options of shared providers below can be changed in Workspace Settings, Discovery Tab." : "";
+ final String linkMsg = needPreferencesLink ? "Options of global providers below can be changed in Workspace Settings, Discovery Tab." : "";
linkWorkspacePreferences.setText(linkMsg);
linkWorkspacePreferences.pack();
linkWorkspacePreferences.setEnabled(isChecked);