diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/ListDetails.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/ListDetails.java
index d711121f3..d6f9b6208 100644
--- a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/ListDetails.java
+++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/ListDetails.java
@@ -7,6 +7,7 @@ import java.util.List;
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;
@@ -56,6 +57,16 @@ public class ListDetails extends HtmlMacroComponent {
getPlanner().addTask(newTask);
}
+ public void addTaskContainer() {
+ TaskContainerBean newTask = new TaskContainerBean();
+ newTask.setName("Novo Contedor de Tarefas");
+ newTask.setBeginDate(new Date());
+ newTask.setEndDate(threeMonthsLater(newTask.getBeginDate()));
+ TaskDetail newDetail = addTask(newTask);
+ newDetail.receiveFocus();
+ getPlanner().addTaskContainer(newTask);
+ }
+
private static Date threeMonthsLater(Date now) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(now);
@@ -83,4 +94,4 @@ public class ListDetails extends HtmlMacroComponent {
return getFellow("insertionPoint");
}
-}
\ No newline at end of file
+}
diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/Planner.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/Planner.java
index d474ca90f..08d1e9927 100644
--- a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/Planner.java
+++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/Planner.java
@@ -5,6 +5,7 @@ import java.util.List;
import org.zkoss.ganttz.util.DependencyRegistry;
import org.zkoss.ganttz.util.TaskBean;
+import org.zkoss.ganttz.util.TaskContainerBean;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.ext.AfterCompose;
@@ -127,6 +128,11 @@ public class Planner extends XulElement implements AfterCompose {
dependencyRegistry.add(newTask);
}
+ public void addTaskContainer(TaskContainerBean newTaskContainer) {
+ getTaskList().addTaskContainer(newTaskContainer);
+ dependencyRegistry.add(newTaskContainer);
+ }
+
private void publishDependency(Dependency dependency) {
dependencyRegistry.add(dependency.getDependencyBean());
}
diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/TaskContainer.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/TaskContainer.java
new file mode 100644
index 000000000..15789c5af
--- /dev/null
+++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/TaskContainer.java
@@ -0,0 +1,23 @@
+package org.zkoss.ganttz;
+
+import org.zkoss.ganttz.util.TaskContainerBean;
+import org.zkoss.zk.ui.ext.AfterCompose;
+
+/**
+ * This class contains the information of a task container. It can be modified and
+ * notifies of the changes to the interested parties.
+ * Created at Jul 1, 2009
+ *
+ * @author Lorenzo Tilve Álvaro
+ *
+ */
+public class TaskContainer extends Task implements AfterCompose {
+
+ public static TaskContainer asTask(TaskContainerBean taskContainerBean) {
+ return new TaskContainer(taskContainerBean);
+ }
+
+ public TaskContainer(TaskContainerBean taskContainerBean) {
+ super(taskContainerBean);
+ }
+}
\ No newline at end of file
diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/TaskList.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/TaskList.java
index 6ba6d8b9f..198a9cfe7 100644
--- a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/TaskList.java
+++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/TaskList.java
@@ -18,6 +18,7 @@ import org.zkoss.ganttz.util.MenuBuilder;
import org.zkoss.ganttz.util.TaskBean;
import org.zkoss.ganttz.util.WeakReferencedListeners;
import org.zkoss.ganttz.util.MenuBuilder.ItemAction;
+import org.zkoss.ganttz.util.TaskContainerBean;
import org.zkoss.ganttz.util.WeakReferencedListeners.ListenerNotification;
import org.zkoss.ganttz.util.zoom.ZoomLevel;
import org.zkoss.ganttz.util.zoom.ZoomLevelChangedListener;
@@ -79,6 +80,10 @@ public class TaskList extends XulElement implements AfterCompose {
addTask(Task.asTask(newTask), true);
}
+ public void addTaskContainer(TaskContainerBean newTaskContainer) {
+ addTask(TaskContainer.asTask(newTaskContainer), true);
+ }
+
public synchronized void addTask(final Task task, boolean relocate) {
task.setParent(this);
addContextMenu(task);
diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/TaskContainerBean.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/TaskContainerBean.java
new file mode 100644
index 000000000..f3dea9a73
--- /dev/null
+++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/TaskContainerBean.java
@@ -0,0 +1,13 @@
+package org.zkoss.ganttz.util;
+
+/**
+ * This class contains the information of a task container. It can be modified and
+ * notifies of the changes to the interested parties.
+ * Created at Jul 1, 2009
+ *
+ * @author Lorenzo Tilve Álvaro
+ *
+ */
+public class TaskContainerBean extends TaskBean {
+
+}
\ No newline at end of file
diff --git a/navalplanner-gantt-zk/src/main/resources/metainfo/zk/lang-addon.xml b/navalplanner-gantt-zk/src/main/resources/metainfo/zk/lang-addon.xml
index 221fc24a9..988bd96d8 100755
--- a/navalplanner-gantt-zk/src/main/resources/metainfo/zk/lang-addon.xml
+++ b/navalplanner-gantt-zk/src/main/resources/metainfo/zk/lang-addon.xml
@@ -50,6 +50,15 @@
+
+ taskcontainer
+ org.zkoss.ganttz.TaskContainer
+
+ default
+ ~./ganttz/taskcontainer.dsp
+
+
+
tasklist
org.zkoss.ganttz.TaskList
diff --git a/navalplanner-gantt-zk/src/main/resources/web/ganttz/img/group_left.png b/navalplanner-gantt-zk/src/main/resources/web/ganttz/img/group_left.png
new file mode 100644
index 000000000..6a8297cc0
Binary files /dev/null and b/navalplanner-gantt-zk/src/main/resources/web/ganttz/img/group_left.png differ
diff --git a/navalplanner-gantt-zk/src/main/resources/web/ganttz/img/group_right.png b/navalplanner-gantt-zk/src/main/resources/web/ganttz/img/group_right.png
new file mode 100644
index 000000000..646c9ff9b
Binary files /dev/null and b/navalplanner-gantt-zk/src/main/resources/web/ganttz/img/group_right.png differ
diff --git a/navalplanner-gantt-zk/src/main/resources/web/ganttz/taskcontainer.dsp b/navalplanner-gantt-zk/src/main/resources/web/ganttz/taskcontainer.dsp
new file mode 100644
index 000000000..0fa7063a7
--- /dev/null
+++ b/navalplanner-gantt-zk/src/main/resources/web/ganttz/taskcontainer.dsp
@@ -0,0 +1,14 @@
+
+<%@ taglib uri="http://www.zkoss.org/dsp/web/core" prefix="c" %>
+<%@ taglib uri="http://www.zkoss.org/dsp/zk/core" prefix="z" %>
+
+
+
+
+
\ No newline at end of file
diff --git a/navalplanner-gantt-zk/src/main/resources/web/ganttz/zul/listdetails.zul b/navalplanner-gantt-zk/src/main/resources/web/ganttz/zul/listdetails.zul
index ce43eaf23..628480816 100644
--- a/navalplanner-gantt-zk/src/main/resources/web/ganttz/zul/listdetails.zul
+++ b/navalplanner-gantt-zk/src/main/resources/web/ganttz/zul/listdetails.zul
@@ -2,8 +2,12 @@
+
+
-
+
+
\ No newline at end of file
diff --git a/navalplanner-gantt-zk/src/main/resources/web/js/ganttz/task.js b/navalplanner-gantt-zk/src/main/resources/web/js/ganttz/task.js
index 7d93f8034..465182af0 100755
--- a/navalplanner-gantt-zk/src/main/resources/web/js/ganttz/task.js
+++ b/navalplanner-gantt-zk/src/main/resources/web/js/ganttz/task.js
@@ -1,6 +1,6 @@
/**
*
- * ganttz.js
+ * task.js
*
*/
@@ -139,11 +139,12 @@ zkTask.addDependency = function(cmp) {
};
zkTask.setAttr = function(cmp, name, value) {
- if ("name" == name) {
- var span = YAHOO.util.Selector.query("span", cmp, true);
- span.innerHTML = value;
- return true;
- }
+ // Obsolete as far as tasks will not show name inside
+// if ("name" == name) {
+// var span = YAHOO.util.Selector.query("span", cmp, true);
+// span.innerHTML = value;
+// return true;
+// }
return false;
}
@@ -210,6 +211,9 @@ zkTask.isOverTask = function(cmp, arrow) {
arrayTasks = zkTask.getElementsByAttribute(
listtasksNode, "div", "z.type","ganttz.task.Task");
+ arrayTasks = arrayTasks.concat(
+ zkTask.getElementsByAttribute(listtasksNode, "div", "z.type",
+ "ganttz.taskcontainer.TaskContainer" ) );
var xpos = zkTask.xMouse - ganttPanelNode.offsetLeft + ganttPanelNode.scrollLeft;
var ypos = zkTask.yMouse - ganttPanelNode.offsetTop + ganttPanelNode.scrollTop
diff --git a/navalplanner-gantt-zk/src/main/resources/web/js/ganttz/taskcontainer.js b/navalplanner-gantt-zk/src/main/resources/web/js/ganttz/taskcontainer.js
new file mode 100644
index 000000000..081b720e7
--- /dev/null
+++ b/navalplanner-gantt-zk/src/main/resources/web/js/ganttz/taskcontainer.js
@@ -0,0 +1,116 @@
+/**
+ *
+ * taskContainer.js
+ *
+ */
+
+
+zkTaskContainer = {};
+
+zkTaskContainer.getDD = function(cmp) {
+ zkTask.getDD(cmp);
+};
+
+zkTaskContainer.relocateAfterAdding = function(cmp) {
+ zkTask.relocateAfterAdding (cmp);
+};
+
+zkTaskContainer.cleanup = function(cmp){
+ zkTask.cleanup(cmp);
+};
+
+zkTaskContainer.init = function(cmp) {
+ zkTask.init(cmp);
+};
+
+zkTaskContainer.xMouse;
+zkTaskContainer.yMouse;
+
+// Listen to mousemove events
+YAHOO.util.Event.on(document.body, 'mousemove', function(e) {
+ var arrPos = YAHOO.util.Event.getXY(e);
+ zkTaskContainer.xMouse = arrPos[0];
+ zkTaskContainer.yMouse = arrPos[1];
+});
+
+zkTaskContainer.setAttr = function(cmp, nm, val) {
+ zkTask.setAttr(cmp, nm, val);
+};
+
+zkTaskContainer.addDependency = function(cmp) {
+ zkTask.addDependency(cmp);
+};
+
+zkTaskContainer.setAttr = function(cmp, name, value) {
+ zkTask.setAttr(cmp, name, value);
+};
+
+zkTaskContainer.addRelatedDependency = function(cmp, dependency) {
+ zkTask.addRelatedDependency(cmp, dependency);
+};
+
+/* Dependencies with origin in a task container will be redrawn with a
+ * different algorithm */
+zkTaskContainer.createArrow = function(cmp) {
+ zkTask.createArrow(cmp)
+};
+
+zkTaskContainer.isOverTask = function(cmp, arrow) {
+ zkTask.isOverTask(cmp, arrow);
+};
+
+zkTaskContainer.getElementsByAttribute = function(oElm, strTagName, strAttributeName,
+ strAttributeValue) {
+ zkTask.getElementsByAttribute(oElm, strTagName, strAttributeName, strAttributeValue);
+}
+
+YAHOO.example.DDRegion = function(id, sGroup, config) {
+ this.cont = config.cont;
+ YAHOO.example.DDRegion.superclass.constructor.apply(this, arguments);
+};
+
+var myDom = YAHOO.util.Dom, myEvent = YAHOO.util.Event
+
+YAHOO.extend(YAHOO.example.DDRegion, YAHOO.util.DD, {
+ cont : null,
+ init : function() {
+ //Call the parent's init method
+ YAHOO.example.DDRegion.superclass.init.apply(this, arguments);
+ this.initConstraints();
+
+ myEvent.on(window, 'resize', function() {
+ this.initConstraints();
+ }, this, true);
+ },
+ initConstraints : function() {
+
+ //Get the top, right, bottom and left positions
+ var region = myDom.getRegion(this.cont);
+
+ // Get the element we are working on
+ var el = this.getEl();
+
+ // Get the xy position of it
+ var xy = myDom.getXY(el);
+
+ // Get the width and height
+ var width = parseInt(myDom.getStyle(el, 'width'), 10);
+ var height = parseInt(myDom.getStyle(el, 'height'), 10);
+
+ // Set left to x minus left
+ var left = xy[0] - region.left;
+
+ // Set right to right minus x minus width
+ var right = region.right - xy[0] - width;
+
+ // Set top to y minus top
+ var top = xy[1] - region.top;
+
+ // Set bottom to bottom minus y minus height
+ var bottom = region.bottom - xy[1] - height;
+
+ // Set the constraints based on the above calculations
+ this.setXConstraint(left, right);
+ this.setYConstraint(top, bottom);
+ }
+});
\ No newline at end of file
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/DataForPlanner.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/DataForPlanner.java
index 2a2f358a1..cbf135dc1 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/DataForPlanner.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/DataForPlanner.java
@@ -61,4 +61,4 @@ public class DataForPlanner {
calendar.add(Calendar.MONTH, 2);
return calendar.getTime();
}
-}
\ No newline at end of file
+}
diff --git a/navalplanner-webapp/src/main/webapp/planner/css/productionmanagement.css b/navalplanner-webapp/src/main/webapp/planner/css/productionmanagement.css
index dda7a40a5..13e30f35c 100644
--- a/navalplanner-webapp/src/main/webapp/planner/css/productionmanagement.css
+++ b/navalplanner-webapp/src/main/webapp/planner/css/productionmanagement.css
@@ -81,6 +81,28 @@ HEIGHT_TIME_TRACKER = 120;
width: 1800px;
}
+/* ---------- TaskGroup --------- */
+.taskgroup_start {
+ background-image: url("/navalplanner-webapp/zkau/web/ganttz/img/group_left.png");
+ height: 10px;
+ width: 10px;
+ float:left;
+}
+
+.taskgroup_end {
+ background-image: url("../../zkau/web/ganttz/img/group_right.png");
+ height: 10px;
+ width: 10px;
+ float:right;
+}
+
+.taskgroup {
+ border-top: solid black 2px;
+ border-bottom: 0px;
+ border-left: 0px;
+ border-right: 0px;
+ background-color: transparent !important;
+}
/****** Dependencies *******/
#listdependencies {