Source code: com/arranger/jarl/util/IconUtil.java
1 package com.arranger.jarl.util;
2
3 import com.arranger.jarl.shell.views.JarlObjectViewTree;
4 import com.arranger.jarl.base.IJarlObject;
5 import com.arranger.jarl.widget.IWidget;
6 import com.arranger.jarl.stroke.IStroke;
7 import com.arranger.jarl.trait.ITrait;
8 import com.arranger.jarl.filter.IFilter;
9
10 import javax.swing.*;
11 import javax.swing.tree.TreeNode;
12 import java.io.ByteArrayOutputStream;
13 import java.io.InputStream;
14 import java.util.HashMap;
15 import java.util.Map;
16
17 /**
18 * IconUtil created on Apr 18, 2003
19 */
20 public class IconUtil {
21
22 public static final int TREE_NODE_LEAF = 0;
23 public static final int TREE_NODE_OPEN = 1;
24 public static final int TREE_NODE_CLOSED = 2;
25
26 public static final String ICON_PATH = "/com/arranger/jarl/icons/";
27 public static final String DEFAULT_TREE_LEAF_ICON = "defaultLeaf.gif";
28 public static final String DEFAULT_TREE_OPEN_ICON = "defaultOpen.gif";
29 public static final String DEFAULT_TREE_CLOSED_ICON = "defaultClosed.gif";
30
31 public static final String FILTER_DEF_ICON = "filterDef.gif";
32 public static final String STROKE_DEF_ICON = "strokeDef.gif";
33 public static final String TRAIT_DEF_ICON = "traitDef.gif";
34 public static final String WIDGET_DEF_ICON = "widgetDef.gif";
35
36 public static final String FILTER_INST_ICON = "filterInstance.gif";
37 public static final String STROKE_INST_ICON = "strokeInstance.gif";
38 public static final String TRAIT_INST_ICON = "traitInstance.gif";
39 public static final String WIDGET_INST_ICON = "widgetInstance.gif";
40
41 public static final String FILTER_SEG_ICON = "filterSegment.gif";
42 public static final String STROKE_SEG_ICON = "strokeSegment.gif";
43 public static final String TRAIT_SEG_ICON = "traitSegment.gif";
44 public static final String WIDGET_SEG_ICON = "widgetSegment.gif";
45
46 public static final String ATTRIBUTE_ICON = "attribute.gif";
47
48 protected static Map m_iconMap = new HashMap();
49 protected static boolean m_init = false;
50
51
52 /**
53 * Get an icon for this treeNode
54 * @param treeNode
55 * @param treeNodeType either {@link #TREE_NODE_LEAF} or {@link #TREE_NODE_OPEN} or {@link #TREE_NODE_CLOSED}
56 * @return an appropriate icon
57 */
58 public static Icon getIcon(TreeNode treeNode, int treeNodeType) {
59 checkInit();
60 String key = getKey(treeNode);
61
62 Icon icon = (Icon) m_iconMap.get(key);
63 if (icon == null) {
64 String name = (treeNodeType == TREE_NODE_LEAF) ? DEFAULT_TREE_LEAF_ICON :
65 (treeNodeType == TREE_NODE_OPEN) ? DEFAULT_TREE_OPEN_ICON : DEFAULT_TREE_CLOSED_ICON;
66 icon = (Icon) m_iconMap.get(name);
67 m_iconMap.put(key, icon);
68 }
69 return icon;
70 }
71
72 protected static String getKey(TreeNode treeNode) {
73 String key = null;
74 if (treeNode instanceof JarlObjectViewTree.JarlStumpTreeNode) {
75 key = DEFAULT_TREE_OPEN_ICON;
76 } else if (treeNode instanceof JarlObjectViewTree.JarlRootTreeNode) {
77 String name = treeNode.toString();
78 if (JarlObjectViewTree.STROKE_DEFS.equals(name)) {
79 key = STROKE_DEF_ICON;
80 } else if (JarlObjectViewTree.TRAIT_DEFS.equals(name)) {
81 key = TRAIT_DEF_ICON;
82 } else if (JarlObjectViewTree.WIDGET_DEFS.equals(name)) {
83 key = WIDGET_DEF_ICON;
84 } else if (JarlObjectViewTree.FILTER_DEFS.equals(name)) {
85 key = FILTER_DEF_ICON;
86 } else if (JarlObjectViewTree.WIDGET_INSTANCES.equals(name)) {
87 key = WIDGET_INST_ICON;
88 } else if (JarlObjectViewTree.FILTER_INSTANCES.equals(name)) {
89 key = FILTER_INST_ICON;
90 } else {
91 System.out.println("Unknown node: " + treeNode.toString());
92 key = DEFAULT_TREE_OPEN_ICON;
93 }
94 } else if (treeNode instanceof JarlObjectViewTree.JarlObjectInfoTreeNode) {
95 //can be anything here except segments...
96 if (treeNode.isLeaf()) {
97 key = ATTRIBUTE_ICON;
98 } else {
99 IJarlObject jarlObject = ((JarlObjectViewTree.JarlObjectInfoTreeNode) treeNode).getJarlObject();
100 //if it has a 'name' attribute, it is a def, otherwise an instance
101 boolean isDef = !StringTools.isEmpty(jarlObject.getConfigElement().getAttribute("name"));
102 if (jarlObject instanceof IWidget) {
103 key = (isDef) ? WIDGET_DEF_ICON : WIDGET_INST_ICON;
104 } else if (jarlObject instanceof IStroke) {
105 key = (isDef) ? STROKE_DEF_ICON : STROKE_INST_ICON;
106 } else if (jarlObject instanceof ITrait) {
107 key = (isDef) ? TRAIT_DEF_ICON : TRAIT_INST_ICON;
108 } else if (jarlObject instanceof IFilter) {
109 key = (isDef) ? FILTER_DEF_ICON : FILTER_INST_ICON;
110 } else {
111 System.out.println("Unknown node: " + treeNode.toString());
112 key = DEFAULT_TREE_OPEN_ICON;
113 }
114 }
115 } else if (treeNode instanceof JarlObjectViewTree.WidgetConfigSegmentTreeNode) {
116 //can be lots as well
117 if (treeNode.isLeaf()) {
118 key = ATTRIBUTE_ICON;
119 } else {
120 //determine type from parent
121 TreeNode parentNode = treeNode.getParent();
122 if (parentNode instanceof JarlObjectViewTree.JarlObjectInfoTreeNode) {
123 IJarlObject jarlObject = ((JarlObjectViewTree.JarlObjectInfoTreeNode) parentNode).getJarlObject();
124 if (jarlObject instanceof IWidget) {
125 key = WIDGET_SEG_ICON;
126 } else if (jarlObject instanceof IStroke) {
127 key = STROKE_SEG_ICON;
128 } else if (jarlObject instanceof ITrait) {
129 key = TRAIT_SEG_ICON;
130 } else if (jarlObject instanceof IFilter) {
131 key = FILTER_SEG_ICON;
132 } else {
133 System.out.println("Unknown node: " + treeNode.toString());
134 key = ATTRIBUTE_ICON;
135 }
136 } else {
137 System.out.println("Unknown node: " + treeNode.toString());
138 key = ATTRIBUTE_ICON;
139 }
140 }
141 } else {
142 System.out.println("Unknown node: " + treeNode.toString());
143 key = ATTRIBUTE_ICON;
144 }
145
146 return key;
147 }
148
149 protected static void checkInit() {
150 if (!m_init) {
151 //load defaults
152 try {
153 m_iconMap.put(DEFAULT_TREE_LEAF_ICON, loadIcon(DEFAULT_TREE_LEAF_ICON));
154 m_iconMap.put(DEFAULT_TREE_OPEN_ICON, loadIcon(DEFAULT_TREE_OPEN_ICON));
155 m_iconMap.put(DEFAULT_TREE_CLOSED_ICON, loadIcon(DEFAULT_TREE_CLOSED_ICON));
156
157 m_iconMap.put(FILTER_DEF_ICON, loadIcon(FILTER_DEF_ICON));
158 m_iconMap.put(STROKE_DEF_ICON, loadIcon(STROKE_DEF_ICON));
159 m_iconMap.put(TRAIT_DEF_ICON, loadIcon(TRAIT_DEF_ICON));
160 m_iconMap.put(WIDGET_DEF_ICON, loadIcon(WIDGET_DEF_ICON));
161
162 m_iconMap.put(FILTER_INST_ICON, loadIcon(FILTER_INST_ICON));
163 m_iconMap.put(STROKE_INST_ICON, loadIcon(STROKE_INST_ICON));
164 m_iconMap.put(TRAIT_INST_ICON, loadIcon(TRAIT_INST_ICON));
165 m_iconMap.put(WIDGET_INST_ICON, loadIcon(WIDGET_INST_ICON));
166
167 m_iconMap.put(FILTER_SEG_ICON, loadIcon(FILTER_SEG_ICON));
168 m_iconMap.put(STROKE_SEG_ICON, loadIcon(STROKE_SEG_ICON));
169 m_iconMap.put(TRAIT_SEG_ICON, loadIcon(TRAIT_SEG_ICON));
170 m_iconMap.put(WIDGET_SEG_ICON, loadIcon(WIDGET_SEG_ICON));
171
172 m_iconMap.put(ATTRIBUTE_ICON, loadIcon(ATTRIBUTE_ICON));
173 } catch (Exception e) {
174 e.printStackTrace();
175 }
176
177 m_init = true;
178 }
179 }
180
181 protected static Icon loadIcon(String name) throws Exception {
182 InputStream is = m_iconMap.getClass().getResourceAsStream(ICON_PATH + name);
183 ByteArrayOutputStream baos = new ByteArrayOutputStream();
184 IOUtil.copyStream(is, baos);
185 is.close();
186
187 return new ImageIcon(baos.toByteArray());
188 }
189 }