[483] | 1 | define([ |
---|
| 2 | "./contextMenuTab", |
---|
| 3 | "./GanttTaskControl", |
---|
| 4 | "./GanttProjectControl", |
---|
| 5 | "dijit/Dialog", |
---|
| 6 | "dijit/form/Button", |
---|
| 7 | "dijit/form/Form", |
---|
| 8 | "dijit/registry", |
---|
| 9 | "dojo/_base/declare", |
---|
| 10 | "dojo/_base/array", |
---|
| 11 | "dojo/_base/lang", |
---|
| 12 | "dojo/date/locale", |
---|
| 13 | "dojo/request", |
---|
| 14 | "dojo/on", |
---|
| 15 | "dojo/dom", |
---|
| 16 | "dojo/dom-class", |
---|
| 17 | "dojo/dom-construct", |
---|
| 18 | "dojo/dom-style", |
---|
| 19 | "dojo/dom-attr", |
---|
| 20 | "dojo/dom-geometry", |
---|
| 21 | "dojo/keys", |
---|
| 22 | "dojo/domReady!" |
---|
| 23 | ], function(contextMenuTab, GanttTaskControl, GanttProjectControl, |
---|
| 24 | Dialog, Button, Form, |
---|
| 25 | registry, declare, arrayUtil, lang, locale, request, on, |
---|
| 26 | dom, domClass, domConstruct, domStyle, domAttr, domGeometry, keys){ |
---|
| 27 | return declare("dojox.gantt.TabMenu", [], { |
---|
| 28 | constructor: function(chart){ |
---|
| 29 | this.ganttChart = chart; |
---|
| 30 | this.menuPanel = null; |
---|
| 31 | this.paneContentArea = null; |
---|
| 32 | this.paneActionBar = null; |
---|
| 33 | this.tabPanelDlg = null; |
---|
| 34 | this.tabPanelDlgId = null; |
---|
| 35 | this.arrTabs = []; |
---|
| 36 | this.isShow = false; |
---|
| 37 | this.buildContent(); |
---|
| 38 | }, |
---|
| 39 | buildContent: function(){ |
---|
| 40 | this.createMenuPanel(); |
---|
| 41 | this.createTabPanel(); |
---|
| 42 | |
---|
| 43 | //tasks customization |
---|
| 44 | var taskSucAdd = this.createTab(11, "Add Successor Task", "t", true, this); |
---|
| 45 | taskSucAdd.addItem(1, "Id", "id", true); |
---|
| 46 | taskSucAdd.addItem(2, "Name", "name"); |
---|
| 47 | taskSucAdd.addItem(3, "Start Time", "startTime"); |
---|
| 48 | taskSucAdd.addItem(4, "Duration (hours)", "duration"); |
---|
| 49 | taskSucAdd.addItem(5, "Percent Complete (%)", "percentage"); |
---|
| 50 | taskSucAdd.addItem(6, "Task Assignee", "taskOwner"); |
---|
| 51 | taskSucAdd.addAction("addSuccessorTaskAction"); |
---|
| 52 | |
---|
| 53 | var taskChildAdd = this.createTab(10, "Add Child Task", "t", true, this); |
---|
| 54 | taskChildAdd.addItem(1, "Id", "id", true); |
---|
| 55 | taskChildAdd.addItem(2, "Name", "name"); |
---|
| 56 | taskChildAdd.addItem(3, "Start Time", "startTime"); |
---|
| 57 | taskChildAdd.addItem(4, "Duration (hours)", "duration"); |
---|
| 58 | taskChildAdd.addItem(5, "Percent Complete (%)", "percentage"); |
---|
| 59 | taskChildAdd.addItem(6, "Task Assignee", "taskOwner"); |
---|
| 60 | taskChildAdd.addAction("addChildTaskAction"); |
---|
| 61 | |
---|
| 62 | var taskDuration = this.createTab(4, "Set Duration(hours)", "t", true, this, true); |
---|
| 63 | taskDuration.addItem(1, "Duration (hours)", "duration", true); |
---|
| 64 | taskDuration.addAction("durationUpdateAction"); |
---|
| 65 | |
---|
| 66 | var taskCP = this.createTab(5, "Set Complete Percentage (%)", "t", true, this, true); |
---|
| 67 | taskCP.addItem(1, "Percent Complete (%)", "percentage", true); |
---|
| 68 | taskCP.addAction("cpUpdateAction"); |
---|
| 69 | |
---|
| 70 | var taskOwner = this.createTab(20, "Set Owner", "t", true, this, true); |
---|
| 71 | taskOwner.addItem(1, "Task Assignee", "taskOwner", true); |
---|
| 72 | taskOwner.addAction("ownerUpdateAction"); |
---|
| 73 | |
---|
| 74 | var taskPrevious = this.createTab(13, "Set Previous Task", "t", true, this); |
---|
| 75 | taskPrevious.addItem(1, "Previous Task Id", "previousTaskId", true); |
---|
| 76 | taskPrevious.addAction("ptUpdateAction"); |
---|
| 77 | |
---|
| 78 | var taskRename = this.createTab(1, "Rename Task", "t", true, this, true); |
---|
| 79 | taskRename.addItem(1, "New Name", "name", true); |
---|
| 80 | taskRename.addAction("renameTaskAction"); |
---|
| 81 | |
---|
| 82 | var taskDelete = this.createTab(2, "Delete Task", "t", true, this); |
---|
| 83 | taskDelete.addAction("deleteAction"); |
---|
| 84 | |
---|
| 85 | //projects customization |
---|
| 86 | var projectAdd = this.createTab(12, "Add New Project", "p", false, this); |
---|
| 87 | projectAdd.addItem(1, "Id", "id", true); |
---|
| 88 | projectAdd.addItem(2, "Name", "name", true); |
---|
| 89 | projectAdd.addItem(3, "Start Date", "startDate", true); |
---|
| 90 | projectAdd.addAction("addProjectAction"); |
---|
| 91 | |
---|
| 92 | var projectCP = this.createTab(8, "Set Complete Percentage (%)", "p", true, this, true); |
---|
| 93 | projectCP.addItem(1, "Percent Complete (%)", "percentage", true); |
---|
| 94 | projectCP.addAction("cpProjectAction"); |
---|
| 95 | |
---|
| 96 | var projectRename = this.createTab(6, "Rename Project", "p", true, this, true); |
---|
| 97 | projectRename.addItem(1, "New Name", "name", true); |
---|
| 98 | projectRename.addAction("renameProjectAction"); |
---|
| 99 | |
---|
| 100 | var projectDelete = this.createTab(7, "Delete Project", "p", true, this); |
---|
| 101 | projectDelete.addAction("deleteProjectAction"); |
---|
| 102 | |
---|
| 103 | //task relative |
---|
| 104 | var projectTaskAdd = this.createTab(9, "Add New Task", "p", true, this); |
---|
| 105 | projectTaskAdd.addItem(1, "Id", "id", true); |
---|
| 106 | projectTaskAdd.addItem(2, "Name", "name"); |
---|
| 107 | projectTaskAdd.addItem(3, "Start Time", "startTime"); |
---|
| 108 | projectTaskAdd.addItem(4, "Duration (hours)", "duration"); |
---|
| 109 | projectTaskAdd.addItem(5, "Percent Complete (%)", "percentage"); |
---|
| 110 | projectTaskAdd.addItem(6, "Task Assignee", "taskOwner"); |
---|
| 111 | projectTaskAdd.addItem(7, "Parent Task Id", "parentTaskId"); |
---|
| 112 | projectTaskAdd.addItem(8, "Previous Task Id", "previousTaskId"); |
---|
| 113 | projectTaskAdd.addAction("addTaskAction"); |
---|
| 114 | }, |
---|
| 115 | createMenuPanel: function(){ |
---|
| 116 | this.menuPanel = domConstruct.create("div", { |
---|
| 117 | innerHTML: "<table></table>", |
---|
| 118 | className: "ganttMenuPanel" |
---|
| 119 | }, this.ganttChart.content); |
---|
| 120 | domClass.add(this.menuPanel.firstChild, "ganttContextMenu"); |
---|
| 121 | this.menuPanel.firstChild.cellPadding = 0; |
---|
| 122 | this.menuPanel.firstChild.cellSpacing = 0; |
---|
| 123 | }, |
---|
| 124 | createTabPanel: function(){ |
---|
| 125 | this.tabPanelDlg = registry.byId(this.tabPanelDlgId) || |
---|
| 126 | new Dialog({ |
---|
| 127 | title: "Settings" |
---|
| 128 | }); |
---|
| 129 | this.tabPanelDlgId = this.tabPanelDlg.id; |
---|
| 130 | this.tabPanelDlg.closeButtonNode.style.display = "none"; |
---|
| 131 | var tabPanel = this.tabPanelDlg.containerNode; |
---|
| 132 | this.paneContentArea = domConstruct.create("div", {className: "dijitDialogPaneContentArea"}, tabPanel); |
---|
| 133 | this.paneActionBar = domConstruct.create("div", {className: "dijitDialogPaneActionBar"}, tabPanel); |
---|
| 134 | this.paneContentArea.innerHTML = "<table cellpadding=0 cellspacing=0><tr><th></th></tr><tr><td></td></tr></table>"; |
---|
| 135 | var headerCell = this.paneContentArea.firstChild.rows[0].cells[0]; |
---|
| 136 | headerCell.colSpan = 2; |
---|
| 137 | headerCell.innerHTML = "Description: "; |
---|
| 138 | domClass.add(headerCell, "ganttDialogContentHeader"); |
---|
| 139 | var contentCell = this.paneContentArea.firstChild.rows[1].cells[0]; |
---|
| 140 | contentCell.innerHTML = "<table></table>"; |
---|
| 141 | domClass.add(contentCell.firstChild, "ganttDialogContentCell"); |
---|
| 142 | contentCell.align = "center"; |
---|
| 143 | this.ok = new Button({label: "OK"}); |
---|
| 144 | this.cancel = new Button({label: "Cancel"}); |
---|
| 145 | this.paneActionBar.appendChild(this.ok.domNode); |
---|
| 146 | this.paneActionBar.appendChild(this.cancel.domNode); |
---|
| 147 | }, |
---|
| 148 | addItemMenuPanel: function(tab){ |
---|
| 149 | var row = this.menuPanel.firstChild.insertRow(this.menuPanel.firstChild.rows.length); |
---|
| 150 | var cell = domConstruct.create("td", { |
---|
| 151 | className: "ganttContextMenuItem", |
---|
| 152 | innerHTML: tab.Description |
---|
| 153 | }); |
---|
| 154 | domAttr.set(cell, "tabIndex", 0); |
---|
| 155 | this.ganttChart._events.push( |
---|
| 156 | on(cell, "click", lang.hitch(this, function(){ |
---|
| 157 | try{ |
---|
| 158 | this.hide(); |
---|
| 159 | tab.show(); |
---|
| 160 | }catch(e){ |
---|
| 161 | console.log("dialog open exception: " + e.message); |
---|
| 162 | } |
---|
| 163 | })) |
---|
| 164 | ); |
---|
| 165 | this.ganttChart._events.push( |
---|
| 166 | on(cell, "keydown", lang.hitch(this, function(event){ |
---|
| 167 | if(event.keyCode != keys.ENTER){return;} |
---|
| 168 | try{ |
---|
| 169 | this.hide(); |
---|
| 170 | tab.show(); |
---|
| 171 | }catch(e){ |
---|
| 172 | console.log("dialog open exception: " + e.message); |
---|
| 173 | } |
---|
| 174 | })) |
---|
| 175 | ); |
---|
| 176 | this.ganttChart._events.push( |
---|
| 177 | on(cell, "mouseover", lang.hitch(this, function(){ |
---|
| 178 | domClass.add(cell, "ganttContextMenuItemHover"); |
---|
| 179 | })) |
---|
| 180 | ); |
---|
| 181 | this.ganttChart._events.push( |
---|
| 182 | on(cell, "mouseout", lang.hitch(this, function(){ |
---|
| 183 | domClass.remove(cell, "ganttContextMenuItemHover"); |
---|
| 184 | })) |
---|
| 185 | ); |
---|
| 186 | row.appendChild(cell); |
---|
| 187 | }, |
---|
| 188 | show: function(elem, object){ |
---|
| 189 | if(object.constructor == GanttTaskControl){ |
---|
| 190 | arrayUtil.forEach(this.arrTabs, function(tab){ |
---|
| 191 | if(tab.type == "t"){ |
---|
| 192 | tab.object = object; |
---|
| 193 | this.addItemMenuPanel(tab); |
---|
| 194 | } |
---|
| 195 | }, this); |
---|
| 196 | }else if(object.constructor == GanttProjectControl){ |
---|
| 197 | arrayUtil.forEach(this.arrTabs, function(tab){ |
---|
| 198 | if(tab.type == "p"){ |
---|
| 199 | tab.object = object; |
---|
| 200 | this.addItemMenuPanel(tab); |
---|
| 201 | } |
---|
| 202 | }, this); |
---|
| 203 | } |
---|
| 204 | this.isShow = true; |
---|
| 205 | domStyle.set(this.menuPanel, { |
---|
| 206 | zIndex: 15, |
---|
| 207 | visibility: "visible" |
---|
| 208 | }); |
---|
| 209 | //make sure menu box inside gantt's bounding box |
---|
| 210 | var menuBox = domGeometry.position(this.menuPanel, true), |
---|
| 211 | bBox = domGeometry.position(this.ganttChart.content, true), |
---|
| 212 | pos = domGeometry.position(elem, true); |
---|
| 213 | if((pos.y + menuBox.h) > (bBox.y + bBox.h + 50)){ |
---|
| 214 | this.menuPanel.style.top = pos.y - menuBox.h + pos.h + "px"; |
---|
| 215 | }else{ |
---|
| 216 | this.menuPanel.style.top = pos.y + "px"; |
---|
| 217 | } |
---|
| 218 | if(domGeometry.isBodyLtr()){ |
---|
| 219 | this.menuPanel.style.left = pos.x + pos.w + 5 + "px"; |
---|
| 220 | }else{ |
---|
| 221 | this.menuPanel.style.left = pos.x - menuBox.w - 5 + "px"; |
---|
| 222 | } |
---|
| 223 | }, |
---|
| 224 | hide: function(){ |
---|
| 225 | this.isShow = false; |
---|
| 226 | this.menuPanel.style.visibility = "hidden"; |
---|
| 227 | }, |
---|
| 228 | clear: function(){ |
---|
| 229 | this.menuPanel.removeChild(this.menuPanel.firstChild); |
---|
| 230 | this.menuPanel.innerHTML = "<table></table>"; |
---|
| 231 | domClass.add(this.menuPanel.firstChild, "ganttContextMenu"); |
---|
| 232 | this.menuPanel.firstChild.cellPadding = 0; |
---|
| 233 | this.menuPanel.firstChild.cellSpacing = 0; |
---|
| 234 | }, |
---|
| 235 | createTab: function(id, desc, type, showOInfo, menu, withDefaultValue){ |
---|
| 236 | var tab = new contextMenuTab(id, desc, type, showOInfo, menu, withDefaultValue); |
---|
| 237 | this.arrTabs.push(tab); |
---|
| 238 | return tab; |
---|
| 239 | } |
---|
| 240 | }); |
---|
| 241 | }); |
---|