1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Presentation of user-defined and ill-defined providers

This commit is contained in:
Andrew Gvozdev 2012-01-24 14:29:11 -05:00
parent cfa3895aa3
commit dd567beae7
6 changed files with 80 additions and 33 deletions

View file

@ -100,6 +100,28 @@ public class LanguageSettingsProvidersSerializer {
private static ListenerList fLanguageSettingsChangeListeners = new ListenerList(ListenerList.IDENTITY);
private static ILock serializingLock = Job.getJobManager().newLock();
/**
* Dummy class to represent ill-defined provider.
*/
private static class NotAccessibleProvider implements ILanguageSettingsProvider {
private final String id;
private NotAccessibleProvider(String providerId) {
this.id = providerId;
}
@Override
public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) {
return null;
}
@Override
public String getName() {
return null;
}
@Override
public String getId() {
return id;
}
}
/**
* language settings provider listener-cfgDescription association
*/
@ -518,7 +540,7 @@ public class LanguageSettingsProvidersSerializer {
/**
* Load language settings for workspace.
*/
public static void loadLanguageSettingsWorkspace() throws CoreException {
public static void loadLanguageSettingsWorkspace() {
List <ILanguageSettingsProvider> providers = null;
URI uriStoreWsp = getStoreInWorkspaceArea(STORAGE_WORKSPACE_LANGUAGE_SETTINGS);
@ -542,7 +564,7 @@ public class LanguageSettingsProvidersSerializer {
for (int i = 0; i < providerNodes.getLength(); i++) {
Node providerNode = providerNodes.item(i);
String providerId = XmlUtil.determineAttributeValue(providerNode, ATTR_ID);
final String providerId = XmlUtil.determineAttributeValue(providerNode, ATTR_ID);
if (userDefinedProvidersIds.contains(providerId)) {
String msg = "Ignored an attempt to persist duplicate language settings provider, id=" + providerId; //$NON-NLS-1$
CCorePlugin.log(new Status(IStatus.WARNING, CCorePlugin.PLUGIN_ID, msg, new Exception()));
@ -550,10 +572,16 @@ public class LanguageSettingsProvidersSerializer {
}
userDefinedProvidersIds.add(providerId);
ILanguageSettingsProvider provider = loadProvider(providerNode);
if (provider != null) {
providers.add(provider);
ILanguageSettingsProvider provider = null;
try {
provider = loadProvider(providerNode);
} catch (Exception e) {
CCorePlugin.log("Error initializing workspace language settings providers", e); //$NON-NLS-1$
}
if (provider == null) {
provider = new NotAccessibleProvider(providerId);
}
providers.add(provider);
}
}
setWorkspaceProvidersInternal(providers);
@ -838,8 +866,8 @@ public class LanguageSettingsProvidersSerializer {
provider = LanguageSettingsManager.getExtensionProviderCopy(providerId, true);
if (provider == null) {
String msg = "Internal Error trying to copy extension provider id=" + providerId; //$NON-NLS-1$
CCorePlugin.log(new Status(IStatus.WARNING, CCorePlugin.PLUGIN_ID, msg, new Exception(msg)));
String msg = "Internal Error trying to retrieve copy of extension provider id=" + providerId; //$NON-NLS-1$
CCorePlugin.log(new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, msg, new Exception(msg)));
provider = LanguageSettingsManager.getWorkspaceProvider(providerId);
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 B

View file

@ -512,10 +512,10 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
boolean isProviderSelected = !isEntrySelected && (provider!=null);
boolean isAllowedEditing = provider instanceof ILanguageSettingsEditableProvider
&& LanguageSettingsProviderAssociationManager.isToEditEntries(provider);
&& LanguageSettingsProviderAssociationManager.isAllowedToEditEntries(provider);
boolean isAllowedClearing = provider instanceof ILanguageSettingsEditableProvider
&& LanguageSettingsProviderAssociationManager.isToClear(provider);
&& LanguageSettingsProviderAssociationManager.isAllowedToClear(provider);
boolean canAdd = isAllowedEditing;
boolean canEdit = isAllowedEditing && isEntrySelected;
@ -557,7 +557,7 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
if (status==null || status==Status.OK_STATUS) {
ILanguageSettingsProvider provider = getSelectedProvider();
boolean isAllowedEditing = provider instanceof ILanguageSettingsEditableProvider
&& LanguageSettingsProviderAssociationManager.isToEditEntries(provider);
&& LanguageSettingsProviderAssociationManager.isAllowedToEditEntries(provider);
if (!isAllowedEditing) {
String msg = "Setting entries for this provider are supplied by system and are not editable.";
status = new Status(IStatus.INFO, CUIPlugin.PLUGIN_ID, msg);

View file

@ -306,7 +306,7 @@ public class LanguageSettingsProviderAssociationManager {
* @param provider TODO
* @return TODO
*/
public static boolean isToClear(ILanguageSettingsProvider provider) {
public static boolean isAllowedToClear(ILanguageSettingsProvider provider) {
return getBooleanAttribute(provider, ATTR_UI_CLEAR_ENTRIES);
}
@ -315,7 +315,7 @@ public class LanguageSettingsProviderAssociationManager {
* @param provider TODO
* @return TODO
*/
public static boolean isToEditEntries(ILanguageSettingsProvider provider) {
public static boolean isAllowedToEditEntries(ILanguageSettingsProvider provider) {
return getBooleanAttribute(provider, ATTR_UI_EDIT_ENTRIES);
}

View file

@ -19,8 +19,6 @@ import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.Assert;
@ -209,25 +207,33 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
private class ProvidersTableLabelProvider extends LanguageSettingsProvidersLabelProvider {
@Override
protected String[] getOverlayKeys(ILanguageSettingsProvider provider) {
if (provider.getName() == null) {
String[] overlayKeys = new String[5];
overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_ERROR;
return overlayKeys;
}
String[] overlayKeys = super.getOverlayKeys(provider);
if (page.isForProject()) {
if (isReconfiguredForProject(provider)) {
overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_SETTING;
}
if (isEditedForProject(provider)) {
overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_EDITED;
} else if (!LanguageSettingsManager.getExtensionProviderIds().contains(provider.getId())) {
overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_USER;
} else if (isReconfiguredForProject(provider)) {
overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_SETTING;
}
} else if (page.isForPrefs()) {
if (isWorkingCopy(provider) && !provider.equals(LanguageSettingsManager.getRawProvider(LanguageSettingsManager.getWorkspaceProvider(provider.getId())))) {
overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_EDITED;
} else if (!LanguageSettingsManager.getExtensionProviderIds().contains(provider.getId())) {
overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_USER;
} else {
ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider);
if (rawProvider instanceof ILanguageSettingsEditableProvider && !LanguageSettingsManager.isEqualExtensionProvider(rawProvider, false)) {
overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_SETTING;
}
if (isWorkingCopy(provider)) {
ILanguageSettingsProvider rawInitialProvider = LanguageSettingsManager.getRawProvider(LanguageSettingsManager.getWorkspaceProvider(provider.getId()));
if (!provider.equals(rawInitialProvider)) {
overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_EDITED;
}
}
}
@ -633,21 +639,25 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
providers = new ArrayList<ILanguageSettingsProvider>();
}
List<ILanguageSettingsProvider> workspaceProviders = LanguageSettingsManager.getWorkspaceProviders();
List<ILanguageSettingsProvider> allAvailableProvidersSet = LanguageSettingsManager.getWorkspaceProviders();
// ensure sorting by name all unchecked providers
Set<ILanguageSettingsProvider> allAvailableProvidersSet = new TreeSet<ILanguageSettingsProvider>(new Comparator<ILanguageSettingsProvider>() {
Collections.sort(allAvailableProvidersSet, new Comparator<ILanguageSettingsProvider>() {
@Override
public int compare(ILanguageSettingsProvider prov1, ILanguageSettingsProvider prov2) {
Boolean isTest1 = prov1.getId().matches(TEST_PLUGIN_ID_PATTERN);
Boolean isTest2 = prov2.getId().matches(TEST_PLUGIN_ID_PATTERN);
int result = isTest1.compareTo(isTest2);
if (result==0)
result = prov1.getName().compareTo(prov2.getName());
if (result == 0) {
String name1 = prov1.getName();
String name2 = prov2.getName();
if (name1 != null && name2 != null) {
result = name1.compareTo(name2);
}
}
return result;
}
});
allAvailableProvidersSet.addAll(workspaceProviders);
for (ILanguageSettingsProvider provider : allAvailableProvidersSet) {
String id = provider.getId();
@ -809,13 +819,20 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
boolean isRangeOk = pos >= 0 && pos <= last;
ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider);
boolean isAllowedClearing = rawProvider instanceof ILanguageSettingsEditableProvider
&& LanguageSettingsProviderAssociationManager.isToClear(rawProvider);
boolean isAllowedClearing = rawProvider instanceof ILanguageSettingsEditableProvider && rawProvider instanceof LanguageSettingsSerializableProvider
&& LanguageSettingsProviderAssociationManager.isAllowedToClear(rawProvider);
boolean canClear = isAllowedClearing && (canForWorkspace || (canForProject && !LanguageSettingsManager.isWorkspaceProvider(provider)));
if (rawProvider instanceof LanguageSettingsSerializableProvider) {
canClear = canClear && !((LanguageSettingsSerializableProvider)rawProvider).isEmpty();
}
boolean canReset = (canForProject && isReconfiguredForProject(provider)) ||
(canForWorkspace && (rawProvider instanceof ILanguageSettingsEditableProvider && !LanguageSettingsManager.isEqualExtensionProvider(rawProvider, false)));
(canForWorkspace &&
(rawProvider instanceof ILanguageSettingsEditableProvider
&& !LanguageSettingsManager.isEqualExtensionProvider(rawProvider, false))
&& ( LanguageSettingsManager.getExtensionProviderIds().contains(rawProvider.getId()) )
);
boolean canMoveUp = canForProject && isRangeOk && pos!=0;
boolean canMoveDown = canForProject && isRangeOk && pos!=last;

View file

@ -240,6 +240,8 @@ public class CDTSharedImages {
public static final String IMG_OVR_EDITED = "icons/ovr16/edited_ov.gif"; //$NON-NLS-1$
/** @since 5.4 */
public static final String IMG_OVR_EMPTY = "icons/ovr16/empty_ovr.png"; //$NON-NLS-1$
/** @since 5.4 */
public static final String IMG_OVR_USER = "icons/ovr16/person_ovr.gif"; //$NON-NLS-1$
/**
* The method finds URL of the image corresponding to the key which could be project-relative path