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:
parent
cfa3895aa3
commit
dd567beae7
6 changed files with 80 additions and 33 deletions
|
@ -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);
|
||||
}
|
||||
|
|
BIN
core/org.eclipse.cdt.ui/icons/ovr16/person_ovr.gif
Normal file
BIN
core/org.eclipse.cdt.ui/icons/ovr16/person_ovr.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 165 B |
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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,24 +207,32 @@ 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 (page.isForPrefs()) {
|
||||
ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider);
|
||||
if (rawProvider instanceof ILanguageSettingsEditableProvider && !LanguageSettingsManager.isEqualExtensionProvider(rawProvider, false)) {
|
||||
} 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;
|
||||
}
|
||||
if (isWorkingCopy(provider)) {
|
||||
ILanguageSettingsProvider rawInitialProvider = LanguageSettingsManager.getRawProvider(LanguageSettingsManager.getWorkspaceProvider(provider.getId()));
|
||||
if (!provider.equals(rawInitialProvider)) {
|
||||
overlayKeys[IDecoration.TOP_RIGHT] = CDTSharedImages.IMG_OVR_EDITED;
|
||||
} 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue