/******************************************************************************* * 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.URL; import org.eclipse.jface.viewers.IDecoration; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.graphics.Image; import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvider; import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager; import org.eclipse.cdt.ui.CDTSharedImages; import org.eclipse.cdt.internal.ui.newui.Messages; /** * Label provider for language settings providers. * */ public class LanguageSettingsProvidersLabelProvider extends LabelProvider { private static final String TEST_PLUGIN_ID_PATTERN = "org.eclipse.cdt.*.tests.*"; //$NON-NLS-1$ private static final String OOPS = "OOPS"; //$NON-NLS-1$ /** * Returns base image key (for image without overlay). */ protected String getBaseKey(ILanguageSettingsProvider provider) { String imageKey = null; // try id-association String id = provider.getId(); URL url = LanguageSettingsProviderAssociationManager.getImageUrl(id); // try class-association if (url == null) { ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider); if (rawProvider != null) { url = LanguageSettingsProviderAssociationManager.getImage(rawProvider.getClass()); } } if (url != null) { imageKey = url.toString(); } if (imageKey == null) { if (id.matches(TEST_PLUGIN_ID_PATTERN)) { imageKey = CDTSharedImages.IMG_OBJS_CDT_TESTING; } else { imageKey = CDTSharedImages.IMG_OBJS_EXTENSION; } } return imageKey; } /** * Returns keys for image overlays. Returning {@code null} is not allowed. */ protected String[] getOverlayKeys(ILanguageSettingsProvider provider) { String[] overlayKeys = new String[5]; if (provider.getName() == null) { overlayKeys[IDecoration.BOTTOM_LEFT] = CDTSharedImages.IMG_OVR_ERROR; } return overlayKeys; } @Override public Image getImage(Object element) { if (element instanceof ILanguageSettingsProvider) { ILanguageSettingsProvider provider = (ILanguageSettingsProvider)element; String imageKey = getBaseKey(provider); String[] overlayKeys = getOverlayKeys(provider); return CDTSharedImages.getImageOverlaid(imageKey, overlayKeys); } return null; } @Override public String getText(Object element) { if (element instanceof ILanguageSettingsProvider) { ILanguageSettingsProvider provider = (ILanguageSettingsProvider) element; String name = provider.getName(); if (name != null) { if (LanguageSettingsManager.isWorkspaceProvider(provider)) { name = name + Messages.LanguageSettingsProvidersLabelProvider_TextDecorator_Shared; } return name; } return NLS.bind(Messages.GeneralMessages_NonAccessibleID, provider.getId()); } return OOPS; } }