/*******************************************************************************
* Copyright (c) 2015 Bruno Medeiros and other Contributors.
* 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:
* Bruno Medeiros - initial API and implementation
*******************************************************************************/
package melnorme.lang.ide.ui.views;
import melnorme.lang.ide.ui.LangImageProvider;
import melnorme.lang.ide.ui.LangImages;
import melnorme.lang.ide.ui.LangUIPlugin_Actual;
import melnorme.lang.tooling.ElementAttributes;
import melnorme.lang.tooling.structure.StructureElement;
import melnorme.util.swt.jface.resources.LangElementImageDescriptor;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.swt.graphics.Image;
public abstract class StructureElementLabelProvider extends AbstractLangLabelProvider {
public static DelegatingStyledCellLabelProvider createLangLabelProvider() {
StructureElementLabelProvider labelProvider = LangUIPlugin_Actual.getStructureElementLabelProvider();
// We wrap the base LabelProvider with a DelegatingStyledCellLabelProvider because for some reason
// that prevents flicker problems when changing selection in Windows classic themes
// Might not be necessary in the future.
return new DelegatingStyledCellLabelProvider(labelProvider);
}
/* ----------------- ----------------- */
@Override
public StyledString getStyledText(Object element) {
if(element instanceof StructureElement) {
StructureElement structureElement = (StructureElement) element;
return getStyledText(structureElement);
}
return null;
}
protected StyledString getStyledText(StructureElement structureElement) {
StyledString styledString = new StyledString(structureElement.getName());
if(structureElement.getType() != null) {
String typeSuffix = getTypeDescriptionPrefix(structureElement) + structureElement.getType();
styledString.append(new StyledString(typeSuffix, StyledString.DECORATIONS_STYLER));
}
return styledString;
}
@SuppressWarnings("unused")
protected String getTypeDescriptionPrefix(StructureElement structureElement) {
return " : ";
}
@Override
public Image getImage(Object element) {
if(element instanceof StructureElement) {
StructureElement structureElement = (StructureElement) element;
return getImage(structureElement);
}
return null;
}
public Image getImage(StructureElement element) {
ImageDescriptor imageDescriptor = getImageDescriptor(element);
return LangImages.getImageDescriptorRegistry().get(imageDescriptor);
}
protected ImageDescriptor getImageDescriptor(StructureElement element) {
ImageDescriptor baseImageDescriptor = getBaseImageDescriptor(element);
return getElementImageDescriptor(baseImageDescriptor, element.getAttributes());
}
protected ImageDescriptor getBaseImageDescriptor(StructureElement structureElement) {
return structureElement.getKind().switchOnKind(new LangImageProvider()).getDescriptor();
}
public LangElementImageDescriptor getElementImageDescriptor(ImageDescriptor baseImage,
ElementAttributes elementAttributes) {
return new LangElementImageDescriptor(baseImage, elementAttributes);
}
}