diff options
Diffstat (limited to 'examples/plugins/org.eclipse.bpmn2.modeler.examples.dynamic/src/org/eclipse/bpmn2/modeler/examples/dynamic/SampleImageProvider.java')
-rw-r--r-- | examples/plugins/org.eclipse.bpmn2.modeler.examples.dynamic/src/org/eclipse/bpmn2/modeler/examples/dynamic/SampleImageProvider.java | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/examples/plugins/org.eclipse.bpmn2.modeler.examples.dynamic/src/org/eclipse/bpmn2/modeler/examples/dynamic/SampleImageProvider.java b/examples/plugins/org.eclipse.bpmn2.modeler.examples.dynamic/src/org/eclipse/bpmn2/modeler/examples/dynamic/SampleImageProvider.java new file mode 100644 index 00000000..f1606986 --- /dev/null +++ b/examples/plugins/org.eclipse.bpmn2.modeler.examples.dynamic/src/org/eclipse/bpmn2/modeler/examples/dynamic/SampleImageProvider.java @@ -0,0 +1,120 @@ +/******************************************************************************* + * Copyright (c) 2011, 2012, 2013 Red Hat, Inc. + * All rights reserved. + * This program is 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: + * Red Hat, Inc. - initial API and implementation + ******************************************************************************/ +package org.eclipse.bpmn2.modeler.examples.dynamic; + +import java.net.URL; + +import org.eclipse.bpmn2.modeler.core.runtime.CustomTaskDescriptor; +import org.eclipse.bpmn2.modeler.core.runtime.TargetRuntime; +import org.eclipse.graphiti.mm.GraphicsAlgorithmContainer; +import org.eclipse.graphiti.mm.algorithms.Image; +import org.eclipse.graphiti.services.Graphiti; +import org.eclipse.graphiti.ui.internal.GraphitiUIPlugin; +import org.eclipse.graphiti.ui.platform.AbstractImageProvider; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.resource.ImageRegistry; + +/** + * Image provider class for our Custom Task extensions. + * + * TODO: In Kepler, this may change at which time we can register these icons + * in the plugin.xml as a Graphiti extension point. If this doesn't happen, + * we should probably consider pushing image registration up to the core editor. + * + * @see https://bugs.eclipse.org/bugs/show_bug.cgi?id=366452 + * @author bbrodt + */ +public class SampleImageProvider extends AbstractImageProvider { + + public final static String IMAGE_ID_PREFIX = + SampleImageProvider.class.getPackage().getName() + "."; + public final static String ICONS_FOLDER = "icons/"; + + // Sneaky tip: The values of this enum correspond to the subfolder names in "icons" + public enum IconSize { + SMALL("small"), + LARGE("large"), + HUGE("huge"); + private String value; + private IconSize(String value) { + this.value = value; + } + } + private static boolean registered = false; + + public SampleImageProvider() { + super(); + } + + public static void registerAvailableImages() { + if (!registered) { + ImageRegistry imageRegistry = GraphitiUIPlugin.getDefault().getImageRegistry(); + TargetRuntime rt = TargetRuntime.getRuntime(SampleRuntimeExtension.RUNTIME_ID); + for (IconSize size : IconSize.values()) { + for (CustomTaskDescriptor ctd : rt.getCustomTaskDescriptors()) { + String imageId = getImageId(ctd,size); + if (imageId != null) { + String filename = getImagePath(ctd,size); + URL url = SampleImageProvider.class.getClassLoader().getResource(filename); + ImageDescriptor descriptor = ImageDescriptor.createFromURL(url); + imageRegistry.put(imageId, descriptor); + } + } + } + registered = true; + } + } + + @Override + protected void addAvailableImages() { + TargetRuntime rt = TargetRuntime.getRuntime(SampleRuntimeExtension.RUNTIME_ID); + for (IconSize size : IconSize.values()) { + for (CustomTaskDescriptor ctd : rt.getCustomTaskDescriptors()) { + String imageId = getImageId(ctd,size); + if (imageId != null) { + addImageFilePath(imageId, getImagePath(ctd,size)); + } + } + } + } + + public static Image createImage(GraphicsAlgorithmContainer ga, CustomTaskDescriptor ctd, int w, int h) { + // To create an image of a specific size, use the "huge" versions + // to prevent pixelation when stretching a small image + String imageId = getImageId(ctd, IconSize.HUGE); + Image img = null; + if (imageId != null) { + img = Graphiti.getGaService().createImage(ga, imageId); + img.setProportional(false); + img.setWidth(w); + img.setHeight(h); + img.setStretchH(true); + img.setStretchV(true); + } + return img; + } + + public static String getImageId(CustomTaskDescriptor ctd, IconSize size) { + String icon = (String) ctd.getPropertyValue("icon"); + if (icon != null && icon.trim().length() > 0) { + return IMAGE_ID_PREFIX + icon.trim() + "." + size.value; + } + return null; + } + + public static String getImagePath(CustomTaskDescriptor ctd, IconSize size) { + String icon = (String) ctd.getPropertyValue("icon"); + if (icon != null && icon.trim().length() > 0) { + return ICONS_FOLDER + size.value + "/" + icon.trim(); + } + return null; + } +} |