View | Details | Raw Unified | Return to bug 227844
Collapse All | Expand All

(-)src/org/eclipse/gef/internal/ui/palette/editparts/PaletteStackEditPart.java (-78 / +29 lines)
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);
(-)src/org/eclipse/gef/internal/ui/palette/editparts/ToolEntryEditPart.java (-6 / +4 lines)
Lines 214-222 Link Here
214
    super(contents);
214
    super(contents);
215
    setOpaque(false);
215
    setOpaque(false);
216
    setEnabled(true);
216
    setEnabled(true);
217
    if (isToolbarItem()
217
    if (isToolbarItem()) {
218
        && !PaletteStack.PALETTE_TYPE_STACK.equals(getPaletteEntry()
219
            .getParent().getType())) {
220
        setStyle(Clickable.STYLE_BUTTON | Clickable.STYLE_TOGGLE);
218
        setStyle(Clickable.STYLE_BUTTON | Clickable.STYLE_TOGGLE);
221
        setBorder(TOOLBAR_ITEM_BORDER);
219
        setBorder(TOOLBAR_ITEM_BORDER);
222
    }
220
    }
Lines 276-282 Link Here
276
}
274
}
277
275
278
protected void paintBorder(Graphics graphics) {
276
protected void paintBorder(Graphics graphics) {
279
    if (!isToolbarItem() && isEnabled()) {
277
    if (isEnabled()) {
280
278
281
        if (getBorder() != null)
279
        if (getBorder() != null)
282
            getBorder().paint(this, graphics, NO_INSETS);
280
            getBorder().paint(this, graphics, NO_INSETS);
Lines 284-291 Link Here
284
            graphics.setForegroundColor(ColorConstants.black);
282
            graphics.setForegroundColor(ColorConstants.black);
285
            graphics.setBackgroundColor(ColorConstants.white);
283
            graphics.setBackgroundColor(ColorConstants.white);
286
284
287
            Rectangle area = getSelectionRectangle(getLayoutSetting(),
285
            Rectangle area = isToolbarItem() ? getClientArea()
288
                customLabel);
286
                : getSelectionRectangle(getLayoutSetting(), customLabel);
289
            if (isStyle(STYLE_BUTTON))
287
            if (isStyle(STYLE_BUTTON))
290
                graphics.drawFocus(area.x, area.y, area.width, area.height);
288
                graphics.drawFocus(area.x, area.y, area.width, area.height);
291
            else
289
            else

Return to bug 227844