blob: 609d6e168bd02fedaf752fed934bf315c6621025 [file] [log] [blame]
/*********************************************************************
* Copyright (c) 2008 The University of York.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
**********************************************************************/
package org.eclipse.epsilon.picto;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.epsilon.common.util.StringUtil;
import org.eclipse.epsilon.common.util.UriUtil;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.widgets.Display;
public class ViewTreeLabelProvider extends LabelProvider {
protected Image diagramImage = PictoPlugin.getDefault().getImageDescriptor("icons/diagram.gif").createImage();
protected Image folderImage = PictoPlugin.getDefault().getImageDescriptor("icons/folder.gif").createImage();
protected Map<String, Image> iconCache = new HashMap<>();
protected List<String> extensions = Arrays.asList("gif", "png");
@Override
public String getText(Object element) {
ViewTree contentTree = (ViewTree) element;
String name = contentTree.getName();
return StringUtil.isEmpty(name) ? "<empty>" : name;
}
@Override
public Image getImage(Object element) {
ViewTree contentTree = (ViewTree) element;
String iconName = contentTree.getIcon();
Image icon = iconCache.get(iconName);
java.util.Collection<java.net.URI> baseUris = new ArrayList<>(contentTree.getBaseUris());
baseUris.add(java.net.URI.create("platform:/plugin/org.eclipse.epsilon.picto/icons/"));
if (icon == null) {
if (iconName.matches("diagram-.*")) {
icon = getColoredDiagramIcon(iconName.replace("diagram-", ""));
iconCache.put(iconName, icon);
}
else {
outerloop:
for (java.net.URI baseUri : baseUris) {
for (String extension : extensions) {
try {
java.net.URI iconUri = UriUtil.resolve(iconName + "." + extension, baseUri);
icon = iconCache.get(iconUri.toString());
if (icon == null) {
icon = new Image(Display.getCurrent(), iconUri.toURL().openStream());
iconCache.put(iconUri.toString(), icon);
}
break outerloop;
}
catch (Exception ex) {}
}
}
}
}
if (icon != null) return icon;
else return diagramImage;
}
protected Image getColoredDiagramIcon(String color) {
Image icon = PictoPlugin.getDefault().getImageDescriptor("icons/diagram.gif").createImage();
ImageData imageData = icon.getImageData();
int hex = Integer.decode("0x" + color);
for (int i=2;i<7;i++) {
imageData.setPixel(i, 2, hex);
}
for (int i=10;i<15;i++) {
imageData.setPixel(i, 8, hex);
}
return new Image(Display.getCurrent(), imageData);
}
public void clearIconCache() {
iconCache.clear();
}
}