/******************************************************************************* * Copyright (c) 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.draw2d.examples.tree; import org.eclipse.swt.graphics.Color; import org.eclipse.draw2d.AbstractBorder; import org.eclipse.draw2d.Border; import org.eclipse.draw2d.ColorConstants; import org.eclipse.draw2d.CompoundBorder; import org.eclipse.draw2d.Figure; import org.eclipse.draw2d.Graphics; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.Label; import org.eclipse.draw2d.MarginBorder; import org.eclipse.draw2d.StackLayout; import org.eclipse.draw2d.geometry.Insets; import org.eclipse.draw2d.geometry.PointList; import org.eclipse.draw2d.geometry.Rectangle; /** * * @author hudsonr * Created on Apr 22, 2003 */ public class PageNode extends Figure { private boolean selected; static final Color gradient1 = new Color(null, 232,232,240); static final Color gradient2 = new Color(null, 176,184,216); static final Color corner1 = new Color(null, 200, 208, 223); static final Color corner2 = new Color(null, 160, 172, 200); static final Color blue = new Color(null, 152,168,200); static final Color shadow = new Color(null, 202,202,202); static final int CORNER_SIZE = 10; static final Border BORDER = new CompoundBorder( new FoldedPageBorder(), new MarginBorder(4,4,8,3)); static class FoldedPageBorder extends AbstractBorder { static final PointList CORNER_ERASE; static final PointList CORNER_PAINT; static { CORNER_ERASE = new PointList(3); CORNER_ERASE.addPoint(1,0); CORNER_ERASE.addPoint(1, CORNER_SIZE + 1); CORNER_ERASE.addPoint(-CORNER_SIZE, 0); CORNER_PAINT = new PointList(3); CORNER_PAINT.addPoint(-CORNER_SIZE, 0); CORNER_PAINT.addPoint(0, CORNER_SIZE); CORNER_PAINT.addPoint(-CORNER_SIZE, CORNER_SIZE); } static final Insets insets = new Insets(CORNER_SIZE,2,4,4); public Insets getInsets(IFigure figure) { return insets; } public void paint(IFigure figure, Graphics g, Insets insets) { Rectangle r = getPaintRectangle(figure, insets); g.setLineWidth(4); r.resize(-2, -2); g.setForegroundColor(shadow); g.drawLine(r.x+3, r.bottom(), r.right() - 1, r.bottom()); g.drawLine(r.right(), r.y + 3 + CORNER_SIZE, r.right(), r.bottom() - 1); g.restoreState(); r.resize(-1, -1); g.drawRectangle(r); g.setForegroundColor(blue); g.drawRectangle(r.x + 1, r.y+1, r.width - 2, r.height - 2); g.translate(r.getTopRight()); g.fillPolygon(CORNER_ERASE); g.setBackgroundColor(corner1); g.fillPolygon(CORNER_PAINT); g.setForegroundColor(figure.getForegroundColor()); g.drawPolygon(CORNER_PAINT); g.restoreState(); g.setForegroundColor(corner2); g.drawLine( r.right() - CORNER_SIZE + 1, r.y + 2, r.right() - 2, r.y + CORNER_SIZE-1); } } private Label label = new Label(); public PageNode(String text) { this(); label.setText(text); } public PageNode() { setBorder(BORDER); setLayoutManager(new StackLayout()); add(label); } /** * @see org.eclipse.draw2d.Figure#paintFigure(org.eclipse.draw2d.Graphics) */ protected void paintFigure(Graphics g) { super.paintFigure(g); if (selected) { g.setForegroundColor(ColorConstants.menuBackgroundSelected()); g.setBackgroundColor(ColorConstants.titleGradient()); } else { g.setForegroundColor(gradient1); g.setBackgroundColor(gradient2); } g.fillGradient(getBounds().getResized(-3, -3), true); } public void setSelected(boolean value) { this.selected = value; if (selected) label.setForegroundColor(ColorConstants.white()); else label.setForegroundColor(null); repaint(); } /** * @see java.lang.Object#toString() */ public String toString() { return ((Label)getChildren().get(0)).getText(); } }