StateIconProvider.java |
1 /**************************************************************************** 2 * This demo file is part of yFiles for Java 2.14. 3 * Copyright (c) 2000-2017 by yWorks GmbH, Vor dem Kreuzberg 28, 4 * 72070 Tuebingen, Germany. All rights reserved. 5 * 6 * yFiles demo files exhibit yFiles for Java functionalities. Any redistribution 7 * of demo files in source code or binary form, with or without 8 * modification, is not permitted. 9 * 10 * Owners of a valid software license for a yFiles for Java version that this 11 * demo is shipped with are allowed to use the demo source code as basis 12 * for their own yFiles for Java powered applications. Use of such programs is 13 * governed by the rights and conditions as set out in the yFiles for Java 14 * license agreement. 15 * 16 * THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESS OR IMPLIED 17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN 19 * NO EVENT SHALL yWorks BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 21 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 22 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 23 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 24 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 * 27 ***************************************************************************/ 28 package demo.view.mindmap; 29 30 import y.view.LineType; 31 32 import javax.swing.Icon; 33 import java.awt.Color; 34 import java.awt.Component; 35 import java.awt.Graphics; 36 import java.awt.Graphics2D; 37 import java.awt.Stroke; 38 import java.util.HashMap; 39 import java.util.Map; 40 41 /** 42 * Central repository for state icons. 43 */ 44 public class StateIconProvider { 45 /** 46 * Singleton instance of the icon repository. 47 */ 48 public static final StateIconProvider instance = new StateIconProvider(); 49 50 /** 51 * State icon representing the "icon-less" state. 52 */ 53 public static final StateIcon NULL_ICON = new StateIcon(null, new NullIconImpl()); 54 55 56 /** 57 * Stores the available state icons. 58 */ 59 private final Map icons; 60 61 private StateIconProvider() { 62 icons = new HashMap(); 63 add("smiley-happy"); 64 add("smiley-not-amused"); 65 add("smiley-grumpy"); 66 add("abstract-green"); 67 add("abstract-red"); 68 add("abstract-blue"); 69 add("questionmark"); 70 add("exclamationmark"); 71 add("delete"); 72 add("checkmark"); 73 add("star"); 74 } 75 76 /** 77 * Adds an image based state icon. 78 * @param name symbolic icon name as well as file name prefix. 79 */ 80 private void add( final String name ) { 81 icons.put(name, new StateIcon(name, MindMapUtil.getIcon(name + "-16.png"))); 82 } 83 84 /** 85 * Returns the state icon for the specified name. 86 * @param iconName one of 87 * <ul> 88 * <li><code>smiley-happy</code></li> 89 * <li><code>smiley-not-amused</code></li> 90 * <li><code>smiley-grumpy</code></li> 91 * <li><code>abstract-green</code></li> 92 * <li><code>abstract-red</code></li> 93 * <li><code>abstract-blue</code></li> 94 * <li><code>questionmark</code></li> 95 * <li><code>exclamationmark</code></li> 96 * <li><code>delete</code></li> 97 * <li><code>checkmark</code></li> 98 * <li><code>star</code></li> 99 * </ul> 100 * @return the state icon for the specified name or <code>null</code> 101 * if there is no such icon. 102 */ 103 public StateIcon getIcon(String iconName) { 104 return (StateIcon) icons.get(iconName); 105 } 106 107 108 /** 109 * Associates a name to an icon. 110 */ 111 public static final class StateIcon implements Icon { 112 private final String name; 113 private final Icon icon; 114 115 /** 116 * Initializes a new <code>StateIcon</code> instance with the given name. 117 * @param name the name of the state icon. 118 * @param icon the actual visual representation of the state icon. 119 */ 120 public StateIcon( final String name, final Icon icon ) { 121 this.name = name; 122 this.icon = icon; 123 } 124 125 /** 126 * Returns this icon's name. 127 * @return this icon's name. 128 */ 129 public String getName() { 130 return name; 131 } 132 133 public int getIconHeight() { 134 return icon.getIconHeight(); 135 } 136 137 public int getIconWidth() { 138 return icon.getIconWidth(); 139 } 140 141 public void paintIcon( 142 final Component c, final Graphics g, final int x, final int y 143 ) { 144 icon.paintIcon(c, g, x, y); 145 } 146 } 147 148 /** 149 * Displays a black, crossed-out square. 150 */ 151 private static final class NullIconImpl implements Icon { 152 private static final int ICON_SIZE = 16; 153 154 public int getIconHeight() { 155 return ICON_SIZE; 156 } 157 158 public int getIconWidth() { 159 return ICON_SIZE; 160 } 161 162 public void paintIcon( final Component c, final Graphics g, final int x, final int y ) { 163 final Graphics2D gfx = (Graphics2D) g; 164 165 final Color oldColor = gfx.getColor(); 166 gfx.setColor(Color.BLACK); 167 final Stroke oldStroke = gfx.getStroke(); 168 gfx.setStroke(LineType.LINE_1); 169 170 final int offset = 2; 171 final int w = getIconWidth(); 172 final int h = getIconHeight(); 173 final int innerWidth = w - offset; 174 final int innerHeight = h - offset; 175 gfx.drawRect(x, y, x + w, y + h); 176 gfx.drawLine(x + offset, y + offset, x + innerWidth, y + innerHeight); 177 gfx.drawLine(x + offset, y + innerHeight, x + innerWidth, y + offset); 178 179 gfx.setStroke(oldStroke); 180 gfx.setColor(oldColor); 181 } 182 } 183 } 184