You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
241 lines
8.8 KiB
241 lines
8.8 KiB
define([ |
|
"./contextMenuTab", |
|
"./GanttTaskControl", |
|
"./GanttProjectControl", |
|
"dijit/Dialog", |
|
"dijit/form/Button", |
|
"dijit/form/Form", |
|
"dijit/registry", |
|
"dojo/_base/declare", |
|
"dojo/_base/array", |
|
"dojo/_base/lang", |
|
"dojo/date/locale", |
|
"dojo/request", |
|
"dojo/on", |
|
"dojo/dom", |
|
"dojo/dom-class", |
|
"dojo/dom-construct", |
|
"dojo/dom-style", |
|
"dojo/dom-attr", |
|
"dojo/dom-geometry", |
|
"dojo/keys", |
|
"dojo/domReady!" |
|
], function(contextMenuTab, GanttTaskControl, GanttProjectControl, |
|
Dialog, Button, Form, |
|
registry, declare, arrayUtil, lang, locale, request, on, |
|
dom, domClass, domConstruct, domStyle, domAttr, domGeometry, keys){ |
|
return declare("dojox.gantt.TabMenu", [], { |
|
constructor: function(chart){ |
|
this.ganttChart = chart; |
|
this.menuPanel = null; |
|
this.paneContentArea = null; |
|
this.paneActionBar = null; |
|
this.tabPanelDlg = null; |
|
this.tabPanelDlgId = null; |
|
this.arrTabs = []; |
|
this.isShow = false; |
|
this.buildContent(); |
|
}, |
|
buildContent: function(){ |
|
this.createMenuPanel(); |
|
this.createTabPanel(); |
|
|
|
//tasks customization |
|
var taskSucAdd = this.createTab(11, "Add Successor Task", "t", true, this); |
|
taskSucAdd.addItem(1, "Id", "id", true); |
|
taskSucAdd.addItem(2, "Name", "name"); |
|
taskSucAdd.addItem(3, "Start Time", "startTime"); |
|
taskSucAdd.addItem(4, "Duration (hours)", "duration"); |
|
taskSucAdd.addItem(5, "Percent Complete (%)", "percentage"); |
|
taskSucAdd.addItem(6, "Task Assignee", "taskOwner"); |
|
taskSucAdd.addAction("addSuccessorTaskAction"); |
|
|
|
var taskChildAdd = this.createTab(10, "Add Child Task", "t", true, this); |
|
taskChildAdd.addItem(1, "Id", "id", true); |
|
taskChildAdd.addItem(2, "Name", "name"); |
|
taskChildAdd.addItem(3, "Start Time", "startTime"); |
|
taskChildAdd.addItem(4, "Duration (hours)", "duration"); |
|
taskChildAdd.addItem(5, "Percent Complete (%)", "percentage"); |
|
taskChildAdd.addItem(6, "Task Assignee", "taskOwner"); |
|
taskChildAdd.addAction("addChildTaskAction"); |
|
|
|
var taskDuration = this.createTab(4, "Set Duration(hours)", "t", true, this, true); |
|
taskDuration.addItem(1, "Duration (hours)", "duration", true); |
|
taskDuration.addAction("durationUpdateAction"); |
|
|
|
var taskCP = this.createTab(5, "Set Complete Percentage (%)", "t", true, this, true); |
|
taskCP.addItem(1, "Percent Complete (%)", "percentage", true); |
|
taskCP.addAction("cpUpdateAction"); |
|
|
|
var taskOwner = this.createTab(20, "Set Owner", "t", true, this, true); |
|
taskOwner.addItem(1, "Task Assignee", "taskOwner", true); |
|
taskOwner.addAction("ownerUpdateAction"); |
|
|
|
var taskPrevious = this.createTab(13, "Set Previous Task", "t", true, this); |
|
taskPrevious.addItem(1, "Previous Task Id", "previousTaskId", true); |
|
taskPrevious.addAction("ptUpdateAction"); |
|
|
|
var taskRename = this.createTab(1, "Rename Task", "t", true, this, true); |
|
taskRename.addItem(1, "New Name", "name", true); |
|
taskRename.addAction("renameTaskAction"); |
|
|
|
var taskDelete = this.createTab(2, "Delete Task", "t", true, this); |
|
taskDelete.addAction("deleteAction"); |
|
|
|
//projects customization |
|
var projectAdd = this.createTab(12, "Add New Project", "p", false, this); |
|
projectAdd.addItem(1, "Id", "id", true); |
|
projectAdd.addItem(2, "Name", "name", true); |
|
projectAdd.addItem(3, "Start Date", "startDate", true); |
|
projectAdd.addAction("addProjectAction"); |
|
|
|
var projectCP = this.createTab(8, "Set Complete Percentage (%)", "p", true, this, true); |
|
projectCP.addItem(1, "Percent Complete (%)", "percentage", true); |
|
projectCP.addAction("cpProjectAction"); |
|
|
|
var projectRename = this.createTab(6, "Rename Project", "p", true, this, true); |
|
projectRename.addItem(1, "New Name", "name", true); |
|
projectRename.addAction("renameProjectAction"); |
|
|
|
var projectDelete = this.createTab(7, "Delete Project", "p", true, this); |
|
projectDelete.addAction("deleteProjectAction"); |
|
|
|
//task relative |
|
var projectTaskAdd = this.createTab(9, "Add New Task", "p", true, this); |
|
projectTaskAdd.addItem(1, "Id", "id", true); |
|
projectTaskAdd.addItem(2, "Name", "name"); |
|
projectTaskAdd.addItem(3, "Start Time", "startTime"); |
|
projectTaskAdd.addItem(4, "Duration (hours)", "duration"); |
|
projectTaskAdd.addItem(5, "Percent Complete (%)", "percentage"); |
|
projectTaskAdd.addItem(6, "Task Assignee", "taskOwner"); |
|
projectTaskAdd.addItem(7, "Parent Task Id", "parentTaskId"); |
|
projectTaskAdd.addItem(8, "Previous Task Id", "previousTaskId"); |
|
projectTaskAdd.addAction("addTaskAction"); |
|
}, |
|
createMenuPanel: function(){ |
|
this.menuPanel = domConstruct.create("div", { |
|
innerHTML: "<table></table>", |
|
className: "ganttMenuPanel" |
|
}, this.ganttChart.content); |
|
domClass.add(this.menuPanel.firstChild, "ganttContextMenu"); |
|
this.menuPanel.firstChild.cellPadding = 0; |
|
this.menuPanel.firstChild.cellSpacing = 0; |
|
}, |
|
createTabPanel: function(){ |
|
this.tabPanelDlg = registry.byId(this.tabPanelDlgId) || |
|
new Dialog({ |
|
title: "Settings" |
|
}); |
|
this.tabPanelDlgId = this.tabPanelDlg.id; |
|
this.tabPanelDlg.closeButtonNode.style.display = "none"; |
|
var tabPanel = this.tabPanelDlg.containerNode; |
|
this.paneContentArea = domConstruct.create("div", {className: "dijitDialogPaneContentArea"}, tabPanel); |
|
this.paneActionBar = domConstruct.create("div", {className: "dijitDialogPaneActionBar"}, tabPanel); |
|
this.paneContentArea.innerHTML = "<table cellpadding=0 cellspacing=0><tr><th></th></tr><tr><td></td></tr></table>"; |
|
var headerCell = this.paneContentArea.firstChild.rows[0].cells[0]; |
|
headerCell.colSpan = 2; |
|
headerCell.innerHTML = "Description: "; |
|
domClass.add(headerCell, "ganttDialogContentHeader"); |
|
var contentCell = this.paneContentArea.firstChild.rows[1].cells[0]; |
|
contentCell.innerHTML = "<table></table>"; |
|
domClass.add(contentCell.firstChild, "ganttDialogContentCell"); |
|
contentCell.align = "center"; |
|
this.ok = new Button({label: "OK"}); |
|
this.cancel = new Button({label: "Cancel"}); |
|
this.paneActionBar.appendChild(this.ok.domNode); |
|
this.paneActionBar.appendChild(this.cancel.domNode); |
|
}, |
|
addItemMenuPanel: function(tab){ |
|
var row = this.menuPanel.firstChild.insertRow(this.menuPanel.firstChild.rows.length); |
|
var cell = domConstruct.create("td", { |
|
className: "ganttContextMenuItem", |
|
innerHTML: tab.Description |
|
}); |
|
domAttr.set(cell, "tabIndex", 0); |
|
this.ganttChart._events.push( |
|
on(cell, "click", lang.hitch(this, function(){ |
|
try{ |
|
this.hide(); |
|
tab.show(); |
|
}catch(e){ |
|
console.log("dialog open exception: " + e.message); |
|
} |
|
})) |
|
); |
|
this.ganttChart._events.push( |
|
on(cell, "keydown", lang.hitch(this, function(event){ |
|
if(event.keyCode != keys.ENTER){return;} |
|
try{ |
|
this.hide(); |
|
tab.show(); |
|
}catch(e){ |
|
console.log("dialog open exception: " + e.message); |
|
} |
|
})) |
|
); |
|
this.ganttChart._events.push( |
|
on(cell, "mouseover", lang.hitch(this, function(){ |
|
domClass.add(cell, "ganttContextMenuItemHover"); |
|
})) |
|
); |
|
this.ganttChart._events.push( |
|
on(cell, "mouseout", lang.hitch(this, function(){ |
|
domClass.remove(cell, "ganttContextMenuItemHover"); |
|
})) |
|
); |
|
row.appendChild(cell); |
|
}, |
|
show: function(elem, object){ |
|
if(object.constructor == GanttTaskControl){ |
|
arrayUtil.forEach(this.arrTabs, function(tab){ |
|
if(tab.type == "t"){ |
|
tab.object = object; |
|
this.addItemMenuPanel(tab); |
|
} |
|
}, this); |
|
}else if(object.constructor == GanttProjectControl){ |
|
arrayUtil.forEach(this.arrTabs, function(tab){ |
|
if(tab.type == "p"){ |
|
tab.object = object; |
|
this.addItemMenuPanel(tab); |
|
} |
|
}, this); |
|
} |
|
this.isShow = true; |
|
domStyle.set(this.menuPanel, { |
|
zIndex: 15, |
|
visibility: "visible" |
|
}); |
|
//make sure menu box inside gantt's bounding box |
|
var menuBox = domGeometry.position(this.menuPanel, true), |
|
bBox = domGeometry.position(this.ganttChart.content, true), |
|
pos = domGeometry.position(elem, true); |
|
if((pos.y + menuBox.h) > (bBox.y + bBox.h + 50)){ |
|
this.menuPanel.style.top = pos.y - menuBox.h + pos.h + "px"; |
|
}else{ |
|
this.menuPanel.style.top = pos.y + "px"; |
|
} |
|
if(domGeometry.isBodyLtr()){ |
|
this.menuPanel.style.left = pos.x + pos.w + 5 + "px"; |
|
}else{ |
|
this.menuPanel.style.left = pos.x - menuBox.w - 5 + "px"; |
|
} |
|
}, |
|
hide: function(){ |
|
this.isShow = false; |
|
this.menuPanel.style.visibility = "hidden"; |
|
}, |
|
clear: function(){ |
|
this.menuPanel.removeChild(this.menuPanel.firstChild); |
|
this.menuPanel.innerHTML = "<table></table>"; |
|
domClass.add(this.menuPanel.firstChild, "ganttContextMenu"); |
|
this.menuPanel.firstChild.cellPadding = 0; |
|
this.menuPanel.firstChild.cellSpacing = 0; |
|
}, |
|
createTab: function(id, desc, type, showOInfo, menu, withDefaultValue){ |
|
var tab = new contextMenuTab(id, desc, type, showOInfo, menu, withDefaultValue); |
|
this.arrTabs.push(tab); |
|
return tab; |
|
} |
|
}); |
|
});
|
|
|