ItEr15S12RFComportamentoGraficoPlanificadorItEr14S13: Converting left pane to use a tree.
This commit is contained in:
parent
b3be85c883
commit
213b38dce2
3 changed files with 80 additions and 46 deletions
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
Loading…
Add table
Reference in a new issue