### Eclipse Workspace Patch 1.0
#P org.eclipse.gef
Index: src/org/eclipse/gef/ui/palette/PaletteContextMenuProvider.java
===================================================================
RCS file: /cvsroot/tools/org.eclipse.gef/plugins/org.eclipse.gef/src/org/eclipse/gef/ui/palette/PaletteContextMenuProvider.java,v
retrieving revision 1.28
diff -u -r1.28 PaletteContextMenuProvider.java
--- src/org/eclipse/gef/ui/palette/PaletteContextMenuProvider.java 30 Mar 2005 21:27:02 -0000 1.28
+++ src/org/eclipse/gef/ui/palette/PaletteContextMenuProvider.java 4 Apr 2008 15:14:57 -0000
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -13,8 +13,9 @@
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.gef.ContextMenuProvider;
-import org.eclipse.gef.internal.ui.palette.editparts.DrawerEditPart;
+import org.eclipse.gef.EditPart;
import org.eclipse.gef.ui.actions.GEFActionConstants;
+import org.eclipse.gef.ui.palette.editparts.IPinnableEditPart;
/**
* Provides the context menu for a palette.
@@ -51,12 +52,14 @@
public void buildContextMenu(IMenuManager menu) {
GEFActionConstants.addStandardActionGroups(menu);
- Object selectedPart = getPaletteViewer().getSelectedEditParts().get(0);
- if (selectedPart instanceof DrawerEditPart
- && ((DrawerEditPart)selectedPart).canBePinned()) {
- menu.appendToGroup(GEFActionConstants.MB_ADDITIONS,
- new PinDrawerAction((DrawerEditPart)selectedPart));
- }
+ EditPart selectedPart = (EditPart) getPaletteViewer()
+ .getSelectedEditParts().get(0);
+ IPinnableEditPart pinnablePart = (IPinnableEditPart) selectedPart
+ .getAdapter(IPinnableEditPart.class);
+ if (pinnablePart != null && pinnablePart.canBePinned()) {
+ menu.appendToGroup(GEFActionConstants.MB_ADDITIONS,
+ new PinDrawerAction(pinnablePart));
+ }
menu.appendToGroup(GEFActionConstants.GROUP_VIEW, new LayoutAction(
getPaletteViewer().getPaletteViewerPreferences()));
menu.appendToGroup(GEFActionConstants.GROUP_VIEW, new ChangeIconSizeAction(
Index: src/org/eclipse/gef/ui/palette/PinDrawerAction.java
===================================================================
RCS file: /cvsroot/tools/org.eclipse.gef/plugins/org.eclipse.gef/src/org/eclipse/gef/ui/palette/PinDrawerAction.java,v
retrieving revision 1.9
diff -u -r1.9 PinDrawerAction.java
--- src/org/eclipse/gef/ui/palette/PinDrawerAction.java 30 Mar 2005 21:27:02 -0000 1.9
+++ src/org/eclipse/gef/ui/palette/PinDrawerAction.java 4 Apr 2008 15:14:57 -0000
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -13,15 +13,17 @@
import org.eclipse.jface.action.Action;
import org.eclipse.gef.internal.ui.palette.editparts.DrawerEditPart;
+import org.eclipse.gef.ui.palette.editparts.IPinnableEditPart;
/**
- * An action that can be used to pin the given drawer open.
+ * An action that can be used to pin the given pinnable palette editpart (drawer
+ * or stack) open.
*
* @author Pratik Shah
*/
public class PinDrawerAction extends Action {
-private DrawerEditPart drawer;
+private IPinnableEditPart pinnableEditPart;
/**
* Constructor
@@ -29,19 +31,32 @@
* @param drawer The EditPart for the drawer that this action pins/unpins
*/
public PinDrawerAction (DrawerEditPart drawer) {
- this.drawer = drawer;
+ this.pinnableEditPart = drawer;
setChecked(drawer.isPinnedOpen());
setEnabled(drawer.isExpanded());
setText(PaletteMessages.PINNED);
}
/**
- * Toggles the pinned open status of the drawer.
+ * Constructor
+ *
+ * @param pinnableEditPart the pinnable palette editpart
+ * @since 3.4
+ */
+public PinDrawerAction(IPinnableEditPart pinnableEditPart) {
+ this.pinnableEditPart = pinnableEditPart;
+ setChecked(pinnableEditPart.isPinnedOpen());
+ setEnabled(pinnableEditPart.isExpanded());
+ setText(PaletteMessages.PINNED);
+}
+
+/**
+ * Toggles the pinned open status of the pinnable palette editpart.
*
* @see org.eclipse.jface.action.Action#run()
*/
public void run() {
- drawer.setPinnedOpen(!drawer.isPinnedOpen());
+ pinnableEditPart.setPinnedOpen(!pinnableEditPart.isPinnedOpen());
}
}
Index: src/org/eclipse/gef/internal/ui/palette/editparts/PinnablePaletteStackFigure.java
===================================================================
RCS file: /cvsroot/tools/org.eclipse.gef/plugins/org.eclipse.gef/src/org/eclipse/gef/internal/ui/palette/editparts/PinnablePaletteStackFigure.java,v
retrieving revision 1.1
diff -u -r1.1 PinnablePaletteStackFigure.java
--- src/org/eclipse/gef/internal/ui/palette/editparts/PinnablePaletteStackFigure.java 1 Apr 2008 16:28:49 -0000 1.1
+++ src/org/eclipse/gef/internal/ui/palette/editparts/PinnablePaletteStackFigure.java 4 Apr 2008 15:14:57 -0000
@@ -16,7 +16,6 @@
import org.eclipse.swt.graphics.Color;
-import org.eclipse.draw2d.AbstractHintLayout;
import org.eclipse.draw2d.AbstractLayout;
import org.eclipse.draw2d.Animation;
import org.eclipse.draw2d.BorderLayout;
@@ -130,53 +129,55 @@
}
/**
- * Layout manager for the palette stack figure that handles the layout of the
- * headerFigure
, expandablePane
, and
- * pinFigure
when in list or details layout mode.
+ * Layout manager for the palette stack header figure that handles the layout of
+ * the headerFigure
(pinFigure
,
+ * arrowFigure
, and the active tool figure) when in list or
+ * details layout mode.
*/
-private class PaletteStackListLayout
- extends AbstractHintLayout {
+private class HeaderListLayout
+ extends StackLayout {
protected boolean isSensitiveVertically(IFigure container) {
return false;
}
protected Dimension calculatePreferredSize(IFigure parent, int wHint, int hHint) {
- Dimension headerSize = headerFigure.getPreferredSize(wHint, hHint);
-
- if (((PinnablePaletteStackFigure) parent).isExpanded()) {
- Dimension paneSize = expandablePane.getPreferredSize(wHint, hHint);
- return new Dimension(Math.max(headerSize.width, paneSize.width),
- headerSize.height + paneSize.height);
+ if (isExpanded()) {
+ Dimension pinSize = pinFigure.getSize();
+ Dimension preferredSize = super.calculatePreferredSize(parent, wHint
+ - pinSize.width, hHint);
+ preferredSize.width += pinSize.width;
+ return preferredSize;
} else {
- return headerSize;
+ return super.calculatePreferredSize(parent, wHint, hHint);
}
}
public void layout(IFigure parent) {
- Rectangle clientArea = Rectangle.SINGLETON;
- parent.getClientArea(clientArea);
- int wHint = clientArea.width;
- int hHint = -1;
-
- Rectangle rect = new Rectangle();
- rect.setSize(headerFigure.getPreferredSize(wHint, hHint));
- rect.setLocation(clientArea.getTopLeft());
- headerFigure.setBounds(rect);
-
- if (((PinnablePaletteStackFigure) parent).isExpanded()) {
- rect.translate(0, rect.height);
- rect.setSize(expandablePane.getPreferredSize(wHint, hHint));
- expandablePane.setBounds(rect);
-
- rect.setSize(pinFigure.getPreferredSize());
- rect.setLocation(headerFigure.getBounds().right()
- - rect.getSize().width, headerFigure.getBounds().getCenter().y
- - (rect.getSize().height / 2));
- pinFigure.setBounds(rect);
+ Rectangle r = parent.getClientArea();
+ List children = parent.getChildren();
+ IFigure child;
+
+ Dimension pinSize = isExpanded() ? pinFigure.getPreferredSize()
+ : EMPTY_DIMENSION;
+
+ for (int i = 0; i < children.size(); i++) {
+ child = (IFigure) children.get(i);
+ if (child == arrowFigure) {
+ Rectangle.SINGLETON.setBounds(r);
+ Rectangle.SINGLETON.width = 11;
+ child.setBounds(Rectangle.SINGLETON);
+ } else if (child == pinFigure) {
+ Rectangle.SINGLETON.setSize(pinSize);
+ Rectangle.SINGLETON.setLocation(r.right() - pinSize.width, r
+ .getCenter().y
+ - (pinSize.height / 2));
+ child.setBounds(Rectangle.SINGLETON);
+ } else {
+ child.setBounds(r.getResized(-pinSize.width, 0));
+ }
}
-
}
}
@@ -193,7 +194,7 @@
}
public void layout(IFigure parent) {
- if (((PinnablePaletteStackFigure) parent).isExpanded()) {
+ if (isExpanded()) {
headerFigure.setBounds(headerBoundsLayoutHint);
Rectangle paneBounds = parent.getClientArea();
@@ -295,6 +296,7 @@
headerFigure.add(arrowFigure);
pinFigure = new PinFigure();
+ pinFigure.setBorder(new MarginBorder(0, 0, 0, 2));
expandablePane = new Figure();
@@ -336,8 +338,8 @@
.getTopRight().getTranslated(-1, 1));
g.drawLine(headerBounds.getBottomLeft().getTranslated(1, 0),
headerBounds.getTopLeft().getTranslated(1, 1));
- g.drawLine(headerBounds.getBottomRight().getTranslated(-1, 0),
- headerBounds.getTopRight().getTranslated(-1, 1));
+ g.drawLine(headerBounds.getBottomRight().getTranslated(-2, 0),
+ headerBounds.getTopRight().getTranslated(-2, 1));
g.drawLine(pinAreaBounds.getTopLeft().getTranslated(0, 1),
pinAreaBounds.getTopRight().getTranslated(-1, 1));
@@ -350,10 +352,10 @@
points.addPoint(headerBounds.getTopLeft().getTranslated(0, 2));
points.addPoint(headerBounds.getTopLeft().getTranslated(1, 1));
points.addPoint(headerBounds.getTopLeft().getTranslated(2, 0));
- points.addPoint(headerBounds.getTopRight().getTranslated(-2, 0));
- points.addPoint(headerBounds.getTopRight().getTranslated(-1, 1));
- points.addPoint(headerBounds.getTopRight().getTranslated(0, 2));
- points.addPoint(headerBounds.getBottomRight());
+ points.addPoint(headerBounds.getTopRight().getTranslated(-3, 0));
+ points.addPoint(headerBounds.getTopRight().getTranslated(-2, 1));
+ points.addPoint(headerBounds.getTopRight().getTranslated(-1, 2));
+ points.addPoint(headerBounds.getBottomRight().getTranslated(-1, 0));
points.addPoint(pinAreaBounds.getTopRight().getTranslated(-1, 0));
points.addPoint(paneBounds.getBottomRight().getTranslated(-1, -1));
points.addPoint(paneBounds.getBottomLeft().getTranslated(0, -1));
@@ -368,9 +370,9 @@
g.drawPoint(pt.x, pt.y);
pt = headerBounds.getTopLeft().getTranslated(1, 0);
g.drawPoint(pt.x, pt.y);
- pt = headerBounds.getTopRight().getTranslated(-1, 0);
+ pt = headerBounds.getTopRight().getTranslated(-2, 0);
g.drawPoint(pt.x, pt.y);
- pt = headerBounds.getTopRight().getTranslated(0, 1);
+ pt = headerBounds.getTopRight().getTranslated(-1, 1);
g.drawPoint(pt.x, pt.y);
} else {
@@ -427,6 +429,19 @@
return isExpanded() && pinFigure.getModel().isSelected();
}
+/**
+ * Pins or unpins the stack. The stack can be pinned open only when it is
+ * expanded. Attempts to pin it when it is collapsed will do nothing.
+ *
+ * @param pinned
+ * true
if the stack is to be pinned
+ */
+public void setPinned(boolean pinned) {
+ if (isExpanded()) {
+ pinFigure.setSelected(pinned);
+ }
+}
+
public void setExpanded(boolean value) {
arrowFigure.setSelected(value);
if (!value) {
@@ -448,31 +463,13 @@
if (newLayoutMode == PaletteViewerPreferences.LAYOUT_LIST
|| newLayoutMode == PaletteViewerPreferences.LAYOUT_DETAILS) {
- headerFigure.setLayoutManager(new StackLayout() {
-
- public void layout(IFigure figure) {
- Rectangle r = figure.getClientArea();
- List children = figure.getChildren();
- IFigure child;
- for (int i = 0; i < children.size(); i++) {
- child = (IFigure) children.get(i);
- if (child == arrowFigure) {
- Rectangle.SINGLETON.setBounds(r);
- Rectangle.SINGLETON.width = 11;
- child.setBounds(Rectangle.SINGLETON);
- } else {
- child.setBounds(r);
- }
- }
- }
- });
+ headerFigure.setLayoutManager(new HeaderListLayout());
expandablePane.setLayoutManager(new ToolbarLayout());
expandablePane.setBorder(new MarginBorder(1, 0, 1, 0));
- setLayoutManager(new PaletteStackListLayout());
+ setLayoutManager(new ToolbarLayout());
} else {
-
headerFigure.setLayoutManager(new BorderLayout());
if (activeToolFigure != null) {
headerFigure.setConstraint(activeToolFigure, BorderLayout.CENTER);
@@ -482,7 +479,7 @@
setLayoutManager(new PaletteStackIconLayout());
// account for space used by pin figure
- expandablePane.setBorder(new MarginBorder(18, 2, 2, 2));
+ expandablePane.setBorder(new MarginBorder(18, 0, 0, 0));
if (layoutMode == PaletteViewerPreferences.LAYOUT_COLUMNS) {
expandablePane.setLayoutManager(new ColumnsLayout());
@@ -515,12 +512,18 @@
if (isExpanded()) {
if (expandablePane.getParent() != this) {
add(expandablePane);
- add(pinFigure);
+
+ if (layoutMode == PaletteViewerPreferences.LAYOUT_LIST
+ || layoutMode == PaletteViewerPreferences.LAYOUT_DETAILS) {
+ headerFigure.add(pinFigure);
+ } else {
+ add(pinFigure);
+ }
}
} else {
if (expandablePane.getParent() == this) {
remove(expandablePane);
- remove(pinFigure);
+ pinFigure.getParent().remove(pinFigure);
}
}
}
Index: src/org/eclipse/gef/internal/ui/palette/editparts/PinnablePaletteStackEditPart.java
===================================================================
RCS file: /cvsroot/tools/org.eclipse.gef/plugins/org.eclipse.gef/src/org/eclipse/gef/internal/ui/palette/editparts/PinnablePaletteStackEditPart.java,v
retrieving revision 1.1
diff -u -r1.1 PinnablePaletteStackEditPart.java
--- src/org/eclipse/gef/internal/ui/palette/editparts/PinnablePaletteStackEditPart.java 1 Apr 2008 16:28:49 -0000 1.1
+++ src/org/eclipse/gef/internal/ui/palette/editparts/PinnablePaletteStackEditPart.java 4 Apr 2008 15:14:57 -0000
@@ -23,6 +23,7 @@
import org.eclipse.gef.palette.PaletteStack;
import org.eclipse.gef.palette.ToolEntry;
import org.eclipse.gef.ui.palette.PaletteViewer;
+import org.eclipse.gef.ui.palette.editparts.IPinnableEditPart;
import org.eclipse.gef.ui.palette.editparts.PaletteEditPart;
/**
@@ -35,7 +36,7 @@
*/
public class PinnablePaletteStackEditPart
extends PaletteEditPart
- implements IPaletteStackEditPart {
+ implements IPaletteStackEditPart, IPinnableEditPart {
// listen to see if active tool is changed in the palette
private PaletteListener paletteListener = new PaletteListener() {
@@ -200,11 +201,27 @@
}
public void openMenu() {
- getStackFigure().setExpanded(true);
+ setExpanded(true);
+}
+
+public void setExpanded(boolean value) {
+ getStackFigure().setExpanded(value);
}
public boolean isExpanded() {
return getStackFigure().isExpanded();
}
+public boolean canBePinned() {
+ return isExpanded();
+}
+
+public boolean isPinnedOpen() {
+ return getStackFigure().isPinnedOpen();
+}
+
+public void setPinnedOpen(boolean pinned) {
+ getStackFigure().setPinned(pinned);
+}
+
}
Index: src/org/eclipse/gef/internal/ui/palette/editparts/GroupEditPart.java
===================================================================
RCS file: /cvsroot/tools/org.eclipse.gef/plugins/org.eclipse.gef/src/org/eclipse/gef/internal/ui/palette/editparts/GroupEditPart.java,v
retrieving revision 1.11
diff -u -r1.11 GroupEditPart.java
--- src/org/eclipse/gef/internal/ui/palette/editparts/GroupEditPart.java 1 Apr 2008 16:28:49 -0000 1.11
+++ src/org/eclipse/gef/internal/ui/palette/editparts/GroupEditPart.java 4 Apr 2008 15:14:56 -0000
@@ -10,9 +10,11 @@
*******************************************************************************/
package org.eclipse.gef.internal.ui.palette.editparts;
+import org.eclipse.draw2d.Border;
import org.eclipse.draw2d.Figure;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.LayoutManager;
+import org.eclipse.draw2d.MarginBorder;
import org.eclipse.draw2d.ToolbarLayout;
import org.eclipse.gef.internal.ui.palette.PaletteColorUtil;
@@ -24,6 +26,12 @@
extends PaletteEditPart
{
+/** Scrollpane border constant for icon and column layout mode **/
+private static final Border SCROLL_PANE_BORDER = new MarginBorder(2, 2, 2, 2);
+
+/** Scrollpane border constant for list and details layout mode **/
+private static final Border SCROLL_PANE_LIST_BORDER = new MarginBorder(2, 0, 2, 0);
+
private int cachedLayout = -1;
public GroupEditPart(PaletteContainer group) {
@@ -51,13 +59,16 @@
LayoutManager manager;
if (layout == PaletteViewerPreferences.LAYOUT_COLUMNS) {
manager = new ColumnsLayout();
+ getContentPane().setBorder(SCROLL_PANE_BORDER);
} else if (layout == PaletteViewerPreferences.LAYOUT_ICONS) {
PaletteContainerFlowLayout flow = new PaletteContainerFlowLayout();
flow.setMajorSpacing(0);
flow.setMinorSpacing(0);
manager = flow;
+ getContentPane().setBorder(SCROLL_PANE_BORDER);
} else {
manager = new ToolbarLayout();
+ getContentPane().setBorder(SCROLL_PANE_LIST_BORDER);
}
getContentPane().setLayoutManager(manager);
}
Index: src/org/eclipse/gef/internal/ui/palette/editparts/ToolEntryEditPart.java
===================================================================
RCS file: /cvsroot/tools/org.eclipse.gef/plugins/org.eclipse.gef/src/org/eclipse/gef/internal/ui/palette/editparts/ToolEntryEditPart.java,v
retrieving revision 1.31
diff -u -r1.31 ToolEntryEditPart.java
--- src/org/eclipse/gef/internal/ui/palette/editparts/ToolEntryEditPart.java 1 Apr 2008 16:28:49 -0000 1.31
+++ src/org/eclipse/gef/internal/ui/palette/editparts/ToolEntryEditPart.java 4 Apr 2008 15:14:57 -0000
@@ -42,6 +42,7 @@
import org.eclipse.gef.palette.PaletteStack;
import org.eclipse.gef.palette.ToolEntry;
import org.eclipse.gef.ui.palette.PaletteViewerPreferences;
+import org.eclipse.gef.ui.palette.editparts.IPinnableEditPart;
import org.eclipse.gef.ui.palette.editparts.PaletteEditPart;
public class ToolEntryEditPart
@@ -207,6 +208,18 @@
super(paletteEntry);
}
+public Object getAdapter(Class key) {
+ if (key == IPinnableEditPart.class) {
+ if ((getParent() instanceof PinnablePaletteStackEditPart)
+ && ((PinnablePaletteStackEditPart) getParent()).canBePinned()
+ && ((PaletteStack) getParent().getModel()).getActiveEntry().equals(
+ getModel())) {
+ return getParent();
+ }
+ }
+ return super.getAdapter(key);
+}
+
protected AccessibleEditPart createAccessible() {
return new AccessibleGraphicalEditPart () {
public void getDescription(AccessibleEvent e) {
@@ -445,11 +458,15 @@
static Rectangle getSelectionRectangle(int layoutMode, DetailedLabelFigure labelFigure) {
Rectangle rect = Rectangle.SINGLETON;
- rect.setBounds(labelFigure.getBounds());
+ rect.setBounds(labelFigure.getClientArea());
if (layoutMode == PaletteViewerPreferences.LAYOUT_LIST
|| layoutMode == PaletteViewerPreferences.LAYOUT_DETAILS) {
+ rect.x -= 5;
+ rect.y -= 2;
rect.width = labelFigure.getPreferredSize().width + 17;
- rect.x += 11;
+ rect.height += 4;
+ } else {
+ rect.expand(2, 2);
}
rect.intersect(labelFigure.getBounds().getExpanded(-1, -1));
return rect;
Index: src/org/eclipse/gef/internal/ui/palette/editparts/DrawerFigure.java
===================================================================
RCS file: /cvsroot/tools/org.eclipse.gef/plugins/org.eclipse.gef/src/org/eclipse/gef/internal/ui/palette/editparts/DrawerFigure.java,v
retrieving revision 1.42
diff -u -r1.42 DrawerFigure.java
--- src/org/eclipse/gef/internal/ui/palette/editparts/DrawerFigure.java 1 Apr 2008 16:28:49 -0000 1.42
+++ src/org/eclipse/gef/internal/ui/palette/editparts/DrawerFigure.java 4 Apr 2008 15:14:56 -0000
@@ -60,8 +60,10 @@
protected static final Color FG_COLOR = FigureUtilities.mixColors(
PaletteColorUtil.WIDGET_NORMAL_SHADOW, PaletteColorUtil.WIDGET_BACKGROUND);
-/** Scrollpane border constant **/
-protected static final Border SCROLL_PANE_BORDER = new MarginBorder(2, 0, 2, 0);
+/** Scrollpane border constant for icon and column layout mode **/
+protected static final Border SCROLL_PANE_BORDER = new MarginBorder(2, 2, 2, 2);
+/** Scrollpane border constant for list and details layout mode **/
+protected static final Border SCROLL_PANE_LIST_BORDER = new MarginBorder(2, 0, 2, 0);
/** Title margin border constant **/
protected static final Border TITLE_MARGIN_BORDER = new MarginBorder(4, 2, 2, 2);
/** Toggle button border constant**/
@@ -335,7 +337,6 @@
scrollpane.setContents(new Figure());
scrollpane.getContents().setOpaque(true);
scrollpane.getContents().setBackgroundColor(PaletteColorUtil.WIDGET_LIST_BACKGROUND);
- scrollpane.getContents().setBorder(SCROLL_PANE_BORDER);
}
IFigure buildTooltip() {
@@ -465,13 +466,16 @@
LayoutManager manager;
if (layoutMode == PaletteViewerPreferences.LAYOUT_COLUMNS) {
manager = new ColumnsLayout();
+ getContentPane().setBorder(SCROLL_PANE_BORDER);
} else if (layoutMode == PaletteViewerPreferences.LAYOUT_ICONS) {
PaletteContainerFlowLayout fl = new PaletteContainerFlowLayout();
fl.setMinorSpacing(0);
fl.setMajorSpacing(0);
manager = fl;
+ getContentPane().setBorder(SCROLL_PANE_BORDER);
} else {
manager = new ToolbarLayout();
+ getContentPane().setBorder(SCROLL_PANE_LIST_BORDER);
}
getContentPane().setLayoutManager(manager);
}
Index: src/org/eclipse/gef/internal/ui/palette/editparts/DrawerEditPart.java
===================================================================
RCS file: /cvsroot/tools/org.eclipse.gef/plugins/org.eclipse.gef/src/org/eclipse/gef/internal/ui/palette/editparts/DrawerEditPart.java,v
retrieving revision 1.27
diff -u -r1.27 DrawerEditPart.java
--- src/org/eclipse/gef/internal/ui/palette/editparts/DrawerEditPart.java 1 Apr 2008 16:28:49 -0000 1.27
+++ src/org/eclipse/gef/internal/ui/palette/editparts/DrawerEditPart.java 4 Apr 2008 15:14:56 -0000
@@ -35,6 +35,7 @@
import org.eclipse.gef.palette.PaletteDrawer;
import org.eclipse.gef.palette.PaletteTemplateEntry;
import org.eclipse.gef.ui.palette.PaletteViewerPreferences;
+import org.eclipse.gef.ui.palette.editparts.IPinnableEditPart;
import org.eclipse.gef.ui.palette.editparts.PaletteAnimator;
import org.eclipse.gef.ui.palette.editparts.PaletteEditPart;
@@ -44,7 +45,7 @@
* @author Pratik Shah
*/
public class DrawerEditPart
- extends PaletteEditPart
+ extends PaletteEditPart implements IPinnableEditPart
{
private static final String PROPERTY_EXPANSION_STATE = "expansion"; //$NON-NLS-1$
@@ -128,18 +129,10 @@
return getDrawerFigure().getContentPane();
}
-/**
- * Returns the expansion state of the drawer
- * @return true
if the drawer is expanded; false otherwise
- */
public boolean isExpanded() {
return getDrawerFigure().isExpanded();
}
-/**
- * Returns true
if the drawer is pinned open.
- * @return boolean
- */
public boolean isPinnedOpen() {
return getDrawerFigure().isPinnedOpen();
}
@@ -264,10 +257,6 @@
getDrawerFigure().setTitleIcon(image);
}
-/**
- * Sets the drawer's pinned state to the specified value.
- * @param pinned true
if the drawer should be pinned when opened
- */
public void setPinnedOpen(boolean pinned) {
getDrawerFigure().setPinned(pinned);
}
Index: src/org/eclipse/gef/ui/parts/PaletteViewerKeyHandler.java
===================================================================
RCS file: /cvsroot/tools/org.eclipse.gef/plugins/org.eclipse.gef/src/org/eclipse/gef/ui/parts/PaletteViewerKeyHandler.java,v
retrieving revision 1.32
diff -u -r1.32 PaletteViewerKeyHandler.java
--- src/org/eclipse/gef/ui/parts/PaletteViewerKeyHandler.java 1 Apr 2008 16:28:49 -0000 1.32
+++ src/org/eclipse/gef/ui/parts/PaletteViewerKeyHandler.java 4 Apr 2008 15:14:57 -0000
@@ -23,11 +23,13 @@
import org.eclipse.gef.internal.ui.palette.editparts.DrawerEditPart;
import org.eclipse.gef.internal.ui.palette.editparts.GroupEditPart;
import org.eclipse.gef.internal.ui.palette.editparts.IPaletteStackEditPart;
+import org.eclipse.gef.internal.ui.palette.editparts.PaletteStackEditPart;
+import org.eclipse.gef.internal.ui.palette.editparts.PinnablePaletteStackEditPart;
import org.eclipse.gef.internal.ui.palette.editparts.TemplateEditPart;
import org.eclipse.gef.internal.ui.palette.editparts.ToolEntryEditPart;
+import org.eclipse.gef.palette.PaletteEntry;
import org.eclipse.gef.palette.PaletteStack;
import org.eclipse.gef.ui.palette.PaletteViewer;
-import org.eclipse.gef.ui.palette.editparts.PaletteEditPart;
/**
* KeyHandler for the {@link org.eclipse.gef.ui.palette.PaletteViewer Palette}.
@@ -64,9 +66,15 @@
return result && isExpandedDrawer(getFocusEditPart());
}
-private boolean acceptOpenContextMenu(KeyEvent event) {
+private boolean acceptExpandStack(KeyEvent event) {
return event.keyCode == SWT.ARROW_DOWN && (event.stateMask & SWT.ALT) > 0
- && isContextMenu(getFocusEditPart());
+ && isCollapsedStack(getFocusEditPart());
+}
+
+private boolean acceptCollapseStack(KeyEvent event) {
+ return event.keyCode == SWT.ARROW_UP
+ && (event.stateMask & SWT.ALT) > 0
+ && isExpandedStack(getFocusEditPart());
}
private boolean acceptSetFocusOnDrawer(KeyEvent event) {
@@ -88,12 +96,21 @@
if (isCollapsedDrawer(palettePart)) {
navList.add(palettePart);
return;
- } else if (stackPart instanceof IPaletteStackEditPart
- && stackPart.getChildren().contains(palettePart)) {
- // we only want to add the top level item to the navlist
- if (((PaletteStack)((PaletteEditPart)stackPart).getModel())
- .getActiveEntry().equals(palettePart.getModel()))
- navList.add(palettePart);
+ } else if (stackPart instanceof PaletteStackEditPart
+ && stackPart.getChildren().contains(palettePart)) {
+ // we only want to add the top level item to the navlist
+ if (((PaletteStack) stackPart.getModel()).getActiveEntry().equals(
+ palettePart.getModel()))
+ navList.add(palettePart);
+ } else if (stackPart instanceof PinnablePaletteStackEditPart
+ && stackPart.getChildren().contains(palettePart)) {
+ // we only want to add the top level item to the navlist unless
+ // the palette stack is expanded
+ if (((PinnablePaletteStackEditPart) stackPart).isExpanded()
+ || ((PaletteStack) stackPart.getModel()).getActiveEntry()
+ .equals(palettePart.getModel())) {
+ navList.add(palettePart);
+ }
} else if ((palettePart instanceof ToolEntryEditPart
|| palettePart instanceof DrawerEditPart
|| palettePart instanceof TemplateEditPart)) {
@@ -173,11 +190,25 @@
}
/**
- * Returns true
if the passed
- * Editpart's parent contains a context menu, false otherwise.
+ * Returns true
if the passed focusPart is a collapsed pinnable
+ * palette stack, false otherwise.
+ */
+boolean isCollapsedStack(EditPart focusPart) {
+ EditPart parent = focusPart.getParent();
+ return parent instanceof PaletteStackEditPart
+ || (parent instanceof PinnablePaletteStackEditPart
+ && !((PinnablePaletteStackEditPart) parent).isExpanded());
+}
+
+/**
+ * Returns true
if the passed focusPart is an expanded pinnable
+ * palette stack, false otherwise.
*/
-boolean isContextMenu(EditPart part) {
- return part.getParent() instanceof IPaletteStackEditPart;
+boolean isExpandedStack(EditPart focusPart) {
+ EditPart parent = focusPart.getParent();
+ return parent instanceof PaletteStackEditPart
+ || (parent instanceof PinnablePaletteStackEditPart
+ && ((PinnablePaletteStackEditPart) parent).isExpanded());
}
/**
@@ -193,11 +224,15 @@
if (acceptCollapseDrawer(event)) {
collapseDrawer();
return true;
- }
- if (acceptOpenContextMenu(event)) {
- openContextMenu();
+ }
+ if (acceptExpandStack(event)) {
+ expandStack();
return true;
}
+ if (acceptCollapseStack(event)) {
+ collapseStack(event);
+ return true;
+ }
if (acceptIntoExpandedDrawer(event)) {
if (navigateIntoExpandedDrawer(event))
return true;
@@ -232,8 +267,13 @@
protected void navigateTo(EditPart part, KeyEvent event) {
if (part == null)
return;
- getViewer().select(part);
- getViewer().reveal(part);
+ if (part instanceof IPaletteStackEditPart) {
+ PaletteEntry activeEntry = ((PaletteStack) part.getModel())
+ .getActiveEntry();
+ part = (EditPart) getViewer().getEditPartRegistry().get(activeEntry);
+ }
+ getViewer().select(part);
+ getViewer().reveal(part);
}
private boolean navigateToDrawer(KeyEvent event) {
@@ -272,8 +312,12 @@
return false;
}
-private void openContextMenu() {
+private void expandStack() {
((IPaletteStackEditPart)getFocusEditPart().getParent()).openMenu();
}
+private void collapseStack(KeyEvent event) {
+ ((PinnablePaletteStackEditPart)getFocusEditPart().getParent()).setExpanded(false);
+ navigateTo(getFocusEditPart().getParent(), event);
+}
}
Index: src/org/eclipse/gef/ui/palette/editparts/IPinnableEditPart.java
===================================================================
RCS file: src/org/eclipse/gef/ui/palette/editparts/IPinnableEditPart.java
diff -N src/org/eclipse/gef/ui/palette/editparts/IPinnableEditPart.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/gef/ui/palette/editparts/IPinnableEditPart.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.gef.ui.palette.editparts;
+
+/**
+ * This interface is used to identify and work with a pinnable palette editpart
+ * (e.g. drawers, stacks).
+ *
+ * @author crevells
+ * @since 3.4
+ */
+public interface IPinnableEditPart {
+
+/**
+ * Returns true
if the palette editpart is pinned open.
+ *
+ * @return boolean
+ */
+public boolean isPinnedOpen();
+
+/**
+ * @return true
if the palette editpart can be pinned open.
+ */
+public boolean canBePinned();
+
+/**
+ * Sets the palette editpart's pinned state to the specified value.
+ *
+ * @param pinned
+ * true
if the palette editpart should be pinned when
+ * opened
+ */
+public void setPinnedOpen(boolean pinned);
+
+/**
+ * Returns the expansion state of the palette editpart
+ *
+ * @return true
if the palette editpart is expanded; false
+ * otherwise
+ */
+public boolean isExpanded();
+
+}