/* IconUtils.java created 2007-09-11 * */ package org.signalml.app.util; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Image; import java.awt.Point; import java.awt.Toolkit; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.swing.ImageIcon; import org.apache.log4j.Logger; import org.signalml.plugin.export.signal.SignalSelectionType; import org.signalml.task.TaskStatus; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; /** IconUtils * * * @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o. */ public abstract class IconUtils { protected static final Logger logger = Logger.getLogger(IconUtils.class); private static ImageIcon errorIcon = null; private static ImageIcon warningIcon = null; private static ImageIcon infoIcon = null; private static ImageIcon questionIcon = null; private static ImageIcon signalPageIcon = null; private static ImageIcon pageTagIcon = null; private static ImageIcon blockTagIcon = null; private static ImageIcon channelTagIcon = null; private static ImageIcon bookAtomIcon = null; private static ImageIcon bookSegmentIcon = null; private static ImageIcon bookChannelIcon = null; private static ImageIcon paletteIcon = null; private static Cursor emptyCursor = null; private static Cursor crosshairCursor = null; private static Cursor handCursor = null; private static Map<TaskStatus,ImageIcon> taskIconMap = null; private static Map<TaskStatus,ImageIcon> largeTaskIconMap = null; private static Map<String,ImageIcon> iconMap = new HashMap<String, ImageIcon>(); public static ImageIcon loadClassPathIcon(String classpath) { ImageIcon imageIcon = iconMap.get(classpath); if (imageIcon == null) { Resource icon = new ClassPathResource(classpath); try { imageIcon = new ImageIcon(icon.getURL()); } catch (IOException ex) { logger.warn("WARNING: failed to open icon recource [" + icon.toString() + "]", ex); return null; } iconMap.put(classpath, imageIcon); } return imageIcon; } public static ImageIcon getErrorIcon() { if (errorIcon == null) { errorIcon = loadClassPathIcon("org/signalml/app/icon/metal-error.png"); } return errorIcon; } public static ImageIcon getWarningIcon() { if (warningIcon == null) { warningIcon = loadClassPathIcon("org/signalml/app/icon/metal-warning.png"); } return warningIcon; } public static ImageIcon getInfoIcon() { if (infoIcon == null) { infoIcon = loadClassPathIcon("org/signalml/app/icon/metal-info.png"); } return infoIcon; } public static ImageIcon getQuestionIcon() { if (questionIcon == null) { questionIcon = loadClassPathIcon("org/signalml/app/icon/metal-question.png"); } return questionIcon; } public static ImageIcon getSignalPageIcon() { if (signalPageIcon == null) { signalPageIcon = loadClassPathIcon("org/signalml/app/icon/signalpage.png"); } return signalPageIcon; } public static ImageIcon getPageTagIcon() { if (pageTagIcon == null) { pageTagIcon = loadClassPathIcon("org/signalml/app/icon/pagetag.png"); } return pageTagIcon; } public static ImageIcon getBlockTagIcon() { if (blockTagIcon == null) { blockTagIcon = loadClassPathIcon("org/signalml/app/icon/blocktag.png"); } return blockTagIcon; } public static ImageIcon getChannelTagIcon() { if (channelTagIcon == null) { channelTagIcon = loadClassPathIcon("org/signalml/app/icon/channeltag.png"); } return channelTagIcon; } public static ImageIcon getBookAtomIcon() { if (bookAtomIcon == null) { bookAtomIcon = loadClassPathIcon("org/signalml/app/icon/bookatom.png"); } return bookAtomIcon; } public static ImageIcon getBookSegmentIcon() { if (bookSegmentIcon == null) { bookSegmentIcon = loadClassPathIcon("org/signalml/app/icon/booksegment.png"); } return bookSegmentIcon; } public static ImageIcon getBookChannelIcon() { if (bookChannelIcon == null) { bookChannelIcon = loadClassPathIcon("org/signalml/app/icon/bookchannel.png"); } return bookChannelIcon; } public static ImageIcon getPaletteIcon() { if (paletteIcon == null) { paletteIcon = loadClassPathIcon("org/signalml/app/icon/palette.png"); } return paletteIcon; } public static ImageIcon getTagIcon(SignalSelectionType type) { if (type == SignalSelectionType.PAGE) { return getPageTagIcon(); } else if (type == SignalSelectionType.BLOCK) { return getBlockTagIcon(); } else if (type == SignalSelectionType.CHANNEL) { return getChannelTagIcon(); } return null; } public static Image loadClassPathImage(String classpath) { return loadClassPathIcon(classpath).getImage(); } public static Cursor getEmptyCursor() { if (emptyCursor == null) { Image image = loadClassPathImage("org/signalml/app/icon/transparent.png"); Toolkit toolkit = Toolkit.getDefaultToolkit(); Dimension d = toolkit.getBestCursorSize(32, 32); emptyCursor = toolkit.createCustomCursor(image, new Point(d.width/2,d.height/2), "Invisible cursor"); } return emptyCursor; } public static Cursor getCrosshairCursor() { if (crosshairCursor == null) { Image image = loadClassPathImage("org/signalml/app/icon/crosshair.png"); Toolkit toolkit = Toolkit.getDefaultToolkit(); Dimension d = toolkit.getBestCursorSize(32, 32); int x = (int)(d.width * (15F/32F)); int y = (int)(d.height * (16F/32F)); crosshairCursor = toolkit.createCustomCursor(image, new Point(x,y), "Contrasting crosshair cursor"); } return crosshairCursor; } public static Cursor getHandCursor() { if (handCursor == null) { Image image = loadClassPathImage("org/signalml/app/icon/handcursor.png"); Toolkit toolkit = Toolkit.getDefaultToolkit(); Dimension d = toolkit.getBestCursorSize(32, 32); handCursor = toolkit.createCustomCursor(image, new Point(d.width/2,d.height/2), "All finger hand"); } return handCursor; } public static ImageIcon getTaskIcon(TaskStatus taskStatus) { if (taskIconMap == null) { taskIconMap = new HashMap<TaskStatus,ImageIcon>(); ImageIcon runningIcon = loadClassPathIcon("org/signalml/app/icon/running.png"); ImageIcon waitingIcon = loadClassPathIcon("org/signalml/app/icon/waiting.png"); ImageIcon finishedIcon = loadClassPathIcon("org/signalml/app/icon/finished.png"); ImageIcon stoppedIcon = loadClassPathIcon("org/signalml/app/icon/stopped.png"); ImageIcon suspendedIcon = loadClassPathIcon("org/signalml/app/icon/suspended.png"); ImageIcon errorIcon = loadClassPathIcon("org/signalml/app/icon/error.png"); taskIconMap.put(TaskStatus.NEW, runningIcon); taskIconMap.put(TaskStatus.ACTIVE, runningIcon); taskIconMap.put(TaskStatus.ACTIVE_WAITING, waitingIcon); taskIconMap.put(TaskStatus.REQUESTING_ABORT, runningIcon); taskIconMap.put(TaskStatus.REQUESTING_SUSPEND, runningIcon); taskIconMap.put(TaskStatus.FINISHED, finishedIcon); taskIconMap.put(TaskStatus.ABORTED, stoppedIcon); taskIconMap.put(TaskStatus.SUSPENDED, suspendedIcon); taskIconMap.put(TaskStatus.ERROR, errorIcon); } return taskIconMap.get(taskStatus); } public static ImageIcon getLargeTaskIcon(TaskStatus taskStatus) { if (largeTaskIconMap == null) { largeTaskIconMap = new HashMap<TaskStatus,ImageIcon>(); ImageIcon runningIcon = loadClassPathIcon("org/signalml/app/icon/runninglarge.png"); ImageIcon waitingIcon = loadClassPathIcon("org/signalml/app/icon/waitinglarge.png"); ImageIcon finishedIcon = loadClassPathIcon("org/signalml/app/icon/finishedlarge.png"); ImageIcon stoppedIcon = loadClassPathIcon("org/signalml/app/icon/stoppedlarge.png"); ImageIcon suspendedIcon = loadClassPathIcon("org/signalml/app/icon/suspendedlarge.png"); ImageIcon errorIcon = loadClassPathIcon("org/signalml/app/icon/errorlarge.png"); largeTaskIconMap.put(TaskStatus.NEW, runningIcon); largeTaskIconMap.put(TaskStatus.ACTIVE, runningIcon); largeTaskIconMap.put(TaskStatus.ACTIVE_WAITING, waitingIcon); largeTaskIconMap.put(TaskStatus.REQUESTING_ABORT, runningIcon); largeTaskIconMap.put(TaskStatus.REQUESTING_SUSPEND, runningIcon); largeTaskIconMap.put(TaskStatus.FINISHED, finishedIcon); largeTaskIconMap.put(TaskStatus.ABORTED, stoppedIcon); largeTaskIconMap.put(TaskStatus.SUSPENDED, suspendedIcon); largeTaskIconMap.put(TaskStatus.ERROR, errorIcon); } return largeTaskIconMap.get(taskStatus); } }