/*******************************************************************************
* 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 java.util.List;
import org.eclipse.draw2d.AbstractLayout;
import org.eclipse.draw2d.Graphics;
import org.eclipse.draw2d.geometry.Transposer;
/**
*
* @author hudsonr
* Created on Apr 22, 2003
*/
public abstract class BranchLayout extends AbstractLayout {
private Transposer transposer;
final TreeBranch branch;
int[] cachedContourLeft;
int[] cachedContourRight;
int depth = -1;
public boolean horizontal = true;
int[] preferredRowHeights;
int rowHeight;
public BranchLayout(TreeBranch branch) {
this.branch = branch;
}
abstract void calculateDepth();
public int[] getContourLeft() {
if (cachedContourLeft == null)
updateContours();
return cachedContourLeft;
}
public int[] getContourRight() {
if (cachedContourRight == null)
updateContours();
return cachedContourRight;
}
public int getDepth() {
if (!branch.isExpanded())
return 1;
if (depth == -1)
calculateDepth();
return depth;
}
public int[] getPreferredRowHeights() {
if (preferredRowHeights == null)
updateRowHeights();
return preferredRowHeights;
}
List getSubtrees() {
return branch.getContentsPane().getChildren();
}
Transposer getTransposer() {
if (transposer == null)
transposer = branch.getRoot().getTransposer();
return transposer;
}
int getMajorSpacing() {
return branch.getRoot().getMajorSpacing();
}
public void invalidate() {
preferredRowHeights = null;
cachedContourLeft = null;
cachedContourRight = null;
depth = -1;
super.invalidate();
}
public boolean isHorizontal() {
return horizontal;
}
abstract void paintLines(Graphics g);
public void setHorizontal(boolean value) {
horizontal = value;
}
void setRowHeights(int heights[], int offset) {
if (rowHeight != heights[offset]) {
rowHeight = heights[offset];
branch.revalidate();
}
}
abstract void updateContours();
abstract void updateRowHeights();
}