/*******************************************************************************
* Copyright (c) 2009 the CHISEL group and contributors.
* 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:
* Del Myers -- initial API and implementation
*******************************************************************************/
package org.eclipse.zest.custom.sequence.figures;
import org.eclipse.draw2d.ConnectionLayer;
import org.eclipse.draw2d.Figure;
import org.eclipse.draw2d.FreeformLayer;
import org.eclipse.draw2d.FreeformLayout;
import org.eclipse.draw2d.FreeformViewport;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.LayoutAnimator;
import org.eclipse.draw2d.ScalableFigure;
import org.eclipse.draw2d.ScalableFreeformLayeredPane;
import org.eclipse.draw2d.ScrollPane;
import org.eclipse.draw2d.StackLayout;
import org.eclipse.draw2d.Viewport;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.zest.custom.sequence.visuals.LayerConstants;
public class ScrollingFigure extends Figure {
IFigure pane;
private ScalableFreeformLayeredPane layers;
IFigure connections;
IFigure feedback;
Viewport viewport;
ScrollPane scrollpane;
public ScrollingFigure() {
scrollpane = new ScrollPane();
layers = new ScalableFreeformLayeredPane();
pane = new FreeformLayer();
connections = new ConnectionLayer();
feedback = new FreeformLayer();
feedback.setEnabled(false);
connections.addLayoutListener(LayoutAnimator.getDefault());
layers.add(pane, LayerConstants.PRIMARY_LAYER);
layers.add(connections, LayerConstants.CONNECTION_LAYER);
layers.add(feedback, LayerConstants.FEEDBACK_LAYER);
pane.setLayoutManager(new FreeformLayout());
pane.addLayoutListener(LayoutAnimator.getDefault());
setLayoutManager(new StackLayout());
add(scrollpane);
viewport = new FreeformViewport();
scrollpane.setViewport(viewport);
scrollpane.setContents(layers);
//layers.setLayoutManager(new FreeformLayout());
// setBackgroundColor(ColorConstants.listBackground);
// setOpaque(true);
}
/* (non-Javadoc)
* @see org.eclipse.draw2d.Figure#getPreferredSize(int, int)
*/
@Override
public Dimension getPreferredSize(int wHint, int hHint) {
Dimension size = getContentPane().getPreferredSize(wHint, hHint).getCopy();
return size;
}
/* (non-Javadoc)
* @see org.eclipse.draw2d.Figure#setBounds(org.eclipse.draw2d.geometry.Rectangle)
*/
@Override
public void setBounds(Rectangle rect) {
super.setBounds(rect);
//getViewport().setSize(rect.getSize());
}
public IFigure getContentPane() {
return pane;
}
public IFigure getConnectionLayer() {
return connections;
}
public IFigure getFeedbackLayer() {
return feedback;
}
public Viewport getViewport() {
return viewport;
}
public ScalableFigure getLayers() {
return layers;
}
/* (non-Javadoc)
* @see org.eclipse.draw2d.Figure#getClientArea(org.eclipse.draw2d.geometry.Rectangle)
*/
@Override
public Rectangle getClientArea(Rectangle rect) {
Rectangle result = super.getClientArea(rect);//getContentPane().getClientArea(rect);
//translateToAbsolute(result);
return result;
}
public ScrollPane getScrollPane() {
return scrollpane;
}
}