1 package prefuse.controls; 2 3 import java.awt.Cursor ; 4 import java.awt.event.MouseEvent ; 5 import java.util.logging.Logger ; 6 7 import prefuse.Display; 8 import prefuse.Visualization; 9 import prefuse.data.expression.Predicate; 10 import prefuse.data.tuple.TupleSet; 11 import prefuse.util.StringLib; 12 import prefuse.util.ui.UILib; 13 import prefuse.visual.VisualItem; 14 15 16 32 public class FocusControl extends ControlAdapter { 33 34 private String group = Visualization.FOCUS_ITEMS; 35 protected String activity; 36 protected VisualItem curFocus; 37 protected int ccount; 38 protected int button = Control.LEFT_MOUSE_BUTTON; 39 protected Predicate filter = null; 40 41 45 public FocusControl() { 46 this(1); 47 } 48 49 54 public FocusControl(String focusGroup) { 55 this(1); 56 group = focusGroup; 57 } 58 59 65 public FocusControl(int clicks) { 66 ccount = clicks; 67 } 68 69 76 public FocusControl(String focusGroup, int clicks) { 77 ccount = clicks; 78 group = focusGroup; 79 } 80 81 88 public FocusControl(int clicks, String act) { 89 ccount = clicks; 90 activity = act; 91 } 92 93 101 public FocusControl(String focusGroup, int clicks, String act) { 102 ccount = clicks; 103 activity = act; 104 this.group = focusGroup; 105 } 106 107 109 116 public void setFilter(Predicate p) { 117 this.filter = p; 118 } 119 120 127 public Predicate getFilter() { 128 return filter; 129 } 130 131 136 protected boolean filterCheck(VisualItem item) { 137 if ( filter == null ) 138 return true; 139 140 try { 141 return filter.getBoolean(item); 142 } catch ( Exception e ) { 143 Logger.getLogger(getClass().getName()).warning( 144 e.getMessage() + "\n" + StringLib.getStackTrace(e)); 145 return false; 146 } 147 } 148 149 151 154 public void itemEntered(VisualItem item, MouseEvent e) { 155 if ( !filterCheck(item) ) return; 156 Display d = (Display)e.getSource(); 157 d.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); 158 if ( ccount == 0 ) { 159 Visualization vis = item.getVisualization(); 160 TupleSet ts = vis.getFocusGroup(group); 161 ts.setTuple(item); 162 curFocus = item; 163 runActivity(vis); 164 } 165 } 166 167 170 public void itemExited(VisualItem item, MouseEvent e) { 171 if ( !filterCheck(item) ) return; 172 Display d = (Display)e.getSource(); 173 d.setCursor(Cursor.getDefaultCursor()); 174 if ( ccount == 0 ) { 175 curFocus = null; 176 Visualization vis = item.getVisualization(); 177 TupleSet ts = vis.getFocusGroup(group); 178 ts.removeTuple(item); 179 runActivity(vis); 180 } 181 } 182 183 186 public void itemClicked(VisualItem item, MouseEvent e) { 187 if ( !filterCheck(item) ) return; 188 if ( UILib.isButtonPressed(e, button) && 189 e.getClickCount() == ccount ) 190 { 191 if ( item != curFocus ) { 192 Visualization vis = item.getVisualization(); 193 TupleSet ts = vis.getFocusGroup(group); 194 195 boolean ctrl = e.isControlDown(); 196 if ( !ctrl ) { 197 curFocus = item; 198 ts.setTuple(item); 199 } else if ( ts.containsTuple(item) ) { 200 ts.removeTuple(item); 201 } else { 202 ts.addTuple(item); 203 } 204 runActivity(vis); 205 206 } else if ( e.isControlDown() ) { 207 Visualization vis = item.getVisualization(); 208 TupleSet ts = vis.getFocusGroup(group); 209 ts.removeTuple(item); 210 curFocus = null; 211 runActivity(vis); 212 } 213 } 214 } 215 216 private void runActivity(Visualization vis) { 217 if ( activity != null ) { 218 vis.run(activity); 219 } 220 } 221 222 } | Popular Tags |