/******************************************************************************* * Copyright (c) 2010 Oak Ridge National Laboratory. * 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 ******************************************************************************/ package org.eclipse.nebula.visualization.xygraph.figures; import org.eclipse.draw2d.Clickable; import org.eclipse.draw2d.Figure; import org.eclipse.draw2d.Graphics; import org.eclipse.draw2d.geometry.Dimension; import org.eclipse.draw2d.geometry.Rectangle; /** * An graph which consists of a toolbar and an XYGraph. * * @author Xihui Chen * @author Kay Kasemir added flags */ public class ToolbarArmedXYGraph extends Figure { final private IXYGraph xyGraph; final private XYGraphToolbar toolbar; private boolean transparent; private final static int MARGIN = 3; /** Construct default graph */ public ToolbarArmedXYGraph() { this(new XYGraph()); } /** * Construct default toolbar around existing graph * * @param xyGraph * XYGraph */ public ToolbarArmedXYGraph(final IXYGraph xyGraph) { this((XYGraph) xyGraph); } /** * Use {@link #ToolbarArmedXYGraph(IXYGraph)} instead <br> * Construct default toolbar around existing graph * * @param xyGraph * XYGraph */ @Deprecated public ToolbarArmedXYGraph(final XYGraph xyGraph) { this(xyGraph, XYGraphFlags.COMBINED_ZOOM); } /** * Construct toolbar around existing graph * * @param xyGraph * XYGraph * @param flags * Bitwise 'or' of flags * @see XYGraphFlags#COMBINED_ZOOM * @see XYGraphFlags#SEPARATE_ZOOM */ public ToolbarArmedXYGraph(final IXYGraph xyGraph, final int flags) { this((XYGraph) xyGraph, flags); } /** * Use {@link #ToolbarArmedXYGraph(IXYGraph, int)} instead<br> * Construct toolbar around existing graph * * @param xyGraph * XYGraph * @param flags * Bitwise 'or' of flags * @see XYGraphFlags#COMBINED_ZOOM * @see XYGraphFlags#SEPARATE_ZOOM */ @Deprecated public ToolbarArmedXYGraph(final XYGraph xyGraph, final int flags) { this.xyGraph = xyGraph; toolbar = new XYGraphToolbar(this.xyGraph, flags); xyGraph.setOpaque(false); toolbar.setOpaque(false); add(toolbar); add(xyGraph); } public XYGraphToolbar getToolbar() { return toolbar; } @Override protected void layout() { Rectangle clientArea = getClientArea().getCopy(); if (toolbar.isVisible()) { toolbar.invalidate(); Dimension size = toolbar.getPreferredSize(clientArea.width - MARGIN, -1); toolbar.setBounds(new Rectangle(clientArea.x + MARGIN, clientArea.y + MARGIN, size.width, size.height)); clientArea.y += size.height + 2 * MARGIN; clientArea.height -= size.height + 2 * MARGIN; } xyGraph.setBounds(new Rectangle(clientArea)); super.layout(); } /** * @param showToolbar * the showToolbar to set */ public void setShowToolbar(boolean showToolbar) { toolbar.setVisible(showToolbar); revalidate(); } /** * @return the showToolbar */ public boolean isShowToolbar() { return toolbar.isVisible(); } /** * Use {@link #getIXYGraph()} instead * * @return the xyGraph */ @Deprecated public XYGraph getXYGraph() { return (XYGraph) xyGraph; } /** * @return the xyGraph */ public IXYGraph getIXYGraph() { return xyGraph; } @Override public boolean isOpaque() { return false; } /** * {@inheritDoc} */ @Override public void paintFigure(final Graphics graphics) { if (!transparent) graphics.fillRectangle(getClientArea()); super.paintFigure(graphics); } /** * @return the transparent */ public boolean isTransparent() { return transparent; } /** * @param transparent * the transparent to set */ public void setTransparent(boolean transparent) { this.transparent = transparent; xyGraph.setTransparent(transparent); } /** * Add a button to the tool bar. New button will be added to the 'end' of * the tool bar. * * @param button * New button */ public void addToolbarButton(final Clickable button) { toolbar.addButton(button); } }