1 19 20 package org.netbeans.modules.xml.wsdl.ui.view.grapheditor.widget; 21 22 import java.awt.Color ; 23 import java.awt.Graphics2D ; 24 import java.awt.Image ; 25 import java.awt.Insets ; 26 import java.awt.RenderingHints ; 27 import java.awt.event.ActionEvent ; 28 import java.awt.event.ActionListener ; 29 import java.awt.geom.GeneralPath ; 30 import java.awt.image.BufferedImage ; 31 import java.util.Map ; 32 import java.util.WeakHashMap ; 33 import org.netbeans.api.visual.widget.Scene; 34 35 47 public class ExpanderWidget extends ButtonWidget implements ActionListener { 48 49 private static final Image IMAGE_EXPAND = new BufferedImage (12, 12, 50 BufferedImage.TYPE_INT_ARGB); 51 52 private static final Image IMAGE_COLLAPSE = new BufferedImage (12, 12, 53 BufferedImage.TYPE_INT_ARGB); 54 57 private static Map <Object , Boolean > expandedCache; 58 59 private ExpandableWidget expandable; 60 61 private boolean isExpanded; 62 63 static { 64 expandedCache = new WeakHashMap <Object , Boolean >(); 65 66 Graphics2D g2 = ((BufferedImage ) IMAGE_EXPAND).createGraphics(); 68 g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 69 RenderingHints.VALUE_ANTIALIAS_ON); 70 float w = IMAGE_EXPAND.getWidth(null); 71 float h = IMAGE_EXPAND.getHeight(null); 72 float r = Math.min(w, h) * 0.5f * 0.75f; 73 GeneralPath gp = new GeneralPath (); 74 float dx = (float) (r * Math.cos(Math.toRadians(-30))); 75 float dy = (float) (r * Math.sin(Math.toRadians(-30))); 76 gp.moveTo(dx, dy); 77 gp.lineTo(0, r); 78 gp.lineTo(-dx, dy); 79 gp.lineTo(dx, dy); 80 gp.closePath(); 81 g2.translate(w / 2, h / 2); 82 g2.setPaint(new Color (0x888888)); 83 g2.fill(gp); 84 85 g2 = ((BufferedImage ) IMAGE_COLLAPSE).createGraphics(); 87 g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 88 RenderingHints.VALUE_ANTIALIAS_ON); 89 w = IMAGE_EXPAND.getWidth(null); 90 h = IMAGE_EXPAND.getHeight(null); 91 r = Math.min(w, h) * 0.5f * 0.75f; 92 gp = new GeneralPath (); 93 dx = (float) (r * Math.cos(Math.toRadians(30))); 94 dy = (float) (r * Math.sin(Math.toRadians(30))); 95 gp.moveTo(dx, dy); 96 gp.lineTo(0, -r); 97 gp.lineTo(-dx, dy); 98 gp.lineTo(dx, dy); 99 gp.closePath(); 100 g2.translate(w / 2, h / 2); 101 g2.setPaint(new Color (0x888888)); 102 g2.fill(gp); 103 } 104 105 112 public ExpanderWidget(Scene scene, ExpandableWidget expandable, 113 boolean expanded) { 114 super(scene, expanded ? IMAGE_COLLAPSE : IMAGE_EXPAND); 115 this.expandable = expandable; 116 isExpanded = expanded; 117 setMargin(new Insets (2, 2, 2, 2)); 118 setActionListener(this); 119 } 120 121 157 public void actionPerformed(ActionEvent e) { 158 setExpanded(!isExpanded); 159 } 160 161 166 public boolean isExpanded() { 167 return isExpanded; 168 } 169 170 180 public static boolean isExpanded(ExpandableWidget expandable, boolean def) { 181 Boolean val = expandedCache.get(expandable.hashKey()); 182 return val != null ? val.booleanValue() : def; 183 } 184 185 190 public void setExpanded(boolean expanded) { 191 expandedCache.put(expandable.hashKey(), Boolean.valueOf(expanded)); 193 isExpanded = expanded; 194 setIcon(isExpanded ? IMAGE_COLLAPSE : IMAGE_EXPAND); 195 if (isExpanded) { 196 expandable.expandWidget(this); 197 } else { 198 expandable.collapseWidget(this); 199 } 200 } 201 } 202 | Popular Tags |