ItEr15S12RFComportamentoGraficoPlanificadorItEr14S13: Converting left pane to use a tree.

This commit is contained in:
Óscar González Fernández 2009-07-05 17:15:26 +02:00 committed by Javier Moran Rua
parent b3be85c883
commit 213b38dce2
3 changed files with 80 additions and 46 deletions

View file

@ -1,50 +1,96 @@
package org.zkoss.ganttz;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.zkoss.ganttz.util.TaskBean;
import org.zkoss.ganttz.util.TaskContainerBean;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.HtmlMacroComponent;
import org.zkoss.zul.SimpleTreeModel;
import org.zkoss.zul.SimpleTreeNode;
import org.zkoss.zul.Tree;
import org.zkoss.zul.Treecell;
import org.zkoss.zul.Treeitem;
import org.zkoss.zul.TreeitemRenderer;
import org.zkoss.zul.Treerow;
public class ListDetails extends HtmlMacroComponent {
/**
* @author Óscar González Fernández <ogonzalez@igalia.com>
*/
private final class TaskBeanRenderer implements TreeitemRenderer {
@Override
public void render(Treeitem item, Object data) throws Exception {
SimpleTreeNode node = (SimpleTreeNode) data;
TaskBean taskBean = (TaskBean) node.getData();
Treerow treerow = new Treerow();
treerow.setParent(item);
Treecell treecell = new Treecell();
treecell.setParent(treerow);
TaskDetail taskDetail = TaskDetail.create(taskBean);
taskDetail.setParent(treecell);
taskDetail.afterCompose();
}
}
private static Log LOG = LogFactory.getLog(ListDetails.class);
private TaskRemovedListener taskRemovedListener;
private final List<TaskBean> taskBeans;
private SimpleTreeNode rootNode;
private SimpleTreeModel tasksTreeModel;
private Tree tasksTree;
public ListDetails(List<TaskBean> taskBeans) {
this.taskBeans = taskBeans;
}
private static List<SimpleTreeNode> asSimpleTreeNodes(
List<TaskBean> taskBeans2) {
return asSimpleTreeNodes(taskBeans2, new HashSet<TaskBean>());
}
private static List<SimpleTreeNode> asSimpleTreeNodes(
List<TaskBean> taskBeans2, Set<TaskBean> alreadyIncluded) {
ArrayList<SimpleTreeNode> result = new ArrayList<SimpleTreeNode>();
for (TaskBean taskBean : taskBeans2) {
if (alreadyIncluded.contains(taskBean))
continue;
SimpleTreeNode node = asSimpleTreeNode(taskBean);
if (taskBean instanceof TaskContainerBean) {
TaskContainerBean container = (TaskContainerBean) taskBean;
node.getChildren()
.addAll(
asSimpleTreeNodes(container.getTasks(),
alreadyIncluded));
}
result.add(node);
alreadyIncluded.add(taskBean);
}
return result;
}
private static SimpleTreeNode asSimpleTreeNode(TaskBean taskBean) {
return new SimpleTreeNode(taskBean, new ArrayList<SimpleTreeNode>());
}
Planner getPlanner() {
return (Planner) getParent();
}
private List<TaskDetail> getTaskDetails() {
List<Object> children = getInsertionPoint().getChildren();
return Planner.findComponentsOfType(TaskDetail.class, children);
}
public void taskRemoved(TaskBean taskRemoved) {
List<TaskDetail> taskDetails = getTaskDetails();
for (TaskDetail taskDetail : taskDetails) {
if (taskDetail.getTaskBean().equals(taskRemoved)) {
removeDetail(taskDetail);
return;
}
}
throw new RuntimeException("not found taskDetail for " + taskRemoved);
}
private void removeDetail(TaskDetail taskDetail) {
getInsertionPoint().getChildren().remove(taskDetail);
// TODO pending
}
public void addTask() {
@ -52,8 +98,7 @@ public class ListDetails extends HtmlMacroComponent {
newTask.setName("Nova Tarefa");
newTask.setBeginDate(new Date());
newTask.setEndDate(threeMonthsLater(newTask.getBeginDate()));
TaskDetail newDetail = addTask(newTask);
newDetail.receiveFocus();
addTask(newTask);
getPlanner().addTask(newTask);
}
@ -62,9 +107,8 @@ public class ListDetails extends HtmlMacroComponent {
newTask.setName("Novo Contedor de Tarefas");
newTask.setBeginDate(new Date());
newTask.setEndDate(threeMonthsLater(newTask.getBeginDate()));
TaskDetail newDetail = addTask(newTask);
newDetail.receiveFocus();
getPlanner().addTaskContainer(newTask);
addTask(newTask);
getPlanner().addTask(newTask);
}
private static Date threeMonthsLater(Date now) {
@ -78,20 +122,17 @@ public class ListDetails extends HtmlMacroComponent {
public void afterCompose() {
setClass("listdetails");
super.afterCompose();
for (TaskBean taskBean : taskBeans) {
addTask(taskBean);
}
tasksTree = (Tree) getFellow("tasksTree");
rootNode = new SimpleTreeNode(null, asSimpleTreeNodes(taskBeans));
tasksTreeModel = new SimpleTreeModel(rootNode);
tasksTree.setModel(tasksTreeModel);
tasksTree.setTreeitemRenderer(new TaskBeanRenderer());
}
private TaskDetail addTask(TaskBean taskBean) {
TaskDetail taskDetail = TaskDetail.create(taskBean);
getInsertionPoint().appendChild(taskDetail);
taskDetail.afterCompose();
return taskDetail;
}
private Component getInsertionPoint() {
return getFellow("insertionPoint");
private void addTask(TaskBean taskBean) {
rootNode.getChildren().add(
new SimpleTreeNode(taskBean, new ArrayList<TaskBean>()));
tasksTree.setModel(tasksTreeModel);
}
}

View file

@ -127,11 +127,6 @@ public class Planner extends XulElement implements AfterCompose {
dependencyRegistry.add(newTask);
}
public void addTaskContainer(TaskContainerBean newTaskContainer) {
getTaskList().addTask(newTaskContainer);
dependencyRegistry.add(newTaskContainer);
}
private void publishDependency(Dependency dependency) {
dependencyRegistry.add(dependency.getDependencyBean());
}

View file

@ -1,13 +1,11 @@
<?taglib uri="http://www.zkoss.org/dsp/web/core" prefix="c"?>
<zk xmlns:n="http://www.zkoss.org/2005/zk/native">
<button label="${c:l('listdetails.add_task')}"
onClick="insertionPoint.getParent().getParent().addTask();" />
onClick="self.getParent().addTask();" />
<button label="Engadir Contedor"
onClick="self.getParent().addTaskContainer();" />
<n:div id="listdetails_container">
<vbox class="listdetails" id="insertionPoint">
</vbox>
<n:div id="listdetails_container">
<tree id="tasksTree">
</tree>
</n:div>
</zk>