/******************************************************************************* * Copyright (c) 2013, G. Weirich and Elexis * 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: * M. Descher - initial implementation *******************************************************************************/ package ch.elexis.core.ui.icons; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.util.MissingResourceException; import java.util.ResourceBundle; import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.Path; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Display; import ch.elexis.core.jdt.NonNull; import ch.elexis.core.ui.icons.urihandler.IconURLConnection; /** * Central image repository. Supersedes the images managed in {@link Desk}. This image registry * takes its values from a properties file, namely <code>ch.elexis.iconset.properties</code>. This * properties file is to be provided, together with the respective icons by a contributing fragment. * See <code>ch.elexis.core.ui.icons</code> for the basic open source icons contribution. * * @author M. Descher / MEDEVIT Austria */ public enum Images { /** The Elexis logo **/ IMG_LOGO, /** Returning to some home place */ IMG_HOME, /** An Address label */ IMG_ADRESSETIKETTE, /** a label with patient data */ IMG_PATIENTETIKETTE, /** a label with some identity number (e.g. for lab orders) */ IMG_VERSIONEDETIKETTE, /** a bomb icon */ IMG_BOMB, /** an organisation icon */ IMG_ORGANISATION, /** an organisation add icon */ IMG_ORGANISATION_ADD, /** a transparent and empty 16x16 image */ IMG_EMPTY_TRANSPARENT, /** a telephone icon */ IMG_TELEPHONE, /** a mobile phone */ IMG_MOBILEPHONE, /** a fax */ IMG_FAX, /** a mail icon */ IMG_MAIL, /** a mail send icon */ IMG_MAIL_SEND, /** a web icon */ IMG_WEB, /** a contact detail icon */ IMG_CONTACT_DETAIL, /** deleting items */ IMG_DELETE, /** a male */ IMG_MANN, /** a female */ IMG_FRAU, /** a group of two persons */ IMG_GROUP, /** a money icon */ IMG_MONEY, /** a Very Important Person/Patient */ IMG_VIP, /** a Very Important Person/Patient overlay Icon */ IMG_VIP_OVERLAY, /** a printer */ IMG_PRINTER, /** a big printer icon */ IMG_PRINTER_BIG, /** a big printer icon */ IMG_PRINT_FIX, /** a big printer icon */ IMG_PRINT_RESERVE, /** a filter */ IMG_FILTER, IMG_FOLDER, /** creating a new Object */ IMG_NEW, /** importing items */ IMG_IMPORT, /** exporting items */ IMG_EXPORT, IMG_GOFURTHER, /** editing an item */ IMG_EDIT, IMG_EDIT_DONE, IMG_EDIT_ABORT, /** warning */ IMG_ACHTUNG, /** red bullet */ IMG_BULLET_RED, /** green bullet */ IMG_BULLET_GREEN, /** yellow bullet */ IMG_BULLET_YELLOW, /** grey bullet */ IMG_BULLET_GREY, /** ok */ IMG_OK, /** tick */ IMG_TICK, /** error */ IMG_FEHLER, /** refresh/reload */ IMG_REFRESH, /** wizard/doing things automagically */ IMG_WIZARD, /** add something to an existing object */ IMG_ADDITEM, /** remove something from an existing object */ IMG_REMOVEITEM, /** excalamation mark red */ IMG_AUSRUFEZ_ROT, /** exclamantion mark */ IMG_AUSRUFEZ, /** computer network */ IMG_NETWORK, /** a book */ IMG_BOOK, /** a person */ IMG_BOOKMARK_PENCIL, IMG_PERSON, /** a person with an OK mark */ IMG_PERSON_OK, /** a person with an ADD sign */ IMG_PERSON_ADD, /** a greyed out person */ IMG_PERSON_GREY, /** a diskette symbol */ IMG_DISK, /** a closed lock */ IMG_LOCK_CLOSED, /** An opened lock */ IMG_LOCK_OPEN, /** Clipboard symbol */ IMG_CLIPBOARD, /** Arrow right */ IMG_NEXT, IMG_NEXT_WO_SHADOW, /** Arrow left */ IMG_PREVIOUS, /** Arrow up */ IMG_ARROWUP, /** Arrow down */ IMG_ARROWDOWN, /** Arrow down to rectangle */ IMG_ARROWDOWNTORECT, /** Arrow to stop */ IMG_ARROWSTOP, IMG_ARROWSTOP_WO_SHADOW, IMG_EYE_WO_SHADOW, /** undo */ IMG_UNDO, /** a 8px pencil symbol */ IMG_PENCIL_8PX, /** a pill symbol */ IMG_PILL, /** a pill with an exclamation */ IMG_PILL_EXCLAMATION_WO_SHADOW, /** a link symbol */ IMG_LINK, /** Move to upper list */ IMG_MOVETOUPPERLIST, /** Move to lower list */ IMG_MOVETOLOWERLIST, /** clear input field */ IMG_CLEAR, /** Perspective Konsultation */ IMG_PERSPECTIVE_KONS, /** Perspective Contacts */ IMG_PERSPECTIVE_CONTACTS, /** Perspective letters */ IMG_PERSPECTIVE_LETTERS, /** Perspective leistungen */ IMG_PERSPECTIVE_LEISTUNGEN, /** Perspective articles */ IMG_PERSPECTIVE_ARTICLES, /** Perspective reminder */ IMG_PERSPECTIVE_REMINDERS, /** Perspective bills */ IMG_PERSPECTIVE_BILLS, /** Perspective blackboard */ IMG_PERSPECTIVE_BBS, /** Perspective orders */ IMG_PERSPECTIVE_ORDERS, /** a document of type text */ IMG_DOCUMENT_TEXT, /** add document */ IMG_DOCUMENT_ADD, /** write document */ IMG_DOCUMENT_WRITE, /** remove document */ IMG_DOCUMENT_REMOVE, IMG_MENUBAR, IMG_TOOLBAR, /** recipe */ IMG_RECIPE_FIX, IMG_RECIPE_RESERVE, /** a bill */ IMG_BILL, IMG_VIEW_WORK_INCAPABLE, IMG_VIEW_CONSULTATION_DETAIL, IMG_VIEW_LABORATORY, IMG_VIEW_PATIENT_DETAIL, IMG_VIEW_RECIPES, IMG_DATABASE, IMG_CONFLICT, IMG_QUESTION_MARK, IMG_FLAG_AT, IMG_FLAG_DE, IMG_FLAG_CH, IMG_FLAG_FR, IMG_FLAG_IT, IMG_FLAG_FL, /** a generic group icon */ IMG_CATEGORY_GROUP, /** a syringe, nozzle, injection icon */ IMG_SYRINGE, /** small blocks */ IMG_BLOCKS_SMALL, /** sync icon **/ IMG_SYNC, /** a star icon **/ IMG_STAR, /** a non-filed star icon **/ IMG_STAR_EMPTY, /** stop icon **/ IMG_STOP, /** covercard png **/ IMG_COVERCARD, /** document copy png **/ IMG_COPY, IMG_USER_SILHOUETTE, IMG_TABLE, IMG_NODE, IMG_NW_STATUS, IMG_GEAR, /** checkbox (checked) **/ IMG_CHECKBOX, /** checkbox (unchecked) **/ IMG_CHECKBOX_UNCHECKED, /** document stand/managemet **/ IMG_DOC_STAND, /** system template **/ IMG_DOC_SYS, /** jar icon **/ IMG_JAR, /** fixmedi icon **/ IMG_FIX_MEDI, /** reserve medi icon **/ IMG_RESERVE_MEDI, /** symptomatic medi icon **/ IMG_SYMPTOM_MEDI, /** need medi icon **/ IMG_NEED_MEDI, /** sort after personal favorites **/ IMG_SORT_STAR, /** daten gif **/ IMG_DATA, /** edit a balance */ IMG_BALANCE_EDIT, /** shopping cart **/ IMG_CART, /** wizard for some day event **/ IMG_WIZ_DAY, IMG_CALENDAR; private Images(){} /** * Returns an image. Clients do not need to dispose the image, it will be disposed * automatically. Defaults to {@link ImageSize#_16x16_DefaultIconSize} * * @return an {@link Image} */ public Image getImage(){ return getImage(ImageSize._16x16_DefaultIconSize); } /** * @return {@link ImageDescriptor} for the current image. Defaults to * {@link ImageSize#_16x16_DefaultIconSize} */ public ImageDescriptor getImageDescriptor(){ return getImageDescriptor(ImageSize._16x16_DefaultIconSize); } /** * Opportunistic lookup for a probably existing key.<br> * There may exist keys within the <code>iconset.properties</code> file which are not managed by * this Enumeration. This method allows an opportunistic lookup of such registered images. * * @param iconKey * @return <code>null</code> if no such image is existent */ public static Image lookupImage(String iconKey, ImageSize is){ Image image = JFaceResources.getImageRegistry().get(iconKey + is.name); if (image == null) { boolean ret = addIconImageDescriptor(iconKey, is); if (!ret) return null; image = JFaceResources.getImageRegistry().get(iconKey); } return image; } /** * Opportunistic lookup for a probably existing key.<br> * * @param iconKey * @param is * @return */ public static ImageDescriptor lookupImageDescriptor(@NonNull String iconKey, @NonNull ImageSize is){ return getImageDescriptor(iconKey, is); } /** * Returns an image. Clients do not need to dispose the image, it will be disposed * automatically. * * @return an {@link Image} */ public synchronized Image getImage(ImageSize is){ Image image = JFaceResources.getImageRegistry().get(this.name() + is.name); if (image == null) { addIconImageDescriptor(this.name(), is); image = JFaceResources.getImageRegistry().get(this.name() + is.name); } return image; } /** * @return {@link ImageDescriptor} for the current image */ public ImageDescriptor getImageDescriptor(ImageSize is){ return getImageDescriptor(this.name(), is); } /** * resolve the image * * @param imageName * @param is * @return */ private static ImageDescriptor getImageDescriptor(String imageName, ImageSize is){ ImageDescriptor id = null; id = JFaceResources.getImageRegistry().getDescriptor(imageName + is.name); if (id == null) { addIconImageDescriptor(imageName, is); id = JFaceResources.getImageRegistry().getDescriptor(imageName + is.name); } return id; } /** * @return a string to be embedded as iconURI, see beta plugin process for an example */ public String getIconURI(){ return "icon://" + name(); } /** * Get the Icon as {@link InputStream}; used by the {@link IconURLConnection} * * @param is * @return <code>null</code> if any error in resolving the image * @throws IOException */ public InputStream getImageAsInputStream(ImageSize is) throws IOException{ InputStream ret = null; ResourceBundle iconsetProperties = ResourceBundle.getBundle("iconset"); String fileName = iconsetProperties.getString(this.name()); URL url = FileLocator.find(Activator.getContext().getBundle(), new Path("icons/" + is.name + "/" + fileName), null); ret = url.openConnection().getInputStream(); return ret; } /** * Add an image descriptor for a specific key and {@link IconSize} to the global * {@link ImageRegistry} * * @param name * @param is * @return <code>true</code> if successfully added, else <code>false</code> */ private static boolean addIconImageDescriptor(String name, ImageSize is){ String fileName; try { ResourceBundle iconsetProperties = ResourceBundle.getBundle("iconset"); fileName = iconsetProperties.getString(name); } catch (MissingResourceException | IllegalArgumentException e) { fileName = name; } Path path = new Path("icons/" + is.name + "/" + fileName); URL fileLocation = FileLocator.find(Activator.getContext().getBundle(), path, null); if (fileLocation == null) return false; ImageDescriptor id = ImageDescriptor.createFromURL(fileLocation); JFaceResources.getImageRegistry().put(name + is.name, id); return true; } /** * Return a resized (software scaled) version of an image, image will not be e * * @param image * the image to resize * @param is * the target {@link ImageSize} * @return */ public static Image resize(Image image, ImageSize is){ return resize(image, is.width, is.height); } /** * Return a resized (software scaled) version of an image, image will not be disposed * * @param image * the image to resize * @param width * @param height * @return */ public static Image resize(Image image, int width, int height){ return new Image(Display.getDefault(), image.getImageData().scaledTo(width, height)); } }