1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00
This commit is contained in:
Andrew Gvozdev 2012-04-26 09:00:26 -04:00
parent 89a9259918
commit b4b53b3bc6
6 changed files with 391 additions and 508 deletions

View file

@ -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; package org.eclipse.cdt.internal.ui.language.settings.providers;
import org.eclipse.cdt.ui.dialogs.AbstractCOptionPage; import org.eclipse.cdt.ui.dialogs.AbstractCOptionPage;

View file

@ -95,14 +95,15 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
private static final int BUTTON_MOVE_UP = 4; private static final int BUTTON_MOVE_UP = 4;
private static final int BUTTON_MOVE_DOWN = 5; private static final int BUTTON_MOVE_DOWN = 5;
private final static String[] BUTTON_LABELS = { private final static String[] BUTTON_LABELS = new String[6];
ADD_STR, {
EDIT_STR, BUTTON_LABELS[BUTTON_ADD] = ADD_STR;
DEL_STR, BUTTON_LABELS[BUTTON_EDIT] = EDIT_STR;
null, BUTTON_LABELS[BUTTON_DELETE] = DEL_STR;
MOVEUP_STR, BUTTON_LABELS[BUTTON_MOVE_UP] = MOVEUP_STR;
MOVEDOWN_STR, BUTTON_LABELS[BUTTON_MOVE_DOWN] = MOVEDOWN_STR;
}; }
private static final String CLEAR_STR = Messages.LanguageSettingsProviderTab_Clear; private static final String CLEAR_STR = Messages.LanguageSettingsProviderTab_Clear;
private Map<String, List<ILanguageSettingsProvider>> initialProvidersMap = new HashMap<String, List<ILanguageSettingsProvider>>(); private Map<String, List<ILanguageSettingsProvider>> initialProvidersMap = new HashMap<String, List<ILanguageSettingsProvider>>();
@ -311,8 +312,21 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
return provider.getSettingEntries(cfgDescription, rc, currentLanguageId); return provider.getSettingEntries(cfgDescription, rc, currentLanguageId);
} }
private void createTreeForLanguages(Composite comp) { private void trackInitialSettings() {
treeLanguages = new Tree(comp, SWT.BORDER | SWT.SINGLE | SWT.H_SCROLL); if (!page.isForPrefs()) {
ICConfigurationDescription[] cfgDescriptions = page.getCfgsEditable();
for (ICConfigurationDescription cfgDescription : cfgDescriptions) {
if (cfgDescription instanceof ILanguageSettingsProvidersKeeper) {
String cfgId = cfgDescription.getId();
List<ILanguageSettingsProvider> 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.setLayoutData(new GridData(GridData.FILL_VERTICAL));
treeLanguages.setHeaderVisible(true); treeLanguages.setHeaderVisible(true);
@ -347,8 +361,8 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
}); });
} }
private void createTreeForEntries(Composite comp) { private void createTreeForEntries(Composite parent) {
treeEntries = new Tree(comp, SWT.BORDER | SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL); treeEntries = new Tree(parent, SWT.BORDER | SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL);
treeEntries.setLayoutData(new GridData(GridData.FILL_VERTICAL)); treeEntries.setLayoutData(new GridData(GridData.FILL_VERTICAL));
treeEntries.setHeaderVisible(true); treeEntries.setHeaderVisible(true);
treeEntries.setLinesVisible(true); treeEntries.setLinesVisible(true);
@ -394,43 +408,24 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
} }
private void trackInitialSettings() { private void createSashForm() {
if (page.isForPrefs()) { sashFormEntries = new SashForm(usercomp,SWT.HORIZONTAL);
// AG TODO
} else { GridData gd = new GridData(GridData.FILL_BOTH);
ICConfigurationDescription[] cfgDescriptions = page.getCfgsEditable(); gd.horizontalSpan = 2;
for (ICConfigurationDescription cfgDescription : cfgDescriptions) { gd.grabExcessVerticalSpace = true;
if (cfgDescription instanceof ILanguageSettingsProvidersKeeper) { sashFormEntries.setLayoutData(gd);
String cfgId = cfgDescription.getId();
List<ILanguageSettingsProvider> initialProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders(); GridLayout layout = new GridLayout();
initialProvidersMap.put(cfgId, initialProviders); sashFormEntries.setLayout(layout);
}
} createTreeForLanguages(sashFormEntries);
} createTreeForEntries(sashFormEntries);
sashFormEntries.setWeights(DEFAULT_ENTRIES_SASH_WEIGHTS);
} }
@Override private void createBuiltInsCheckBox() {
public void createControls(Composite parent) {
super.createControls(parent);
currentLanguageId = null;
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;
if (page instanceof Page_LanguageSettingsProviders) {
masterPropertyPage = (Page_LanguageSettingsProviders) page;
}
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 = setupCheck(usercomp, Messages.AbstractLangsListTab_ShowBuiltin, 1, GridData.FILL_HORIZONTAL);
builtInCheckBox.addSelectionListener(new SelectionAdapter() { builtInCheckBox.addSelectionListener(new SelectionAdapter() {
@Override @Override
@ -440,8 +435,9 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
}); });
builtInCheckBox.setSelection(true); builtInCheckBox.setSelection(true);
builtInCheckBox.setEnabled(true); builtInCheckBox.setEnabled(true);
}
// "I want to try new scanner discovery" temporary checkbox private void createEnableProvidersCheckBox() {
enableProvidersCheckBox = setupCheck(usercomp, Messages.CDTMainWizardPage_TrySD90, 2, GridData.FILL_HORIZONTAL); enableProvidersCheckBox = setupCheck(usercomp, Messages.CDTMainWizardPage_TrySD90, 2, GridData.FILL_HORIZONTAL);
enableProvidersCheckBox.addSelectionListener(new SelectionAdapter() { enableProvidersCheckBox.addSelectionListener(new SelectionAdapter() {
@Override @Override
@ -473,28 +469,34 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
// display but disable the checkbox for file/folder resource // display but disable the checkbox for file/folder resource
enableProvidersCheckBox.setEnabled(page.isForProject()); enableProvidersCheckBox.setEnabled(page.isForProject());
enableTabControls(enableProvidersCheckBox.getSelection()); enableTabControls(enableProvidersCheckBox.getSelection());
}
@Override
public void createControls(Composite parent) {
super.createControls(parent);
currentLanguageId = null;
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;
if (page instanceof Page_LanguageSettingsProviders) {
masterPropertyPage = (Page_LanguageSettingsProviders) page;
}
trackInitialSettings();
createSashForm();
fStatusLine = new StatusMessageLine(usercomp, SWT.LEFT, 2);
createBuiltInsCheckBox();
// "I want to try new scanner discovery" temporary checkbox
createEnableProvidersCheckBox();
initButtons(BUTTON_LABELS); initButtons(BUTTON_LABELS);
updateData(getResDesc()); 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) { private void enableTabControls(boolean enable) {
sashFormEntries.setEnabled(enable); sashFormEntries.setEnabled(enable);
treeLanguages.setEnabled(enable); treeLanguages.setEnabled(enable);
@ -778,16 +780,6 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
return provider; 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) { private void performEdit(ILanguageSettingsProvider selectedProvider, ICLanguageSettingEntry selectedEntry) {
if (selectedProvider instanceof ILanguageSettingsEditableProvider && selectedEntry != null) { if (selectedProvider instanceof ILanguageSettingsEditableProvider && selectedEntry != null) {
ICConfigurationDescription cfgDecsription = getConfigurationDescription(); ICConfigurationDescription cfgDecsription = getConfigurationDescription();
@ -1107,15 +1099,4 @@ providers: for (ILanguageSettingsProvider provider : oldProviders) {
return true; return true;
} }
/**
* Shortcut for setting setting entries for current context.
*
*/
private void setSettingEntries(ILanguageSettingsEditableProvider provider, List<ICLanguageSettingEntry> entries) {
ICConfigurationDescription cfgDescription = getConfigurationDescription();
IResource rc = getResource();
if (currentLanguageId!=null)
provider.setSettingEntries(cfgDescription, rc, currentLanguageId, entries);
}
} }

View file

@ -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; package org.eclipse.cdt.internal.ui.language.settings.providers;
import java.net.MalformedURLException; import java.net.MalformedURLException;

View file

@ -8,7 +8,6 @@
* Contributors: * Contributors:
* Andrew Gvozdev - Initial API and implementation * Andrew Gvozdev - Initial API and implementation
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.internal.ui.language.settings.providers; package org.eclipse.cdt.internal.ui.language.settings.providers;
import java.util.ArrayList; import java.util.ArrayList;
@ -23,6 +22,8 @@ import java.util.Map;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.CoreException; 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.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckStateChangedEvent;
@ -74,38 +75,17 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
// TODO: generalize // TODO: generalize
private static final String TEST_PLUGIN_ID_PATTERN = "org.eclipse.cdt.*.tests.*"; //$NON-NLS-1$ 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 CLEAR_STR = Messages.LanguageSettingsProviderTab_Clear;
private static final String RESET_STR = "Reset"; 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_CLEAR = 0;
private static final int BUTTON_RESET = 1; private static final int BUTTON_RESET = 1;
// there is a separator instead of button #2 // there is a separator instead of button #2
private static final int BUTTON_MOVE_UP = 3; private static final int BUTTON_MOVE_UP = 3;
private static final int BUTTON_MOVE_DOWN = 4; 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 static final int[] DEFAULT_CONFIGURE_SASH_WEIGHTS = new int[] { 50, 50 };
private SashForm sashFormConfigure; private SashForm sashFormProviders;
private Table tableProviders; private Table tableProviders;
private CheckboxTableViewer tableProvidersViewer; private CheckboxTableViewer tableProvidersViewer;
@ -117,7 +97,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
private StatusMessageLine fStatusLine; private StatusMessageLine fStatusLine;
private Button sharedProviderCheckBox = null; private Button sharedProviderCheckBox = null;
private Link linkWorkspacePreferences = null; private Link linkToWorkspacePreferences = null;
private Button projectStorageCheckBox = null; private Button projectStorageCheckBox = null;
private Page_LanguageSettingsProviders masterPropertyPage = null; private Page_LanguageSettingsProviders masterPropertyPage = null;
@ -152,6 +132,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
ILanguageSettingsEditableProvider newProvider = LanguageSettingsManager.getProviderCopy((ILanguageSettingsEditableProvider)rawProvider, true); ILanguageSettingsEditableProvider newProvider = LanguageSettingsManager.getProviderCopy((ILanguageSettingsEditableProvider)rawProvider, true);
if (newProvider != null) { if (newProvider != null) {
replaceSelectedProvider(newProvider); replaceSelectedProvider(newProvider);
// Warning: Do not initializeOptionsPage() here as the method can be called from an existing page
} }
return newProvider; return newProvider;
@ -160,16 +141,22 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
private boolean isReconfiguredForProject(ILanguageSettingsProvider provider) { private boolean isReconfiguredForProject(ILanguageSettingsProvider provider) {
String id = provider.getId(); String id = provider.getId();
// check for the provider mismatch in configuration list vs. default list from the tool-chain
ICConfigurationDescription cfgDescription = getConfigurationDescription(); ICConfigurationDescription cfgDescription = getConfigurationDescription();
String[] defaultIds = ((ILanguageSettingsProvidersKeeper) cfgDescription).getDefaultLanguageSettingsProvidersIds(); String[] defaultIds = ((ILanguageSettingsProvidersKeeper) cfgDescription).getDefaultLanguageSettingsProvidersIds();
List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders(); List<ILanguageSettingsProvider> 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; 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 // 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; return true;
} }
@ -182,11 +169,11 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
private boolean isEditedForProject(ILanguageSettingsProvider provider) { private boolean isEditedForProject(ILanguageSettingsProvider provider) {
String id = provider.getId(); String id = provider.getId();
// check for the provider mismatch in configuration list vs. initial list
ICConfigurationDescription cfgDescription = getConfigurationDescription(); ICConfigurationDescription cfgDescription = getConfigurationDescription();
List<ILanguageSettingsProvider> initialProviders = initialProvidersByCfg.get(cfgDescription.getId()); List<ILanguageSettingsProvider> initialProviders = initialProvidersByCfg.get(cfgDescription.getId());
List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders(); List<ILanguageSettingsProvider> providers = getCheckedProviders();
// check for the provider mismatch in configuration list vs. initial list
ILanguageSettingsProvider initialProvider = findProvider(id, initialProviders); ILanguageSettingsProvider initialProvider = findProvider(id, initialProviders);
if ((initialProvider != null) != providers.contains(provider)) { if ((initialProvider != null) != providers.contains(provider)) {
return true; return true;
@ -213,7 +200,6 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
return overlayKeys; return overlayKeys;
} }
String[] overlayKeys = super.getOverlayKeys(provider); String[] overlayKeys = super.getOverlayKeys(provider);
if (page.isForProject()) { if (page.isForProject()) {
@ -294,7 +280,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
} }
private void trackInitialSettings() { private void trackInitialSettings() {
if (page.isForProject()) { if (!page.isForPrefs()) {
ICConfigurationDescription[] cfgDescriptions = page.getCfgsEditable(); ICConfigurationDescription[] cfgDescriptions = page.getCfgsEditable();
for (ICConfigurationDescription cfgDescription : cfgDescriptions) { for (ICConfigurationDescription cfgDescription : cfgDescriptions) {
if (cfgDescription instanceof ILanguageSettingsProvidersKeeper) { if (cfgDescription instanceof ILanguageSettingsProvidersKeeper) {
@ -310,10 +296,11 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
@Override @Override
public void createControls(Composite parent) { public void createControls(Composite parent) {
super.createControls(parent); super.createControls(parent);
usercomp.setLayout(new GridLayout()); usercomp.setLayout(new GridLayout());
GridData gd = (GridData) usercomp.getLayoutData(); GridData gd = (GridData) usercomp.getLayoutData();
// Discourage settings entry table from trying to show all its items at once, see bug 264330 // 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) { if (page instanceof Page_LanguageSettingsProviders) {
masterPropertyPage = (Page_LanguageSettingsProviders) page; masterPropertyPage = (Page_LanguageSettingsProviders) page;
@ -321,16 +308,31 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
trackInitialSettings(); trackInitialSettings();
// SashForms for each mode createSashForm();
createConfigureSashForm();
// Status line
fStatusLine = new StatusMessageLine(usercomp, SWT.LEFT, 2); fStatusLine = new StatusMessageLine(usercomp, SWT.LEFT, 2);
if (!page.isForPrefs()) {
createEnableProvidersCheckBox();
}
String[] buttonLabels;
if (page.isForPrefs()) { if (page.isForPrefs()) {
initButtons(BUTTON_LABELS_PREF); buttonLabels = new String[2];
buttonLabels[BUTTON_CLEAR] = CLEAR_STR;
buttonLabels[BUTTON_RESET] = RESET_STR;
} else { } 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 createEnableProvidersCheckBox() {
// "I want to try new scanner discovery" temporary checkbox // "I want to try new scanner discovery" temporary checkbox
enableProvidersCheckBox = setupCheck(usercomp, Messages.CDTMainWizardPage_TrySD90, 2, GridData.FILL_HORIZONTAL); enableProvidersCheckBox = setupCheck(usercomp, Messages.CDTMainWizardPage_TrySD90, 2, GridData.FILL_HORIZONTAL);
enableProvidersCheckBox.addSelectionListener(new SelectionAdapter() { enableProvidersCheckBox.addSelectionListener(new SelectionAdapter() {
@ -350,35 +352,39 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
} }
enableControls(enabled); enableControls(enabled);
updateStatusLine();
} }
}); });
if (masterPropertyPage!=null) if (masterPropertyPage!=null) {
enableProvidersCheckBox.setSelection(masterPropertyPage.isLanguageSettingsProvidersEnabled()); enableProvidersCheckBox.setSelection(masterPropertyPage.isLanguageSettingsProvidersEnabled());
else } else {
enableProvidersCheckBox.setSelection(ScannerDiscoveryLegacySupport.isLanguageSettingsProvidersFunctionalityEnabled(page.getProject())); enableProvidersCheckBox.setSelection(ScannerDiscoveryLegacySupport.isLanguageSettingsProvidersFunctionalityEnabled(page.getProject()));
}
// display but disable the checkbox for file/folder resource // display but disable the checkbox for file/folder resource
enableProvidersCheckBox.setEnabled(page.isForProject()); enableProvidersCheckBox.setEnabled(page.isForProject());
enableControls(enableProvidersCheckBox.getSelection()); enableControls(enableProvidersCheckBox.getSelection());
initButtons(BUTTON_LABELS_PROJECT);
}
updateData(getResDesc());
} }
private void createConfigureSashForm() { private void createSashForm() {
// SashForm for Configure sashFormProviders = new SashForm(usercomp, SWT.VERTICAL);
sashFormConfigure = new SashForm(usercomp, SWT.VERTICAL);
GridLayout layout = new GridLayout(); GridLayout layout = new GridLayout();
sashFormConfigure.setLayout(layout); sashFormProviders.setLayout(layout);
GridData gd = new GridData(GridData.FILL_BOTH);
gd.horizontalSpan = 2;
sashFormProviders.setLayoutData(gd);
// Providers table createTreeForProviders(sashFormProviders);
Composite compositeSashForm = new Composite(sashFormConfigure, SWT.BORDER | SWT.SINGLE); createOptionsPane(sashFormProviders);
compositeSashForm.setLayout(new GridLayout());
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 // 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.setLayoutData(new GridData(GridData.FILL_BOTH));
tableProviders.addSelectionListener(new SelectionAdapter() { tableProviders.addSelectionListener(new SelectionAdapter() {
@Override @Override
@ -394,134 +400,140 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
tableProvidersViewer.addCheckStateListener(new ICheckStateListener() { tableProvidersViewer.addCheckStateListener(new ICheckStateListener() {
@Override @Override
public void checkStateChanged(CheckStateChangedEvent event) { public void checkStateChanged(CheckStateChangedEvent event) {
// TODO: clean-up - too many manipulations in this method ILanguageSettingsProvider checkedProvider = (ILanguageSettingsProvider) event.getElement();
String id = checkedProvider.getId();
ILanguageSettingsProvider provider = (ILanguageSettingsProvider) event.getElement(); ILanguageSettingsProvider newProvider = null;
saveCheckedProviders(provider);
int pos = presentedProviders.indexOf(provider);
tableProviders.setSelection(pos);
if (event.getChecked()) { if (event.getChecked()) {
if (LanguageSettingsManager.isWorkspaceProvider(provider)) { if (LanguageSettingsManager.isWorkspaceProvider(checkedProvider) && !LanguageSettingsManager.isPreferShared(id)) {
if (!LanguageSettingsManager.isPreferShared(provider.getId())) { ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(checkedProvider);
// Switch to non-shared provider instance
ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider);
if (rawProvider instanceof ILanguageSettingsEditableProvider) { if (rawProvider instanceof ILanguageSettingsEditableProvider) {
ILanguageSettingsEditableProvider newProvider = LanguageSettingsManager.getProviderCopy((ILanguageSettingsEditableProvider) rawProvider, false); newProvider = LanguageSettingsManager.getProviderCopy((ILanguageSettingsEditableProvider) rawProvider, false);
if (newProvider != null) {
provider = newProvider;
replaceSelectedProvider(provider);
ICConfigurationDescription cfgDescription = getConfigurationDescription();
initializeOptionsPage(provider, cfgDescription);
}
}
} }
} }
} else { } else {
if (!LanguageSettingsManager.isWorkspaceProvider(provider)) { if (!LanguageSettingsManager.isWorkspaceProvider(checkedProvider)) {
provider = LanguageSettingsManager.getWorkspaceProvider(provider.getId()); newProvider = LanguageSettingsManager.getWorkspaceProvider(id);
replaceSelectedProvider(provider);
ICConfigurationDescription cfgDescription = getConfigurationDescription();
initializeOptionsPage(provider, cfgDescription);
} }
} }
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(); displaySelectedOptionPage();
tableProvidersViewer.update(provider, null);
updateButtons(); updateButtons();
}}); }
});
createOptionsControl();
sashFormConfigure.setWeights(DEFAULT_CONFIGURE_SASH_WEIGHTS);
enableSashForm(sashFormConfigure, true);
} }
private Link createLinkToPreferences(final Composite parent, int span) { private void createLinkToPreferences(final Composite parent, int span) {
Link link = new Link(parent, SWT.NONE); linkToWorkspacePreferences = new Link(parent, SWT.NONE);
linkToWorkspacePreferences.setText("Options of global providers below can be changed in <a href=\"workspace\">Workspace Settings</a>, Discovery Tab.");
GridData gd = new GridData(); GridData gd = new GridData();
gd.horizontalSpan = span; gd.horizontalSpan = span;
link.setLayoutData(gd); linkToWorkspacePreferences.setLayoutData(gd);
link.addListener(SWT.Selection, new Listener() { linkToWorkspacePreferences.addListener(SWT.Selection, new Listener() {
@Override @Override
public void handleEvent(Event event) { public void handleEvent(Event event) {
// Use event.text to tell which link was used // Use event.text to tell which link was used
PreferencesUtil.createPreferenceDialogOn(parent.getShell(), WORKSPACE_PREFERENCE_PAGE, null, null).open(); PreferencesUtil.createPreferenceDialogOn(parent.getShell(), WORKSPACE_PREFERENCE_PAGE, null, null).open();
} }
}); });
return link;
} }
// Called from globalProviderCheckBox listener // Called from globalProviderCheckBox listener
private ILanguageSettingsProvider toggleGlobalProvider(ILanguageSettingsProvider oldProvider, boolean toGlobal) { private ILanguageSettingsProvider toggleGlobalProvider(ILanguageSettingsProvider provider, boolean toGlobal) {
ILanguageSettingsProvider newProvider = null; ILanguageSettingsProvider newProvider = null;
String id = oldProvider.getId(); String id = provider.getId();
if (toGlobal) { if (toGlobal) {
newProvider = LanguageSettingsManager.getWorkspaceProvider(id); newProvider = LanguageSettingsManager.getWorkspaceProvider(id);
} else { } else {
// Local provider instance chosen // Toggle to configuration-owned provider
try { try {
ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(oldProvider); ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider);
if (rawProvider instanceof ILanguageSettingsEditableProvider) { if (rawProvider instanceof ILanguageSettingsEditableProvider) {
newProvider = ((ILanguageSettingsEditableProvider) rawProvider).cloneShallow(); newProvider = ((ILanguageSettingsEditableProvider) rawProvider).cloneShallow();
} }
} catch (CloneNotSupportedException e) { } 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); replaceSelectedProvider(newProvider);
initializeOptionsPage(newProvider);
ICConfigurationDescription cfgDescription = getConfigurationDescription();
initializeOptionsPage(newProvider, cfgDescription);
displaySelectedOptionPage(); displaySelectedOptionPage();
updateButtons();
} else { } else {
newProvider = oldProvider; newProvider = provider;
} }
return newProvider; return newProvider;
} }
private void replaceSelectedProvider(ILanguageSettingsProvider newProvider) { /**
int pos = tableProviders.getSelectionIndex(); * Refresh provider item in the table and update buttons.
presentedProviders.set(pos, newProvider); * This method is intended for use by an Options Page of the provider.
tableProvidersViewer.setInput(presentedProviders); *
tableProviders.setSelection(pos); * @param provider - provider item in the table to refresh.
*/
ICConfigurationDescription cfgDescription = null;
if (!page.isForPrefs()) {
cfgDescription = getConfigurationDescription();
if (cfgDescription instanceof ILanguageSettingsProvidersKeeper) {
List<ILanguageSettingsProvider> cfgProviders = new ArrayList<ILanguageSettingsProvider>(((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);
}
public void refreshItem(ILanguageSettingsProvider provider) { public void refreshItem(ILanguageSettingsProvider provider) {
tableProvidersViewer.refresh(provider); tableProvidersViewer.refresh(provider);
updateButtons(); updateButtons();
} }
private void createOptionsControl() { private void createOptionsPane(Composite parent) {
groupOptionsPage = new Group(sashFormConfigure, SWT.SHADOW_ETCHED_IN); groupOptionsPage = new Group(parent, SWT.SHADOW_ETCHED_IN);
groupOptionsPage.setText("Language Settings Provider Options"); groupOptionsPage.setText("Language Settings Provider Options");
groupOptionsPage.setLayout(new GridLayout(2, false)); groupOptionsPage.setLayout(new GridLayout(2, false));
if (!page.isForPrefs()) { if (!page.isForPrefs()) {
if (sharedProviderCheckBox==null) { createSharedProviderCheckBox(groupOptionsPage);
sharedProviderCheckBox = new Button(groupOptionsPage, SWT.CHECK); createProjectStorageCheckBox(groupOptionsPage);
createLinkToPreferences(groupOptionsPage, 2);
}
compositeOptionsPage = new Composite(groupOptionsPage, SWT.NONE);
compositeOptionsPage.setLayout(new TabFolderLayout());
}
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.setText("Share setting entries between projects (global provider)");
sharedProviderCheckBox.addSelectionListener(new SelectionAdapter() { sharedProviderCheckBox.addSelectionListener(new SelectionAdapter() {
@Override @Override
@ -529,6 +541,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
boolean isGlobal = sharedProviderCheckBox.getSelection(); boolean isGlobal = sharedProviderCheckBox.getSelection();
ILanguageSettingsProvider provider = getSelectedProvider(); ILanguageSettingsProvider provider = getSelectedProvider();
if (isGlobal != LanguageSettingsManager.isWorkspaceProvider(provider)) { if (isGlobal != LanguageSettingsManager.isWorkspaceProvider(provider)) {
// globality changed
provider = toggleGlobalProvider(provider, isGlobal); provider = toggleGlobalProvider(provider, isGlobal);
} }
projectStorageCheckBox.setSelection(provider instanceof LanguageSettingsSerializableProvider projectStorageCheckBox.setSelection(provider instanceof LanguageSettingsSerializableProvider
@ -539,49 +552,11 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
public void widgetDefaultSelected(SelectionEvent e) { public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(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);
}
}
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 enableControls(boolean enable) { private void enableControls(boolean enable) {
sashFormConfigure.setEnabled(enable); sashFormProviders.setEnabled(enable);
tableProviders.setEnabled(enable); tableProviders.setEnabled(enable);
compositeOptionsPage.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() { private void updateProvidersTable() {
ILanguageSettingsProvider selectedProvider = getSelectedProvider(); 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 // update viewer if the list of providers changed
int pos = tableProviders.getSelectionIndex(); int pos = tableProviders.getSelectionIndex();
@ -615,8 +590,8 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
tableProvidersViewer.setCheckedElements(cfgProviders.toArray(new ILanguageSettingsProvider[0])); tableProvidersViewer.setCheckedElements(cfgProviders.toArray(new ILanguageSettingsProvider[0]));
} }
if (selectedId!=null) { if (selectedId != null) {
for (int i=0; i<presentedProviders.size(); i++) { for (int i = 0; i < presentedProviders.size(); i++) {
if (selectedId.equals(presentedProviders.get(i).getId())) { if (selectedId.equals(presentedProviders.get(i).getId())) {
tableProviders.setSelection(i); tableProviders.setSelection(i);
break; break;
@ -626,7 +601,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
optionsPageMap.clear(); optionsPageMap.clear();
for (ILanguageSettingsProvider provider : presentedProviders) { for (ILanguageSettingsProvider provider : presentedProviders) {
initializeOptionsPage(provider, cfgDescription); initializeOptionsPage(provider);
} }
displaySelectedOptionPage(); displaySelectedOptionPage();
@ -663,9 +638,18 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
// renders better when using temporary // renders better when using temporary
presentedProviders = providers; presentedProviders = providers;
int pos = tableProviders.getSelectionIndex(); ILanguageSettingsProvider selectedProvider = getSelectedProvider();
String selectedId = selectedProvider!=null ? selectedProvider.getId() : null;
tableProvidersViewer.setInput(presentedProviders); tableProvidersViewer.setInput(presentedProviders);
tableProviders.setSelection(pos); if (selectedId!=null) {
for (int i=0; i<presentedProviders.size(); i++) {
if (selectedId.equals(presentedProviders.get(i).getId())) {
tableProviders.setSelection(i);
break;
}
}
}
} }
private void sortByName(List<ILanguageSettingsProvider> providers) { private void sortByName(List<ILanguageSettingsProvider> 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; ICOptionPage optionsPage = null;
if (provider!=null) { if (provider != null) {
ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider);
if (rawProvider!=null) { if (rawProvider != null) {
optionsPage = LanguageSettingsProviderAssociationManager.createOptionsPage(rawProvider); optionsPage = LanguageSettingsProviderAssociationManager.createOptionsPage(rawProvider);
} }
@ -704,17 +688,17 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
return optionsPage; return optionsPage;
} }
private void initializeOptionsPage(ILanguageSettingsProvider provider, ICConfigurationDescription cfgDescription) { private void initializeOptionsPage(ILanguageSettingsProvider provider) {
ICOptionPage optionsPage = createOptionsPage(provider, cfgDescription); ICOptionPage optionsPage = createOptionsPage(provider);
if (optionsPage!=null) { if (optionsPage != null) {
ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider);
boolean isEditableForProject = page.isForProject() && provider instanceof ILanguageSettingsEditableProvider; boolean isEditableForProject = page.isForProject() && provider instanceof ILanguageSettingsEditableProvider;
boolean isEditableForPrefs = page.isForPrefs() && rawProvider instanceof ILanguageSettingsEditableProvider; boolean isEditableForPrefs = page.isForPrefs() && rawProvider instanceof ILanguageSettingsEditableProvider;
boolean isEditable = isEditableForProject || isEditableForPrefs; boolean isEditable = isEditableForProject || isEditableForPrefs;
compositeOptionsPage.setEnabled(isEditable); compositeOptionsPage.setEnabled(isEditable);
String id = (provider!=null) ? provider.getId() : null; String id = (provider != null) ? provider.getId() : null;
optionsPageMap.put(id, optionsPage); optionsPageMap.put(id, optionsPage);
optionsPage.setContainer(page); optionsPage.setContainer(page);
optionsPage.createControl(compositeOptionsPage); optionsPage.createControl(compositeOptionsPage);
@ -729,43 +713,38 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
} }
ILanguageSettingsProvider provider = getSelectedProvider(); ILanguageSettingsProvider provider = getSelectedProvider();
String id = (provider!=null) ? provider.getId() : null; String id = (provider != null) ? provider.getId() : null;
ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider);
currentOptionsPage = optionsPageMap.get(id); currentOptionsPage = optionsPageMap.get(id);
if (!page.isForPrefs() ) {
boolean isChecked = tableProvidersViewer.getChecked(provider); boolean isChecked = tableProvidersViewer.getChecked(provider);
if (!page.isForPrefs()) {
boolean isShared = isPresentedAsShared(provider); boolean isShared = isPresentedAsShared(provider);
boolean isRawProviderEditable = rawProvider instanceof ILanguageSettingsEditableProvider; boolean isRawProviderEditable = rawProvider instanceof ILanguageSettingsEditableProvider;
sharedProviderCheckBox.setSelection(isShared);
sharedProviderCheckBox.setEnabled(isChecked && isRawProviderEditable);
sharedProviderCheckBox.setVisible(provider != null); sharedProviderCheckBox.setVisible(provider != null);
sharedProviderCheckBox.setEnabled(isChecked && isRawProviderEditable);
sharedProviderCheckBox.setSelection(isShared);
projectStorageCheckBox.setEnabled(!isShared && isChecked);
projectStorageCheckBox.setVisible(rawProvider instanceof LanguageSettingsSerializableProvider); projectStorageCheckBox.setVisible(rawProvider instanceof LanguageSettingsSerializableProvider);
projectStorageCheckBox.setEnabled(isChecked && !isShared);
projectStorageCheckBox.setSelection(provider instanceof LanguageSettingsSerializableProvider projectStorageCheckBox.setSelection(provider instanceof LanguageSettingsSerializableProvider
&& LanguageSettingsManager.isStoringEntriesInProjectArea((LanguageSettingsSerializableProvider) provider)); && LanguageSettingsManager.isStoringEntriesInProjectArea((LanguageSettingsSerializableProvider) provider));
boolean needPreferencesLink = isShared && currentOptionsPage != null; linkToWorkspacePreferences.setVisible(isShared && currentOptionsPage != null);
// TODO: message linkToWorkspacePreferences.setEnabled(isChecked);
final String linkMsg = needPreferencesLink ? "Options of global providers below can be changed in <a href=\"workspace\">Workspace Settings</a>, Discovery Tab." : "";
linkWorkspacePreferences.setText(linkMsg);
linkWorkspacePreferences.pack();
linkWorkspacePreferences.setEnabled(isChecked);
} }
if (currentOptionsPage != null) { if (currentOptionsPage != null) {
currentOptionsPage.setVisible(true);
boolean isEditableForProject = page.isForProject() && provider instanceof ILanguageSettingsEditableProvider; boolean isEditableForProject = page.isForProject() && provider instanceof ILanguageSettingsEditableProvider;
boolean isEditableForPrefs = page.isForPrefs() && rawProvider instanceof ILanguageSettingsEditableProvider; boolean isEditableForPrefs = page.isForPrefs() && rawProvider instanceof ILanguageSettingsEditableProvider;
boolean isEditable = isEditableForProject || isEditableForPrefs; boolean isEditable = isEditableForProject || isEditableForPrefs;
currentOptionsPage.getControl().setEnabled(isEditable); currentOptionsPage.getControl().setEnabled(isEditable);
currentOptionsPage.setVisible(true);
compositeOptionsPage.setEnabled(isEditable); 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<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>(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() { private void disableButtons() {
// buttonSetEnabled(BUTTON_RENAME, false);
// buttonSetEnabled(BUTTON_RUN, false);
buttonSetEnabled(BUTTON_CLEAR, false); buttonSetEnabled(BUTTON_CLEAR, false);
buttonSetEnabled(BUTTON_RESET, false); buttonSetEnabled(BUTTON_RESET, false);
buttonSetEnabled(BUTTON_MOVE_UP, false); buttonSetEnabled(BUTTON_MOVE_UP, false);
buttonSetEnabled(BUTTON_MOVE_DOWN, false); buttonSetEnabled(BUTTON_MOVE_DOWN, false);
// buttonSetEnabled(BUTTON_CONFIGURE, false);
} }
/** /**
@ -829,7 +781,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
int pos = tableProviders.getSelectionIndex(); int pos = tableProviders.getSelectionIndex();
int count = tableProviders.getItemCount(); int count = tableProviders.getItemCount();
int last = count - 1; int last = count - 1;
boolean isRangeOk = pos >= 0 && pos <= last; boolean isRangeOk = (pos >= 0 && pos <= last);
ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider);
boolean isAllowedClearing = rawProvider instanceof ILanguageSettingsEditableProvider && rawProvider instanceof LanguageSettingsSerializableProvider boolean isAllowedClearing = rawProvider instanceof ILanguageSettingsEditableProvider && rawProvider instanceof LanguageSettingsSerializableProvider
@ -840,32 +792,22 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
canClear = canClear && !((LanguageSettingsSerializableProvider)rawProvider).isEmpty(); canClear = canClear && !((LanguageSettingsSerializableProvider)rawProvider).isEmpty();
} }
boolean canReset = (canForProject && isReconfiguredForProject(provider)) || boolean canResetForProject = canForProject && isReconfiguredForProject(provider);
(canForWorkspace && boolean canResetForWorkspace = canForWorkspace &&
(rawProvider instanceof ILanguageSettingsEditableProvider (rawProvider instanceof ILanguageSettingsEditableProvider
&& !LanguageSettingsManager.isEqualExtensionProvider(rawProvider, false)) && !LanguageSettingsManager.isEqualExtensionProvider(rawProvider, false))
&& ( LanguageSettingsManager.getExtensionProviderIds().contains(rawProvider.getId()) ) && ( LanguageSettingsManager.getExtensionProviderIds().contains(rawProvider.getId()) );
); boolean canReset = canResetForProject || canResetForWorkspace;
boolean canMoveUp = canForProject && isRangeOk && pos!=0; boolean canMoveUp = canForProject && isRangeOk && pos != 0;
boolean canMoveDown = canForProject && isRangeOk && pos!=last; boolean canMoveDown = canForProject && isRangeOk && pos != last;
// buttonSetEnabled(BUTTON_RENAME, false);
// buttonSetEnabled(BUTTON_RUN, false);
buttonSetEnabled(BUTTON_CLEAR, canClear); buttonSetEnabled(BUTTON_CLEAR, canClear);
buttonSetEnabled(BUTTON_RESET, canReset); buttonSetEnabled(BUTTON_RESET, canReset);
buttonSetEnabled(BUTTON_MOVE_UP, canMoveUp); buttonSetEnabled(BUTTON_MOVE_UP, canMoveUp);
buttonSetEnabled(BUTTON_MOVE_DOWN, canMoveDown); 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 * Handle buttons
*/ */
@ -874,12 +816,6 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
ILanguageSettingsProvider selectedProvider = getSelectedProvider(); ILanguageSettingsProvider selectedProvider = getSelectedProvider();
switch (buttonIndex) { switch (buttonIndex) {
// case BUTTON_RENAME:
// performRename(selectedProvider);
// break;
// case BUTTON_RUN:
// performRun(selectedProvider);
// break;
case BUTTON_CLEAR: case BUTTON_CLEAR:
performClear(selectedProvider); performClear(selectedProvider);
break; break;
@ -909,8 +845,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
ILanguageSettingsEditableProvider newProvider = LanguageSettingsManager.getProviderCopy((ILanguageSettingsEditableProvider) rawProvider, false); ILanguageSettingsEditableProvider newProvider = LanguageSettingsManager.getProviderCopy((ILanguageSettingsEditableProvider) rawProvider, false);
if (newProvider != null) { if (newProvider != null) {
replaceSelectedProvider(newProvider); replaceSelectedProvider(newProvider);
ICConfigurationDescription cfgDescription = getConfigurationDescription(); initializeOptionsPage(newProvider);
initializeOptionsPage(newProvider, cfgDescription);
displaySelectedOptionPage(); displaySelectedOptionPage();
} }
} }
@ -920,55 +855,61 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
private void performReset(ILanguageSettingsProvider selectedProvider) { private void performReset(ILanguageSettingsProvider selectedProvider) {
String id = selectedProvider.getId(); String id = selectedProvider.getId();
ILanguageSettingsProvider newProvider = null;
ICConfigurationDescription cfgDescription = getConfigurationDescription();
ILanguageSettingsProvider newProvider = null;
if (page.isForPrefs()) { if (page.isForPrefs()) {
newProvider = LanguageSettingsManager.getExtensionProviderCopy(id, true); newProvider = LanguageSettingsManager.getExtensionProviderCopy(id, true);
if (newProvider == null) { 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 { } else {
List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders(); ICConfigurationDescription cfgDescription = getConfigurationDescription();
String[] defaultIds = ((ILanguageSettingsProvidersKeeper) cfgDescription).getDefaultLanguageSettingsProvidersIds(); String[] defaultIds = ((ILanguageSettingsProvidersKeeper) cfgDescription).getDefaultLanguageSettingsProvidersIds();
boolean isDefault = Arrays.asList(defaultIds).contains(id); boolean isDefault = Arrays.asList(defaultIds).contains(id);
if (isDefault && !LanguageSettingsManager.isPreferShared(id)) {
if (isDefault) {
if (!LanguageSettingsManager.isPreferShared(id)) {
newProvider = LanguageSettingsManager.getExtensionProviderCopy(id, true); newProvider = LanguageSettingsManager.getExtensionProviderCopy(id, true);
}
if (newProvider == null) { 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));
if (providers.contains(selectedProvider)) { fStatusLine.setErrorStatus(status);
// replace provider in the cfg list CUIPlugin.log(status);
replaceSelectedProvider(newProvider);
} else {
// add provider to the cfg list
replaceSelectedProvider(newProvider);
tableProvidersViewer.setChecked(newProvider, true);
saveCheckedProviders(newProvider);
updateProvidersTable();
refreshItem(newProvider);
} }
} else { } else {
if (providers.contains(selectedProvider)) {
// remove provider from the cfg list
newProvider = LanguageSettingsManager.getWorkspaceProvider(id); newProvider = LanguageSettingsManager.getWorkspaceProvider(id);
replaceSelectedProvider(newProvider);
tableProvidersViewer.setChecked(newProvider, false);
saveCheckedProviders(newProvider);
updateProvidersTable();
refreshItem(newProvider);
}
} }
tableProvidersViewer.setChecked(selectedProvider, isDefault);
} }
initializeOptionsPage(newProvider, cfgDescription); if (newProvider != null) {
replaceSelectedProvider(newProvider);
initializeOptionsPage(newProvider);
displaySelectedOptionPage(); displaySelectedOptionPage();
updateButtons(); 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) { private boolean isWorkingCopy(ILanguageSettingsProvider provider) {
boolean isWorkingCopy = false; boolean isWorkingCopy = false;
@ -1002,14 +943,18 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
private void moveProvider(int oldPos, int newPos) { private void moveProvider(int oldPos, int newPos) {
Collections.swap(presentedProviders, oldPos, newPos); Collections.swap(presentedProviders, oldPos, newPos);
tableProvidersViewer.refresh();
tableProviders.showSelection();
updateProvidersTable(); saveCheckedProviders();
tableProviders.setSelection(newPos);
saveCheckedProviders(null);
updateButtons(); updateButtons();
} }
@SuppressWarnings({ "unchecked", "rawtypes" })
private List<ILanguageSettingsProvider> getCheckedProviders() {
return (List)Arrays.asList(tableProvidersViewer.getCheckedElements());
}
/** /**
* Called when configuration changed * 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 // 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 // and re-initializing could overwrite modified providers in case of switching tabs or pages
if (!page.isForPrefs() || presentedProviders==null) { if (!page.isForPrefs() || presentedProviders == null) {
initializeProviders(); initializeProviders();
} }
updateProvidersTable(); updateProvidersTable();
@ -1101,17 +1046,7 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
@Override @Override
protected void performApply(ICResourceDescription srcRcDescription, ICResourceDescription destRcDescription) { protected void performApply(ICResourceDescription srcRcDescription, ICResourceDescription destRcDescription) {
// informOptionPages(true); if (!page.isForPrefs()) {
if (page.isForPrefs()) {
try {
LanguageSettingsManager.setWorkspaceProviders(presentedProviders);
} catch (CoreException e) {
CUIPlugin.log("Error serializing workspace language settings providers", e);
}
} else {
IResource rc = getResource();
ICConfigurationDescription sd = srcRcDescription.getConfiguration(); ICConfigurationDescription sd = srcRcDescription.getConfiguration();
ICConfigurationDescription dd = destRcDescription.getConfiguration(); ICConfigurationDescription dd = destRcDescription.getConfiguration();
if (sd instanceof ILanguageSettingsProvidersKeeper && dd instanceof ILanguageSettingsProvidersKeeper) { if (sd instanceof ILanguageSettingsProvidersKeeper && dd instanceof ILanguageSettingsProvidersKeeper) {
@ -1121,26 +1056,13 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
} }
performOK(); performOK();
trackInitialSettings();
updateData(getResDesc());
} }
@Override @Override
protected void performOK() { 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<ILanguageSettingsProvider> destProviders = new ArrayList<ILanguageSettingsProvider>();
List<ILanguageSettingsProvider> providers = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
for (ILanguageSettingsProvider pro : providers) {
// TODO: clone
destProviders.add(pro);
}
((ILanguageSettingsProvidersKeeper) cfgDescription).setLanguageSettingProviders(destProviders);
}
}
// Build Settings page // Build Settings page
if (page.isForPrefs()) { if (page.isForPrefs()) {
try { try {
@ -1151,10 +1073,11 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
initializeProviders(); initializeProviders();
} }
if (page.isForProject() && enableProvidersCheckBox!=null) { if (page.isForProject() && enableProvidersCheckBox != null) {
boolean enabled = enableProvidersCheckBox.getSelection(); boolean enabled = enableProvidersCheckBox.getSelection();
if (masterPropertyPage!=null) if (masterPropertyPage != null) {
enabled = masterPropertyPage.isLanguageSettingsProvidersEnabled(); enabled = masterPropertyPage.isLanguageSettingsProvidersEnabled();
}
ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(page.getProject(), enabled); ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(page.getProject(), enabled);
enableProvidersCheckBox.setSelection(enabled); enableProvidersCheckBox.setSelection(enabled);
} }
@ -1167,9 +1090,6 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
CUIPlugin.log("Error applying options page", e); CUIPlugin.log("Error applying options page", e);
} }
} }
trackInitialSettings();
updateData(getResDesc());
} }
@Override @Override
@ -1180,16 +1100,6 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
return page.isForPrefs() || page.isForProject(); return page.isForPrefs() || page.isForProject();
} }
private ILanguageSettingsProvider findRawProvider(String id, List<ILanguageSettingsProvider> providers) {
for (ILanguageSettingsProvider provider : providers) {
if (provider.getId().equals(id)) {
provider = LanguageSettingsManager.getRawProvider(provider);
return provider;
}
}
return null;
}
private ILanguageSettingsProvider findProvider(String id, List<ILanguageSettingsProvider> providers) { private ILanguageSettingsProvider findProvider(String id, List<ILanguageSettingsProvider> providers) {
for (ILanguageSettingsProvider provider : providers) { for (ILanguageSettingsProvider provider : providers) {
if (provider.getId().equals(id)) { if (provider.getId().equals(id)) {
@ -1203,30 +1113,4 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
return findProvider(id, presentedProviders); return findProvider(id, presentedProviders);
} }
private int getProviderIndex(String id, List<ILanguageSettingsProvider> providers) {
int pos = 0;
for (ILanguageSettingsProvider p : providers) {
if (p.getId().equals(id))
return pos;
pos++;
}
return -1;
}
// private void informOptionPages(boolean apply) {
// Collection<ICOptionPage> 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);
// }
// }
// }
//}
} }

View file

@ -195,7 +195,6 @@ public class Messages extends NLS {
public static String LanguageSettingsProviderTab_Configure; public static String LanguageSettingsProviderTab_Configure;
public static String LanguageSettingsProviderTab_ErrorPerformingDefaults; public static String LanguageSettingsProviderTab_ErrorPerformingDefaults;
public static String LanguageSettingsProviderTab_ProviderOptions; public static String LanguageSettingsProviderTab_ProviderOptions;
// public static String LanguageSettingsProviderTab_Run;
public static String LanguageSettingsProviderTab_SettingEntries; public static String LanguageSettingsProviderTab_SettingEntries;
public static String LanguageSettingsProviderTab_SettingEntriesTooltip; public static String LanguageSettingsProviderTab_SettingEntriesTooltip;
public static String LanguageSettingsProviderTab_ShowEntries; public static String LanguageSettingsProviderTab_ShowEntries;

View file

@ -174,7 +174,6 @@ LanguageSettingsProviderTab_Clear=Clear Entries
LanguageSettingsProviderTab_Configure=Configure LanguageSettingsProviderTab_Configure=Configure
LanguageSettingsProviderTab_ErrorPerformingDefaults=Error restoring defaults for language settings providers LanguageSettingsProviderTab_ErrorPerformingDefaults=Error restoring defaults for language settings providers
LanguageSettingsProviderTab_ProviderOptions=Language Settings Provider Options LanguageSettingsProviderTab_ProviderOptions=Language Settings Provider Options
#LanguageSettingsProviderTab_Run=Run
LanguageSettingsProviderTab_SettingEntries=Setting Entries LanguageSettingsProviderTab_SettingEntries=Setting Entries
LanguageSettingsProviderTab_SettingEntriesTooltip=Setting Entries LanguageSettingsProviderTab_SettingEntriesTooltip=Setting Entries
LanguageSettingsProviderTab_ShowEntries=Show Entries LanguageSettingsProviderTab_ShowEntries=Show Entries