diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/AbstractLanguageSettingProviderOptionPage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/AbstractLanguageSettingProviderOptionPage.java index 7ac9d439827..21f0377857b 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/AbstractLanguageSettingProviderOptionPage.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/AbstractLanguageSettingProviderOptionPage.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2010, 2012 Andrew Gvozdev 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: + * Andrew Gvozdev - Initial API and implementation + *******************************************************************************/ package org.eclipse.cdt.internal.ui.language.settings.providers; import org.eclipse.cdt.ui.dialogs.AbstractCOptionPage; diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsEntriesTab.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsEntriesTab.java index d051aa9d4b7..c50d4a2d8fc 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsEntriesTab.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsEntriesTab.java @@ -95,14 +95,15 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab { private static final int BUTTON_MOVE_UP = 4; private static final int BUTTON_MOVE_DOWN = 5; - private final static String[] BUTTON_LABELS = { - ADD_STR, - EDIT_STR, - DEL_STR, - null, - MOVEUP_STR, - MOVEDOWN_STR, - }; + private final static String[] BUTTON_LABELS = new String[6]; + { + BUTTON_LABELS[BUTTON_ADD] = ADD_STR; + BUTTON_LABELS[BUTTON_EDIT] = EDIT_STR; + BUTTON_LABELS[BUTTON_DELETE] = DEL_STR; + BUTTON_LABELS[BUTTON_MOVE_UP] = MOVEUP_STR; + BUTTON_LABELS[BUTTON_MOVE_DOWN] = MOVEDOWN_STR; + } + private static final String CLEAR_STR = Messages.LanguageSettingsProviderTab_Clear; private Map> initialProvidersMap = new HashMap>(); @@ -311,8 +312,21 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab { return provider.getSettingEntries(cfgDescription, rc, currentLanguageId); } - private void createTreeForLanguages(Composite comp) { - treeLanguages = new Tree(comp, SWT.BORDER | SWT.SINGLE | SWT.H_SCROLL); + private void trackInitialSettings() { + if (!page.isForPrefs()) { + ICConfigurationDescription[] cfgDescriptions = page.getCfgsEditable(); + for (ICConfigurationDescription cfgDescription : cfgDescriptions) { + if (cfgDescription instanceof ILanguageSettingsProvidersKeeper) { + String cfgId = cfgDescription.getId(); + List initialProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders(); + initialProvidersMap.put(cfgId, initialProviders); + } + } + } + } + + private void createTreeForLanguages(Composite parent) { + treeLanguages = new Tree(parent, SWT.BORDER | SWT.SINGLE | SWT.H_SCROLL); treeLanguages.setLayoutData(new GridData(GridData.FILL_VERTICAL)); treeLanguages.setHeaderVisible(true); @@ -347,8 +361,8 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab { }); } - private void createTreeForEntries(Composite comp) { - treeEntries = new Tree(comp, SWT.BORDER | SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL); + private void createTreeForEntries(Composite parent) { + treeEntries = new Tree(parent, SWT.BORDER | SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL); treeEntries.setLayoutData(new GridData(GridData.FILL_VERTICAL)); treeEntries.setHeaderVisible(true); treeEntries.setLinesVisible(true); @@ -394,19 +408,67 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab { } - private void trackInitialSettings() { - if (page.isForPrefs()) { - // AG TODO - } else { - ICConfigurationDescription[] cfgDescriptions = page.getCfgsEditable(); - for (ICConfigurationDescription cfgDescription : cfgDescriptions) { - if (cfgDescription instanceof ILanguageSettingsProvidersKeeper) { - String cfgId = cfgDescription.getId(); - List initialProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders(); - initialProvidersMap.put(cfgId, initialProviders); - } + private void createSashForm() { + sashFormEntries = new SashForm(usercomp,SWT.HORIZONTAL); + + GridData gd = new GridData(GridData.FILL_BOTH); + gd.horizontalSpan = 2; + gd.grabExcessVerticalSpace = true; + sashFormEntries.setLayoutData(gd); + + GridLayout layout = new GridLayout(); + sashFormEntries.setLayout(layout); + + createTreeForLanguages(sashFormEntries); + createTreeForEntries(sashFormEntries); + + sashFormEntries.setWeights(DEFAULT_ENTRIES_SASH_WEIGHTS); + } + + private void createBuiltInsCheckBox() { + builtInCheckBox = setupCheck(usercomp, Messages.AbstractLangsListTab_ShowBuiltin, 1, GridData.FILL_HORIZONTAL); + builtInCheckBox.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + updateTreeForEntries(); } + }); + builtInCheckBox.setSelection(true); + builtInCheckBox.setEnabled(true); + } + + private void createEnableProvidersCheckBox() { + enableProvidersCheckBox = setupCheck(usercomp, Messages.CDTMainWizardPage_TrySD90, 2, GridData.FILL_HORIZONTAL); + enableProvidersCheckBox.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + boolean enabled = enableProvidersCheckBox.getSelection(); + if (masterPropertyPage != null) { + masterPropertyPage.setLanguageSettingsProvidersEnabled(enabled); + } + + if (!enabled) { + ICConfigurationDescription cfgDescription = getConfigurationDescription(); + if (cfgDescription instanceof ILanguageSettingsProvidersKeeper) { + ((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(ScannerDiscoveryLegacySupport.getDefaultProvidersLegacy()); + updateData(getResDesc()); + } + } + + enableTabControls(enabled); + updateStatusLine(); + } + }); + + if (masterPropertyPage != null) { + // take the flag from master page if available (normally for resource properties) + enableProvidersCheckBox.setSelection(masterPropertyPage.isLanguageSettingsProvidersEnabled()); + } else { + enableProvidersCheckBox.setSelection(ScannerDiscoveryLegacySupport.isLanguageSettingsProvidersFunctionalityEnabled(page.getProject())); } + // display but disable the checkbox for file/folder resource + enableProvidersCheckBox.setEnabled(page.isForProject()); + enableTabControls(enableProvidersCheckBox.getSelection()); } @Override @@ -426,75 +488,15 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab { trackInitialSettings(); createSashForm(); - - // Status line fStatusLine = new StatusMessageLine(usercomp, SWT.LEFT, 2); - - // "Show built-ins" checkbox - builtInCheckBox = setupCheck(usercomp, Messages.AbstractLangsListTab_ShowBuiltin, 1, GridData.FILL_HORIZONTAL); - builtInCheckBox.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - updateTreeForEntries(); - } - }); - builtInCheckBox.setSelection(true); - builtInCheckBox.setEnabled(true); - + createBuiltInsCheckBox(); // "I want to try new scanner discovery" temporary checkbox - enableProvidersCheckBox = setupCheck(usercomp, Messages.CDTMainWizardPage_TrySD90, 2, GridData.FILL_HORIZONTAL); - enableProvidersCheckBox.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - boolean enabled = enableProvidersCheckBox.getSelection(); - if (masterPropertyPage != null) { - masterPropertyPage.setLanguageSettingsProvidersEnabled(enabled); - } - - if (!enabled) { - ICConfigurationDescription cfgDescription = getConfigurationDescription(); - if (cfgDescription instanceof ILanguageSettingsProvidersKeeper) { - ((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(ScannerDiscoveryLegacySupport.getDefaultProvidersLegacy()); - updateData(getResDesc()); - } - } - - enableTabControls(enabled); - updateStatusLine(); - } - }); - - if (masterPropertyPage != null) { - // take the flag from master page if available (normally for resource properties) - enableProvidersCheckBox.setSelection(masterPropertyPage.isLanguageSettingsProvidersEnabled()); - } else { - enableProvidersCheckBox.setSelection(ScannerDiscoveryLegacySupport.isLanguageSettingsProvidersFunctionalityEnabled(page.getProject())); - } - // display but disable the checkbox for file/folder resource - enableProvidersCheckBox.setEnabled(page.isForProject()); - enableTabControls(enableProvidersCheckBox.getSelection()); + createEnableProvidersCheckBox(); initButtons(BUTTON_LABELS); updateData(getResDesc()); } - private void createSashForm() { - sashFormEntries = new SashForm(usercomp,SWT.HORIZONTAL); - - GridData gd = new GridData(GridData.FILL_BOTH); - gd.horizontalSpan = 2; - gd.grabExcessVerticalSpace = true; - sashFormEntries.setLayoutData(gd); - - GridLayout layout = new GridLayout(); - sashFormEntries.setLayout(layout); - - createTreeForLanguages(sashFormEntries); - createTreeForEntries(sashFormEntries); - - sashFormEntries.setWeights(DEFAULT_ENTRIES_SASH_WEIGHTS); - } - private void enableTabControls(boolean enable) { sashFormEntries.setEnabled(enable); treeLanguages.setEnabled(enable); @@ -778,16 +780,6 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab { return provider; } - private ICLanguageSettingEntry doEdit(ICLanguageSettingEntry ent) { - ICLanguageSettingEntry selectedEntry = getSelectedEntry(); - ICConfigurationDescription cfgDecsription = getConfigurationDescription(); - LanguageSettingEntryDialog dlg = new LanguageSettingEntryDialog(usercomp.getShell(), cfgDecsription, selectedEntry); - if (dlg.open()) { - return dlg.getEntries()[0]; - } - return null; - } - private void performEdit(ILanguageSettingsProvider selectedProvider, ICLanguageSettingEntry selectedEntry) { if (selectedProvider instanceof ILanguageSettingsEditableProvider && selectedEntry != null) { ICConfigurationDescription cfgDecsription = getConfigurationDescription(); @@ -1107,15 +1099,4 @@ providers: for (ILanguageSettingsProvider provider : oldProviders) { return true; } - /** - * Shortcut for setting setting entries for current context. - * - */ - private void setSettingEntries(ILanguageSettingsEditableProvider provider, List entries) { - ICConfigurationDescription cfgDescription = getConfigurationDescription(); - IResource rc = getResource(); - if (currentLanguageId!=null) - provider.setSettingEntries(cfgDescription, rc, currentLanguageId, entries); - } - } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsProviderAssociationManager.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsProviderAssociationManager.java index 54f8f422721..beb4f420048 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsProviderAssociationManager.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/language/settings/providers/LanguageSettingsProviderAssociationManager.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2010, 2012 Andrew Gvozdev 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: + * Andrew Gvozdev - Initial API and implementation + *******************************************************************************/ package org.eclipse.cdt.internal.ui.language.settings.providers; import java.net.MalformedURLException; 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 29dab8c8552..cb728373f42 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 @@ -8,7 +8,6 @@ * Contributors: * Andrew Gvozdev - Initial API and implementation *******************************************************************************/ - package org.eclipse.cdt.internal.ui.language.settings.providers; import java.util.ArrayList; @@ -23,6 +22,8 @@ import java.util.Map; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.CheckStateChangedEvent; @@ -74,38 +75,17 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { // TODO: generalize private static final String TEST_PLUGIN_ID_PATTERN = "org.eclipse.cdt.*.tests.*"; //$NON-NLS-1$ -// private static final String RENAME_STR = "Rename..."; -// private static final String RUN_STR = Messages.LanguageSettingsProviderTab_Run; private static final String CLEAR_STR = Messages.LanguageSettingsProviderTab_Clear; private static final String RESET_STR = "Reset"; -// private static final int BUTTON_RENAME = 0; -// private static final int BUTTON_RUN = 0; private static final int BUTTON_CLEAR = 0; private static final int BUTTON_RESET = 1; // there is a separator instead of button #2 private static final int BUTTON_MOVE_UP = 3; private static final int BUTTON_MOVE_DOWN = 4; - private final static String[] BUTTON_LABELS_PROJECT = { -// RENAME_STR, -// RUN_STR, - CLEAR_STR, - RESET_STR, - null, - MOVEUP_STR, - MOVEDOWN_STR, - }; - - private final static String[] BUTTON_LABELS_PREF = { -// RENAME_STR, -// RUN_STR, - CLEAR_STR, - RESET_STR, - }; - private static final int[] DEFAULT_CONFIGURE_SASH_WEIGHTS = new int[] { 50, 50 }; - private SashForm sashFormConfigure; + private SashForm sashFormProviders; private Table tableProviders; private CheckboxTableViewer tableProvidersViewer; @@ -117,7 +97,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { private StatusMessageLine fStatusLine; private Button sharedProviderCheckBox = null; - private Link linkWorkspacePreferences = null; + private Link linkToWorkspacePreferences = null; private Button projectStorageCheckBox = null; private Page_LanguageSettingsProviders masterPropertyPage = null; @@ -152,6 +132,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { ILanguageSettingsEditableProvider newProvider = LanguageSettingsManager.getProviderCopy((ILanguageSettingsEditableProvider)rawProvider, true); if (newProvider != null) { replaceSelectedProvider(newProvider); + // Warning: Do not initializeOptionsPage() here as the method can be called from an existing page } return newProvider; @@ -160,16 +141,22 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { private boolean isReconfiguredForProject(ILanguageSettingsProvider provider) { String id = provider.getId(); - // check for the provider mismatch in configuration list vs. default list from the tool-chain ICConfigurationDescription cfgDescription = getConfigurationDescription(); String[] defaultIds = ((ILanguageSettingsProvidersKeeper) cfgDescription).getDefaultLanguageSettingsProvidersIds(); List providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders(); - if (defaultIds != null && Arrays.asList(defaultIds).contains(id) != providers.contains(provider)) { + + // check for the provider mismatch in configuration list vs. default list from the tool-chain + if (defaultIds != null && (Arrays.asList(defaultIds).contains(id) != providers.contains(provider))) { return true; } + // check if provider belongs to configuration (i.e. checked in the table) + if (!providers.contains(provider)) { + return false; + } + // check if "shared" flag matches default shared preference from extension point definition - if (providers.contains(provider) && LanguageSettingsManager.isPreferShared(id) != LanguageSettingsManager.isWorkspaceProvider(provider)) { + if (LanguageSettingsManager.isPreferShared(id) != LanguageSettingsManager.isWorkspaceProvider(provider)) { return true; } @@ -182,11 +169,11 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { private boolean isEditedForProject(ILanguageSettingsProvider provider) { String id = provider.getId(); - - // check for the provider mismatch in configuration list vs. initial list ICConfigurationDescription cfgDescription = getConfigurationDescription(); List initialProviders = initialProvidersByCfg.get(cfgDescription.getId()); - List providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders(); + List providers = getCheckedProviders(); + + // check for the provider mismatch in configuration list vs. initial list ILanguageSettingsProvider initialProvider = findProvider(id, initialProviders); if ((initialProvider != null) != providers.contains(provider)) { return true; @@ -213,7 +200,6 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { return overlayKeys; } - String[] overlayKeys = super.getOverlayKeys(provider); if (page.isForProject()) { @@ -294,7 +280,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { } private void trackInitialSettings() { - if (page.isForProject()) { + if (!page.isForPrefs()) { ICConfigurationDescription[] cfgDescriptions = page.getCfgsEditable(); for (ICConfigurationDescription cfgDescription : cfgDescriptions) { if (cfgDescription instanceof ILanguageSettingsProvidersKeeper) { @@ -310,10 +296,11 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { @Override public void createControls(Composite parent) { super.createControls(parent); + usercomp.setLayout(new GridLayout()); GridData gd = (GridData) usercomp.getLayoutData(); // Discourage settings entry table from trying to show all its items at once, see bug 264330 - gd.heightHint =1; + gd.heightHint = 1; if (page instanceof Page_LanguageSettingsProviders) { masterPropertyPage = (Page_LanguageSettingsProviders) page; @@ -321,64 +308,83 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { trackInitialSettings(); - // SashForms for each mode - createConfigureSashForm(); + createSashForm(); - // Status line fStatusLine = new StatusMessageLine(usercomp, SWT.LEFT, 2); - - if (page.isForPrefs()) { - initButtons(BUTTON_LABELS_PREF); - - } else { - // "I want to try new scanner discovery" temporary checkbox - enableProvidersCheckBox = setupCheck(usercomp, Messages.CDTMainWizardPage_TrySD90, 2, GridData.FILL_HORIZONTAL); - enableProvidersCheckBox.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - boolean enabled = enableProvidersCheckBox.getSelection(); - if (masterPropertyPage!=null) - masterPropertyPage.setLanguageSettingsProvidersEnabled(enabled); - - // AG TODO - if not enabled reset providers to MBS provider only - if (!enabled) { - ICConfigurationDescription cfgDescription = getConfigurationDescription(); - if (cfgDescription instanceof ILanguageSettingsProvidersKeeper) { - ((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(ScannerDiscoveryLegacySupport.getDefaultProvidersLegacy()); - updateData(getResDesc()); - } - - } - enableControls(enabled); - updateStatusLine(); - } - }); - - if (masterPropertyPage!=null) - enableProvidersCheckBox.setSelection(masterPropertyPage.isLanguageSettingsProvidersEnabled()); - else - enableProvidersCheckBox.setSelection(ScannerDiscoveryLegacySupport.isLanguageSettingsProvidersFunctionalityEnabled(page.getProject())); - // display but disable the checkbox for file/folder resource - enableProvidersCheckBox.setEnabled(page.isForProject()); - enableControls(enableProvidersCheckBox.getSelection()); - - initButtons(BUTTON_LABELS_PROJECT); + if (!page.isForPrefs()) { + createEnableProvidersCheckBox(); } + + String[] buttonLabels; + if (page.isForPrefs()) { + buttonLabels = new String[2]; + buttonLabels[BUTTON_CLEAR] = CLEAR_STR; + buttonLabels[BUTTON_RESET] = RESET_STR; + } else { + buttonLabels = new String[5]; + buttonLabels[BUTTON_CLEAR] = CLEAR_STR; + buttonLabels[BUTTON_RESET] = RESET_STR; + buttonLabels[BUTTON_MOVE_UP] = MOVEUP_STR; + buttonLabels[BUTTON_MOVE_DOWN] = MOVEDOWN_STR; + } + initButtons(buttonLabels); + updateData(getResDesc()); } - private void createConfigureSashForm() { - // SashForm for Configure - sashFormConfigure = new SashForm(usercomp, SWT.VERTICAL); - GridLayout layout = new GridLayout(); - sashFormConfigure.setLayout(layout); + private void createEnableProvidersCheckBox() { + // "I want to try new scanner discovery" temporary checkbox + enableProvidersCheckBox = setupCheck(usercomp, Messages.CDTMainWizardPage_TrySD90, 2, GridData.FILL_HORIZONTAL); + enableProvidersCheckBox.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + boolean enabled = enableProvidersCheckBox.getSelection(); + if (masterPropertyPage!=null) + masterPropertyPage.setLanguageSettingsProvidersEnabled(enabled); - // Providers table - Composite compositeSashForm = new Composite(sashFormConfigure, SWT.BORDER | SWT.SINGLE); - compositeSashForm.setLayout(new GridLayout()); + // AG TODO - if not enabled reset providers to MBS provider only + if (!enabled) { + ICConfigurationDescription cfgDescription = getConfigurationDescription(); + if (cfgDescription instanceof ILanguageSettingsProvidersKeeper) { + ((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(ScannerDiscoveryLegacySupport.getDefaultProvidersLegacy()); + updateData(getResDesc()); + } + + } + enableControls(enabled); + } + }); + + if (masterPropertyPage!=null) { + enableProvidersCheckBox.setSelection(masterPropertyPage.isLanguageSettingsProvidersEnabled()); + } else { + enableProvidersCheckBox.setSelection(ScannerDiscoveryLegacySupport.isLanguageSettingsProvidersFunctionalityEnabled(page.getProject())); + } + // display but disable the checkbox for file/folder resource + enableProvidersCheckBox.setEnabled(page.isForProject()); + enableControls(enableProvidersCheckBox.getSelection()); + } + + private void createSashForm() { + sashFormProviders = new SashForm(usercomp, SWT.VERTICAL); + GridLayout layout = new GridLayout(); + sashFormProviders.setLayout(layout); + GridData gd = new GridData(GridData.FILL_BOTH); + gd.horizontalSpan = 2; + sashFormProviders.setLayoutData(gd); + + createTreeForProviders(sashFormProviders); + createOptionsPane(sashFormProviders); + + sashFormProviders.setWeights(DEFAULT_CONFIGURE_SASH_WEIGHTS); + } + + private void createTreeForProviders(Composite parent) { + Composite composite = new Composite(parent, SWT.BORDER | SWT.SINGLE); + composite.setLayout(new GridLayout()); // items checkboxes only for project properties page - tableProviders = new Table(compositeSashForm, page.isForPrefs() ? SWT.NONE : SWT.CHECK); + tableProviders = new Table(composite, page.isForPrefs() ? SWT.NONE : SWT.CHECK); tableProviders.setLayoutData(new GridData(GridData.FILL_BOTH)); tableProviders.addSelectionListener(new SelectionAdapter() { @Override @@ -394,194 +400,163 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { tableProvidersViewer.addCheckStateListener(new ICheckStateListener() { @Override public void checkStateChanged(CheckStateChangedEvent event) { - // TODO: clean-up - too many manipulations in this method - - ILanguageSettingsProvider provider = (ILanguageSettingsProvider) event.getElement(); - saveCheckedProviders(provider); - - int pos = presentedProviders.indexOf(provider); - tableProviders.setSelection(pos); + ILanguageSettingsProvider checkedProvider = (ILanguageSettingsProvider) event.getElement(); + String id = checkedProvider.getId(); + ILanguageSettingsProvider newProvider = null; if (event.getChecked()) { - if (LanguageSettingsManager.isWorkspaceProvider(provider)) { - if (!LanguageSettingsManager.isPreferShared(provider.getId())) { - // Switch to non-shared provider instance - ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); - if (rawProvider instanceof ILanguageSettingsEditableProvider) { - ILanguageSettingsEditableProvider newProvider = LanguageSettingsManager.getProviderCopy((ILanguageSettingsEditableProvider) rawProvider, false); - if (newProvider != null) { - provider = newProvider; - replaceSelectedProvider(provider); - ICConfigurationDescription cfgDescription = getConfigurationDescription(); - initializeOptionsPage(provider, cfgDescription); - } - } + if (LanguageSettingsManager.isWorkspaceProvider(checkedProvider) && !LanguageSettingsManager.isPreferShared(id)) { + ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(checkedProvider); + if (rawProvider instanceof ILanguageSettingsEditableProvider) { + newProvider = LanguageSettingsManager.getProviderCopy((ILanguageSettingsEditableProvider) rawProvider, false); } } } else { - if (!LanguageSettingsManager.isWorkspaceProvider(provider)) { - provider = LanguageSettingsManager.getWorkspaceProvider(provider.getId()); - replaceSelectedProvider(provider); - ICConfigurationDescription cfgDescription = getConfigurationDescription(); - initializeOptionsPage(provider, cfgDescription); + if (!LanguageSettingsManager.isWorkspaceProvider(checkedProvider)) { + newProvider = LanguageSettingsManager.getWorkspaceProvider(id); } } + int pos = presentedProviders.indexOf(checkedProvider); + tableProviders.setSelection(pos); + + if (newProvider != null) { + replaceSelectedProvider(newProvider); // will refresh and save checked providers + initializeOptionsPage(newProvider); + } else { + tableProvidersViewer.refresh(checkedProvider); + saveCheckedProviders(); + // option page is reused + } + displaySelectedOptionPage(); - tableProvidersViewer.update(provider, null); updateButtons(); - }}); - - createOptionsControl(); - - sashFormConfigure.setWeights(DEFAULT_CONFIGURE_SASH_WEIGHTS); - enableSashForm(sashFormConfigure, true); + } + }); } - private Link createLinkToPreferences(final Composite parent, int span) { - Link link = new Link(parent, SWT.NONE); + private void createLinkToPreferences(final Composite parent, int span) { + linkToWorkspacePreferences = new Link(parent, SWT.NONE); + linkToWorkspacePreferences.setText("Options of global providers below can be changed in Workspace Settings, Discovery Tab."); GridData gd = new GridData(); gd.horizontalSpan = span; - link.setLayoutData(gd); + linkToWorkspacePreferences.setLayoutData(gd); - link.addListener(SWT.Selection, new Listener() { + linkToWorkspacePreferences.addListener(SWT.Selection, new Listener() { @Override public void handleEvent(Event event) { // Use event.text to tell which link was used PreferencesUtil.createPreferenceDialogOn(parent.getShell(), WORKSPACE_PREFERENCE_PAGE, null, null).open(); } }); - - return link; } // Called from globalProviderCheckBox listener - private ILanguageSettingsProvider toggleGlobalProvider(ILanguageSettingsProvider oldProvider, boolean toGlobal) { + private ILanguageSettingsProvider toggleGlobalProvider(ILanguageSettingsProvider provider, boolean toGlobal) { ILanguageSettingsProvider newProvider = null; - String id = oldProvider.getId(); + String id = provider.getId(); if (toGlobal) { newProvider = LanguageSettingsManager.getWorkspaceProvider(id); } else { - // Local provider instance chosen + // Toggle to configuration-owned provider try { - ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(oldProvider); + ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); if (rawProvider instanceof ILanguageSettingsEditableProvider) { newProvider = ((ILanguageSettingsEditableProvider) rawProvider).cloneShallow(); } } catch (CloneNotSupportedException e) { - CUIPlugin.log("Error cloning provider " + oldProvider.getId(), e); + CUIPlugin.log("Error cloning provider " + id, e); } } - if (newProvider!=null) { + if (newProvider != null) { replaceSelectedProvider(newProvider); - - ICConfigurationDescription cfgDescription = getConfigurationDescription(); - initializeOptionsPage(newProvider, cfgDescription); + initializeOptionsPage(newProvider); displaySelectedOptionPage(); + updateButtons(); } else { - newProvider = oldProvider; + newProvider = provider; } return newProvider; } - private void replaceSelectedProvider(ILanguageSettingsProvider newProvider) { - int pos = tableProviders.getSelectionIndex(); - presentedProviders.set(pos, newProvider); - tableProvidersViewer.setInput(presentedProviders); - tableProviders.setSelection(pos); - - ICConfigurationDescription cfgDescription = null; - if (!page.isForPrefs()) { - cfgDescription = getConfigurationDescription(); - - if (cfgDescription instanceof ILanguageSettingsProvidersKeeper) { - List cfgProviders = new ArrayList(((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders()); - pos = getProviderIndex(newProvider.getId(), cfgProviders); - if (pos >= 0) { - cfgProviders.set(pos, newProvider); - ((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(cfgProviders); - tableProvidersViewer.setCheckedElements(cfgProviders.toArray(new ILanguageSettingsProvider[0])); - } - } - } - refreshItem(newProvider); - } - + /** + * Refresh provider item in the table and update buttons. + * This method is intended for use by an Options Page of the provider. + * + * @param provider - provider item in the table to refresh. + */ public void refreshItem(ILanguageSettingsProvider provider) { tableProvidersViewer.refresh(provider); updateButtons(); } - private void createOptionsControl() { - groupOptionsPage = new Group(sashFormConfigure, SWT.SHADOW_ETCHED_IN); + private void createOptionsPane(Composite parent) { + groupOptionsPage = new Group(parent, SWT.SHADOW_ETCHED_IN); groupOptionsPage.setText("Language Settings Provider Options"); groupOptionsPage.setLayout(new GridLayout(2, false)); if (!page.isForPrefs()) { - if (sharedProviderCheckBox==null) { - sharedProviderCheckBox = new Button(groupOptionsPage, SWT.CHECK); - sharedProviderCheckBox.setText("Share setting entries between projects (global provider)"); - sharedProviderCheckBox.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - boolean isGlobal = sharedProviderCheckBox.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)"); - projectStorageCheckBox.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - boolean isWithProject = projectStorageCheckBox.getSelection(); - ILanguageSettingsProvider provider = getWorkingCopy(getSelectedProvider().getId()); - Assert.isTrue(provider instanceof LanguageSettingsSerializableProvider); - LanguageSettingsManager.setStoringEntriesInProjectArea((LanguageSettingsSerializableProvider) provider, isWithProject); - refreshItem(provider); - } - - @Override - public void widgetDefaultSelected(SelectionEvent e) { - widgetSelected(e); - } - - }); - - linkWorkspacePreferences = createLinkToPreferences(groupOptionsPage, 2); - } + createSharedProviderCheckBox(groupOptionsPage); + createProjectStorageCheckBox(groupOptionsPage); + createLinkToPreferences(groupOptionsPage, 2); } compositeOptionsPage = new Composite(groupOptionsPage, SWT.NONE); compositeOptionsPage.setLayout(new TabFolderLayout()); } - private void enableSashForm(SashForm sashForm, boolean enable) { - sashForm.setVisible(enable); - // Some of woodoo to fill properties page vertically and still keep right border visible in preferences - GridData gd = new GridData(enable || page.isForPrefs() ? GridData.FILL_BOTH : SWT.NONE); - gd.horizontalSpan = 2; - gd.heightHint = enable ? SWT.DEFAULT : 0; - sashForm.setLayoutData(gd); + private void createProjectStorageCheckBox(Composite parent) { + projectStorageCheckBox = new Button(parent, SWT.CHECK); + projectStorageCheckBox.setText("Store entries in project settings folder (easing project miration)"); + projectStorageCheckBox.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + boolean inProjectArea = projectStorageCheckBox.getSelection(); + ILanguageSettingsProvider newProvider = getWorkingCopy(getSelectedProvider().getId()); + // FIXME + Assert.isTrue(newProvider instanceof LanguageSettingsSerializableProvider); + + LanguageSettingsManager.setStoringEntriesInProjectArea((LanguageSettingsSerializableProvider) newProvider, inProjectArea); + replaceSelectedProvider(newProvider); + initializeOptionsPage(newProvider); + displaySelectedOptionPage(); + updateButtons(); + } + + @Override + public void widgetDefaultSelected(SelectionEvent e) { + widgetSelected(e); + } + }); + } + + private void createSharedProviderCheckBox(Composite parent) { + sharedProviderCheckBox = new Button(parent, SWT.CHECK); + sharedProviderCheckBox.setText("Share setting entries between projects (global provider)"); + sharedProviderCheckBox.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + boolean isGlobal = sharedProviderCheckBox.getSelection(); + ILanguageSettingsProvider provider = getSelectedProvider(); + if (isGlobal != LanguageSettingsManager.isWorkspaceProvider(provider)) { + // globality changed + provider = toggleGlobalProvider(provider, isGlobal); + } + projectStorageCheckBox.setSelection(provider instanceof LanguageSettingsSerializableProvider + && LanguageSettingsManager.isStoringEntriesInProjectArea((LanguageSettingsSerializableProvider) provider)); + } + + @Override + public void widgetDefaultSelected(SelectionEvent e) { + widgetSelected(e); + } + }); } private void enableControls(boolean enable) { - sashFormConfigure.setEnabled(enable); + sashFormProviders.setEnabled(enable); tableProviders.setEnabled(enable); compositeOptionsPage.setEnabled(enable); @@ -598,11 +573,11 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { } /** - * Populate provider tables and their option pages which are used in Configure mode + * Populate provider tables and their option pages */ private void updateProvidersTable() { ILanguageSettingsProvider selectedProvider = getSelectedProvider(); - String selectedId = selectedProvider!=null ? selectedProvider.getId() : null; + String selectedId = selectedProvider != null ? selectedProvider.getId() : null; // update viewer if the list of providers changed int pos = tableProviders.getSelectionIndex(); @@ -615,8 +590,8 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { tableProvidersViewer.setCheckedElements(cfgProviders.toArray(new ILanguageSettingsProvider[0])); } - if (selectedId!=null) { - for (int i=0; i providers) { @@ -688,11 +672,11 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { }); } - private ICOptionPage createOptionsPage(ILanguageSettingsProvider provider, ICConfigurationDescription cfgDescription) { + private ICOptionPage createOptionsPage(ILanguageSettingsProvider provider) { ICOptionPage optionsPage = null; - if (provider!=null) { + if (provider != null) { ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); - if (rawProvider!=null) { + if (rawProvider != null) { optionsPage = LanguageSettingsProviderAssociationManager.createOptionsPage(rawProvider); } @@ -704,17 +688,17 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { return optionsPage; } - private void initializeOptionsPage(ILanguageSettingsProvider provider, ICConfigurationDescription cfgDescription) { - ICOptionPage optionsPage = createOptionsPage(provider, cfgDescription); + private void initializeOptionsPage(ILanguageSettingsProvider provider) { + ICOptionPage optionsPage = createOptionsPage(provider); - if (optionsPage!=null) { + if (optionsPage != null) { ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); boolean isEditableForProject = page.isForProject() && provider instanceof ILanguageSettingsEditableProvider; boolean isEditableForPrefs = page.isForPrefs() && rawProvider instanceof ILanguageSettingsEditableProvider; boolean isEditable = isEditableForProject || isEditableForPrefs; compositeOptionsPage.setEnabled(isEditable); - String id = (provider!=null) ? provider.getId() : null; + String id = (provider != null) ? provider.getId() : null; optionsPageMap.put(id, optionsPage); optionsPage.setContainer(page); optionsPage.createControl(compositeOptionsPage); @@ -729,43 +713,38 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { } ILanguageSettingsProvider provider = getSelectedProvider(); - String id = (provider!=null) ? provider.getId() : null; + String id = (provider != null) ? provider.getId() : null; ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); currentOptionsPage = optionsPageMap.get(id); - boolean isChecked = tableProvidersViewer.getChecked(provider); - if (!page.isForPrefs()) { + if (!page.isForPrefs() ) { + boolean isChecked = tableProvidersViewer.getChecked(provider); boolean isShared = isPresentedAsShared(provider); boolean isRawProviderEditable = rawProvider instanceof ILanguageSettingsEditableProvider; - sharedProviderCheckBox.setSelection(isShared); - sharedProviderCheckBox.setEnabled(isChecked && isRawProviderEditable); sharedProviderCheckBox.setVisible(provider != null); + sharedProviderCheckBox.setEnabled(isChecked && isRawProviderEditable); + sharedProviderCheckBox.setSelection(isShared); - projectStorageCheckBox.setEnabled(!isShared && isChecked); projectStorageCheckBox.setVisible(rawProvider instanceof LanguageSettingsSerializableProvider); + projectStorageCheckBox.setEnabled(isChecked && !isShared); projectStorageCheckBox.setSelection(provider instanceof LanguageSettingsSerializableProvider && LanguageSettingsManager.isStoringEntriesInProjectArea((LanguageSettingsSerializableProvider) provider)); - boolean needPreferencesLink = isShared && currentOptionsPage != null; - // TODO: message - 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); + linkToWorkspacePreferences.setVisible(isShared && currentOptionsPage != null); + linkToWorkspacePreferences.setEnabled(isChecked); } if (currentOptionsPage != null) { + currentOptionsPage.setVisible(true); + boolean isEditableForProject = page.isForProject() && provider instanceof ILanguageSettingsEditableProvider; boolean isEditableForPrefs = page.isForPrefs() && rawProvider instanceof ILanguageSettingsEditableProvider; boolean isEditable = isEditableForProject || isEditableForPrefs; currentOptionsPage.getControl().setEnabled(isEditable); - currentOptionsPage.setVisible(true); - compositeOptionsPage.setEnabled(isEditable); -// compositeOptionsPage.layout(true); } } @@ -782,38 +761,11 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { } - private void saveCheckedProviders(Object selectedElement) { - if (page.isForProject()) { - Object[] checked = tableProvidersViewer.getCheckedElements(); - List providers = new ArrayList(checked.length); - for (Object element : checked) { - ILanguageSettingsProvider provider = (ILanguageSettingsProvider)element; - providers.add(provider); - } - ICConfigurationDescription cfgDescription = getConfigurationDescription(); - if (cfgDescription instanceof ILanguageSettingsProvidersKeeper) { - ((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(providers); - - if (selectedElement!=null) { - tableProvidersViewer.update(selectedElement, null); - if (selectedElement instanceof ILanguageSettingsProvider) { - ILanguageSettingsProvider selectedProvider = (ILanguageSettingsProvider) selectedElement; - initializeOptionsPage(selectedProvider, cfgDescription); - displaySelectedOptionPage(); - } - } - } - } - } - private void disableButtons() { -// buttonSetEnabled(BUTTON_RENAME, false); -// buttonSetEnabled(BUTTON_RUN, false); buttonSetEnabled(BUTTON_CLEAR, false); buttonSetEnabled(BUTTON_RESET, false); buttonSetEnabled(BUTTON_MOVE_UP, false); buttonSetEnabled(BUTTON_MOVE_DOWN, false); -// buttonSetEnabled(BUTTON_CONFIGURE, false); } /** @@ -829,7 +781,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { int pos = tableProviders.getSelectionIndex(); int count = tableProviders.getItemCount(); int last = count - 1; - boolean isRangeOk = pos >= 0 && pos <= last; + boolean isRangeOk = (pos >= 0 && pos <= last); ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); boolean isAllowedClearing = rawProvider instanceof ILanguageSettingsEditableProvider && rawProvider instanceof LanguageSettingsSerializableProvider @@ -840,32 +792,22 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { canClear = canClear && !((LanguageSettingsSerializableProvider)rawProvider).isEmpty(); } - boolean canReset = (canForProject && isReconfiguredForProject(provider)) || - (canForWorkspace && - (rawProvider instanceof ILanguageSettingsEditableProvider - && !LanguageSettingsManager.isEqualExtensionProvider(rawProvider, false)) - && ( LanguageSettingsManager.getExtensionProviderIds().contains(rawProvider.getId()) ) - ); + boolean canResetForProject = canForProject && isReconfiguredForProject(provider); + boolean canResetForWorkspace = canForWorkspace && + (rawProvider instanceof ILanguageSettingsEditableProvider + && !LanguageSettingsManager.isEqualExtensionProvider(rawProvider, false)) + && ( LanguageSettingsManager.getExtensionProviderIds().contains(rawProvider.getId()) ); + boolean canReset = canResetForProject || canResetForWorkspace; - boolean canMoveUp = canForProject && isRangeOk && pos!=0; - boolean canMoveDown = canForProject && isRangeOk && pos!=last; + boolean canMoveUp = canForProject && isRangeOk && pos != 0; + boolean canMoveDown = canForProject && isRangeOk && pos != last; -// buttonSetEnabled(BUTTON_RENAME, false); -// buttonSetEnabled(BUTTON_RUN, false); buttonSetEnabled(BUTTON_CLEAR, canClear); buttonSetEnabled(BUTTON_RESET, canReset); buttonSetEnabled(BUTTON_MOVE_UP, canMoveUp); buttonSetEnabled(BUTTON_MOVE_DOWN, canMoveDown); } - /** - * Displays warning message - if any - for selected language settings entry. - */ - private void updateStatusLine() { -// IStatus status=null; -// fStatusLine.setErrorStatus(status); - } - /** * Handle buttons */ @@ -874,12 +816,6 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { ILanguageSettingsProvider selectedProvider = getSelectedProvider(); switch (buttonIndex) { -// case BUTTON_RENAME: -// performRename(selectedProvider); -// break; -// case BUTTON_RUN: -// performRun(selectedProvider); -// break; case BUTTON_CLEAR: performClear(selectedProvider); break; @@ -909,8 +845,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { ILanguageSettingsEditableProvider newProvider = LanguageSettingsManager.getProviderCopy((ILanguageSettingsEditableProvider) rawProvider, false); if (newProvider != null) { replaceSelectedProvider(newProvider); - ICConfigurationDescription cfgDescription = getConfigurationDescription(); - initializeOptionsPage(newProvider, cfgDescription); + initializeOptionsPage(newProvider); displaySelectedOptionPage(); } } @@ -920,54 +855,60 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { private void performReset(ILanguageSettingsProvider selectedProvider) { String id = selectedProvider.getId(); - ILanguageSettingsProvider newProvider = null; - ICConfigurationDescription cfgDescription = getConfigurationDescription(); + ILanguageSettingsProvider newProvider = null; if (page.isForPrefs()) { newProvider = LanguageSettingsManager.getExtensionProviderCopy(id, true); if (newProvider == null) { - newProvider = LanguageSettingsManager.getWorkspaceProvider(id); + Status status = new Status(IStatus.ERROR, CUIPlugin.PLUGIN_ID, IStatus.ERROR, "Internal error happened, report application log to CDT team.", + new Exception("Internal Error getting copy of provider id="+id)); + fStatusLine.setErrorStatus(status); + CUIPlugin.log(status); } - replaceSelectedProvider(newProvider); } else { - List providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders(); + ICConfigurationDescription cfgDescription = getConfigurationDescription(); String[] defaultIds = ((ILanguageSettingsProvidersKeeper) cfgDescription).getDefaultLanguageSettingsProvidersIds(); boolean isDefault = Arrays.asList(defaultIds).contains(id); - - if (isDefault) { - if (!LanguageSettingsManager.isPreferShared(id)) { - newProvider = LanguageSettingsManager.getExtensionProviderCopy(id, true); - } + if (isDefault && !LanguageSettingsManager.isPreferShared(id)) { + newProvider = LanguageSettingsManager.getExtensionProviderCopy(id, true); if (newProvider == null) { - newProvider = LanguageSettingsManager.getWorkspaceProvider(id); - } - if (providers.contains(selectedProvider)) { - // replace provider in the cfg list - replaceSelectedProvider(newProvider); - } else { - // add provider to the cfg list - replaceSelectedProvider(newProvider); - tableProvidersViewer.setChecked(newProvider, true); - saveCheckedProviders(newProvider); - updateProvidersTable(); - refreshItem(newProvider); + Status status = new Status(IStatus.ERROR, CUIPlugin.PLUGIN_ID, IStatus.ERROR, "Internal error happened, report application log to CDT team.", + new Exception("Internal Error getting copy of provider id="+id)); + fStatusLine.setErrorStatus(status); + CUIPlugin.log(status); } } else { - if (providers.contains(selectedProvider)) { - // remove provider from the cfg list - newProvider = LanguageSettingsManager.getWorkspaceProvider(id); - replaceSelectedProvider(newProvider); - tableProvidersViewer.setChecked(newProvider, false); - saveCheckedProviders(newProvider); - updateProvidersTable(); - refreshItem(newProvider); - } + newProvider = LanguageSettingsManager.getWorkspaceProvider(id); } + tableProvidersViewer.setChecked(selectedProvider, isDefault); } - initializeOptionsPage(newProvider, cfgDescription); - displaySelectedOptionPage(); - updateButtons(); + if (newProvider != null) { + replaceSelectedProvider(newProvider); + initializeOptionsPage(newProvider); + displaySelectedOptionPage(); + updateButtons(); + } + } + + private void replaceSelectedProvider(ILanguageSettingsProvider newProvider) { + int pos = tableProviders.getSelectionIndex(); + boolean isChecked = tableProvidersViewer.getChecked(tableProvidersViewer.getElementAt(pos)); + + presentedProviders.set(pos, newProvider); + tableProvidersViewer.refresh(); + tableProvidersViewer.setChecked(newProvider, isChecked); + tableProviders.setSelection(pos); + tableProvidersViewer.refresh(newProvider); + + saveCheckedProviders(); + } + + private void saveCheckedProviders() { + ICConfigurationDescription cfgDescription = getConfigurationDescription(); + if (cfgDescription instanceof ILanguageSettingsProvidersKeeper) { + ((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(getCheckedProviders()); + } } private boolean isWorkingCopy(ILanguageSettingsProvider provider) { @@ -1002,14 +943,18 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { private void moveProvider(int oldPos, int newPos) { Collections.swap(presentedProviders, oldPos, newPos); + tableProvidersViewer.refresh(); + tableProviders.showSelection(); - updateProvidersTable(); - tableProviders.setSelection(newPos); - - saveCheckedProviders(null); + saveCheckedProviders(); updateButtons(); } + @SuppressWarnings({ "unchecked", "rawtypes" }) + private List getCheckedProviders() { + return (List)Arrays.asList(tableProvidersViewer.getCheckedElements()); + } + /** * Called when configuration changed */ @@ -1034,8 +979,8 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { } // for Preference page initialize providers list just once as no configuration here to change - // and re-initializing could ruins modified providers in case of switching tabs or pages - if (!page.isForPrefs() || presentedProviders==null) { + // and re-initializing could overwrite modified providers in case of switching tabs or pages + if (!page.isForPrefs() || presentedProviders == null) { initializeProviders(); } updateProvidersTable(); @@ -1101,17 +1046,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { @Override protected void performApply(ICResourceDescription srcRcDescription, ICResourceDescription destRcDescription) { -// informOptionPages(true); - - if (page.isForPrefs()) { - try { - LanguageSettingsManager.setWorkspaceProviders(presentedProviders); - } catch (CoreException e) { - CUIPlugin.log("Error serializing workspace language settings providers", e); - } - } else { - IResource rc = getResource(); - + if (!page.isForPrefs()) { ICConfigurationDescription sd = srcRcDescription.getConfiguration(); ICConfigurationDescription dd = destRcDescription.getConfiguration(); if (sd instanceof ILanguageSettingsProvidersKeeper && dd instanceof ILanguageSettingsProvidersKeeper) { @@ -1121,26 +1056,13 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { } performOK(); + + trackInitialSettings(); + updateData(getResDesc()); } @Override protected void performOK() { - if (!page.isForPrefs()) { - // FIXME: for now only handles current configuration - ICResourceDescription rcDesc = getResDesc(); - IResource rc = getResource(); - ICConfigurationDescription cfgDescription = rcDesc.getConfiguration(); - if (cfgDescription instanceof ILanguageSettingsProvidersKeeper) { - List destProviders = new ArrayList(); - List providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders(); - for (ILanguageSettingsProvider pro : providers) { - // TODO: clone - destProviders.add(pro); - } - ((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(destProviders); - } - } - // Build Settings page if (page.isForPrefs()) { try { @@ -1151,10 +1073,11 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { initializeProviders(); } - if (page.isForProject() && enableProvidersCheckBox!=null) { + if (page.isForProject() && enableProvidersCheckBox != null) { boolean enabled = enableProvidersCheckBox.getSelection(); - if (masterPropertyPage!=null) + if (masterPropertyPage != null) { enabled = masterPropertyPage.isLanguageSettingsProvidersEnabled(); + } ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(page.getProject(), enabled); enableProvidersCheckBox.setSelection(enabled); } @@ -1167,9 +1090,6 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { CUIPlugin.log("Error applying options page", e); } } - - trackInitialSettings(); - updateData(getResDesc()); } @Override @@ -1180,16 +1100,6 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { return page.isForPrefs() || page.isForProject(); } - private ILanguageSettingsProvider findRawProvider(String id, List providers) { - for (ILanguageSettingsProvider provider : providers) { - if (provider.getId().equals(id)) { - provider = LanguageSettingsManager.getRawProvider(provider); - return provider; - } - } - return null; - } - private ILanguageSettingsProvider findProvider(String id, List providers) { for (ILanguageSettingsProvider provider : providers) { if (provider.getId().equals(id)) { @@ -1203,30 +1113,4 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab { return findProvider(id, presentedProviders); } - private int getProviderIndex(String id, List providers) { - int pos = 0; - for (ILanguageSettingsProvider p : providers) { - if (p.getId().equals(id)) - return pos; - pos++; - } - return -1; - } - -// private void informOptionPages(boolean apply) { -// Collection pages = optionsPageMap.values(); -// for (ICOptionPage dynamicPage : pages) { -// if (dynamicPage!=null && dynamicPage.isValid() && dynamicPage.getControl() != null) { -// try { -// if (apply) -// dynamicPage.performApply(new NullProgressMonitor()); -// else -// dynamicPage.performDefaults(); -// } catch (CoreException e) { -// CUIPlugin.log("ErrorParsTab.error.OnApplyingSettings", e); -// } -// } -// } -//} - } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/newui/Messages.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/newui/Messages.java index 7cec4b335bf..5fc35ae36db 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/newui/Messages.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/newui/Messages.java @@ -4,7 +4,7 @@ * 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: * Andrew Gvozdev - Initial API and implementation * IBM Corporation @@ -195,7 +195,6 @@ public class Messages extends NLS { public static String LanguageSettingsProviderTab_Configure; public static String LanguageSettingsProviderTab_ErrorPerformingDefaults; public static String LanguageSettingsProviderTab_ProviderOptions; -// public static String LanguageSettingsProviderTab_Run; public static String LanguageSettingsProviderTab_SettingEntries; public static String LanguageSettingsProviderTab_SettingEntriesTooltip; public static String LanguageSettingsProviderTab_ShowEntries; diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/newui/Messages.properties b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/newui/Messages.properties index 847d858028f..84ed1fec698 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/newui/Messages.properties +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/newui/Messages.properties @@ -174,7 +174,6 @@ LanguageSettingsProviderTab_Clear=Clear Entries LanguageSettingsProviderTab_Configure=Configure LanguageSettingsProviderTab_ErrorPerformingDefaults=Error restoring defaults for language settings providers LanguageSettingsProviderTab_ProviderOptions=Language Settings Provider Options -#LanguageSettingsProviderTab_Run=Run LanguageSettingsProviderTab_SettingEntries=Setting Entries LanguageSettingsProviderTab_SettingEntriesTooltip=Setting Entries LanguageSettingsProviderTab_ShowEntries=Show Entries