Lines 12-18
Link Here
|
12 |
|
12 |
|
13 |
import java.beans.PropertyChangeEvent; |
13 |
import java.beans.PropertyChangeEvent; |
14 |
import java.util.Iterator; |
14 |
import java.util.Iterator; |
15 |
import java.util.List; |
|
|
16 |
|
15 |
|
17 |
import org.eclipse.swt.events.MenuEvent; |
16 |
import org.eclipse.swt.events.MenuEvent; |
18 |
import org.eclipse.swt.events.MenuListener; |
17 |
import org.eclipse.swt.events.MenuListener; |
Lines 48-54
Link Here
|
48 |
import org.eclipse.gef.palette.ToolEntry; |
47 |
import org.eclipse.gef.palette.ToolEntry; |
49 |
import org.eclipse.gef.ui.actions.SetActivePaletteToolAction; |
48 |
import org.eclipse.gef.ui.actions.SetActivePaletteToolAction; |
50 |
import org.eclipse.gef.ui.palette.PaletteViewer; |
49 |
import org.eclipse.gef.ui.palette.PaletteViewer; |
51 |
import org.eclipse.gef.ui.palette.PaletteViewerPreferences; |
|
|
52 |
import org.eclipse.gef.ui.palette.editparts.PaletteEditPart; |
50 |
import org.eclipse.gef.ui.palette.editparts.PaletteEditPart; |
53 |
|
51 |
|
54 |
/** |
52 |
/** |
Lines 60-76
Link Here
|
60 |
public class PaletteStackEditPart |
58 |
public class PaletteStackEditPart |
61 |
extends PaletteEditPart implements IPaletteStackEditPart |
59 |
extends PaletteEditPart implements IPaletteStackEditPart |
62 |
{ |
60 |
{ |
63 |
|
61 |
|
64 |
private static final Dimension EMPTY_DIMENSION = new Dimension(0, 0); |
62 |
private static final Dimension EMPTY_DIMENSION = new Dimension(0, 0); |
65 |
private static final Border BORDER_TOGGLE = new ButtonBorder(ButtonBorder.SCHEMES.TOOLBAR); |
|
|
66 |
|
63 |
|
67 |
// listen to changes of clickable tool figure |
64 |
// listen to changes of clickable tool figure |
68 |
private ChangeListener clickableListener = new ChangeListener() { |
65 |
private ChangeListener clickableListener = new ChangeListener() { |
69 |
public void handleStateChanged(ChangeEvent event) { |
66 |
public void handleStateChanged(ChangeEvent event) { |
70 |
if (event.getPropertyName().equals(ButtonModel.MOUSEOVER_PROPERTY)) |
67 |
if (event.getPropertyName().equals(ButtonModel.MOUSEOVER_PROPERTY)) |
71 |
getClickableFigure().getModel().setMouseOver(activeFigure.getModel().isMouseOver()); |
68 |
arrowFigure.getModel().setMouseOver(activeFigure.getModel().isMouseOver()); |
72 |
else if (event.getPropertyName().equals(ButtonModel.ARMED_PROPERTY)) |
69 |
else if (event.getPropertyName().equals(ButtonModel.ARMED_PROPERTY)) |
73 |
getClickableFigure().getModel().setArmed(activeFigure.getModel().isArmed()); |
70 |
arrowFigure.getModel().setArmed(activeFigure.getModel().isArmed()); |
74 |
} |
71 |
} |
75 |
}; |
72 |
}; |
76 |
|
73 |
|
Lines 78-86
Link Here
|
78 |
private ChangeListener clickableArrowListener = new ChangeListener() { |
75 |
private ChangeListener clickableArrowListener = new ChangeListener() { |
79 |
public void handleStateChanged(ChangeEvent event) { |
76 |
public void handleStateChanged(ChangeEvent event) { |
80 |
if (event.getPropertyName().equals(ButtonModel.MOUSEOVER_PROPERTY)) |
77 |
if (event.getPropertyName().equals(ButtonModel.MOUSEOVER_PROPERTY)) |
81 |
activeFigure.getModel().setMouseOver(getClickableFigure().getModel().isMouseOver()); |
78 |
activeFigure.getModel().setMouseOver(arrowFigure.getModel().isMouseOver()); |
82 |
if (event.getPropertyName().equals(ButtonModel.ARMED_PROPERTY)) |
79 |
if (event.getPropertyName().equals(ButtonModel.ARMED_PROPERTY)) |
83 |
activeFigure.getModel().setArmed(getClickableFigure().getModel().isArmed()); |
80 |
activeFigure.getModel().setArmed(arrowFigure.getModel().isArmed()); |
84 |
} |
81 |
} |
85 |
}; |
82 |
}; |
86 |
|
83 |
|
Lines 95-106
Link Here
|
95 |
private PaletteListener paletteListener = new PaletteListener() { |
92 |
private PaletteListener paletteListener = new PaletteListener() { |
96 |
public void activeToolChanged(PaletteViewer palette, ToolEntry tool) { |
93 |
public void activeToolChanged(PaletteViewer palette, ToolEntry tool) { |
97 |
if (getStack().getChildren().contains(tool)) { |
94 |
if (getStack().getChildren().contains(tool)) { |
98 |
if (!getClickableFigure().getModel().isSelected()) |
95 |
if (!arrowFigure.getModel().isSelected()) |
99 |
getClickableFigure().getModel().setSelected(true); |
96 |
arrowFigure.getModel().setSelected(true); |
100 |
if (!getStack().getActiveEntry().equals(tool)) |
97 |
if (!getStack().getActiveEntry().equals(tool)) |
101 |
getStack().setActiveEntry(tool); |
98 |
getStack().setActiveEntry(tool); |
102 |
} else |
99 |
} else |
103 |
getClickableFigure().getModel().setSelected(false); |
100 |
arrowFigure.getModel().setSelected(false); |
104 |
} |
101 |
} |
105 |
}; |
102 |
}; |
106 |
|
103 |
|
Lines 168-192
Link Here
|
168 |
* @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#createFigure() |
165 |
* @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#createFigure() |
169 |
*/ |
166 |
*/ |
170 |
public IFigure createFigure() { |
167 |
public IFigure createFigure() { |
171 |
|
|
|
172 |
arrowFigure = new RolloverArrow(); |
173 |
|
168 |
|
174 |
Clickable stackFigure = new Clickable() { |
169 |
Figure figure = new Figure() { |
175 |
public boolean hasFocus() { |
|
|
176 |
return false; |
177 |
} |
178 |
public Dimension getPreferredSize(int wHint, int hHint) { |
170 |
public Dimension getPreferredSize(int wHint, int hHint) { |
179 |
if (PaletteStackEditPart.this.getChildren().isEmpty()) |
171 |
if (PaletteStackEditPart.this.getChildren().isEmpty()) |
180 |
return EMPTY_DIMENSION; |
172 |
return EMPTY_DIMENSION; |
181 |
return super.getPreferredSize(wHint, hHint); |
173 |
return super.getPreferredSize(wHint, hHint); |
182 |
} |
174 |
} |
183 |
}; |
175 |
}; |
184 |
stackFigure.setRolloverEnabled(true); |
176 |
|
185 |
stackFigure.setBorder(BORDER_TOGGLE); |
177 |
figure.setLayoutManager(new BorderLayout()); |
186 |
|
|
|
187 |
// Set up the arrow figure. Disable the arrow figure so clicks go to the stack figure. |
188 |
arrowFigure.setBackgroundColor(ColorConstants.black); |
189 |
arrowFigure.setEnabled(false); |
190 |
|
178 |
|
191 |
contentsFigure = new Figure(); |
179 |
contentsFigure = new Figure(); |
192 |
StackLayout stackLayout = new StackLayout(); |
180 |
StackLayout stackLayout = new StackLayout(); |
Lines 194-216
Link Here
|
194 |
// to its bounds |
182 |
// to its bounds |
195 |
stackLayout.setObserveVisibility(true); |
183 |
stackLayout.setObserveVisibility(true); |
196 |
contentsFigure.setLayoutManager(stackLayout); |
184 |
contentsFigure.setLayoutManager(stackLayout); |
|
|
185 |
figure.add(contentsFigure, BorderLayout.CENTER); |
197 |
|
186 |
|
198 |
stackFigure.add(contentsFigure); |
187 |
arrowFigure = new RolloverArrow(); |
199 |
stackFigure.add(arrowFigure); |
188 |
arrowFigure.addChangeListener(clickableArrowListener); |
200 |
|
189 |
arrowFigure.addActionListener(actionListener); |
201 |
stackFigure.addChangeListener(clickableArrowListener); |
190 |
figure.add(arrowFigure, BorderLayout.RIGHT); |
202 |
stackFigure.addActionListener(actionListener); |
|
|
203 |
|
191 |
|
204 |
return stackFigure; |
192 |
return figure; |
205 |
} |
|
|
206 |
|
207 |
/** |
208 |
* Returns the <code>Clickable</code> figure. |
209 |
* |
210 |
* @return the <code>Clickable</code> figure |
211 |
*/ |
212 |
private Clickable getClickableFigure() { |
213 |
return (Clickable) getFigure(); |
214 |
} |
193 |
} |
215 |
|
194 |
|
216 |
/** |
195 |
/** |
Lines 219-226
Link Here
|
219 |
public void deactivate() { |
198 |
public void deactivate() { |
220 |
if (activeFigure != null) |
199 |
if (activeFigure != null) |
221 |
activeFigure.removeChangeListener(clickableListener); |
200 |
activeFigure.removeChangeListener(clickableListener); |
222 |
getClickableFigure().removeActionListener(actionListener); |
201 |
arrowFigure.removeActionListener(actionListener); |
223 |
getClickableFigure().removeChangeListener(clickableArrowListener); |
202 |
arrowFigure.removeChangeListener(clickableArrowListener); |
224 |
getPaletteViewer().removePaletteListener(paletteListener); |
203 |
getPaletteViewer().removePaletteListener(paletteListener); |
225 |
super.deactivate(); |
204 |
super.deactivate(); |
226 |
} |
205 |
} |
Lines 277-283
Link Here
|
277 |
figureBounds.getBottomLeft().x, figureBounds.getBottomLeft().y); |
256 |
figureBounds.getBottomLeft().x, figureBounds.getBottomLeft().y); |
278 |
|
257 |
|
279 |
// remove feedback from the arrow Figure and children figures |
258 |
// remove feedback from the arrow Figure and children figures |
280 |
getClickableFigure().getModel().setMouseOver(false); |
259 |
arrowFigure.getModel().setMouseOver(false); |
281 |
eraseTargetFeedback(new Request(RequestConstants.REQ_SELECTION)); |
260 |
eraseTargetFeedback(new Request(RequestConstants.REQ_SELECTION)); |
282 |
|
261 |
|
283 |
menu.setLocation(menuLocation); |
262 |
menu.setLocation(menuLocation); |
Lines 310-346
Link Here
|
310 |
} |
289 |
} |
311 |
|
290 |
|
312 |
/** |
291 |
/** |
313 |
* @see org.eclipse.gef.editparts.AbstractEditPart#refreshVisuals() |
|
|
314 |
*/ |
315 |
protected void refreshVisuals() { |
316 |
int layoutMode = getLayoutSetting(); |
317 |
if (layoutMode == PaletteViewerPreferences.LAYOUT_LIST |
318 |
|| layoutMode == PaletteViewerPreferences.LAYOUT_DETAILS) { |
319 |
getFigure().setLayoutManager(new StackLayout() { |
320 |
public void layout(IFigure figure) { |
321 |
Rectangle r = figure.getClientArea(); |
322 |
List children = figure.getChildren(); |
323 |
IFigure child; |
324 |
for (int i = 0; i < children.size(); i++) { |
325 |
child = (IFigure)children.get(i); |
326 |
if (child == arrowFigure) { |
327 |
Rectangle.SINGLETON.setBounds(r); |
328 |
Rectangle.SINGLETON.width = 11; |
329 |
child.setBounds(Rectangle.SINGLETON); |
330 |
} else { |
331 |
child.setBounds(r); |
332 |
} |
333 |
} |
334 |
} |
335 |
}); |
336 |
} else { |
337 |
getFigure().setLayoutManager(new BorderLayout()); |
338 |
getFigure().setConstraint(contentsFigure, BorderLayout.CENTER); |
339 |
getFigure().setConstraint(arrowFigure, BorderLayout.RIGHT); |
340 |
} |
341 |
} |
342 |
|
343 |
/** |
344 |
* @see org.eclipse.gef.EditPart#showTargetFeedback(org.eclipse.gef.Request) |
292 |
* @see org.eclipse.gef.EditPart#showTargetFeedback(org.eclipse.gef.Request) |
345 |
*/ |
293 |
*/ |
346 |
public void showTargetFeedback(Request request) { |
294 |
public void showTargetFeedback(Request request) { |
Lines 407-419
Link Here
|
407 |
extends Clickable |
355 |
extends Clickable |
408 |
{ |
356 |
{ |
409 |
|
357 |
|
|
|
358 |
private static final Border BORDER_TOGGLE = new ButtonBorder(ButtonBorder.SCHEMES.TOOLBAR); |
359 |
|
410 |
/** |
360 |
/** |
411 |
* Creates a new Clickable that paints a triangle figure. |
361 |
* Creates a new Clickable that paints a triangle figure. |
412 |
*/ |
362 |
*/ |
413 |
RolloverArrow() { |
363 |
RolloverArrow() { |
414 |
super(); |
364 |
super(); |
415 |
setRolloverEnabled(true); |
365 |
setRolloverEnabled(true); |
416 |
setBorder(null); |
366 |
setBorder(BORDER_TOGGLE); |
|
|
367 |
setBackgroundColor(ColorConstants.black); |
417 |
setOpaque(false); |
368 |
setOpaque(false); |
418 |
setPreferredSize(11, -1); |
369 |
setPreferredSize(11, -1); |
419 |
} |
370 |
} |
Lines 426-445
Link Here
|
426 |
} |
377 |
} |
427 |
|
378 |
|
428 |
public void paintFigure(Graphics graphics) { |
379 |
public void paintFigure(Graphics graphics) { |
429 |
Rectangle rect = getBounds().getCopy(); |
380 |
Rectangle rect = getClientArea(); |
430 |
|
381 |
|
431 |
graphics.translate(getLocation()); |
382 |
graphics.translate(getLocation()); |
432 |
|
383 |
|
433 |
// fill the arrow |
384 |
// fill the arrow |
434 |
int[] points = new int[8]; |
385 |
int[] points = new int[8]; |
435 |
|
386 |
|
436 |
points[0] = 4; |
387 |
points[0] = 3; |
437 |
points[1] = rect.height / 2; |
388 |
points[1] = rect.height / 2; |
438 |
points[2] = 9; |
389 |
points[2] = 8; |
439 |
points[3] = rect.height / 2; |
390 |
points[3] = rect.height / 2; |
440 |
points[4] = 6; |
391 |
points[4] = 5; |
441 |
points[5] = 3 + rect.height / 2; |
392 |
points[5] = 3 + rect.height / 2; |
442 |
points[6] = 4; |
393 |
points[6] = 3; |
443 |
points[7] = rect.height / 2; |
394 |
points[7] = rect.height / 2; |
444 |
|
395 |
|
445 |
graphics.fillPolygon(points); |
396 |
graphics.fillPolygon(points); |