### Eclipse Workspace Patch 1.0 #P org.eclipse.gef.examples.shapes Index: src/org/eclipse/gef/examples/shapes/ShapesEditorPaletteFactory.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.gef/examples/org.eclipse.gef.examples.shapes/src/org/eclipse/gef/examples/shapes/ShapesEditorPaletteFactory.java,v retrieving revision 1.9 diff -u -r1.9 ShapesEditorPaletteFactory.java --- src/org/eclipse/gef/examples/shapes/ShapesEditorPaletteFactory.java 29 Sep 2005 22:00:25 -0000 1.9 +++ src/org/eclipse/gef/examples/shapes/ShapesEditorPaletteFactory.java 22 Feb 2008 14:43:37 -0000 @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2004, 2005 Elias Volanakis and others. + * Copyright (c) 2004, 2008 Elias Volanakis 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 @@ -20,6 +20,7 @@ import org.eclipse.gef.palette.PaletteGroup; import org.eclipse.gef.palette.PaletteRoot; import org.eclipse.gef.palette.PaletteSeparator; +import org.eclipse.gef.palette.PaletteToolbar; import org.eclipse.gef.palette.PanningSelectionToolEntry; import org.eclipse.gef.palette.ToolEntry; import org.eclipse.gef.requests.CreationFactory; @@ -82,18 +83,15 @@ /** Create the "Tools" group. */ private static PaletteContainer createToolsGroup(PaletteRoot palette) { - PaletteGroup toolGroup = new PaletteGroup("Tools"); + PaletteToolbar toolbar = new PaletteToolbar("Tools"); // Add a selection tool to the group ToolEntry tool = new PanningSelectionToolEntry(); - toolGroup.add(tool); + toolbar.add(tool); palette.setDefaultEntry(tool); // Add a marquee tool to the group - toolGroup.add(new MarqueeToolEntry()); - - // Add a (unnamed) separator to the group - toolGroup.add(new PaletteSeparator()); + toolbar.add(new MarqueeToolEntry()); // Add (solid-line) connection tool tool = new ConnectionCreationToolEntry( @@ -107,7 +105,7 @@ }, ImageDescriptor.createFromFile(ShapesPlugin.class, "icons/connection_s16.gif"), ImageDescriptor.createFromFile(ShapesPlugin.class, "icons/connection_s24.gif")); - toolGroup.add(tool); + toolbar.add(tool); // Add (dashed-line) connection tool tool = new ConnectionCreationToolEntry( @@ -121,9 +119,9 @@ }, ImageDescriptor.createFromFile(ShapesPlugin.class, "icons/connection_d16.gif"), ImageDescriptor.createFromFile(ShapesPlugin.class, "icons/connection_d24.gif")); - toolGroup.add(tool); + toolbar.add(tool); - return toolGroup; + return toolbar; } /** Utility class. */ #P org.eclipse.gef Index: src/org/eclipse/gef/internal/InternalImages.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.gef/plugins/org.eclipse.gef/src/org/eclipse/gef/internal/InternalImages.java,v retrieving revision 1.13 diff -u -r1.13 InternalImages.java --- src/org/eclipse/gef/internal/InternalImages.java 2 Jun 2005 19:22:39 -0000 1.13 +++ src/org/eclipse/gef/internal/InternalImages.java 22 Feb 2008 14:43:38 -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 @@ -10,6 +10,8 @@ *******************************************************************************/ package org.eclipse.gef.internal; +import org.eclipse.swt.graphics.Image; + import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; @@ -59,6 +61,26 @@ public static final ImageDescriptor DESC_BLOCK_ALIGN_CENTER; public static final ImageDescriptor DESC_BLOCK_ALIGN_RIGHT; +public static final ImageDescriptor DESC_PINNED; +public static final ImageDescriptor DESC_UNPINNED; + +public static final ImageDescriptor DESC_PALETTE; + +/** + * Can be used to access the cached pinned image by using {@link #get(String)}. + */ +public static final String IMG_PINNED = "icons/pinned.gif";//$NON-NLS-1$ + +/** + * Can be used to access the cached pinned image by using {@link #get(String)}. + */ +public static final String IMG_UNPINNED = "icons/unpinned.gif";//$NON-NLS-1$ + +/** + * Can be used to access the cached pinned image by using {@link #get(String)}. + */ +public static final String IMG_PALETTE = "icons/palette_view.gif";//$NON-NLS-1$ + static { DESC_BOLD = createDescriptor("icons/style_bold.gif"); //$NON-NLS-1$ DESC_ITALIC = createDescriptor("icons/style_italic.gif"); //$NON-NLS-1$ @@ -71,8 +93,8 @@ DESC_BLOCK_ALIGN_CENTER = createDescriptor("icons/style_paragraph_center.gif"); //$NON-NLS-1$ DESC_BLOCK_ALIGN_RIGHT = createDescriptor("icons/style_paragraph_right.gif"); //$NON-NLS-1$ - DESC_ZOOM_IN = createDescriptor("icons/zoomplus.gif"); //$NON-NLS-1$ - DESC_ZOOM_OUT = createDescriptor("icons/zoomminus.gif"); //$NON-NLS-1$ + DESC_ZOOM_IN = createDescriptor("icons/zoom_in.gif"); //$NON-NLS-1$ + DESC_ZOOM_OUT = createDescriptor("icons/zoom_out.gif"); //$NON-NLS-1$ DESC_MATCH_WIDTH = createDescriptor("icons/matchwidth.gif"); //$NON-NLS-1$ DESC_MATCH_HEIGHT = createDescriptor("icons/matchheight.gif"); //$NON-NLS-1$ @@ -101,10 +123,45 @@ ICON_MATCH_WIDTH = createDescriptor("icons/sizehz.gif"); //$NON-NLS-1$ ICON_MATCH_HEIGHT = createDescriptor("icons/sizevt.gif"); //$NON-NLS-1$ + + DESC_PINNED = createAndCache(IMG_PINNED); + DESC_UNPINNED = createAndCache(IMG_UNPINNED); + + DESC_PALETTE = createAndCache(IMG_PALETTE); + } private static ImageDescriptor createDescriptor(String filename) { return ImageDescriptor.createFromFile(InternalImages.class, filename); } +/** + * Creates the image descriptor from the filename given and caches it in the + * plugin's image registry. + * + * @param imageName + * the full filename of the image + * @return the new image descriptor + */ +private static ImageDescriptor createAndCache(String imageName) { + ImageDescriptor result = createDescriptor(imageName); + InternalGEFPlugin.getDefault().getImageRegistry().put(imageName, result); + return result; +} + +/** + * Gets an image from the image registry. This image should not be disposed + * of, that is handled in the image registry. The image descriptor must have + * previously been cached in the image registry. The cached images for the + * public image names defined in this file can be retrieved using this + * method. + * + * @param imageName + * the full filename of the image + * @return the image or null if it has not been cached in the registry + */ +public static Image get(String imageName) { + return InternalGEFPlugin.getDefault().getImageRegistry().get(imageName); +} + } Index: src/org/eclipse/gef/internal/ui/palette/editparts/PaletteStackEditPart.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.gef/plugins/org.eclipse.gef/src/org/eclipse/gef/internal/ui/palette/editparts/PaletteStackEditPart.java,v retrieving revision 1.16 diff -u -r1.16 PaletteStackEditPart.java --- src/org/eclipse/gef/internal/ui/palette/editparts/PaletteStackEditPart.java 21 Dec 2007 21:02:26 -0000 1.16 +++ src/org/eclipse/gef/internal/ui/palette/editparts/PaletteStackEditPart.java 22 Feb 2008 14:43:38 -0000 @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2007 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 @@ -12,6 +12,7 @@ import java.beans.PropertyChangeEvent; import java.util.Iterator; +import java.util.List; import org.eclipse.swt.events.MenuEvent; import org.eclipse.swt.events.MenuListener; @@ -23,6 +24,7 @@ import org.eclipse.draw2d.ActionEvent; import org.eclipse.draw2d.ActionListener; +import org.eclipse.draw2d.Border; import org.eclipse.draw2d.BorderLayout; import org.eclipse.draw2d.ButtonBorder; import org.eclipse.draw2d.ButtonModel; @@ -35,12 +37,12 @@ import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.StackLayout; import org.eclipse.draw2d.geometry.Dimension; -import org.eclipse.draw2d.geometry.Insets; import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.gef.GraphicalEditPart; import org.eclipse.gef.Request; import org.eclipse.gef.RequestConstants; +import org.eclipse.gef.internal.ui.palette.PaletteColorUtil; import org.eclipse.gef.palette.PaletteEntry; import org.eclipse.gef.palette.PaletteListener; import org.eclipse.gef.palette.PaletteStack; @@ -61,14 +63,15 @@ { private static final Dimension EMPTY_DIMENSION = new Dimension(0, 0); +private static final Border BORDER_TOGGLE = new ButtonBorder(ButtonBorder.SCHEMES.TOOLBAR); // listen to changes of clickable tool figure private ChangeListener clickableListener = new ChangeListener() { public void handleStateChanged(ChangeEvent event) { if (event.getPropertyName().equals(ButtonModel.MOUSEOVER_PROPERTY)) - arrowFigure.getModel().setMouseOver(activeFigure.getModel().isMouseOver()); + getClickableFigure().getModel().setMouseOver(activeFigure.getModel().isMouseOver()); else if (event.getPropertyName().equals(ButtonModel.ARMED_PROPERTY)) - arrowFigure.getModel().setArmed(activeFigure.getModel().isArmed()); + getClickableFigure().getModel().setArmed(activeFigure.getModel().isArmed()); } }; @@ -76,9 +79,9 @@ private ChangeListener clickableArrowListener = new ChangeListener() { public void handleStateChanged(ChangeEvent event) { if (event.getPropertyName().equals(ButtonModel.MOUSEOVER_PROPERTY)) - activeFigure.getModel().setMouseOver(arrowFigure.getModel().isMouseOver()); + activeFigure.getModel().setMouseOver(getClickableFigure().getModel().isMouseOver()); if (event.getPropertyName().equals(ButtonModel.ARMED_PROPERTY)) - activeFigure.getModel().setArmed(arrowFigure.getModel().isArmed()); + activeFigure.getModel().setArmed(getClickableFigure().getModel().isArmed()); } }; @@ -93,16 +96,17 @@ private PaletteListener paletteListener = new PaletteListener() { public void activeToolChanged(PaletteViewer palette, ToolEntry tool) { if (getStack().getChildren().contains(tool)) { - if (!arrowFigure.getModel().isSelected()) - arrowFigure.getModel().setSelected(true); + if (!getClickableFigure().getModel().isSelected()) + getClickableFigure().getModel().setSelected(true); if (!getStack().getActiveEntry().equals(tool)) getStack().setActiveEntry(tool); } else - arrowFigure.getModel().setSelected(false); + getClickableFigure().getModel().setSelected(false); } }; private Clickable activeFigure; +private Clickable clickableFigure; private RolloverArrow arrowFigure; private Figure contentsFigure; private Menu menu; @@ -166,62 +170,70 @@ * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#createFigure() */ public IFigure createFigure() { - Figure figure = new Figure() { - public Dimension getPreferredSize(int wHint, int hHint) { - if (PaletteStackEditPart.this.getChildren().isEmpty()) - return EMPTY_DIMENSION; - return super.getPreferredSize(wHint, hHint); - } - - public void paintBorder(Graphics graphics) { - int layoutMode = getPreferenceSource().getLayoutSetting(); - if (layoutMode == PaletteViewerPreferences.LAYOUT_LIST - || layoutMode == PaletteViewerPreferences.LAYOUT_DETAILS) - return; - - Rectangle rect = getBounds().getCopy(); - - graphics.translate(getLocation()); - graphics.setBackgroundColor(ColorConstants.listForeground); - - // fill the corner arrow - int[] points = new int[6]; - - points[0] = rect.width; - points[1] = rect.height - 5; - points[2] = rect.width; - points[3] = rect.height; - points[4] = rect.width - 5; - points[5] = rect.height; - - graphics.fillPolygon(points); - - graphics.translate(getLocation().getNegated()); - } - }; - figure.setLayoutManager(new BorderLayout()); - + + IFigure stackFigure; + arrowFigure = new RolloverArrow(); + + if (isToolbarItem()) { + // the entire stack figure is clickable on the toolbar + stackFigure = new Clickable() { + public boolean hasFocus() { + return false; + } + public Dimension getPreferredSize(int wHint, int hHint) { + if (PaletteStackEditPart.this.getChildren().isEmpty()) + return EMPTY_DIMENSION; + return super.getPreferredSize(wHint, hHint); + } + }; + ((Clickable)stackFigure).setRolloverEnabled(true); + stackFigure.setBorder(BORDER_TOGGLE); + + // Set up the arrow figure. Disable the arrow figure so clicks go to the stack figure. + arrowFigure.setBackgroundColor(ColorConstants.black); + arrowFigure.setEnabled(false); + + clickableFigure = ((Clickable)stackFigure); + } else { + // the stack figure is not clickable on the palette so that drag and drop still works + stackFigure = new Figure() { + public Dimension getPreferredSize(int wHint, int hHint) { + if (PaletteStackEditPart.this.getChildren().isEmpty()) + return EMPTY_DIMENSION; + return super.getPreferredSize(wHint, hHint); + } + }; + + // Set up the arrow figure. + arrowFigure.setBackgroundColor(PaletteColorUtil.WIDGET_DARK_SHADOW); + + clickableFigure = arrowFigure; + } + contentsFigure = new Figure(); - StackLayout stackLayout = new StackLayout(); // make it so the stack layout does not allow the invisible figures to contribute // to its bounds stackLayout.setObserveVisibility(true); contentsFigure.setLayoutManager(stackLayout); - figure.add(contentsFigure, BorderLayout.CENTER); - - arrowFigure = new RolloverArrow(); - - arrowFigure.addChangeListener(clickableArrowListener); - - arrowFigure.addActionListener(actionListener); + stackFigure.add(contentsFigure); + stackFigure.add(arrowFigure); + + getClickableFigure().addChangeListener(clickableArrowListener); + getClickableFigure().addActionListener(actionListener); - int layoutMode = getPreferenceSource().getLayoutSetting(); - if (layoutMode == PaletteViewerPreferences.LAYOUT_LIST - || layoutMode == PaletteViewerPreferences.LAYOUT_DETAILS) - figure.add(arrowFigure, BorderLayout.RIGHT); - return figure; + return stackFigure; +} + +/** + * Returns the Clickable figure. This differs depending on + * whether or not this palette stack is on the palette toolbar. + * + * @return the Clickable figure + */ +private Clickable getClickableFigure() { + return clickableFigure; } /** @@ -230,8 +242,8 @@ public void deactivate() { if (activeFigure != null) activeFigure.removeChangeListener(clickableListener); - arrowFigure.removeActionListener(actionListener); - arrowFigure.removeChangeListener(clickableArrowListener); + getClickableFigure().removeActionListener(actionListener); + getClickableFigure().removeChangeListener(clickableArrowListener); getPaletteViewer().removePaletteListener(paletteListener); super.deactivate(); } @@ -288,7 +300,7 @@ figureBounds.getBottomLeft().x, figureBounds.getBottomLeft().y); // remove feedback from the arrow Figure and children figures - arrowFigure.getModel().setMouseOver(false); + getClickableFigure().getModel().setMouseOver(false); eraseTargetFeedback(new Request(RequestConstants.REQ_SELECTION)); menu.setLocation(menuLocation); @@ -324,13 +336,31 @@ * @see org.eclipse.gef.editparts.AbstractEditPart#refreshVisuals() */ protected void refreshVisuals() { - int layoutMode = getPreferenceSource().getLayoutSetting(); - if (layoutMode == PaletteViewerPreferences.LAYOUT_LIST - || layoutMode == PaletteViewerPreferences.LAYOUT_DETAILS) { - if (!getFigure().getChildren().contains(arrowFigure)) - getFigure().add(arrowFigure, BorderLayout.RIGHT); - } else if (getFigure().getChildren().contains(arrowFigure)) - getFigure().remove(arrowFigure); + int layoutMode = getLayoutSetting(); + if (layoutMode == PaletteViewerPreferences.LAYOUT_LIST + || layoutMode == PaletteViewerPreferences.LAYOUT_DETAILS) { + getFigure().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); + } + } + } + }); + } else { + getFigure().setLayoutManager(new BorderLayout()); + getFigure().setConstraint(contentsFigure, BorderLayout.CENTER); + getFigure().setConstraint(arrowFigure, BorderLayout.RIGHT); + } } /** @@ -396,35 +426,14 @@ { /** - * Creates a new Clickable with a TriangleFigure as its child. + * Creates a new Clickable that paints a triangle figure. */ RolloverArrow() { - super(new TriangleFigure()); + super(); setRolloverEnabled(true); - setBorder(new ButtonBorder(ButtonBorder.SCHEMES.TOOLBAR)); + setBorder(null); setOpaque(false); - setStyle(Clickable.STYLE_BUTTON); -} - -/** - * Draws a checkered pattern to emulate a toggle button that is in the selected state. - * @param graphics The Graphics object used to paint - */ -protected void fillCheckeredRectangle(Graphics graphics) { - // method taken from ToggleButton - because this figure *isn't* a toggle button, - // but should match the checkered look of the tool's toggle button - graphics.setBackgroundColor(ColorConstants.button); - graphics.setForegroundColor(ColorConstants.buttonLightest); - Rectangle rect = getClientArea(Rectangle.SINGLETON).crop(new Insets(1, 1, 0, 0)); - graphics.fillRectangle(rect.x, rect.y, rect.width, rect.height); - - graphics.clipRect(rect); - graphics.translate(rect.x, rect.y); - int n = rect.width + rect.height; - for (int i = 1; i < n; i += 2) { - graphics.drawLine(0, i, i, 0); - } - graphics.restoreState(); + setPreferredSize(11, -1); } /** @@ -434,49 +443,21 @@ return false; } -/** - * @see org.eclipse.draw2d.Figure#paintFigure(Graphics) - */ -protected void paintFigure(Graphics graphics) { - if (isSelected() && isOpaque()) - fillCheckeredRectangle(graphics); - else - super.paintFigure(graphics); -} - -} - -class TriangleFigure - extends Figure -{ - -/** - * Creates a new TriangleFigure with preferred size 7, -1 - */ -TriangleFigure() { - super(); - setPreferredSize(7, -1); -} - -/** - * @see org.eclipse.draw2d.IFigure#paint(org.eclipse.draw2d.Graphics) - */ -public void paint(Graphics graphics) { +public void paintFigure(Graphics graphics) { Rectangle rect = getBounds().getCopy(); graphics.translate(getLocation()); - graphics.setBackgroundColor(ColorConstants.listForeground); // fill the arrow int[] points = new int[8]; - points[0] = 1; + points[0] = 4; points[1] = rect.height / 2; - points[2] = 6; + points[2] = 9; points[3] = rect.height / 2; - points[4] = 3; + points[4] = 6; points[5] = 3 + rect.height / 2; - points[6] = 1; + points[6] = 4; points[7] = rect.height / 2; graphics.fillPolygon(points); Index: src/org/eclipse/gef/internal/ui/palette/editparts/GroupFigure.java =================================================================== RCS file: src/org/eclipse/gef/internal/ui/palette/editparts/GroupFigure.java diff -N src/org/eclipse/gef/internal/ui/palette/editparts/GroupFigure.java --- src/org/eclipse/gef/internal/ui/palette/editparts/GroupFigure.java 30 Mar 2005 21:27:03 -0000 1.9 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,27 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2005 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.internal.ui.palette.editparts; - -import org.eclipse.draw2d.Border; -import org.eclipse.draw2d.Figure; - -/** - * @author hudsonr - */ -public class GroupFigure extends Figure { - -private static final Border BORDER = new RaisedBorder(2, 2, 2, 2); - -{ - setBorder(BORDER); -} - -} 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.24 diff -u -r1.24 DrawerEditPart.java --- src/org/eclipse/gef/internal/ui/palette/editparts/DrawerEditPart.java 19 Oct 2007 19:47:06 -0000 1.24 +++ src/org/eclipse/gef/internal/ui/palette/editparts/DrawerEditPart.java 22 Feb 2008 14:43:38 -0000 @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2007 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 @@ -19,7 +19,6 @@ import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.IMemento; -import org.eclipse.draw2d.ColorConstants; import org.eclipse.draw2d.FocusEvent; import org.eclipse.draw2d.FocusListener; import org.eclipse.draw2d.IFigure; @@ -32,6 +31,7 @@ import org.eclipse.gef.editparts.ViewportExposeHelper; import org.eclipse.gef.editparts.ViewportMouseWheelHelper; import org.eclipse.gef.internal.InternalImages; +import org.eclipse.gef.internal.ui.palette.PaletteColorUtil; import org.eclipse.gef.palette.PaletteDrawer; import org.eclipse.gef.palette.PaletteTemplateEntry; import org.eclipse.gef.ui.palette.PaletteViewerPreferences; @@ -195,14 +195,15 @@ setImageDescriptor(img); getDrawerFigure().setTitle(getPaletteEntry().getLabel()); - getDrawerFigure().setLayoutMode(getPreferenceSource().getLayoutSetting()); + getDrawerFigure().setLayoutMode(getLayoutSetting()); boolean showPin = getPreferenceSource().getAutoCollapseSetting() == PaletteViewerPreferences.COLLAPSE_AS_NEEDED; getDrawerFigure().showPin(showPin); Color background = getDrawer().getDrawerType().equals( - PaletteTemplateEntry.PALETTE_TYPE_TEMPLATE) ? ColorConstants.listBackground : null; + PaletteTemplateEntry.PALETTE_TYPE_TEMPLATE) ? PaletteColorUtil.WIDGET_LIST_BACKGROUND + : null; getDrawerFigure().getScrollpane().setBackgroundColor(background); } 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.9 diff -u -r1.9 GroupEditPart.java --- src/org/eclipse/gef/internal/ui/palette/editparts/GroupEditPart.java 19 Oct 2007 19:47:06 -0000 1.9 +++ src/org/eclipse/gef/internal/ui/palette/editparts/GroupEditPart.java 22 Feb 2008 14:43:38 -0000 @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2007 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 @@ -10,11 +10,13 @@ *******************************************************************************/ package org.eclipse.gef.internal.ui.palette.editparts; +import org.eclipse.draw2d.Figure; import org.eclipse.draw2d.FlowLayout; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.LayoutManager; import org.eclipse.draw2d.ToolbarLayout; +import org.eclipse.gef.internal.ui.palette.PaletteColorUtil; import org.eclipse.gef.palette.PaletteContainer; import org.eclipse.gef.ui.palette.PaletteViewerPreferences; import org.eclipse.gef.ui.palette.editparts.PaletteEditPart; @@ -33,14 +35,17 @@ * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#createFigure() */ public IFigure createFigure() { - return new GroupFigure(); + Figure figure = new Figure(); + figure.setOpaque(true); + figure.setBackgroundColor(PaletteColorUtil.WIDGET_LIST_BACKGROUND); + return figure; } /** * @see org.eclipse.gef.editparts.AbstractEditPart#refreshVisuals() */ protected void refreshVisuals() { - int layout = getPreferenceSource().getLayoutSetting(); + int layout = getLayoutSetting(); if (cachedLayout == layout) return; cachedLayout = layout; 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.28 diff -u -r1.28 ToolEntryEditPart.java --- src/org/eclipse/gef/internal/ui/palette/editparts/ToolEntryEditPart.java 19 Oct 2007 19:47:06 -0000 1.28 +++ src/org/eclipse/gef/internal/ui/palette/editparts/ToolEntryEditPart.java 22 Feb 2008 14:43:38 -0000 @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2007 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 @@ -27,15 +27,20 @@ import org.eclipse.draw2d.ButtonModel; import org.eclipse.draw2d.Clickable; import org.eclipse.draw2d.ColorConstants; +import org.eclipse.draw2d.Graphics; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.MarginBorder; -import org.eclipse.draw2d.ToggleButton; +import org.eclipse.draw2d.Toggle; +import org.eclipse.draw2d.geometry.Insets; +import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.gef.AccessibleEditPart; import org.eclipse.gef.DragTracker; import org.eclipse.gef.Request; import org.eclipse.gef.RequestConstants; +import org.eclipse.gef.internal.ui.palette.PaletteColorUtil; import org.eclipse.gef.palette.PaletteEntry; +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.PaletteEditPart; @@ -226,14 +231,25 @@ }; } -static final Border BORDER_TOGGLE = new ButtonBorder(ButtonBorder.SCHEMES.TOOLBAR); +static final Border TOOLBAR_ITEM_BORDER = new ButtonBorder( + ButtonBorder.SCHEMES.TOOLBAR); static final Border COLUMNS_BORDER = new MarginBorder(2, 0, 1, 0); +static final Border LIST_BORDER = new MarginBorder(3, 16, 2, 0); +static final Border ICON_BORDER = new MarginBorder(3, 3, 3, 3); + public IFigure createFigure() { - class InactiveToggleButton extends ToggleButton { - InactiveToggleButton(IFigure contents) { + class InactiveToggleButton extends Toggle { + + InactiveToggleButton(IFigure contents) { super(contents); setOpaque(false); setEnabled(true); + if (isToolbarItem() + && !PaletteStack.PALETTE_TYPE_STACK.equals(getPaletteEntry() + .getParent().getType())) { + setStyle(Clickable.STYLE_BUTTON | Clickable.STYLE_TOGGLE); + setBorder(TOOLBAR_ITEM_BORDER); + } } public IFigure findMouseEventTargetAt(int x, int y) { return null; @@ -245,14 +261,62 @@ super.setEnabled(value); if (isEnabled()) { setRolloverEnabled(true); - setBorder(BORDER_TOGGLE); + if (getFlag(STYLE_BUTTON)) { + setBorder(TOOLBAR_ITEM_BORDER); + } setForegroundColor(null); } else { - setBorder(null); + if (getFlag(STYLE_BUTTON)) { + setBorder(null); + } setRolloverEnabled(false); setForegroundColor(ColorConstants.gray); } } + protected void paintFigure(Graphics graphics) { + super.paintFigure(graphics); + + if (!isToolbarItem() && isEnabled()) { + ButtonModel model = getModel(); + if (isRolloverEnabled() && !model.isMouseOver() && !model.isSelected()) + return; + + if (model.isSelected()) { + graphics.setBackgroundColor(PaletteColorUtil.getSelectedColor()); + } else { + graphics.setBackgroundColor(PaletteColorUtil.getHoverColor()); + } + graphics.fillRoundRectangle(getSelectionRectangle(), 3, 3); + } + } + + protected void paintBorder(Graphics graphics) { + // Overridden to draw the focus rectangle the same size as the hover + // and selection rectangles. + + if (getBorder() != null) + getBorder().paint(this, graphics, NO_INSETS); + if (hasFocus()) { + graphics.setForegroundColor(ColorConstants.black); + graphics.setBackgroundColor(ColorConstants.white); + graphics.drawFocus(getSelectionRectangle().getCropped( + new Insets(0, 0, 1, 1))); + } + } + + private Rectangle getSelectionRectangle() { + Rectangle rect = Rectangle.SINGLETON; + rect.setBounds(getBounds()); + int layoutMode = getLayoutSetting(); + if (layoutMode == PaletteViewerPreferences.LAYOUT_LIST + || layoutMode == PaletteViewerPreferences.LAYOUT_DETAILS) { + rect.width = customLabel.getPreferredSize().width + 17; + rect.x += 11; + } + rect.intersect(getBounds()); + return rect; + } + } customLabel = new DetailedLabelFigure(); @@ -307,8 +371,7 @@ */ protected String getToolTipText() { String result = null; - if (getPreferenceSource().getLayoutSetting() - != PaletteViewerPreferences.LAYOUT_DETAILS) { + if (getLayoutSetting() != PaletteViewerPreferences.LAYOUT_DETAILS) { result = super.getToolTipText(); } return result; @@ -336,13 +399,20 @@ setImageDescriptor(entry.getLargeIcon()); else setImageDescriptor(entry.getSmallIcon()); - int layoutMode = getPreferenceSource().getLayoutSetting(); + int layoutMode = getLayoutSetting(); customLabel.setLayoutMode(layoutMode); - if (layoutMode == PaletteViewerPreferences.LAYOUT_COLUMNS - || layoutMode == PaletteViewerPreferences.LAYOUT_DETAILS) + if (layoutMode == PaletteViewerPreferences.LAYOUT_COLUMNS) { customLabel.setBorder(COLUMNS_BORDER); - else - customLabel.setBorder(null); + } else if (layoutMode == PaletteViewerPreferences.LAYOUT_LIST + || layoutMode == PaletteViewerPreferences.LAYOUT_DETAILS) { + customLabel.setBorder(LIST_BORDER); + } else if (layoutMode == PaletteViewerPreferences.LAYOUT_ICONS + && !isToolbarItem()) { + customLabel.setBorder(ICON_BORDER); + } else { + customLabel.setBorder(null); + } + super.refreshVisuals(); } Index: src/org/eclipse/gef/internal/ui/palette/editparts/TemplateEditPart.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.gef/plugins/org.eclipse.gef/src/org/eclipse/gef/internal/ui/palette/editparts/TemplateEditPart.java,v retrieving revision 1.15 diff -u -r1.15 TemplateEditPart.java --- src/org/eclipse/gef/internal/ui/palette/editparts/TemplateEditPart.java 19 Oct 2007 19:47:06 -0000 1.15 +++ src/org/eclipse/gef/internal/ui/palette/editparts/TemplateEditPart.java 22 Feb 2008 14:43:38 -0000 @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2007 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 @@ -110,8 +110,7 @@ */ protected String getToolTipText() { String result = null; - if (getPreferenceSource().getLayoutSetting() - != PaletteViewerPreferences.LAYOUT_DETAILS) { + if (getLayoutSetting() != PaletteViewerPreferences.LAYOUT_DETAILS) { result = super.getToolTipText(); } return result; @@ -139,7 +138,7 @@ setImageDescriptor(entry.getLargeIcon()); else setImageDescriptor(entry.getSmallIcon()); - int layoutMode = getPreferenceSource().getLayoutSetting(); + int layoutMode = getLayoutSetting(); fig.setLayoutMode(layoutMode); if (layoutMode == PaletteViewerPreferences.LAYOUT_COLUMNS || layoutMode == PaletteViewerPreferences.LAYOUT_DETAILS) 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.40 diff -u -r1.40 DrawerFigure.java --- src/org/eclipse/gef/internal/ui/palette/editparts/DrawerFigure.java 19 Oct 2007 19:47:06 -0000 1.40 +++ src/org/eclipse/gef/internal/ui/palette/editparts/DrawerFigure.java 22 Feb 2008 14:43:38 -0000 @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2007 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 @@ -17,12 +17,9 @@ import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; -import org.eclipse.jface.resource.ImageDescriptor; - import org.eclipse.draw2d.Animation; import org.eclipse.draw2d.Border; import org.eclipse.draw2d.BorderLayout; -import org.eclipse.draw2d.ButtonBorder; import org.eclipse.draw2d.ButtonModel; import org.eclipse.draw2d.ChangeEvent; import org.eclipse.draw2d.ChangeListener; @@ -44,12 +41,13 @@ import org.eclipse.draw2d.SchemeBorder; import org.eclipse.draw2d.ScrollPane; import org.eclipse.draw2d.Toggle; -import org.eclipse.draw2d.ToggleButton; import org.eclipse.draw2d.ToolbarLayout; import org.eclipse.draw2d.geometry.Dimension; +import org.eclipse.draw2d.geometry.Insets; import org.eclipse.draw2d.geometry.Rectangle; -import org.eclipse.gef.internal.Internal; +import org.eclipse.gef.internal.InternalImages; +import org.eclipse.gef.internal.ui.palette.PaletteColorUtil; import org.eclipse.gef.ui.palette.PaletteMessages; import org.eclipse.gef.ui.palette.PaletteViewerPreferences; import org.eclipse.gef.ui.palette.editparts.PaletteToolbarLayout; @@ -61,26 +59,18 @@ extends Figure { -/** Border constant, toolbar scheme **/ -protected static final Border BUTTON_BORDER = new ButtonBorder( - ButtonBorder.SCHEMES.TOOLBAR); - /** Foreground color constant **/ protected static final Color FG_COLOR = FigureUtilities.mixColors( - ColorConstants.buttonDarker, ColorConstants.button); + PaletteColorUtil.WIDGET_NORMAL_SHADOW, PaletteColorUtil.WIDGET_BACKGROUND); -/* - * @TODO:Pratik - * This image needs to go in SharedImages or InternalImages - */ -/** Pin image **/ -public static final Image PIN = new Image(null, ImageDescriptor.createFromFile( - Internal.class, "icons/pin_view.gif").getImageData()); //$NON-NLS-1$ +private static final Color PIN_HOTSPOT_COLOR = FigureUtilities.mixColors( + PaletteColorUtil.WIDGET_LIST_BACKGROUND, + PaletteColorUtil.WIDGET_NORMAL_SHADOW, 0.60); /** Scrollpane border constant **/ protected static final Border SCROLL_PANE_BORDER = new MarginBorder(2); /** Title margin border constant **/ -protected static final Border TITLE_MARGIN_BORDER = new MarginBorder(1, 1, 1, 0); +protected static final Border TITLE_MARGIN_BORDER = new MarginBorder(4, 2, 2, 2); /** Toggle button border constant**/ protected static final Border TOGGLE_BUTTON_BORDER = new RaisedBorder(); /** Tooltip border constant **/ @@ -92,12 +82,120 @@ private boolean addedScrollpane = false; private int layoutMode = -1; -private ToggleButton pinFigure; +private PinFigure pinFigure; private ScrollPane scrollpane; private boolean showPin = true, skipNextEvent; private EditPartTipHelper tipHelper; /** + * This is the figure for the pinned and unpinned button. + */ +private static class PinFigure extends Toggle { + + private static Label tooltip = new Label(PaletteMessages.TOOLTIP_PIN_FIGURE); + + public PinFigure() { + super(new ImageFigure(InternalImages.get(InternalImages.IMG_UNPINNED))); + setRolloverEnabled(true); + setRequestFocusEnabled(false); + setToolTip(tooltip); + setOpaque(false); + + addChangeListener(new ChangeListener() { + public void handleStateChanged(ChangeEvent e) { + if (e.getPropertyName().equals(ButtonModel.SELECTED_PROPERTY)) { + if (isSelected()) { + ((ImageFigure) (getChildren().get(0))).setImage(InternalImages + .get(InternalImages.IMG_PINNED)); + } else { + ((ImageFigure) (getChildren().get(0))).setImage(InternalImages + .get(InternalImages.IMG_UNPINNED)); + } + } + } + }); + } + + protected void paintFigure(Graphics graphics) { + super.paintFigure(graphics); + + ButtonModel model = getModel(); + if (isRolloverEnabled() && model.isMouseOver()) { + graphics.setBackgroundColor(PIN_HOTSPOT_COLOR); + graphics.fillRoundRectangle(getClientArea().getCopy().shrink(1, 1), 3, 3); + } + } + + public void setDrawerExpandedState(boolean expanded) { + setEnabled(expanded); + setToolTip(expanded ? tooltip : null); + } + +} + +/** + * This is the figure for the entire drawer label button. + */ +private class CollapseToggle + extends Toggle { + +public CollapseToggle(IFigure contents) { + super(contents); + setSelected(true); + setRequestFocusEnabled(true); + addChangeListener(new ChangeListener() { + + public void handleStateChanged(ChangeEvent e) { + if (e.getPropertyName().equals(ButtonModel.SELECTED_PROPERTY)) { + Animation.markBegin(); + handleExpandStateChanged(); + Animation.run(150); + } else if (e.getPropertyName().equals( + ButtonModel.MOUSEOVER_PROPERTY)) { + repaint(); + } + } + }); +} + +public IFigure getToolTip() { + return buildTooltip(); +} + +protected void paintFigure(Graphics g) { + super.paintFigure(g); + Rectangle r = Rectangle.SINGLETON; + r.setBounds(getBounds()); + + // draw top border of drawer figure + g.setForegroundColor(PaletteColorUtil.WIDGET_NORMAL_SHADOW); + g.drawLine(r.getTopLeft(), r.getTopRight()); + g.setForegroundColor(ColorConstants.white); + g.drawLine(r.getTopLeft().getTranslated(0, 1), r.getTopRight() + .getTranslated(0, 1)); + r.crop(new Insets(2, 0, 0, 0)); + if (isExpanded()) { + g.setForegroundColor(FigureUtilities.mixColors( + PaletteColorUtil.WIDGET_BACKGROUND, + PaletteColorUtil.WIDGET_NORMAL_SHADOW, 0.65)); + g.drawLine(r.getLocation(), r.getTopRight()); + r.crop(new Insets(1, 0, 0, 0)); + } + + // draw bottom border of drawer figure + if (!isExpanded()) { + g.setForegroundColor(ColorConstants.white); + g.drawLine(r.getBottomLeft().getTranslated(0, -1), r.getBottomRight() + .getTranslated(0, -1)); + r.crop(new Insets(0, 0, 1, 0)); + } + + paintToggleGradient(g, r); + +} +} + +/** * Constructor * * @param control The Control of the LWS to which this Figure belongs (it is used to @@ -128,44 +226,13 @@ drawerLabel = new Label(); drawerLabel.setLabelAlignment(Label.LEFT); - pinFigure = new ToggleButton(new ImageFigure(PIN)); - pinFigure.setBorder(BUTTON_BORDER); - pinFigure.setRolloverEnabled(true); - pinFigure.setRequestFocusEnabled(false); - pinFigure.setToolTip(new Label(PaletteMessages.TOOLTIP_PIN_FIGURE)); + pinFigure = new PinFigure(); title.add(pinFigure, BorderLayout.RIGHT); title.add(drawerLabel, BorderLayout.CENTER); - collapseToggle = new Toggle(title) { - /** - * @see org.eclipse.draw2d.Figure#getToolTip() - */ - public IFigure getToolTip() { - return buildTooltip(); - } - protected void paintFigure(Graphics g) { - super.paintFigure(g); - Rectangle r = Rectangle.SINGLETON; - r.setBounds(getBounds()); - r.width = Math.min(50, r.width); - g.setForegroundColor(FG_COLOR); - g.fillGradient(Rectangle.SINGLETON, false); - } + collapseToggle = new CollapseToggle(title); - }; - collapseToggle.setSelected(true); - collapseToggle.setBorder(TOGGLE_BUTTON_BORDER); - collapseToggle.setRequestFocusEnabled(true); - collapseToggle.addChangeListener(new ChangeListener() { - public void handleStateChanged(ChangeEvent e) { - if (e.getPropertyName().equals(ButtonModel.SELECTED_PROPERTY)) { - Animation.markBegin(); - handleExpandStateChanged(); - Animation.run(150); - } - } - }); /* * @TODO:Pratik * @@ -193,6 +260,55 @@ createHoverHelp(control); } +/** + * Paints the background gradient on the drawer toggle figure. + * + * @param g + * the graphics object + * @param rect + * the rectangle which the background gradient should cover + */ +private void paintToggleGradient(Graphics g, Rectangle rect) { + if (isExpanded()) { + g.setBackgroundColor(FigureUtilities.mixColors(PaletteColorUtil.WIDGET_BACKGROUND, + PaletteColorUtil.WIDGET_LIST_BACKGROUND, 0.85)); + g.fillRectangle(rect); + } else if (collapseToggle.getModel().isMouseOver()) { + Color color1 = FigureUtilities.mixColors( + PaletteColorUtil.WIDGET_BACKGROUND, + PaletteColorUtil.WIDGET_LIST_BACKGROUND, 0.6); + Color color2 = FigureUtilities.mixColors( + PaletteColorUtil.WIDGET_BACKGROUND, + PaletteColorUtil.WIDGET_NORMAL_SHADOW, 0.9); + Color color3 = FigureUtilities.mixColors( + PaletteColorUtil.WIDGET_BACKGROUND, + PaletteColorUtil.WIDGET_NORMAL_SHADOW, 0.95); + Color color4 = FigureUtilities.mixColors( + PaletteColorUtil.WIDGET_BACKGROUND, + PaletteColorUtil.WIDGET_LIST_BACKGROUND, 0.9); + + g.setForegroundColor(color1); + g.setBackgroundColor(color2); + g.fillGradient(rect.x, rect.y, rect.width, rect.height - 4, true); + + g.setForegroundColor(color2); + g.setBackgroundColor(color3); + g.fillGradient(rect.x, rect.bottom() - 4, rect.width, 2, true); + + g.setForegroundColor(color3); + g.setBackgroundColor(color4); + g.fillGradient(rect.x, rect.bottom() - 2, rect.width, 2, true); + } else { + g.setForegroundColor(FigureUtilities.mixColors( + PaletteColorUtil.WIDGET_BACKGROUND, + PaletteColorUtil.WIDGET_LIST_BACKGROUND, 0.85)); + g.setBackgroundColor(FigureUtilities.mixColors( + PaletteColorUtil.WIDGET_BACKGROUND, + PaletteColorUtil.WIDGET_NORMAL_SHADOW, 0.45)); + g.fillGradient(rect, true); + } +} + private void createHoverHelp(final Control control) { if (control == null) { return; @@ -209,10 +325,8 @@ protected void paintFigure(Graphics graphics) { Rectangle r = Rectangle.SINGLETON; r.setBounds(getBounds()); - r.width = Math.min(50, r.width); - graphics.pushState(); - graphics.setForegroundColor(FG_COLOR); - graphics.fillGradient(Rectangle.SINGLETON, false); + graphics.pushState(); + paintToggleGradient(graphics, getBounds()); graphics.popState(); super.paintFigure(graphics); } @@ -272,6 +386,7 @@ scrollpane.setLayoutManager(new OverlayScrollPaneLayout()); scrollpane.setContents(new Figure()); scrollpane.getContents().setOpaque(true); + scrollpane.getContents().setBackgroundColor(PaletteColorUtil.WIDGET_LIST_BACKGROUND); scrollpane.getContents().setBorder(SCROLL_PANE_BORDER); } @@ -335,8 +450,10 @@ remove(scrollpane); } - if (pinFigure != null) + if (pinFigure != null) { pinFigure.setVisible(isExpanded() && showPin); + pinFigure.setDrawerExpandedState(isExpanded()); + } } /** Index: src/org/eclipse/gef/internal/ui/palette/editparts/SeparatorEditPart.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.gef/plugins/org.eclipse.gef/src/org/eclipse/gef/internal/ui/palette/editparts/SeparatorEditPart.java,v retrieving revision 1.11 diff -u -r1.11 SeparatorEditPart.java --- src/org/eclipse/gef/internal/ui/palette/editparts/SeparatorEditPart.java 19 Oct 2007 19:47:06 -0000 1.11 +++ src/org/eclipse/gef/internal/ui/palette/editparts/SeparatorEditPart.java 22 Feb 2008 14:43:38 -0000 @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2007 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 @@ -18,6 +18,7 @@ import org.eclipse.draw2d.geometry.Insets; import org.eclipse.draw2d.geometry.Rectangle; +import org.eclipse.gef.internal.ui.palette.PaletteColorUtil; import org.eclipse.gef.palette.PaletteSeparator; import org.eclipse.gef.ui.palette.editparts.PaletteEditPart; @@ -62,7 +63,7 @@ * @see org.eclipse.draw2d.IFigure#getPreferredSize(int, int) */ public Dimension getPreferredSize(int wHint, int hHint) { - if (getBackgroundColor() == ColorConstants.button) + if (getBackgroundColor().equals(PaletteColorUtil.WIDGET_BACKGROUND)) return new Dimension(wHint, 4); return new Dimension(wHint, 5); } @@ -75,12 +76,11 @@ */ protected void paintFigure(Graphics g) { Rectangle r = getBounds().getCropped(CROP); - if (getBackgroundColor() == ColorConstants.listBackground) { - g.setForegroundColor(ColorConstants.buttonDarker); - g.drawLine(r.getTopLeft(), r.getTopRight()); - g.drawLine(r.getBottomLeft(), r.getBottomRight()); + if (getBackgroundColor().equals(PaletteColorUtil.WIDGET_LIST_BACKGROUND)) { + g.setForegroundColor(PaletteColorUtil.WIDGET_NORMAL_SHADOW); + g.drawLine(r.getLeft(), r.getRight()); } else { - g.setForegroundColor(ColorConstants.buttonDarker); + g.setForegroundColor(PaletteColorUtil.WIDGET_NORMAL_SHADOW); g.drawLine(r.getBottomLeft(), r.getTopLeft()); g.drawLine(r.getTopLeft(), r.getTopRight()); Index: src/org/eclipse/gef/internal/ui/palette/editparts/PaletteScrollBar.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.gef/plugins/org.eclipse.gef/src/org/eclipse/gef/internal/ui/palette/editparts/PaletteScrollBar.java,v retrieving revision 1.14 diff -u -r1.14 PaletteScrollBar.java --- src/org/eclipse/gef/internal/ui/palette/editparts/PaletteScrollBar.java 30 Mar 2005 21:27:03 -0000 1.14 +++ src/org/eclipse/gef/internal/ui/palette/editparts/PaletteScrollBar.java 22 Feb 2008 14:43:38 -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 @@ -10,56 +10,40 @@ *******************************************************************************/ package org.eclipse.gef.internal.ui.palette.editparts; -import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.graphics.PaletteData; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.widgets.Display; -import org.eclipse.draw2d.ArrowButton; -import org.eclipse.draw2d.Border; -import org.eclipse.draw2d.ButtonBorder; import org.eclipse.draw2d.Clickable; -import org.eclipse.draw2d.ColorConstants; -import org.eclipse.draw2d.CompoundBorder; import org.eclipse.draw2d.Graphics; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.Label; -import org.eclipse.draw2d.MarginBorder; import org.eclipse.draw2d.RangeModel; import org.eclipse.draw2d.ScrollBar; import org.eclipse.draw2d.ScrollBarLayout; +import org.eclipse.draw2d.Toggle; import org.eclipse.draw2d.TreeSearch; import org.eclipse.draw2d.geometry.Dimension; import org.eclipse.draw2d.geometry.Insets; +import org.eclipse.draw2d.geometry.Point; +import org.eclipse.draw2d.geometry.PointList; import org.eclipse.draw2d.geometry.Rectangle; +import org.eclipse.gef.internal.ui.palette.PaletteColorUtil; + public final class PaletteScrollBar extends ScrollBar { -private static final ButtonBorder BORDER = - new ButtonBorder(new ButtonBorder.ButtonScheme( - new Color[] {ColorConstants.buttonLightest}, - new Color[] {ColorConstants.buttonDarker}, - new Color[] {ColorConstants.buttonDarker}, - new Color[] {ColorConstants.buttonDarker} - )); - -private static final Border CONTRAST = new CompoundBorder( - new MarginBorder(1, 0, 0, 0) { - public void paint(IFigure figure, Graphics graphics, Insets insets) { - if (!((Clickable)figure).getModel().isMouseOver()) - return; - Rectangle r = getPaintRectangle(figure, insets); - graphics.setForegroundColor(ColorConstants.button); - graphics.drawLine(r.x, r.y, r.right(), r.y); - } - }, BORDER -); +private static final PointList OUTER_DOWN_TRIANGLE = new PointList(3); +private static final PointList INNER_DOWN_TRIANGLE = new PointList(3); +private static final PointList OUTER_UP_TRIANGLE = new PointList(3); +private static final PointList INNER_UP_TRIANGLE = new PointList(3); -public static final int BUTTON_HEIGHT = 12; +public static final int BUTTON_HEIGHT = 7; +private static final int BUTTON_WIDTH = 76; private static final int SCROLL_TIME = 200; private static final Image TRANSPARENCY; @@ -67,12 +51,30 @@ static { Display display = Display.getCurrent(); PaletteData pData = new PaletteData(0xFF, 0xFF00, 0xFF0000); - RGB rgb = ColorConstants.button.getRGB(); + RGB rgb = PaletteColorUtil.INFO_FOREGROUND.getRGB(); int fillColor = pData.getPixel(rgb); ImageData iData = new ImageData(1, 1, 24, pData); iData.setPixel(0, 0, fillColor); - iData.setAlpha(0, 0, 200); + iData.setAlpha(0, 0, 15); // 6% transparent -- 255 * 0.06 TRANSPARENCY = new Image(display, iData); + + // TODO: Should I use the Button width here? + OUTER_DOWN_TRIANGLE.addPoint(new Point(34, 2)); + OUTER_DOWN_TRIANGLE.addPoint(new Point(38, 6)); + OUTER_DOWN_TRIANGLE.addPoint(new Point(42, 2)); + + INNER_DOWN_TRIANGLE.addPoint(new Point(35, 2)); + INNER_DOWN_TRIANGLE.addPoint(new Point(37, 5)); + INNER_DOWN_TRIANGLE.addPoint(new Point(41, 2)); + + OUTER_UP_TRIANGLE.addPoint(new Point(33, 5)); + OUTER_UP_TRIANGLE.addPoint(new Point(38, 0)); + OUTER_UP_TRIANGLE.addPoint(new Point(42, 5)); + + INNER_UP_TRIANGLE.addPoint(new Point(34, 5)); + INNER_UP_TRIANGLE.addPoint(new Point(38, 1)); + INNER_UP_TRIANGLE.addPoint(new Point(42, 5)); + } protected Label downLabel; @@ -88,30 +90,59 @@ } protected Clickable createDefaultDownButton() { - return createTransparentArrowButton(); + return createTransparentArrowButton(true); } protected Clickable createDefaultUpButton() { - return createTransparentArrowButton(); + return createTransparentArrowButton(false); } -private ArrowButton createTransparentArrowButton() { - ArrowButton button = new ArrowButton() { +/** + * Creates the figure used for the scrollbar button. + * @param down true if the arrow should be pointing down; false, if it should be pointing up. + * @return a new Toggle figure for the scroll bar button + */ +private Toggle createTransparentArrowButton(final boolean down) { + Toggle button = new Toggle() { protected void paintFigure(Graphics g) { + // paint background if (!getModel().isMouseOver()) g.drawImage(TRANSPARENCY, new Rectangle(0, 0, 1, 1), getBounds()); - else - super.paintFigure(g); + else { + g.setBackgroundColor(getModel().isArmed() ? PaletteColorUtil + .getSelectedColor() + : PaletteColorUtil.getHoverColor()); + g.fillRectangle(getBounds()); + } + + // paint triangle + g.translate(getLocation()); + PointList outerPoints = transpose(down ? OUTER_DOWN_TRIANGLE : OUTER_UP_TRIANGLE); + PointList innerPoints = transpose(down ? INNER_DOWN_TRIANGLE : INNER_UP_TRIANGLE); + g.setBackgroundColor(PaletteColorUtil.WIDGET_LIST_BACKGROUND); + g.fillPolygon(outerPoints); + g.setBackgroundColor(PaletteColorUtil.WIDGET_DARK_SHADOW); + g.fillPolygon(innerPoints); + g.translate(getLocation().getNegated()); } }; button.setRolloverEnabled(true); - button.setBorder(BORDER); return button; } /** - * @see org.eclipse.draw2d.Figure#findFigureAt(int, int, TreeSearch) + * Transposes a list of points using the transposer. + * @param origPoints the original list of points + * @return a new list of transposed points */ +private PointList transpose(PointList origPoints) { + PointList transposedPoints = new PointList(origPoints.size()); + for (int i = 0; i < origPoints.size(); i++) { + transposedPoints.addPoint(transposer.t(origPoints.getPoint(i))); + } + return transposedPoints; +} + public IFigure findFigureAt(int x, int y, TreeSearch search) { IFigure result = super.findFigureAt(x, y, search); if (result != this) @@ -119,9 +150,6 @@ return null; } -/** - * @see org.eclipse.draw2d.Figure#getPreferredSize(int, int) - */ public Dimension getPreferredSize(int wHint, int hHint) { return new Dimension(wHint, hHint); } @@ -131,17 +159,14 @@ setLayoutManager(new ScrollBarLayout(transposer) { protected Rectangle layoutButtons(ScrollBar scrollBar) { Rectangle bounds = transposer.t(scrollBar.getClientArea()); - Dimension buttonSize = new Dimension(bounds.width, BUTTON_HEIGHT); + Dimension buttonSize = new Dimension(BUTTON_WIDTH, BUTTON_HEIGHT); - getButtonUp().setBounds(transposer.t( - new Rectangle(bounds.getTopLeft(), buttonSize))); - Rectangle r = new Rectangle ( - bounds.x, bounds.bottom() - buttonSize.height, - buttonSize.width, buttonSize.height); + getButtonUp().setBounds( + transposer.t(new Rectangle(bounds.getTop().getTranslated( + -(buttonSize.width / 2), 0), buttonSize))); + Rectangle r = new Rectangle(bounds.getBottom().getTranslated( + -(buttonSize.width / 2), -buttonSize.height), buttonSize); getButtonDown().setBounds(transposer.t(r)); - if (scrollBar.getBackgroundColor() == ColorConstants.listBackground - && getButtonDown().getBorder() != CONTRAST) - getButtonDown().setBorder(CONTRAST); Rectangle trackBounds = bounds.getCropped( new Insets(buttonSize.height, 0, buttonSize.height, 0)); RangeModel model = scrollBar.getRangeModel(); @@ -157,16 +182,10 @@ setOpaque(false); } -/** - * @see org.eclipse.draw2d.ScrollBar#stepDown() - */ protected void stepDown() { timedStep(false); } -/** - * @see org.eclipse.draw2d.ScrollBar#stepUp() - */ protected void stepUp() { timedStep(true); } Index: src/org/eclipse/gef/ui/palette/editparts/PaletteEditPart.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.gef/plugins/org.eclipse.gef/src/org/eclipse/gef/ui/palette/editparts/PaletteEditPart.java,v retrieving revision 1.27 diff -u -r1.27 PaletteEditPart.java --- src/org/eclipse/gef/ui/palette/editparts/PaletteEditPart.java 19 Oct 2007 19:47:06 -0000 1.27 +++ src/org/eclipse/gef/ui/palette/editparts/PaletteEditPart.java 22 Feb 2008 14:43:39 -0000 @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2007 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 @@ -39,6 +39,7 @@ import org.eclipse.gef.palette.PaletteContainer; import org.eclipse.gef.palette.PaletteEntry; import org.eclipse.gef.palette.PaletteSeparator; +import org.eclipse.gef.palette.PaletteToolbar; import org.eclipse.gef.tools.SelectEditPartTracker; import org.eclipse.gef.ui.palette.PaletteMessages; import org.eclipse.gef.ui.palette.PaletteViewer; @@ -301,8 +302,7 @@ * @since 3.2 */ protected boolean nameNeededInToolTip() { - return getPreferenceSource().getLayoutSetting() - == PaletteViewerPreferences.LAYOUT_ICONS; + return getLayoutSetting() == PaletteViewerPreferences.LAYOUT_ICONS; } /** @@ -413,4 +413,30 @@ } } +/** + * Returns the current layout setting. + * + * @return the current layout setting. + * @see PaletteViewerPreferences#getLayoutSetting() + * @since 3.4 + */ +protected int getLayoutSetting() { + if (getParent() instanceof PaletteEditPart) { + return ((PaletteEditPart) getParent()).getLayoutSetting(); + } + return getPreferenceSource().getLayoutSetting(); +} + +/** + * Returns true if this item is on the palette toolbar. + * + * @return true if this item is on the palette toolbar; false otherwise + * @since 3.4 + */ +protected boolean isToolbarItem() { + if (getParent() instanceof PaletteEditPart) { + return ((PaletteEditPart) getParent()).isToolbarItem(); + } + return false; +} } Index: src/org/eclipse/gef/ui/palette/FlyoutPaletteComposite.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.gef/plugins/org.eclipse.gef/src/org/eclipse/gef/ui/palette/FlyoutPaletteComposite.java,v retrieving revision 1.50 diff -u -r1.50 FlyoutPaletteComposite.java --- src/org/eclipse/gef/ui/palette/FlyoutPaletteComposite.java 2 Jan 2008 19:30:22 -0000 1.50 +++ src/org/eclipse/gef/ui/palette/FlyoutPaletteComposite.java 22 Feb 2008 14:43:38 -0000 @@ -33,9 +33,7 @@ import org.eclipse.swt.events.MouseTrackAdapter; import org.eclipse.swt.events.MouseTrackListener; import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.GC; -import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Canvas; @@ -56,7 +54,6 @@ import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; -import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.TransferDropTargetListener; @@ -66,7 +63,6 @@ import org.eclipse.ui.IViewReference; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.PlatformUI; import org.eclipse.ui.XMLMemento; import org.eclipse.ui.internal.DragCursors; @@ -76,25 +72,24 @@ import org.eclipse.draw2d.Button; import org.eclipse.draw2d.ButtonBorder; import org.eclipse.draw2d.ColorConstants; +import org.eclipse.draw2d.FigureUtilities; import org.eclipse.draw2d.FocusEvent; import org.eclipse.draw2d.FocusListener; import org.eclipse.draw2d.Graphics; import org.eclipse.draw2d.IFigure; -import org.eclipse.draw2d.ImageFigure; -import org.eclipse.draw2d.ImageUtilities; import org.eclipse.draw2d.Label; import org.eclipse.draw2d.LightweightSystem; import org.eclipse.draw2d.MarginBorder; import org.eclipse.draw2d.PositionConstants; -import org.eclipse.draw2d.SWTGraphics; +import org.eclipse.draw2d.Triangle; import org.eclipse.draw2d.geometry.Dimension; -import org.eclipse.draw2d.geometry.Insets; import org.eclipse.gef.GraphicalViewer; import org.eclipse.gef.SharedCursors; import org.eclipse.gef.dnd.TemplateTransfer; import org.eclipse.gef.internal.GEFMessages; -import org.eclipse.gef.internal.Internal; +import org.eclipse.gef.internal.InternalImages; +import org.eclipse.gef.internal.ui.palette.PaletteColorUtil; import org.eclipse.gef.ui.views.palette.PaletteView; /** @@ -124,6 +119,10 @@ private static final int STATE_HIDDEN = 8; private static final int STATE_EXPANDED = 1; + +private static final Dimension ARROW_SIZE = new Dimension(6, 11); +private static final int SASH_BUTTON_WIDTH = 11; + /** * One of the two possible initial states of the flyout palette. This is the default one. * When in this state, only the flyout palette's sash is visible. @@ -136,16 +135,12 @@ */ public static final int STATE_PINNED_OPEN = 4; -private static final Image LEFT_ARROW = new Image(null, ImageDescriptor.createFromFile( - Internal.class, "icons/palette_left.gif").getImageData()); //$NON-NLS-1$ -private static final Image RIGHT_ARROW = new Image(null, ImageDescriptor.createFromFile( - Internal.class, "icons/palette_right.gif").getImageData()); //$NON-NLS-1$ - private PropertyChangeSupport listeners = new PropertyChangeSupport(this); private Composite paletteContainer; private PaletteViewer pViewer, externalViewer; private IMemento capturedPaletteState; -private Control graphicalControl, sash; +private Control graphicalControl; +private Composite sash; private PaletteViewerProvider provider; private FlyoutPreferences prefs; private Point cachedBounds = new Point(0, 0); @@ -163,6 +158,7 @@ private int paletteWidth = DEFAULT_PALETTE_SIZE; private int minWidth = MIN_PALETTE_SIZE; private int cachedSize = -1, cachedState = -1, cachedLocation = -1; +private int cachedTitleHeight = 24; // give it a default value private IPerspectiveListener perspectiveListener = new IPerspectiveListener() { public void perspectiveActivated(IWorkbenchPage page, @@ -278,7 +274,7 @@ return new PaletteComposite(this, SWT.NONE); } -private Control createSash() { +private Composite createSash() { return new Sash(this, SWT.NONE); } @@ -368,6 +364,7 @@ layoutComponentsEast(area, sashWidth, pWidth); else layoutComponentsWest(area, sashWidth, pWidth); + sash.layout(); setRedraw(true); update(); } @@ -681,11 +678,10 @@ } private class Sash extends Composite { - private Control button, title; + private Control button; public Sash(Composite parent, int style) { super(parent, style); button = createFlyoutControlButton(this); - title = createTitle(this, false); new SashDragManager(); addMouseTrackListener(new MouseTrackAdapter() { @@ -714,62 +710,66 @@ } }); } - /** - * @see org.eclipse.swt.widgets.Control#computeSize(int, int, boolean) - */ + public Point computeSize(int wHint, int hHint, boolean changed) { if (isInState(STATE_PINNED_OPEN)) - return new Point(6, 1); - Point buttonSize = button.computeSize(wHint, hHint); - Point titleSize = title.computeSize(wHint, hHint); - return new Point(Math.max(buttonSize.x, titleSize.x) + 2, - buttonSize.y + titleSize.y + 7); + return new Point(3, 3); + + // button size plus two pixels for the two lines to be drawn + return new Point(SASH_BUTTON_WIDTH + 2, cachedTitleHeight); } private void handleSashDragged(int shiftAmount) { int newSize = paletteContainer.getBounds().width + (dock == PositionConstants.EAST ? -shiftAmount : shiftAmount); setPaletteWidth(newSize); } - /** - * @see org.eclipse.swt.widgets.Composite#layout(boolean) - */ public void layout(boolean changed) { - if (button == null || title == null) + if (button == null) return; if (isInState(STATE_PINNED_OPEN)) { - title.setVisible(false); button.setVisible(false); return; } - title.setVisible(true); button.setVisible(true); Rectangle area = getClientArea(); - // 1 pixel margin all around to draw the raised border - area.x += 1; - area.y += 1; - area.width -= 2; - area.height -= 2; - button.setBounds(area.x, area.y, area.width, area.width); - // 5-pixel spacing - area.y += area.width + 3; - title.setBounds(area.x, area.y, area.width, - title.computeSize(-1, -1).y); + button.setBounds(area.x + 1, area.y + 1, SASH_BUTTON_WIDTH, + cachedTitleHeight - 1); + if (transferFocus) { transferFocus = false; button.setFocus(); } } private void paintSash(GC gc) { - Rectangle bounds = getBounds(); - gc.setForeground(ColorConstants.buttonLightest); - gc.drawLine(0, 0, bounds.width, 0); - gc.drawLine(0, 0, 0, bounds.height); - gc.setForeground(ColorConstants.buttonDarker); - gc.drawLine(bounds.width - 1, 0, bounds.width - 1, bounds.height - 1); - gc.drawLine(0, bounds.height - 1, bounds.width - 1, bounds.height - 1); - } + Rectangle bounds = getBounds(); + if (isInState(STATE_PINNED_OPEN)) { + gc.setBackground(PaletteColorUtil.WIDGET_BACKGROUND); + gc.fillRectangle(0, 0, bounds.width, bounds.height); + + gc.setForeground(PaletteColorUtil.WIDGET_LIST_BACKGROUND); + gc.drawLine(0, 0, bounds.width, 0); + gc.setForeground(PaletteColorUtil.WIDGET_NORMAL_SHADOW); + gc.drawLine(0, bounds.height - 1, bounds.width - 1, bounds.height - 1); + gc.setForeground(PaletteColorUtil.WIDGET_LIST_BACKGROUND); + gc.drawLine(0, 0, 0, bounds.height); + gc.setForeground(PaletteColorUtil.WIDGET_NORMAL_SHADOW); + gc.drawLine(bounds.width - 1, 0, bounds.width - 1, bounds.height - 1); + } else { + gc.setForeground(PaletteColorUtil.WIDGET_NORMAL_SHADOW); + gc.drawLine(0, 0, 0, bounds.height); + gc.drawLine(bounds.width - 1, 0, bounds.width - 1, bounds.height); + + gc.setForeground(PaletteColorUtil.WIDGET_LIST_BACKGROUND); + gc.drawLine(1, 0, 1, bounds.height); + + gc.setForeground(FigureUtilities.mixColors( + PaletteColorUtil.WIDGET_BACKGROUND, PaletteColorUtil.WIDGET_LIST_BACKGROUND, + 0.85)); + gc.drawLine(2, 0, 2, bounds.height); + } + } private void updateState() { setCursor(isInState(STATE_EXPANDED | STATE_PINNED_OPEN) ? SharedCursors.SIZEWE : null); @@ -995,27 +995,30 @@ Rectangle area = getClientArea(); if (title.getVisible()) { + boolean buttonVisible = button.getVisible(); Point titleSize = title.computeSize(-1, -1); - Point buttonSize = button.computeSize(-1, -1); - int height = Math.max(titleSize.y, buttonSize.y); - buttonSize.x = Math.max(height, buttonSize.x); + Point buttonSize = buttonVisible ? button.computeSize(-1, -1) + : new Point(0, 0); + cachedTitleHeight = Math.max(titleSize.y, buttonSize.y); + if (buttonVisible) { + buttonSize.x = Math.max(cachedTitleHeight, buttonSize.x); + } if (dock == PositionConstants.EAST) { int buttonX = area.width - buttonSize.x; - button.setBounds(buttonX, 0, buttonSize.x, height); - // leave some space between the button and the title - title.setBounds(0, 0, buttonX - 2, height); + button.setBounds(buttonX, 0, buttonSize.x, cachedTitleHeight); + title.setBounds(0, 0, buttonX, cachedTitleHeight); } else { - int titleX = buttonSize.x + 2; - button.setBounds(0, 0, buttonSize.x, height); - title.setBounds(titleX, 0, area.width - titleX, height); + int titleX = buttonSize.x; + button.setBounds(0, 0, buttonSize.x, cachedTitleHeight); + title.setBounds(titleX, 0, area.width - titleX, cachedTitleHeight); } - area.y += height; - area.height -= height; + area.y += cachedTitleHeight; + area.height -= cachedTitleHeight; } pCtrl.setBounds(area); } protected void updateState() { - title.setVisible(isInState(STATE_PINNED_OPEN)); + title.setVisible(isInState(STATE_EXPANDED) || isInState(STATE_PINNED_OPEN)); button.setVisible(isInState(STATE_PINNED_OPEN)); if (transferFocus && button.getVisible()) { transferFocus = false; @@ -1025,63 +1028,11 @@ } } -private class RotatedTitleLabel - extends ImageFigure { - public RotatedTitleLabel() { - FlyoutPaletteComposite.this.addDisposeListener(new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - if (getImage() != null && !getImage().isDisposed()) - getImage().dispose(); - } - }); - } - protected void paintFigure(Graphics graphics) { - if (getImage() == null) - updateImage(); - super.paintFigure(graphics); - if (hasFocus()) - graphics.drawFocus(0, 0, bounds.width - 1, bounds.height - 1); - } - public void setFont(Font f) { - if (f != getLocalFont()) { - super.setFont(f); - updateImage(); - } - } - protected void updateImage() { - if (getImage() != null) - getImage().dispose(); - IFigure fig = new TitleLabel(false); - fig.setFont(getFont()); - fig.setBackgroundColor(ColorConstants.button); - fig.setOpaque(true); - // This is a hack. TitleLabel does not return a proper preferred size, since - // its getInsets() method depends on its current size. To make it work properly, - // we first make the size really big. - fig.setSize(Integer.MAX_VALUE, Integer.MAX_VALUE); - Dimension imageSize = fig.getPreferredSize(-1, -1); - fig.setSize(imageSize); - Image img = new Image(null, imageSize.width, imageSize.height); - GC gc = new GC(img); - Graphics graphics = new SWTGraphics(gc); - fig.paint(graphics); - graphics.dispose(); - gc.dispose(); - setImage(ImageUtilities.createRotatedImage(img)); - img.dispose(); - } -} - private static class TitleLabel extends Label { - protected static final Border BORDER = new MarginBorder(0, 3, 0, 3); + protected static final Border BORDER = new MarginBorder(4, 3, 4, 3); protected static final Border TOOL_TIP_BORDER = new MarginBorder(0, 2, 0, 2); - private static final int H_GAP = 4; - private static final int LINE_LENGTH = 20; - private static final int MIN_LINE_LENGTH = 6; - private boolean horizontal; public TitleLabel(boolean isHorizontal) { - super(GEFMessages.Palette_Label); - horizontal = isHorizontal; + super(GEFMessages.Palette_Label, InternalImages.get(InternalImages.IMG_PALETTE)); setLabelAlignment(PositionConstants.LEFT); setBorder(BORDER); Label tooltip = new Label(getText()); @@ -1089,78 +1040,38 @@ setToolTip(tooltip); setForegroundColor(ColorConstants.listForeground); } - public Insets getInsets() { - Insets insets = super.getInsets(); - Dimension diff = getBounds().getCropped(insets).getSize() - .getDifference(getTextBounds().getSize()); - if (diff.width > 0) { - insets = new Insets(insets); - int width = Math.min(LINE_LENGTH + H_GAP, diff.width / 2); - insets.left += width; - insets.right += width; - } - return insets; - } public IFigure getToolTip() { if (isTextTruncated()) return super.getToolTip(); return null; } protected void paintFigure(Graphics graphics) { - super.paintFigure(graphics); - org.eclipse.draw2d.geometry.Rectangle area = - getBounds().getCropped(super.getInsets()); - org.eclipse.draw2d.geometry.Rectangle textBounds = getTextBounds(); - // We reduce the width by 1 because FigureUtilities grows it by 1 unnecessarily - textBounds.width--; - - if (hasFocus()) - graphics.drawFocus(bounds.getResized(-1, -1) - .intersect(textBounds.getExpanded(getInsets()))); - int lineWidth = Math.min((area.width - textBounds.width - H_GAP * 2) / 2, - LINE_LENGTH); - if (lineWidth >= MIN_LINE_LENGTH) { - int centerY = area.height / 2; - graphics.setForegroundColor(ColorConstants.buttonLightest); - graphics.drawLine(textBounds.x - H_GAP - lineWidth, centerY - 3, - textBounds.x - H_GAP, centerY - 3); - graphics.drawLine(textBounds.x - H_GAP - lineWidth, centerY + 2, - textBounds.x - H_GAP, centerY + 2); - graphics.drawLine(textBounds.right() + H_GAP, centerY - 3, - textBounds.right() + H_GAP + lineWidth, centerY - 3); - graphics.drawLine(textBounds.right() + H_GAP, centerY + 2, - textBounds.right() + H_GAP + lineWidth, centerY + 2); - graphics.setForegroundColor(ColorConstants.buttonDarker); - graphics.drawLine(textBounds.x - H_GAP - lineWidth, centerY + 3, - textBounds.x - H_GAP, centerY + 3); - graphics.drawLine(textBounds.x - H_GAP - lineWidth, centerY - 2, - textBounds.x - H_GAP, centerY - 2); - graphics.drawLine(textBounds.right() + H_GAP, centerY - 2, - textBounds.right() + H_GAP + lineWidth, centerY - 2); - graphics.drawLine(textBounds.right() + H_GAP, centerY + 3, - textBounds.right() + H_GAP + lineWidth, centerY + 3); - if (horizontal) { - graphics.drawPoint(textBounds.x - H_GAP, centerY + 2); - graphics.drawPoint(textBounds.x - H_GAP, centerY - 3); - graphics.drawPoint(textBounds.right() + H_GAP + lineWidth, centerY - 3); - graphics.drawPoint(textBounds.right() + H_GAP + lineWidth, centerY + 2); - graphics.setForegroundColor(ColorConstants.buttonLightest); - graphics.drawPoint(textBounds.x - H_GAP - lineWidth, centerY - 2); - graphics.drawPoint(textBounds.x - H_GAP - lineWidth, centerY + 3); - graphics.drawPoint(textBounds.right() + H_GAP, centerY - 2); - graphics.drawPoint(textBounds.right() + H_GAP, centerY + 3); - } else { - graphics.drawPoint(textBounds.x - H_GAP - lineWidth, centerY + 2); - graphics.drawPoint(textBounds.x - H_GAP - lineWidth, centerY - 3); - graphics.drawPoint(textBounds.right() + H_GAP, centerY - 3); - graphics.drawPoint(textBounds.right() + H_GAP, centerY + 2); - graphics.setForegroundColor(ColorConstants.buttonLightest); - graphics.drawPoint(textBounds.x - H_GAP, centerY - 2); - graphics.drawPoint(textBounds.x - H_GAP, centerY + 3); - graphics.drawPoint(textBounds.right() + H_GAP + lineWidth, centerY - 2); - graphics.drawPoint(textBounds.right() + H_GAP + lineWidth, centerY + 3); - } + // paint the gradient + graphics.pushState(); + org.eclipse.draw2d.geometry.Rectangle r = org.eclipse.draw2d.geometry.Rectangle.SINGLETON; + r.setBounds(getBounds()); + graphics.setForegroundColor(PaletteColorUtil.WIDGET_LIST_BACKGROUND); + graphics.setBackgroundColor(PaletteColorUtil.WIDGET_BACKGROUND); + graphics.fillGradient(r, true); + + // draw bottom border + graphics.setForegroundColor(PaletteColorUtil.WIDGET_NORMAL_SHADOW); + graphics.drawLine(r.getBottomLeft().getTranslated(0, -1), r.getBottomRight() + .getTranslated(0, -1)); + + graphics.popState(); + + // paint the text and icon + super.paintFigure(graphics); + + // paint the focus rectangle around the text + if (hasFocus()) { + org.eclipse.draw2d.geometry.Rectangle textBounds = getTextBounds(); + // We reduce the width by 1 because FigureUtilities grows it by 1 unnecessarily + textBounds.width--; + graphics.drawFocus(bounds.getResized(-1, -1) + .intersect(textBounds.getExpanded(getInsets()))); } } } @@ -1177,19 +1088,19 @@ size.union(new Dimension(wHint, hHint)); return new org.eclipse.swt.graphics.Point(size.width, size.height); } - private Image getButtonImage() { - Image arrow = null; + private int getArrowDirection() { + int direction = PositionConstants.EAST; if (isInState(STATE_EXPANDED | STATE_PINNED_OPEN)) - arrow = dock == PositionConstants.WEST ? LEFT_ARROW : RIGHT_ARROW; + direction = dock == PositionConstants.WEST ? PositionConstants.WEST : PositionConstants.EAST; else - arrow = dock == PositionConstants.WEST ? RIGHT_ARROW : LEFT_ARROW; + direction = dock == PositionConstants.WEST ? PositionConstants.EAST : PositionConstants.WEST; if (isMirrored()) { - if (arrow == LEFT_ARROW) - arrow = RIGHT_ARROW; + if (direction == PositionConstants.WEST) + direction = PositionConstants.EAST; else - arrow = LEFT_ARROW; + direction = PositionConstants.WEST; } - return arrow; + return direction; } private String getButtonTooltipText() { if (isInState(STATE_COLLAPSED)) @@ -1200,7 +1111,7 @@ setCursor(SharedCursors.ARROW); lws = new LightweightSystem(); lws.setControl(this); - final ImageButton b = new ImageButton(getButtonImage()); + final ArrowButton b = new ArrowButton(getArrowDirection()); b.setRolloverEnabled(true); b.setBorder(new ButtonBorder(ButtonBorder.SCHEMES.TOOLBAR)); b.addActionListener(new ActionListener() { @@ -1215,10 +1126,10 @@ listeners.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { if (evt.getPropertyName().equals(PROPERTY_STATE)) { - b.setImage(getButtonImage()); + b.setDirection(getArrowDirection()); setToolTipText(getButtonTooltipText()); } else if (evt.getPropertyName().equals(PROPERTY_DOCK_LOCATION)) - b.setImage(getButtonImage()); + b.setDirection(getArrowDirection()); } }); lws.setContents(b); @@ -1241,15 +1152,62 @@ } }); } - private class ImageButton extends Button { - public ImageButton(Image img) { - super(); - setContents(new ImageFigure(img)); - } - public void setImage(Image img) { - ((ImageFigure)getChildren().get(0)).setImage(img); - } - } + + private class ArrowButton + extends Button { + + private Triangle triangle; + + /** + * Creates a new instance + * + * @param direction + * the direction the arrow should face (PositionConstants.RIGHT or + * PositionConstants.LEFT) + */ + public ArrowButton(int direction) { + super(); + setDirection(direction); + + triangle = new Triangle(); + triangle.setOutline(true); + triangle.setBackgroundColor(PaletteColorUtil.WIDGET_LIST_BACKGROUND); + triangle.setForegroundColor(PaletteColorUtil.WIDGET_DARK_SHADOW); + setContents(triangle); + } + + public void setDirection(int direction) { + if (triangle != null) { + triangle.setDirection(direction); + } + } + + protected void layout() { + org.eclipse.draw2d.geometry.Rectangle clientArea = getBounds(); + + triangle.setBounds(new org.eclipse.draw2d.geometry.Rectangle(clientArea + .getCenter().getTranslated(-ARROW_SIZE.width / 2, + -ARROW_SIZE.height / 2), ARROW_SIZE)); + } + + protected void paintFigure(Graphics graphics) { + super.paintFigure(graphics); + + // paint the gradient + graphics.pushState(); + org.eclipse.draw2d.geometry.Rectangle r = org.eclipse.draw2d.geometry.Rectangle.SINGLETON; + r.setBounds(getBounds()); + graphics.setForegroundColor(PaletteColorUtil.WIDGET_LIST_BACKGROUND); + graphics.setBackgroundColor(PaletteColorUtil.WIDGET_BACKGROUND); + graphics.fillGradient(r, true); + graphics.popState(); + + // draw bottom border + graphics.setForegroundColor(PaletteColorUtil.WIDGET_NORMAL_SHADOW); + graphics.drawLine(r.getBottomLeft().getTranslated(0, -1), r.getBottomRight() + .getTranslated(0, -1)); + } + } } private class TitleCanvas extends Canvas { @@ -1268,12 +1226,7 @@ return new org.eclipse.swt.graphics.Point(size.width, size.height); } private void init(boolean isHorizontal) { - IFigure fig; - if (isHorizontal) - fig = new TitleLabel(true); - else - fig = new RotatedTitleLabel(); - final IFigure contents = fig; + final IFigure contents = new TitleLabel(true); contents.setRequestFocusEnabled(true); contents.setFocusTraversable(true); contents.addFocusListener(new FocusListener() { @@ -1381,7 +1334,6 @@ private final String fontName = getFontType(); private List registrants = new ArrayList(); private Font titleFont; - private boolean newFontCreated = false; private final IPropertyChangeListener fontListener = new IPropertyChangeListener() { public void propertyChange(org.eclipse.jface.util.PropertyChangeEvent event) { if (fontName.equals(event.getProperty())) @@ -1391,27 +1343,9 @@ private FontManager() { } protected final Font createTitleFont() { - newFontCreated = false; - FontData[] data = JFaceResources.getFont(fontName).getFontData(); - for (int i = 0; i < data.length; i++) - if ((data[i].getStyle() & SWT.BOLD) == 0) { - /* - * @TODO:Pratik need to test this in an environment where there are - * multiple FontDatas for a font - */ - // Any problems with style settings (eg., in the case of a font that - // does not support bold case), will cause the font to ignore that style - // setting. - data[i].setStyle(data[i].getStyle() | SWT.BOLD); - newFontCreated = true; - } - if (newFontCreated) - return new Font(Display.getCurrent(), data); return JFaceResources.getFont(fontName); } protected void dispose() { - if (newFontCreated && titleFont != null && !titleFont.isDisposed()) - titleFont.dispose(); titleFont = null; JFaceResources.getFontRegistry().removeListener(fontListener); } Index: src/org/eclipse/gef/ui/palette/PaletteEditPartFactory.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.gef/plugins/org.eclipse.gef/src/org/eclipse/gef/ui/palette/PaletteEditPartFactory.java,v retrieving revision 1.22 diff -u -r1.22 PaletteEditPartFactory.java --- src/org/eclipse/gef/ui/palette/PaletteEditPartFactory.java 16 Sep 2005 21:08:34 -0000 1.22 +++ src/org/eclipse/gef/ui/palette/PaletteEditPartFactory.java 22 Feb 2008 14:43:39 -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 @@ -19,6 +19,7 @@ import org.eclipse.gef.internal.ui.palette.editparts.SliderPaletteEditPart; import org.eclipse.gef.internal.ui.palette.editparts.TemplateEditPart; import org.eclipse.gef.internal.ui.palette.editparts.ToolEntryEditPart; +import org.eclipse.gef.internal.ui.palette.editparts.ToolbarEditPart; import org.eclipse.gef.palette.PaletteContainer; import org.eclipse.gef.palette.PaletteDrawer; import org.eclipse.gef.palette.PaletteEntry; @@ -27,6 +28,7 @@ import org.eclipse.gef.palette.PaletteSeparator; import org.eclipse.gef.palette.PaletteStack; import org.eclipse.gef.palette.PaletteTemplateEntry; +import org.eclipse.gef.palette.PaletteToolbar; /** * Factory to create EditParts for different PaletteEntries. @@ -63,6 +65,8 @@ if (PaletteGroup.PALETTE_TYPE_GROUP.equals(type) || PaletteContainer.PALETTE_TYPE_UNKNOWN.equals(type)) return createGroupEditPart(parentEditPart, model); + if (PaletteToolbar.PALETTE_TYPE_TOOLBAR_GROUP.equals(type)) + return createToolbarEditPart(parentEditPart, model); } if (model instanceof PaletteTemplateEntry) return createTemplateEditPart(parentEditPart, model); @@ -118,6 +122,17 @@ } /** + * Create ToolbarEditPart - edit part for PaletteToolbar + * + * @param parentEditPart the parent of the new editpart to be created + * @param model the PaletteToolbar + * @return the newly created EditPart + */ +protected EditPart createToolbarEditPart(EditPart parentEditPart, Object model) { + return new ToolbarEditPart((PaletteToolbar)model); +} + +/** * Create SliderPaletteEditPart - edit part for PaletteRoot * * @param parentEditPart the parent of the new editpart to be created Index: src/org/eclipse/gef/internal/ui/palette/PaletteColorUtil.java =================================================================== RCS file: src/org/eclipse/gef/internal/ui/palette/PaletteColorUtil.java diff -N src/org/eclipse/gef/internal/ui/palette/PaletteColorUtil.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/gef/internal/ui/palette/PaletteColorUtil.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,81 @@ +/******************************************************************************* + * 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.internal.ui.palette; + +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.widgets.Display; + +import org.eclipse.draw2d.ColorConstants; + +/** + * A class to keep miscellaneous palette color utilities. + * + * @author crevells + * @since 3.4 + */ +public class PaletteColorUtil { + +public static final Color WIDGET_BACKGROUND = ColorConstants.button; + +public static final Color WIDGET_NORMAL_SHADOW = ColorConstants.buttonDarker; + +public static final Color WIDGET_DARK_SHADOW = ColorConstants.buttonDarkest; + +public static final Color WIDGET_LIST_BACKGROUND = ColorConstants.listBackground; + +public static final Color INFO_FOREGROUND = ColorConstants.tooltipForeground; + +private static final Color HOVER_COLOR = new Color(null, 254, 237, 205); + +private static final Color SELECTED_COLOR = new Color(null, 224, 233, 246); + +private static final Color HOVER_COLOR_HICONTRAST = new Color(null, 0, 128, 0); + +private static final Color SELECTED_COLOR_HICONTRAST = new Color(null, 128, 0, + 128); + +/** + * Gets the color to be used when hovering over palette items. The color differs + * in high contrast mode. + * + * @return the hover color + * @since 3.4 + */ +public static Color getHoverColor() { + Display display = Display.getCurrent(); + if (display == null) { + display = Display.getDefault(); + } + if (display.getHighContrast()) { + return HOVER_COLOR_HICONTRAST; + } + return HOVER_COLOR; +} + +/** + * Gets the color to be used when selecting palette items. The color differs in + * high contrast mode. + * + * @return the selected color + * @since 3.4 + */ +public static Color getSelectedColor() { + Display display = Display.getCurrent(); + if (display == null) { + display = Display.getDefault(); + } + if (display.getHighContrast()) { + return SELECTED_COLOR_HICONTRAST; + } + return SELECTED_COLOR; +} +} Index: src/org/eclipse/gef/internal/ui/palette/editparts/ToolbarEditPart.java =================================================================== RCS file: src/org/eclipse/gef/internal/ui/palette/editparts/ToolbarEditPart.java diff -N src/org/eclipse/gef/internal/ui/palette/editparts/ToolbarEditPart.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/gef/internal/ui/palette/editparts/ToolbarEditPart.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,78 @@ +/******************************************************************************* + * 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.internal.ui.palette.editparts; + +import org.eclipse.draw2d.Figure; +import org.eclipse.draw2d.FigureUtilities; +import org.eclipse.draw2d.Graphics; +import org.eclipse.draw2d.IFigure; +import org.eclipse.draw2d.MarginBorder; + +import org.eclipse.gef.internal.ui.palette.PaletteColorUtil; +import org.eclipse.gef.palette.PaletteToolbar; +import org.eclipse.gef.ui.palette.PaletteViewerPreferences; + +/** + * An editpart for the PaletteToolbar. + * + * @author crevells + * @since 3.4 + */ +public class ToolbarEditPart + extends GroupEditPart { + +/** + * Creates a new instance. + * + * @param model + * the PaletteToolbar + */ +public ToolbarEditPart(PaletteToolbar model) { + super(model); +} + +public IFigure createFigure() { + IFigure figure = new Figure() { + + protected void paintFigure(Graphics graphics) { + super.paintFigure(graphics); + + // draw top border + graphics.setForegroundColor(PaletteColorUtil.WIDGET_LIST_BACKGROUND); + graphics.drawLine(getBounds().getTopLeft(), getBounds() + .getTopRight()); + + // draw bottom border + graphics.setForegroundColor(FigureUtilities.mixColors( + PaletteColorUtil.WIDGET_BACKGROUND, + PaletteColorUtil.WIDGET_NORMAL_SHADOW, 0.7)); + graphics.drawLine(getBounds().getBottomLeft().getTranslated(0, -1), + getBounds().getBottomRight().getTranslated(0, -1)); + } + + }; + figure.setOpaque(true); + figure.setBackgroundColor(PaletteColorUtil.WIDGET_BACKGROUND); + figure.setBorder(new MarginBorder(2, 1, 1, 1)); + + return figure; +} + +protected int getLayoutSetting() { + return PaletteViewerPreferences.LAYOUT_ICONS; +} + +protected boolean isToolbarItem() { + return true; +} + +} Index: src/org/eclipse/gef/palette/PaletteToolbar.java =================================================================== RCS file: src/org/eclipse/gef/palette/PaletteToolbar.java diff -N src/org/eclipse/gef/palette/PaletteToolbar.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/gef/palette/PaletteToolbar.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,61 @@ +/******************************************************************************* + * 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.palette; + +import java.util.List; + +/** + * A PaletteGroup consists of a group of + * {@link org.eclipse.gef.palette.PaletteEntry} objects that are uncollapsible . + * The user modification level is set to + * {@link PaletteEntry#PERMISSION_NO_MODIFICATION}, meaning that the entries + * cannot be reordered. + * + * @author crevells + * @since 3.4 + */ +public class PaletteToolbar + extends PaletteContainer { + +/** + * Type Identifier for a palette group that looks like a toolbar and only + * supports icons mode. + * + * @since 3.4 + */ +public static final String PALETTE_TYPE_TOOLBAR_GROUP = "Palette_Toolbar_Group";//$NON-NLS-1$ + +/** + * Creates a new PaletteGroup with the given label + * + * @param label + * the label + */ +public PaletteToolbar(String label) { + super(label, null, null, PALETTE_TYPE_TOOLBAR_GROUP); + setUserModificationPermission(PERMISSION_NO_MODIFICATION); +} + +/** + * Creates a new PaletteGroup with the given label and list of + * {@link PaletteEntry Palette Entries}. + * + * @param label + * the label + * @param children + * the list of PaletteEntry children + */ +public PaletteToolbar(String label, List children) { + this(label); + addAll(children); +} + +}