/**
* Copyright (c) 2010 committers of YAKINDU 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:
* committers of YAKINDU - initial API and implementation
*
*/
package org.yakindu.sct.ui.editor.propertysheets;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gmf.runtime.diagram.core.util.ViewType;
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
import org.eclipse.gmf.runtime.diagram.ui.l10n.SharedImages;
import org.eclipse.gmf.runtime.emf.type.core.ElementTypeRegistry;
import org.eclipse.gmf.runtime.emf.type.core.IElementType;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.BaseLabelProvider;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.graphics.Image;
import org.yakindu.base.base.NamedElement;
import org.yakindu.sct.ui.editor.DiagramActivator;
/**
*
* @author andreas muelder
*
*/
public class SheetLabelProvider extends BaseLabelProvider implements
ILabelProvider {
public String getText(Object element) {
element = unwrap(element);
if (element instanceof IGraphicalEditPart) {
EObject semanticElement = ((IGraphicalEditPart) element)
.resolveSemanticElement();
if (semanticElement == null) {
View view = ((IGraphicalEditPart) element).getNotationView();
return view.getType();
} else {
IElementType elementType = ElementTypeRegistry.getInstance()
.getElementType(semanticElement);
StringBuilder builder = new StringBuilder();
builder.append(elementType.getDisplayName());
if (semanticElement instanceof NamedElement
&& ((NamedElement) semanticElement).getName() != null) {
builder.append(' ');
builder.append(((NamedElement) semanticElement).getName());
}
return builder.toString();
}
}
return null;
}
public Image getImage(Object element) {
element = unwrap(element);
if (element instanceof IGraphicalEditPart) {
EObject semanticElement = ((IGraphicalEditPart) element)
.resolveSemanticElement();
if (semanticElement == null) {
// Default images
View view = ((IGraphicalEditPart) element).getNotationView();
String viewType = view.getType();
if (ViewType.NOTE.equals(viewType)) {
return SharedImages.get(SharedImages.IMG_NOTE);
} else if (ViewType.TEXT.equals(viewType)) {
return SharedImages.get(SharedImages.IMG_TEXT);
}
} else {
// custom images
IElementType elementType = ElementTypeRegistry.getInstance()
.getElementType(semanticElement);
Image image = DiagramActivator.getDefault().getImageRegistry()
.get(elementType.getIconURL().toString());
if (image == null) {
ImageDescriptor desc = ImageDescriptor
.createFromURL(elementType.getIconURL());
DiagramActivator
.getDefault()
.getImageRegistry()
.put(elementType.getIconURL().toString(),
desc.createImage());
return DiagramActivator.getDefault().getImageRegistry()
.get(elementType.getIconURL().toString());
}
return image;
}
}
return null;
}
private Object unwrap(Object element) {
if (element instanceof IStructuredSelection) {
return ((IStructuredSelection) element).getFirstElement();
}
return element;
}
}