blob: 966f33f2beef6d4ff5ab33f56a7d9487729e52ae [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2009 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 implementation
*******************************************************************************/
package org.eclipse.epf.authoring.gef.figures;
import java.util.Iterator;
import org.eclipse.draw2d.FlowLayout;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Rectangle;
/**
* @author skannoor
* @deprecated
*/
public class RoleTaskFlowLayout extends FlowLayout {
boolean adjust = false;
WorkingData data;
/**
*
*/
public RoleTaskFlowLayout() {
// TODO Auto-generated constructor stub
}
/**
* @param isHorizontal
*/
public RoleTaskFlowLayout(boolean isHorizontal) {
super(isHorizontal);
// TODO Auto-generated constructor stub
}
public void layout(IFigure parent) {
// TODO Auto-generated method stub
if(adjust){
adjustLayout(parent);
}else
super.layout(parent);
}
class WorkingData {
int rowHeight, rowWidth, rowCount, rowX, rowY, maxWidth;
Rectangle bounds[], area;
IFigure row[];
}
/**
* Initializes the state of row data, which is internal to the layout process.
*/
protected void initRow() {
data.rowX = 0;
data.rowHeight = 0;
data.rowWidth = 0;
data.rowCount = 0;
}
/**
* Initializes state data for laying out children, based on the Figure given as input.
*
* @param parent the parent figure
* @since 2.0
*/
protected void initVariables(IFigure parent) {
data.row = new IFigure[parent.getChildren().size()];
data.bounds = new Rectangle[data.row.length];
data.maxWidth = data.area.width;
}
private void adjustLayout(IFigure parent) {
// TODO Auto-generated method stub
data = new WorkingData();
Rectangle relativeArea = parent.getClientArea();
data.area = transposer.t(relativeArea);
Iterator iterator = parent.getChildren().iterator();
int dx;
//Calculate the hints to be passed to children
int wHint = -1;
int hHint = -1;
if (isHorizontal())
wHint = parent.getClientArea().width;
else
hHint = parent.getClientArea().height;
initVariables(parent);
initRow();
int i = 0;
while (iterator.hasNext()) {
IFigure f = (IFigure)iterator.next();
Dimension pref = transposer.t(getChildSize(f, wHint, hHint));
Rectangle r = new Rectangle(0, 0, pref.width, pref.height);
if (data.rowCount > 0) {
if (data.rowWidth + pref.width > data.maxWidth)
layoutRow(parent);
}
r.x = data.rowX;
r.y = data.rowY;
dx = r.width + getMinorSpacing();
data.rowX += dx;
data.rowWidth += dx;
data.rowHeight = Math.max(data.rowHeight, r.height);
data.row [data.rowCount] = f;
data.bounds[data.rowCount] = r;
data.rowCount++;
i++;
}
if (data.rowCount != 0)
layoutRow(parent);
data = null;
}
public void setAdjust(boolean adjust) {
this.adjust = adjust;
}
}