Lines 21-28
Link Here
|
21 |
import org.netbeans.api.visual.action.WidgetAction; |
21 |
import org.netbeans.api.visual.action.WidgetAction; |
22 |
import org.netbeans.api.visual.anchor.Anchor; |
22 |
import org.netbeans.api.visual.anchor.Anchor; |
23 |
import org.netbeans.api.visual.anchor.AnchorFactory; |
23 |
import org.netbeans.api.visual.anchor.AnchorFactory; |
24 |
import org.netbeans.api.visual.border.Border; |
|
|
25 |
import org.netbeans.api.visual.border.BorderFactory; |
26 |
import org.netbeans.api.visual.layout.LayoutFactory; |
24 |
import org.netbeans.api.visual.layout.LayoutFactory; |
27 |
import org.netbeans.api.visual.model.ObjectState; |
25 |
import org.netbeans.api.visual.model.ObjectState; |
28 |
import org.netbeans.api.visual.model.StateModel; |
26 |
import org.netbeans.api.visual.model.StateModel; |
Lines 46-57
Link Here
|
46 |
*/ |
44 |
*/ |
47 |
public class VMDNodeWidget extends Widget implements StateModel.Listener, VMDMinimizeAbility { |
45 |
public class VMDNodeWidget extends Widget implements StateModel.Listener, VMDMinimizeAbility { |
48 |
|
46 |
|
49 |
private static final Color BORDER_CATEGORY_BACKGROUND = new Color (0xCDDDF8); |
|
|
50 |
private static final Border BORDER_MINIMIZE = BorderFactory.createRoundedBorder (2, 2, null, VMDNodeBorder.COLOR_BORDER); |
51 |
static final Color COLOR_SELECTED = new Color (0x748CC0); |
52 |
static final Border BORDER = BorderFactory.createOpaqueBorder (2, 8, 2, 8); |
53 |
static final Border BORDER_HOVERED = BorderFactory.createLineBorder (2, 8, 2, 8, Color.BLACK); |
54 |
|
55 |
private Widget header; |
47 |
private Widget header; |
56 |
private ImageWidget minimizeWidget; |
48 |
private ImageWidget minimizeWidget; |
57 |
private ImageWidget imageWidget; |
49 |
private ImageWidget imageWidget; |
Lines 62-96
Link Here
|
62 |
private SeparatorWidget pinsSeparator; |
54 |
private SeparatorWidget pinsSeparator; |
63 |
|
55 |
|
64 |
private HashMap<String, Widget> pinCategoryWidgets = new HashMap<String, Widget> (); |
56 |
private HashMap<String, Widget> pinCategoryWidgets = new HashMap<String, Widget> (); |
65 |
private Font fontPinCategory = getScene ().getFont ().deriveFont (10.0f); |
|
|
66 |
|
57 |
|
67 |
private StateModel stateModel = new StateModel (2); |
58 |
private StateModel stateModel = new StateModel (2); |
68 |
private Anchor nodeAnchor = new VMDNodeAnchor (this); |
59 |
private Anchor nodeAnchor = new VMDNodeAnchor (this); |
|
|
60 |
private VMDColorScheme scheme; |
69 |
|
61 |
|
70 |
/** |
62 |
/** |
71 |
* Creates a node widget. |
63 |
* Creates a node widget. |
72 |
* @param scene the scene |
64 |
* @param scene the scene |
73 |
*/ |
65 |
*/ |
74 |
public VMDNodeWidget (Scene scene) { |
66 |
public VMDNodeWidget (Scene scene) { |
|
|
67 |
this (scene, VMDFactory.getOriginalScheme ()); |
68 |
} |
69 |
|
70 |
/** |
71 |
* Creates a node widget with a specific color scheme. |
72 |
* @param scene the scene |
73 |
* @param scheme the color scheme |
74 |
*/ |
75 |
public VMDNodeWidget (Scene scene, VMDColorScheme scheme) { |
75 |
super (scene); |
76 |
super (scene); |
|
|
77 |
assert scheme != null; |
78 |
this.scheme = scheme; |
76 |
|
79 |
|
77 |
setOpaque (false); |
|
|
78 |
setBorder (VMDFactory.createVMDNodeBorder ()); |
79 |
setLayout (LayoutFactory.createVerticalFlowLayout ()); |
80 |
setLayout (LayoutFactory.createVerticalFlowLayout ()); |
80 |
setMinimumSize (new Dimension (128, 8)); |
81 |
setMinimumSize (new Dimension (128, 8)); |
81 |
|
82 |
|
82 |
header = new Widget (scene); |
83 |
header = new Widget (scene); |
83 |
header.setBorder (BORDER); |
|
|
84 |
header.setBackground (COLOR_SELECTED); |
85 |
header.setOpaque (false); |
86 |
header.setLayout (LayoutFactory.createHorizontalFlowLayout (LayoutFactory.SerialAlignment.CENTER, 8)); |
84 |
header.setLayout (LayoutFactory.createHorizontalFlowLayout (LayoutFactory.SerialAlignment.CENTER, 8)); |
87 |
addChild (header); |
85 |
addChild (header); |
88 |
|
86 |
|
89 |
minimizeWidget = new ImageWidget (scene, Utilities.loadImage ("org/netbeans/modules/visual/resources/vmd-collapse.png")); |
87 |
boolean right = scheme.isNodeMinimizeButtonOnRight (this); |
|
|
88 |
|
89 |
minimizeWidget = new ImageWidget (scene, Utilities.loadImage ("org/netbeans/modules/visual/resources/vmd-collapse.png")); // NOI18N |
90 |
minimizeWidget.setCursor (Cursor.getPredefinedCursor (Cursor.HAND_CURSOR)); |
90 |
minimizeWidget.setCursor (Cursor.getPredefinedCursor (Cursor.HAND_CURSOR)); |
91 |
minimizeWidget.setBorder (BORDER_MINIMIZE); |
|
|
92 |
minimizeWidget.getActions ().addAction (new ToggleMinimizedAction ()); |
91 |
minimizeWidget.getActions ().addAction (new ToggleMinimizedAction ()); |
93 |
header.addChild (minimizeWidget); |
92 |
if (! right) |
|
|
93 |
header.addChild (minimizeWidget); |
94 |
|
94 |
|
95 |
imageWidget = new ImageWidget (scene); |
95 |
imageWidget = new ImageWidget (scene); |
96 |
header.addChild (imageWidget); |
96 |
header.addChild (imageWidget); |
Lines 106-113
Link Here
|
106 |
glyphSetWidget = new VMDGlyphSetWidget (scene); |
106 |
glyphSetWidget = new VMDGlyphSetWidget (scene); |
107 |
header.addChild (glyphSetWidget); |
107 |
header.addChild (glyphSetWidget); |
108 |
|
108 |
|
|
|
109 |
if (right) { |
110 |
Widget widget = new Widget (scene); |
111 |
widget.setOpaque (false); |
112 |
header.addChild (widget, 1000); |
113 |
header.addChild (minimizeWidget); |
114 |
} |
115 |
|
109 |
pinsSeparator = new SeparatorWidget (scene, SeparatorWidget.Orientation.HORIZONTAL); |
116 |
pinsSeparator = new SeparatorWidget (scene, SeparatorWidget.Orientation.HORIZONTAL); |
110 |
pinsSeparator.setForeground (BORDER_CATEGORY_BACKGROUND); |
|
|
111 |
addChild (pinsSeparator); |
117 |
addChild (pinsSeparator); |
112 |
|
118 |
|
113 |
Widget topLayer = new Widget (scene); |
119 |
Widget topLayer = new Widget (scene); |
Lines 116-121
Link Here
|
116 |
stateModel = new StateModel (); |
122 |
stateModel = new StateModel (); |
117 |
stateModel.addListener (this); |
123 |
stateModel.addListener (this); |
118 |
|
124 |
|
|
|
125 |
scheme.installUI (this); |
119 |
notifyStateChanged (ObjectState.createNormal (), ObjectState.createNormal ()); |
126 |
notifyStateChanged (ObjectState.createNormal (), ObjectState.createNormal ()); |
120 |
} |
127 |
} |
121 |
|
128 |
|
Lines 175-187
Link Here
|
175 |
* @param state the new state |
182 |
* @param state the new state |
176 |
*/ |
183 |
*/ |
177 |
protected void notifyStateChanged (ObjectState previousState, ObjectState state) { |
184 |
protected void notifyStateChanged (ObjectState previousState, ObjectState state) { |
178 |
if (! previousState.isSelected () && state.isSelected ()) |
185 |
scheme.updateUI (this, previousState, state); |
179 |
bringToFront (); |
|
|
180 |
else if (! previousState.isHovered () && state.isHovered ()) |
181 |
bringToFront (); |
182 |
|
183 |
header.setOpaque (state.isSelected ()); |
184 |
header.setBorder (state.isFocused () || state.isHovered () ? VMDNodeWidget.BORDER_HOVERED : VMDNodeWidget.BORDER); |
185 |
} |
186 |
} |
186 |
|
187 |
|
187 |
/** |
188 |
/** |
Lines 331-343
Link Here
|
331 |
Widget w = pinCategoryWidgets.get (categoryDisplayName); |
332 |
Widget w = pinCategoryWidgets.get (categoryDisplayName); |
332 |
if (w != null) |
333 |
if (w != null) |
333 |
return w; |
334 |
return w; |
334 |
LabelWidget label = new LabelWidget (getScene (), categoryDisplayName); |
335 |
Widget label = scheme.createPinCategoryWidget (this, categoryDisplayName); |
335 |
label.setOpaque (true); |
|
|
336 |
label.setBackground (BORDER_CATEGORY_BACKGROUND); |
337 |
label.setForeground (Color.GRAY); |
338 |
label.setFont (fontPinCategory); |
339 |
label.setAlignment (LabelWidget.Alignment.CENTER); |
340 |
label.setCheckClipping (true); |
341 |
if (stateModel.getBooleanState ()) |
336 |
if (stateModel.getBooleanState ()) |
342 |
label.setPreferredBounds (new Rectangle ()); |
337 |
label.setPreferredBounds (new Rectangle ()); |
343 |
pinCategoryWidgets.put (categoryDisplayName, label); |
338 |
pinCategoryWidgets.put (categoryDisplayName, label); |
Lines 364-369
Link Here
|
364 |
*/ |
359 |
*/ |
365 |
public Widget getHeader () { |
360 |
public Widget getHeader () { |
366 |
return header; |
361 |
return header; |
|
|
362 |
} |
363 |
|
364 |
/** |
365 |
* Returns a minimize button widget. |
366 |
* @return the miminize button widget |
367 |
*/ |
368 |
public Widget getMinimizeButton () { |
369 |
return minimizeWidget; |
370 |
} |
371 |
|
372 |
/** |
373 |
* Returns a pins separator. |
374 |
* @return the pins separator |
375 |
*/ |
376 |
public Widget getPinsSeparator () { |
377 |
return pinsSeparator; |
367 |
} |
378 |
} |
368 |
|
379 |
|
369 |
private final class ToggleMinimizedAction extends WidgetAction.Adapter { |
380 |
private final class ToggleMinimizedAction extends WidgetAction.Adapter { |