package org.trianacode.gui.util.organize;
import org.trianacode.gui.main.TaskGraphPanel;
import org.trianacode.taskgraph.Task;
import org.trianacode.taskgraph.TaskGraph;
import org.trianacode.taskgraph.TaskGraphUtils;
import java.util.*;
/**
* @author Andrew Harrison
* @version 1.0.0 Nov 23, 2010
*/
public class TreeOrganize1 {
private TaskGraphPanel panel;
private TaskGraph taskgraph;
private Map<Integer, GridColumn> levels = new HashMap<Integer, GridColumn>();
private List<Task> done = new ArrayList<Task>();
private int longestList = 0;
public TreeOrganize1(TaskGraphPanel panel) {
this.panel = panel;
this.taskgraph = panel.getTaskGraph();
}
public void organize() {
parse();
Set<Integer> ints = levels.keySet();
Integer[] sorted = ints.toArray(new Integer[ints.size()]);
Arrays.sort(sorted);
for (Integer integer : ints) {
GridColumn row = levels.get(integer);
setPoints(row);
}
//TaskLayoutUtils.translateToOrigin(taskgraph.getTasks(false), 1);
panel.getContainer().invalidate();
panel.getContainer().validate();
panel.getContainer().repaint();
}
public double getHeight(int level) {
GridColumn col = levels.get(level);
return col.getMaxHeight();
}
private void setPoints(GridColumn column) {
int curr = 0;
int len = column.getLength();
for (int i = 0; i < len; i++) {
Gridbox box = column.getBox(i);
Task task = box.getTask();
if (task != null) {
double x = 0;
double y = 0;
if (i > 0) {
GridColumn prev = levels.get(column.getX());
if (prev != null) {
x += prev.getColumnWidth();
y += prev.getMaxHeight();
}
}
System.out.println("TreeOrganize1.setPoints task:" + task.getToolName());
System.out.println("TreeOrganize1.setPoints x:" + box.getX() + x);
System.out.println("TreeOrganize1.setPoints y:" + box.getY() + y);
task.setParameter(Task.GUI_X, (box.getX() + x) + "");
task.setParameter(Task.GUI_Y, (box.getY() + y) + "");
}
}
}
private void parse() {
List<Task> roots = TaskGraphUtils.getRootTasks(taskgraph);
for (int i = 0; i < roots.size(); i++) {
Task task = roots.get(i);
setLevel(task, 0, i);
}
}
private void setLevel(Task task, int level, int y) {
if (done.contains(task)) {
return;
}
GridColumn row = levels.get(level);
if (row == null) {
row = new GridColumn(y);
levels.put(level, row);
}
Collection<GridColumn> all = levels.values();
for (GridColumn taskList : all) {
if (taskList.getLength() > longestList) {
longestList = taskList.getLength();
}
}
row.addBox(level, new Gridbox(level, y, task));
done.add(task);
List<Task> children = TaskGraphUtils.getSuccessors(task);
int currY = y;
for (Task child : children) {
currY++;
setLevel(child, level, currY);
}
}
}