/*******************************************************************************
* 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.csstudio.swt.xygraph.figures;
import org.csstudio.swt.xygraph.toolbar.XYGraphToolbar;
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 XYGraph 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 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 XYGraph xyGraph, final int flags) {
this.xyGraph = xyGraph;
toolbar = new XYGraphToolbar(this.xyGraph, flags);
xyGraph.setOpaque(false);
toolbar.setOpaque(false);
add(toolbar);
add(xyGraph);
}
@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();
}
/**
* @return the xyGraph
*/
public XYGraph getXYGraph() {
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);
}
}