@wimi/vtable-gantt 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +213 -0
- package/README.zh-CN.md +215 -0
- package/cjs/Gantt.d.ts +200 -0
- package/cjs/Gantt.js +582 -0
- package/cjs/Gantt.js.map +1 -0
- package/cjs/components/Menu.d.ts +1 -0
- package/cjs/components/Menu.js +1 -0
- package/cjs/components/Menu.js.map +1 -0
- package/cjs/components/MenuElementStyle.d.ts +1 -0
- package/cjs/components/MenuElementStyle.js +12 -0
- package/cjs/components/MenuElementStyle.js.map +1 -0
- package/cjs/data/DataSource.d.ts +9 -0
- package/cjs/data/DataSource.js +76 -0
- package/cjs/data/DataSource.js.map +1 -0
- package/cjs/env.d.ts +19 -0
- package/cjs/env.js +48 -0
- package/cjs/env.js.map +1 -0
- package/cjs/event/EventHandler.d.ts +47 -0
- package/cjs/event/EventHandler.js +128 -0
- package/cjs/event/EventHandler.js.map +1 -0
- package/cjs/event/EventTarget.d.ts +12 -0
- package/cjs/event/EventTarget.js +67 -0
- package/cjs/event/EventTarget.js.map +1 -0
- package/cjs/event/event-manager.d.ts +34 -0
- package/cjs/event/event-manager.js +369 -0
- package/cjs/event/event-manager.js.map +1 -0
- package/cjs/event/scroll.d.ts +8 -0
- package/cjs/event/scroll.js +112 -0
- package/cjs/event/scroll.js.map +1 -0
- package/cjs/event/touch.d.ts +2 -0
- package/cjs/event/touch.js +86 -0
- package/cjs/event/touch.js.map +1 -0
- package/cjs/gantt-helper.d.ts +63 -0
- package/cjs/gantt-helper.js +712 -0
- package/cjs/gantt-helper.js.map +1 -0
- package/cjs/index.d.ts +10 -0
- package/cjs/index.js +60 -0
- package/cjs/index.js.map +1 -0
- package/cjs/plugins/index.d.ts +2 -0
- package/cjs/plugins/index.js +15 -0
- package/cjs/plugins/index.js.map +1 -0
- package/cjs/plugins/interface.d.ts +10 -0
- package/cjs/plugins/interface.js +6 -0
- package/cjs/plugins/interface.js.map +1 -0
- package/cjs/plugins/plugin-manager.d.ts +16 -0
- package/cjs/plugins/plugin-manager.js +63 -0
- package/cjs/plugins/plugin-manager.js.map +1 -0
- package/cjs/register.d.ts +1 -0
- package/cjs/register.js +1 -0
- package/cjs/register.js.map +1 -0
- package/cjs/scenegraph/dependency-link.d.ts +48 -0
- package/cjs/scenegraph/dependency-link.js +480 -0
- package/cjs/scenegraph/dependency-link.js.map +1 -0
- package/cjs/scenegraph/drag-order-line.d.ts +12 -0
- package/cjs/scenegraph/drag-order-line.js +49 -0
- package/cjs/scenegraph/drag-order-line.js.map +1 -0
- package/cjs/scenegraph/frame-border.d.ts +10 -0
- package/cjs/scenegraph/frame-border.js +58 -0
- package/cjs/scenegraph/frame-border.js.map +1 -0
- package/cjs/scenegraph/gantt-node.d.ts +22 -0
- package/cjs/scenegraph/gantt-node.js +66 -0
- package/cjs/scenegraph/gantt-node.js.map +1 -0
- package/cjs/scenegraph/graphic/group-contribution-render.d.ts +12 -0
- package/cjs/scenegraph/graphic/group-contribution-render.js +37 -0
- package/cjs/scenegraph/graphic/group-contribution-render.js.map +1 -0
- package/cjs/scenegraph/graphic/index.d.ts +3 -0
- package/cjs/scenegraph/graphic/index.js +13 -0
- package/cjs/scenegraph/graphic/index.js.map +1 -0
- package/cjs/scenegraph/grid.d.ts +34 -0
- package/cjs/scenegraph/grid.js +316 -0
- package/cjs/scenegraph/grid.js.map +1 -0
- package/cjs/scenegraph/mark-line.d.ts +13 -0
- package/cjs/scenegraph/mark-line.js +109 -0
- package/cjs/scenegraph/mark-line.js.map +1 -0
- package/cjs/scenegraph/scenegraph.d.ts +59 -0
- package/cjs/scenegraph/scenegraph.js +240 -0
- package/cjs/scenegraph/scenegraph.js.map +1 -0
- package/cjs/scenegraph/scroll-bar.d.ts +19 -0
- package/cjs/scenegraph/scroll-bar.js +150 -0
- package/cjs/scenegraph/scroll-bar.js.map +1 -0
- package/cjs/scenegraph/task-bar.d.ts +40 -0
- package/cjs/scenegraph/task-bar.js +476 -0
- package/cjs/scenegraph/task-bar.js.map +1 -0
- package/cjs/scenegraph/task-creation-button.d.ts +13 -0
- package/cjs/scenegraph/task-creation-button.js +86 -0
- package/cjs/scenegraph/task-creation-button.js.map +1 -0
- package/cjs/scenegraph/timeline-header.d.ts +14 -0
- package/cjs/scenegraph/timeline-header.js +190 -0
- package/cjs/scenegraph/timeline-header.js.map +1 -0
- package/cjs/scenegraph/tooltip.d.ts +9 -0
- package/cjs/scenegraph/tooltip.js +59 -0
- package/cjs/scenegraph/tooltip.js.map +1 -0
- package/cjs/state/gantt-table-sync.d.ts +8 -0
- package/cjs/state/gantt-table-sync.js +96 -0
- package/cjs/state/gantt-table-sync.js.map +1 -0
- package/cjs/state/state-manager.d.ts +127 -0
- package/cjs/state/state-manager.js +634 -0
- package/cjs/state/state-manager.js.map +1 -0
- package/cjs/sub-tasks-inline-helper.d.ts +1 -0
- package/cjs/sub-tasks-inline-helper.js +1 -0
- package/cjs/sub-tasks-inline-helper.js.map +1 -0
- package/cjs/themes.d.ts +1 -0
- package/cjs/themes.js +1 -0
- package/cjs/themes.js.map +1 -0
- package/cjs/tools/debounce.d.ts +1 -0
- package/cjs/tools/debounce.js +51 -0
- package/cjs/tools/debounce.js.map +1 -0
- package/cjs/tools/dom.d.ts +1 -0
- package/cjs/tools/dom.js +11 -0
- package/cjs/tools/dom.js.map +1 -0
- package/cjs/tools/index.d.ts +2 -0
- package/cjs/tools/index.js +30 -0
- package/cjs/tools/index.js.map +1 -0
- package/cjs/tools/inertia.d.ts +15 -0
- package/cjs/tools/inertia.js +40 -0
- package/cjs/tools/inertia.js.map +1 -0
- package/cjs/tools/isx.d.ts +16 -0
- package/cjs/tools/isx.js +117 -0
- package/cjs/tools/isx.js.map +1 -0
- package/cjs/tools/pixel-ratio.d.ts +2 -0
- package/cjs/tools/pixel-ratio.js +16 -0
- package/cjs/tools/pixel-ratio.js.map +1 -0
- package/cjs/tools/util.d.ts +19 -0
- package/cjs/tools/util.js +404 -0
- package/cjs/tools/util.js.map +1 -0
- package/cjs/ts-types/EVENT_TYPE.d.ts +19 -0
- package/cjs/ts-types/EVENT_TYPE.js +22 -0
- package/cjs/ts-types/EVENT_TYPE.js.map +1 -0
- package/cjs/ts-types/common.d.ts +11 -0
- package/cjs/ts-types/common.js +10 -0
- package/cjs/ts-types/common.js.map +1 -0
- package/cjs/ts-types/events.d.ts +132 -0
- package/cjs/ts-types/events.js +6 -0
- package/cjs/ts-types/events.js.map +1 -0
- package/cjs/ts-types/gantt-engine.d.ts +344 -0
- package/cjs/ts-types/gantt-engine.js +18 -0
- package/cjs/ts-types/gantt-engine.js.map +1 -0
- package/cjs/ts-types/index.d.ts +5 -0
- package/cjs/ts-types/index.js +23 -0
- package/cjs/ts-types/index.js.map +1 -0
- package/cjs/ts-types/zoom-scale.d.ts +32 -0
- package/cjs/ts-types/zoom-scale.js +6 -0
- package/cjs/ts-types/zoom-scale.js.map +1 -0
- package/cjs/vrender.d.ts +1 -0
- package/cjs/vrender.js +60 -0
- package/cjs/vrender.js.map +1 -0
- package/cjs/vtable.d.ts +1 -0
- package/cjs/vtable.js +35 -0
- package/cjs/vtable.js.map +1 -0
- package/cjs/zoom-scale/DataZoomIntegration.d.ts +50 -0
- package/cjs/zoom-scale/DataZoomIntegration.js +261 -0
- package/cjs/zoom-scale/DataZoomIntegration.js.map +1 -0
- package/cjs/zoom-scale/ZoomScaleManager.d.ts +55 -0
- package/cjs/zoom-scale/ZoomScaleManager.js +328 -0
- package/cjs/zoom-scale/ZoomScaleManager.js.map +1 -0
- package/cjs/zoom-scale/index.d.ts +4 -0
- package/cjs/zoom-scale/index.js +24 -0
- package/cjs/zoom-scale/index.js.map +1 -0
- package/dist/vtable-gantt.js +76328 -0
- package/dist/vtable-gantt.min.js +15 -0
- package/es/Gantt.d.ts +200 -0
- package/es/Gantt.js +584 -0
- package/es/Gantt.js.map +1 -0
- package/es/components/Menu.d.ts +1 -0
- package/es/components/Menu.js +1 -0
- package/es/components/Menu.js.map +1 -0
- package/es/components/MenuElementStyle.d.ts +1 -0
- package/es/components/MenuElementStyle.js +6 -0
- package/es/components/MenuElementStyle.js.map +1 -0
- package/es/data/DataSource.d.ts +9 -0
- package/es/data/DataSource.js +63 -0
- package/es/data/DataSource.js.map +1 -0
- package/es/env.d.ts +19 -0
- package/es/env.js +42 -0
- package/es/env.js.map +1 -0
- package/es/event/EventHandler.d.ts +47 -0
- package/es/event/EventHandler.js +119 -0
- package/es/event/EventHandler.js.map +1 -0
- package/es/event/EventTarget.d.ts +12 -0
- package/es/event/EventTarget.js +58 -0
- package/es/event/EventTarget.js.map +1 -0
- package/es/event/event-manager.d.ts +34 -0
- package/es/event/event-manager.js +376 -0
- package/es/event/event-manager.js.map +1 -0
- package/es/event/scroll.d.ts +8 -0
- package/es/event/scroll.js +104 -0
- package/es/event/scroll.js.map +1 -0
- package/es/event/touch.d.ts +2 -0
- package/es/event/touch.js +78 -0
- package/es/event/touch.js.map +1 -0
- package/es/gantt-helper.d.ts +63 -0
- package/es/gantt-helper.js +683 -0
- package/es/gantt-helper.js.map +1 -0
- package/es/index.d.ts +10 -0
- package/es/index.js +16 -0
- package/es/index.js.map +1 -0
- package/es/plugins/index.d.ts +2 -0
- package/es/plugins/index.js +2 -0
- package/es/plugins/index.js.map +1 -0
- package/es/plugins/interface.d.ts +10 -0
- package/es/plugins/interface.js +2 -0
- package/es/plugins/interface.js.map +1 -0
- package/es/plugins/plugin-manager.d.ts +16 -0
- package/es/plugins/plugin-manager.js +55 -0
- package/es/plugins/plugin-manager.js.map +1 -0
- package/es/register.d.ts +1 -0
- package/es/register.js +1 -0
- package/es/register.js.map +1 -0
- package/es/scenegraph/dependency-link.d.ts +48 -0
- package/es/scenegraph/dependency-link.js +462 -0
- package/es/scenegraph/dependency-link.js.map +1 -0
- package/es/scenegraph/drag-order-line.d.ts +12 -0
- package/es/scenegraph/drag-order-line.js +40 -0
- package/es/scenegraph/drag-order-line.js.map +1 -0
- package/es/scenegraph/frame-border.d.ts +10 -0
- package/es/scenegraph/frame-border.js +51 -0
- package/es/scenegraph/frame-border.js.map +1 -0
- package/es/scenegraph/gantt-node.d.ts +22 -0
- package/es/scenegraph/gantt-node.js +64 -0
- package/es/scenegraph/gantt-node.js.map +1 -0
- package/es/scenegraph/graphic/group-contribution-render.d.ts +12 -0
- package/es/scenegraph/graphic/group-contribution-render.js +32 -0
- package/es/scenegraph/graphic/group-contribution-render.js.map +1 -0
- package/es/scenegraph/graphic/index.d.ts +3 -0
- package/es/scenegraph/graphic/index.js +8 -0
- package/es/scenegraph/graphic/index.js.map +1 -0
- package/es/scenegraph/grid.d.ts +34 -0
- package/es/scenegraph/grid.js +306 -0
- package/es/scenegraph/grid.js.map +1 -0
- package/es/scenegraph/mark-line.d.ts +13 -0
- package/es/scenegraph/mark-line.js +101 -0
- package/es/scenegraph/mark-line.js.map +1 -0
- package/es/scenegraph/scenegraph.d.ts +59 -0
- package/es/scenegraph/scenegraph.js +250 -0
- package/es/scenegraph/scenegraph.js.map +1 -0
- package/es/scenegraph/scroll-bar.d.ts +19 -0
- package/es/scenegraph/scroll-bar.js +144 -0
- package/es/scenegraph/scroll-bar.js.map +1 -0
- package/es/scenegraph/task-bar.d.ts +40 -0
- package/es/scenegraph/task-bar.js +475 -0
- package/es/scenegraph/task-bar.js.map +1 -0
- package/es/scenegraph/task-creation-button.d.ts +13 -0
- package/es/scenegraph/task-creation-button.js +78 -0
- package/es/scenegraph/task-creation-button.js.map +1 -0
- package/es/scenegraph/timeline-header.d.ts +14 -0
- package/es/scenegraph/timeline-header.js +186 -0
- package/es/scenegraph/timeline-header.js.map +1 -0
- package/es/scenegraph/tooltip.d.ts +9 -0
- package/es/scenegraph/tooltip.js +51 -0
- package/es/scenegraph/tooltip.js.map +1 -0
- package/es/state/gantt-table-sync.d.ts +8 -0
- package/es/state/gantt-table-sync.js +87 -0
- package/es/state/gantt-table-sync.js.map +1 -0
- package/es/state/state-manager.d.ts +127 -0
- package/es/state/state-manager.js +631 -0
- package/es/state/state-manager.js.map +1 -0
- package/es/sub-tasks-inline-helper.d.ts +1 -0
- package/es/sub-tasks-inline-helper.js +1 -0
- package/es/sub-tasks-inline-helper.js.map +1 -0
- package/es/themes.d.ts +1 -0
- package/es/themes.js +1 -0
- package/es/themes.js.map +1 -0
- package/es/tools/debounce.d.ts +1 -0
- package/es/tools/debounce.js +45 -0
- package/es/tools/debounce.js.map +1 -0
- package/es/tools/dom.d.ts +1 -0
- package/es/tools/dom.js +5 -0
- package/es/tools/dom.js.map +1 -0
- package/es/tools/index.d.ts +2 -0
- package/es/tools/index.js +4 -0
- package/es/tools/index.js.map +1 -0
- package/es/tools/inertia.d.ts +15 -0
- package/es/tools/inertia.js +31 -0
- package/es/tools/inertia.js.map +1 -0
- package/es/tools/isx.d.ts +16 -0
- package/es/tools/isx.js +80 -0
- package/es/tools/isx.js.map +1 -0
- package/es/tools/pixel-ratio.d.ts +2 -0
- package/es/tools/pixel-ratio.js +12 -0
- package/es/tools/pixel-ratio.js.map +1 -0
- package/es/tools/util.d.ts +19 -0
- package/es/tools/util.js +390 -0
- package/es/tools/util.js.map +1 -0
- package/es/ts-types/EVENT_TYPE.d.ts +19 -0
- package/es/ts-types/EVENT_TYPE.js +18 -0
- package/es/ts-types/EVENT_TYPE.js.map +1 -0
- package/es/ts-types/common.d.ts +11 -0
- package/es/ts-types/common.js +6 -0
- package/es/ts-types/common.js.map +1 -0
- package/es/ts-types/events.d.ts +132 -0
- package/es/ts-types/events.js +2 -0
- package/es/ts-types/events.js.map +1 -0
- package/es/ts-types/gantt-engine.d.ts +344 -0
- package/es/ts-types/gantt-engine.js +21 -0
- package/es/ts-types/gantt-engine.js.map +1 -0
- package/es/ts-types/index.d.ts +5 -0
- package/es/ts-types/index.js +10 -0
- package/es/ts-types/index.js.map +1 -0
- package/es/ts-types/zoom-scale.d.ts +32 -0
- package/es/ts-types/zoom-scale.js +2 -0
- package/es/ts-types/zoom-scale.js.map +1 -0
- package/es/vrender.d.ts +1 -0
- package/es/vrender.js +2 -0
- package/es/vrender.js.map +1 -0
- package/es/vtable.d.ts +1 -0
- package/es/vtable.js +2 -0
- package/es/vtable.js.map +1 -0
- package/es/zoom-scale/DataZoomIntegration.d.ts +50 -0
- package/es/zoom-scale/DataZoomIntegration.js +253 -0
- package/es/zoom-scale/DataZoomIntegration.js.map +1 -0
- package/es/zoom-scale/ZoomScaleManager.d.ts +55 -0
- package/es/zoom-scale/ZoomScaleManager.js +322 -0
- package/es/zoom-scale/ZoomScaleManager.js.map +1 -0
- package/es/zoom-scale/index.d.ts +4 -0
- package/es/zoom-scale/index.js +4 -0
- package/es/zoom-scale/index.js.map +1 -0
- package/package.json +124 -0
|
@@ -0,0 +1,476 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: !0
|
|
5
|
+
}), exports.TaskBar = exports.TASKBAR_HOVER_ICON_WIDTH = void 0;
|
|
6
|
+
|
|
7
|
+
const vrender_1 = require("@visactor/vtable/es/vrender"), util_1 = require("../tools/util"), vutils_1 = require("@visactor/vutils"), gantt_helper_1 = require("../gantt-helper"), gantt_node_1 = require("./gantt-node"), ts_types_1 = require("../ts-types"), TASKBAR_HOVER_ICON = '<svg width="100" height="200" xmlns="http://www.w3.org/2000/svg">\n <line x1="30" y1="10" x2="30" y2="190" stroke="black" stroke-width="4"/>\n <line x1="70" y1="10" x2="70" y2="190" stroke="black" stroke-width="4"/>\n</svg>';
|
|
8
|
+
|
|
9
|
+
exports.TASKBAR_HOVER_ICON_WIDTH = 10;
|
|
10
|
+
|
|
11
|
+
class TaskBar {
|
|
12
|
+
formatMilestoneText(text, record) {
|
|
13
|
+
if (!text) return "";
|
|
14
|
+
const matches = text.match(/{([^}]+)}/g);
|
|
15
|
+
return matches && matches.forEach((match => {
|
|
16
|
+
const fieldName = match.substring(1, match.length - 1), fieldValue = record[fieldName];
|
|
17
|
+
void 0 !== fieldValue && (text = text.replace(match, String(fieldValue)));
|
|
18
|
+
})), text;
|
|
19
|
+
}
|
|
20
|
+
calculateMilestoneTextPosition(position, milestoneWidth, padding = 4) {
|
|
21
|
+
const paddingVal = "number" == typeof padding ? padding : 4;
|
|
22
|
+
let textX = 0, textY = 0, textAlignValue = "left", textBaselineValue = "middle";
|
|
23
|
+
const center = milestoneWidth / 2;
|
|
24
|
+
switch (position) {
|
|
25
|
+
case "left":
|
|
26
|
+
textX = -paddingVal, textY = center, textAlignValue = "end", textBaselineValue = "middle";
|
|
27
|
+
break;
|
|
28
|
+
|
|
29
|
+
case "right":
|
|
30
|
+
default:
|
|
31
|
+
textX = milestoneWidth + paddingVal, textY = center, textAlignValue = "start", textBaselineValue = "middle";
|
|
32
|
+
break;
|
|
33
|
+
|
|
34
|
+
case "top":
|
|
35
|
+
textX = center, textY = -paddingVal, textAlignValue = "center", textBaselineValue = "bottom";
|
|
36
|
+
break;
|
|
37
|
+
|
|
38
|
+
case "bottom":
|
|
39
|
+
textX = center, textY = milestoneWidth + paddingVal, textAlignValue = "center",
|
|
40
|
+
textBaselineValue = "top";
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
textX: textX,
|
|
44
|
+
textY: textY,
|
|
45
|
+
textAlignValue: textAlignValue,
|
|
46
|
+
textBaselineValue: textBaselineValue
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
constructor(scene) {
|
|
50
|
+
this.selectedBorders = [], this._scene = scene, this.width = scene._gantt.tableNoFrameWidth,
|
|
51
|
+
this.height = scene._gantt.gridHeight, this.group = new vrender_1.Group({
|
|
52
|
+
x: 0,
|
|
53
|
+
y: scene._gantt.getAllHeaderRowsHeight(),
|
|
54
|
+
width: this.width,
|
|
55
|
+
height: this.height,
|
|
56
|
+
pickable: !1,
|
|
57
|
+
clip: !0
|
|
58
|
+
}), this.group.name = "task-bar-container", scene.ganttGroup.addChild(this.group),
|
|
59
|
+
this.initBars(), this.initHoverBarIcons();
|
|
60
|
+
}
|
|
61
|
+
initBars() {
|
|
62
|
+
var _a, _b, _c;
|
|
63
|
+
this.barContainer = new vrender_1.Group({
|
|
64
|
+
x: 0,
|
|
65
|
+
y: 0,
|
|
66
|
+
width: this._scene._gantt.getAllDateColsWidth(),
|
|
67
|
+
height: this._scene._gantt.getAllTaskBarsHeight(),
|
|
68
|
+
pickable: !1,
|
|
69
|
+
clip: !0
|
|
70
|
+
}), this.group.appendChild(this.barContainer);
|
|
71
|
+
for (let i = 0; i < this._scene._gantt.itemCount; i++) if (this._scene._gantt.parsedOptions.tasksShowMode !== ts_types_1.TasksShowMode.Sub_Tasks_Inline && this._scene._gantt.parsedOptions.tasksShowMode !== ts_types_1.TasksShowMode.Sub_Tasks_Separate && this._scene._gantt.parsedOptions.tasksShowMode !== ts_types_1.TasksShowMode.Sub_Tasks_Arrange && this._scene._gantt.parsedOptions.tasksShowMode !== ts_types_1.TasksShowMode.Sub_Tasks_Compact) if (this._scene._gantt.parsedOptions.tasksShowMode !== ts_types_1.TasksShowMode.Project_Sub_Tasks_Inline) {
|
|
72
|
+
const barGroup = this.initBar(i);
|
|
73
|
+
barGroup && this.barContainer.appendChild(barGroup);
|
|
74
|
+
} else {
|
|
75
|
+
const record = this._scene._gantt.getRecordByIndex(i), isExpanded = "expand" === record.hierarchyState;
|
|
76
|
+
if (record.type === ts_types_1.TaskType.PROJECT && (null === (_c = record.children) || void 0 === _c ? void 0 : _c.length) > 0 && !isExpanded) {
|
|
77
|
+
const recordIndex = this._scene._gantt.getRecordIndexByTaskShowIndex(i), sub_task_indexs = Array.isArray(recordIndex) ? [ ...recordIndex ] : [ recordIndex ], callInitBar = (record, sub_task_indexs) => {
|
|
78
|
+
var _a, _b;
|
|
79
|
+
if ((null === (_a = record.children) || void 0 === _a ? void 0 : _a.length) > 0) for (let j = 0; j < (null === (_b = record.children) || void 0 === _b ? void 0 : _b.length); j++) {
|
|
80
|
+
const child_record = record.children[j];
|
|
81
|
+
if (child_record.type !== ts_types_1.TaskType.PROJECT) {
|
|
82
|
+
const barGroup = this.initBar(i, [ ...sub_task_indexs, j ], record.children.length);
|
|
83
|
+
barGroup && this.barContainer.appendChild(barGroup);
|
|
84
|
+
} else callInitBar(child_record, [ ...sub_task_indexs, j ]);
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
callInitBar(record, sub_task_indexs);
|
|
88
|
+
} else {
|
|
89
|
+
const barGroup = this.initBar(i);
|
|
90
|
+
barGroup && this.barContainer.appendChild(barGroup);
|
|
91
|
+
}
|
|
92
|
+
} else {
|
|
93
|
+
const record = this._scene._gantt.getRecordByIndex(i);
|
|
94
|
+
if ((null === (_a = record.children) || void 0 === _a ? void 0 : _a.length) > 0) for (let j = 0; j < (null === (_b = record.children) || void 0 === _b ? void 0 : _b.length); j++) {
|
|
95
|
+
const barGroup = this.initBar(i, j, record.children.length);
|
|
96
|
+
barGroup && this.barContainer.appendChild(barGroup);
|
|
97
|
+
} else {
|
|
98
|
+
const barGroup = this.initBar(i);
|
|
99
|
+
barGroup && this.barContainer.appendChild(barGroup);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
initBar(index, childIndex, childrenLength) {
|
|
104
|
+
var _a, _b, _c, _d, _e;
|
|
105
|
+
const taskBarCustomLayout = this._scene._gantt.parsedOptions.taskBarCustomLayout, {startDate: startDate, endDate: endDate, taskDays: taskDays, progress: progress, taskRecord: taskRecord} = this._scene._gantt.getTaskInfoByTaskListIndex(index, childIndex), isMilestone = taskRecord.type === ts_types_1.TaskType.MILESTONE;
|
|
106
|
+
if (isMilestone && !startDate || !isMilestone && (taskDays <= 0 || !startDate || !endDate || startDate.getTime() > endDate.getTime())) return null;
|
|
107
|
+
const {unit: unit, step: step} = this._scene._gantt.parsedOptions.reverseSortedTimelineScales[0];
|
|
108
|
+
let taskBarSize = (0, util_1.computeCountToTimeScale)(endDate, startDate, unit, step, 1) * this._scene._gantt.parsedOptions.timelineColWidth;
|
|
109
|
+
const taskBarStyle = this._scene._gantt.getTaskBarStyle(index, childIndex), taskbarHeight = taskBarStyle.width;
|
|
110
|
+
(0, vutils_1.isValid)(taskBarStyle.minSize) && (taskBarSize = Math.max(taskBarSize, taskBarStyle.minSize));
|
|
111
|
+
const oneTaskHeigth = this._scene._gantt.parsedOptions.rowHeight, milestoneTaskBarHeight = this._scene._gantt.parsedOptions.taskBarMilestoneStyle.width, x = (0,
|
|
112
|
+
util_1.computeCountToTimeScale)(startDate, this._scene._gantt.parsedOptions.minDate, unit, step) * this._scene._gantt.parsedOptions.timelineColWidth - (isMilestone ? milestoneTaskBarHeight / 2 : 0), y = this._scene._gantt.getRowsHeightByIndex(0, index - 1) + (this._scene._gantt.parsedOptions.tasksShowMode === ts_types_1.TasksShowMode.Sub_Tasks_Separate ? (null !== (_a = childIndex) && void 0 !== _a ? _a : 0) * oneTaskHeigth : this._scene._gantt.parsedOptions.tasksShowMode === ts_types_1.TasksShowMode.Sub_Tasks_Arrange || this._scene._gantt.parsedOptions.tasksShowMode === ts_types_1.TasksShowMode.Sub_Tasks_Compact ? taskRecord.vtable_gantt_showIndex * oneTaskHeigth : 0) + (oneTaskHeigth - (isMilestone ? milestoneTaskBarHeight : taskbarHeight)) / 2, barGroupBox = new gantt_node_1.GanttTaskBarNode({
|
|
113
|
+
x: x,
|
|
114
|
+
y: y,
|
|
115
|
+
width: isMilestone ? milestoneTaskBarHeight : taskBarSize,
|
|
116
|
+
height: isMilestone ? milestoneTaskBarHeight : taskbarHeight,
|
|
117
|
+
cornerRadius: isMilestone ? this._scene._gantt.parsedOptions.taskBarMilestoneStyle.cornerRadius : taskBarStyle.cornerRadius,
|
|
118
|
+
lineWidth: isMilestone ? 2 * this._scene._gantt.parsedOptions.taskBarMilestoneStyle.borderLineWidth : 2 * (null !== (_b = taskBarStyle.borderLineWidth) && void 0 !== _b ? _b : taskBarStyle.borderWidth),
|
|
119
|
+
stroke: isMilestone ? this._scene._gantt.parsedOptions.taskBarMilestoneStyle.borderColor : taskBarStyle.borderColor,
|
|
120
|
+
angle: isMilestone ? .25 * Math.PI : 0,
|
|
121
|
+
anchor: isMilestone ? [ x + milestoneTaskBarHeight / 2, y + milestoneTaskBarHeight / 2 ] : void 0
|
|
122
|
+
});
|
|
123
|
+
barGroupBox.name = "task-bar", barGroupBox.task_index = index, barGroupBox.sub_task_index = childIndex,
|
|
124
|
+
barGroupBox.record = taskRecord;
|
|
125
|
+
const barGroup = new vrender_1.Group({
|
|
126
|
+
x: 0,
|
|
127
|
+
y: 0,
|
|
128
|
+
width: barGroupBox.attribute.width,
|
|
129
|
+
height: barGroupBox.attribute.height,
|
|
130
|
+
cornerRadius: isMilestone ? this._scene._gantt.parsedOptions.taskBarMilestoneStyle.cornerRadius : taskBarStyle.cornerRadius,
|
|
131
|
+
clip: this._scene._gantt.parsedOptions.taskBarClip
|
|
132
|
+
});
|
|
133
|
+
let rootContainer;
|
|
134
|
+
barGroup.name = "task-bar-group", barGroupBox.appendChild(barGroup), barGroupBox.clipGroupBox = barGroup;
|
|
135
|
+
let renderDefaultBar = !0, renderDefaultText = !0;
|
|
136
|
+
if (taskBarCustomLayout) {
|
|
137
|
+
let customLayoutObj;
|
|
138
|
+
if ("function" == typeof taskBarCustomLayout) {
|
|
139
|
+
customLayoutObj = taskBarCustomLayout({
|
|
140
|
+
width: taskBarSize,
|
|
141
|
+
height: taskbarHeight,
|
|
142
|
+
index: index,
|
|
143
|
+
startDate: startDate,
|
|
144
|
+
endDate: endDate,
|
|
145
|
+
taskDays: taskDays,
|
|
146
|
+
progress: progress,
|
|
147
|
+
taskRecord: taskRecord,
|
|
148
|
+
ganttInstance: this._scene._gantt
|
|
149
|
+
});
|
|
150
|
+
} else customLayoutObj = taskBarCustomLayout;
|
|
151
|
+
customLayoutObj && (rootContainer = customLayoutObj.rootContainer, renderDefaultBar = null !== (_c = customLayoutObj.renderDefaultBar) && void 0 !== _c && _c,
|
|
152
|
+
renderDefaultText = null !== (_d = customLayoutObj.renderDefaultText) && void 0 !== _d && _d,
|
|
153
|
+
rootContainer && (rootContainer.name = "task-bar-custom-render"));
|
|
154
|
+
}
|
|
155
|
+
if (renderDefaultBar) {
|
|
156
|
+
const rect = (0, vrender_1.createRect)({
|
|
157
|
+
x: 0,
|
|
158
|
+
y: 0,
|
|
159
|
+
width: barGroupBox.attribute.width,
|
|
160
|
+
height: barGroupBox.attribute.height,
|
|
161
|
+
fill: isMilestone ? this._scene._gantt.parsedOptions.taskBarMilestoneStyle.fillColor : taskBarStyle.barColor,
|
|
162
|
+
pickable: !1
|
|
163
|
+
});
|
|
164
|
+
if (rect.name = "task-bar-rect", barGroup.appendChild(rect), barGroupBox.barRect = rect,
|
|
165
|
+
taskRecord.type !== ts_types_1.TaskType.MILESTONE) {
|
|
166
|
+
const progress_rect = (0, vrender_1.createRect)({
|
|
167
|
+
x: 0,
|
|
168
|
+
y: 0,
|
|
169
|
+
width: taskBarSize * progress / 100,
|
|
170
|
+
height: taskbarHeight,
|
|
171
|
+
fill: taskBarStyle.completedBarColor,
|
|
172
|
+
pickable: !1
|
|
173
|
+
});
|
|
174
|
+
progress_rect.name = "task-bar-progress-rect", barGroup.appendChild(progress_rect),
|
|
175
|
+
barGroupBox.progressRect = progress_rect;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
if (rootContainer && barGroup.appendChild(rootContainer), renderDefaultText && taskRecord.type !== ts_types_1.TaskType.MILESTONE) {
|
|
179
|
+
const {textAlign: textAlign, textBaseline: textBaseline, fontSize: fontSize, fontFamily: fontFamily, textOverflow: textOverflow, color: color, padding: padding} = this._scene._gantt.parsedOptions.taskBarLabelStyle, position = (0,
|
|
180
|
+
gantt_helper_1.getTextPos)((0, util_1.toBoxArray)(padding), textAlign, textBaseline, taskBarSize, taskbarHeight), label = (0,
|
|
181
|
+
vrender_1.createText)({
|
|
182
|
+
x: position.x,
|
|
183
|
+
y: position.y,
|
|
184
|
+
fontSize: fontSize,
|
|
185
|
+
fill: color,
|
|
186
|
+
fontFamily: fontFamily,
|
|
187
|
+
text: (0, util_1.parseStringTemplate)(this._scene._gantt.parsedOptions.taskBarLabelText, taskRecord),
|
|
188
|
+
maxLineWidth: taskBarSize - exports.TASKBAR_HOVER_ICON_WIDTH,
|
|
189
|
+
textBaseline: textBaseline,
|
|
190
|
+
textAlign: textAlign,
|
|
191
|
+
ellipsis: "clip" === textOverflow ? "" : "ellipsis" === textOverflow ? "..." : (0,
|
|
192
|
+
vutils_1.isValid)(textOverflow) ? textOverflow : void 0,
|
|
193
|
+
poptip: {
|
|
194
|
+
position: "bottom"
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
barGroup.appendChild(label), barGroupBox.textLabel = label, barGroupBox.labelStyle = this._scene._gantt.parsedOptions.taskBarLabelStyle,
|
|
198
|
+
barGroupBox.updateTextPosition();
|
|
199
|
+
}
|
|
200
|
+
if (renderDefaultText && "milestone" === taskRecord.type && this._scene._gantt.parsedOptions.taskBarMilestoneStyle.labelText) {
|
|
201
|
+
const milestoneStyle = this._scene._gantt.parsedOptions.taskBarMilestoneStyle, textStyle = milestoneStyle.labelTextStyle || {}, pos = this.calculateMilestoneTextPosition(milestoneStyle.textOrient || "right", milestoneStyle.width, null !== (_e = textStyle.padding) && void 0 !== _e ? _e : 4), textContainer = new vrender_1.Group({
|
|
202
|
+
x: x,
|
|
203
|
+
y: y,
|
|
204
|
+
width: milestoneStyle.width,
|
|
205
|
+
height: milestoneStyle.width,
|
|
206
|
+
angle: 0,
|
|
207
|
+
pickable: !1
|
|
208
|
+
}), milestoneLabel = (0, vrender_1.createText)({
|
|
209
|
+
x: pos.textX,
|
|
210
|
+
y: pos.textY,
|
|
211
|
+
fontSize: textStyle.fontSize || 16,
|
|
212
|
+
fontFamily: textStyle.fontFamily || "Arial",
|
|
213
|
+
fill: textStyle.color || "#ff0000",
|
|
214
|
+
textBaseline: textStyle.textBaseline || pos.textBaselineValue,
|
|
215
|
+
textAlign: textStyle.textAlign || pos.textAlignValue,
|
|
216
|
+
text: this.formatMilestoneText(milestoneStyle.labelText, taskRecord),
|
|
217
|
+
pickable: !1
|
|
218
|
+
});
|
|
219
|
+
textContainer.appendChild(milestoneLabel), this.barContainer.appendChild(textContainer),
|
|
220
|
+
barGroupBox.milestoneTextLabel = milestoneLabel, barGroupBox.milestoneTextContainer = textContainer;
|
|
221
|
+
}
|
|
222
|
+
return barGroupBox;
|
|
223
|
+
}
|
|
224
|
+
updateTaskBarNode(index, sub_task_index) {
|
|
225
|
+
const taskbarGroup = this.getTaskBarNodeByIndex(index, sub_task_index);
|
|
226
|
+
taskbarGroup && this.barContainer.removeChild(taskbarGroup);
|
|
227
|
+
const barGroup = this.initBar(index, sub_task_index);
|
|
228
|
+
barGroup && (this.barContainer.insertInto(barGroup, index), barGroup.updateTextPosition());
|
|
229
|
+
}
|
|
230
|
+
initHoverBarIcons() {
|
|
231
|
+
var _a, _b;
|
|
232
|
+
const hoverBarGroup = new vrender_1.Group({
|
|
233
|
+
x: 0,
|
|
234
|
+
y: 0,
|
|
235
|
+
width: 100,
|
|
236
|
+
height: 100,
|
|
237
|
+
clip: !1,
|
|
238
|
+
pickable: !1,
|
|
239
|
+
cornerRadius: null !== (_b = null !== (_a = this._scene._gantt.parsedOptions.taskBarHoverStyle.cornerRadius) && void 0 !== _a ? _a : gantt_helper_1.defaultTaskBarStyle.cornerRadius) && void 0 !== _b ? _b : 0,
|
|
240
|
+
fill: this._scene._gantt.parsedOptions.taskBarHoverStyle.barOverlayColor,
|
|
241
|
+
visibleAll: !1
|
|
242
|
+
});
|
|
243
|
+
if (this.hoverBarGroup = hoverBarGroup, hoverBarGroup.name = "task-bar-hover-shadow",
|
|
244
|
+
this._scene._gantt.parsedOptions.taskBarResizable) {
|
|
245
|
+
const icon = new vrender_1.Image({
|
|
246
|
+
x: 0,
|
|
247
|
+
y: 0,
|
|
248
|
+
width: exports.TASKBAR_HOVER_ICON_WIDTH,
|
|
249
|
+
height: 20,
|
|
250
|
+
image: TASKBAR_HOVER_ICON,
|
|
251
|
+
pickable: !0,
|
|
252
|
+
cursor: "col-resize"
|
|
253
|
+
});
|
|
254
|
+
icon.name = "task-bar-hover-shadow-left-icon", this.hoverBarLeftIcon = icon, hoverBarGroup.appendChild(icon);
|
|
255
|
+
const rightIcon = new vrender_1.Image({
|
|
256
|
+
x: 0,
|
|
257
|
+
y: 0,
|
|
258
|
+
width: exports.TASKBAR_HOVER_ICON_WIDTH,
|
|
259
|
+
height: 20,
|
|
260
|
+
image: TASKBAR_HOVER_ICON,
|
|
261
|
+
pickable: !0,
|
|
262
|
+
cursor: "col-resize"
|
|
263
|
+
});
|
|
264
|
+
rightIcon.name = "task-bar-hover-shadow-right-icon", this.hoverBarRightIcon = rightIcon,
|
|
265
|
+
hoverBarGroup.appendChild(rightIcon);
|
|
266
|
+
}
|
|
267
|
+
const progressHandle = new vrender_1.Group({
|
|
268
|
+
x: 0,
|
|
269
|
+
y: 0,
|
|
270
|
+
width: 12,
|
|
271
|
+
height: 12,
|
|
272
|
+
pickable: !0,
|
|
273
|
+
cursor: "ew-resize",
|
|
274
|
+
visible: !1
|
|
275
|
+
}), triangleHandle = new vrender_1.Polygon({
|
|
276
|
+
points: [ {
|
|
277
|
+
x: 6,
|
|
278
|
+
y: 0
|
|
279
|
+
}, {
|
|
280
|
+
x: 0,
|
|
281
|
+
y: 6
|
|
282
|
+
}, {
|
|
283
|
+
x: 12,
|
|
284
|
+
y: 6
|
|
285
|
+
} ],
|
|
286
|
+
fill: "#0064ff",
|
|
287
|
+
stroke: "#ffffff",
|
|
288
|
+
lineWidth: 1,
|
|
289
|
+
pickable: !1
|
|
290
|
+
});
|
|
291
|
+
progressHandle.appendChild(triangleHandle), progressHandle.name = "task-bar-progress-handle",
|
|
292
|
+
this.hoverBarProgressHandle = progressHandle, hoverBarGroup.appendChild(progressHandle);
|
|
293
|
+
}
|
|
294
|
+
setX(x) {
|
|
295
|
+
this.barContainer.setAttribute("x", x);
|
|
296
|
+
}
|
|
297
|
+
setY(y) {
|
|
298
|
+
this.barContainer.setAttribute("y", y);
|
|
299
|
+
}
|
|
300
|
+
refresh() {
|
|
301
|
+
this.width = this._scene._gantt.tableNoFrameWidth, this.height = this._scene._gantt.gridHeight,
|
|
302
|
+
this.group.setAttributes({
|
|
303
|
+
height: this.height,
|
|
304
|
+
width: this.width,
|
|
305
|
+
y: this._scene._gantt.getAllHeaderRowsHeight()
|
|
306
|
+
});
|
|
307
|
+
const x = this.barContainer.attribute.x, y = this.barContainer.attribute.y;
|
|
308
|
+
this.barContainer.removeAllChild(), this.group.removeChild(this.barContainer), this.initBars(),
|
|
309
|
+
this.setX(x), this.setY(y);
|
|
310
|
+
}
|
|
311
|
+
resize() {
|
|
312
|
+
this.width = this._scene._gantt.tableNoFrameWidth, this.height = this._scene._gantt.gridHeight,
|
|
313
|
+
this.group.setAttribute("width", this.width), this.group.setAttribute("height", this.height);
|
|
314
|
+
}
|
|
315
|
+
showHoverBar(x, y, width, height, target) {
|
|
316
|
+
var _a, _b, _c, _d, _e;
|
|
317
|
+
const {startDate: startDate, endDate: endDate, taskRecord: taskRecord} = this._scene._gantt.getTaskInfoByTaskListIndex(target.task_index, target.sub_task_index);
|
|
318
|
+
target && "task-bar" === target.name && target.appendChild(this.hoverBarGroup),
|
|
319
|
+
this.hoverBarGroup.setAttribute("x", 0), this.hoverBarGroup.setAttribute("y", 0),
|
|
320
|
+
this.hoverBarGroup.setAttribute("width", width), this.hoverBarGroup.setAttribute("height", height),
|
|
321
|
+
this.hoverBarGroup.setAttribute("visibleAll", !0);
|
|
322
|
+
const taskBarStyle = this._scene._gantt.getTaskBarStyle(target.task_index, target.sub_task_index);
|
|
323
|
+
if (taskRecord.type === ts_types_1.TaskType.MILESTONE) this.hoverBarGroup.setAttribute("cornerRadius", target.attribute.cornerRadius); else {
|
|
324
|
+
const cornerRadius = null !== (_b = null !== (_a = this._scene._gantt.parsedOptions.taskBarHoverStyle.cornerRadius) && void 0 !== _a ? _a : taskBarStyle.cornerRadius) && void 0 !== _b ? _b : 0;
|
|
325
|
+
this.hoverBarGroup.setAttribute("cornerRadius", cornerRadius);
|
|
326
|
+
}
|
|
327
|
+
null === (_c = this.hoverBarLeftIcon) || void 0 === _c || _c.setAttribute("visible", !1),
|
|
328
|
+
null === (_d = this.hoverBarRightIcon) || void 0 === _d || _d.setAttribute("visible", !1),
|
|
329
|
+
null === (_e = this.hoverBarProgressHandle) || void 0 === _e || _e.setAttribute("visibleAll", !1);
|
|
330
|
+
let leftResizable = !0, rightResizable = !0, progressAdjustable = !0;
|
|
331
|
+
const progressField = this._scene._gantt.parsedOptions.progressField;
|
|
332
|
+
if (progressField && void 0 !== taskRecord[progressField] && null !== taskRecord[progressField]) if ("function" == typeof this._scene._gantt.parsedOptions.taskBarProgressAdjustable) {
|
|
333
|
+
const arg = {
|
|
334
|
+
index: target.task_index,
|
|
335
|
+
startDate: startDate,
|
|
336
|
+
endDate: endDate,
|
|
337
|
+
taskRecord: taskRecord,
|
|
338
|
+
ganttInstance: this._scene._gantt
|
|
339
|
+
};
|
|
340
|
+
progressAdjustable = this._scene._gantt.parsedOptions.taskBarProgressAdjustable(arg);
|
|
341
|
+
} else progressAdjustable = this._scene._gantt.parsedOptions.taskBarProgressAdjustable; else progressAdjustable = !1;
|
|
342
|
+
if (taskRecord.type === ts_types_1.TaskType.MILESTONE) leftResizable = !1, rightResizable = !1,
|
|
343
|
+
progressAdjustable = !1; else if ("function" == typeof this._scene._gantt.parsedOptions.taskBarResizable) {
|
|
344
|
+
const arg = {
|
|
345
|
+
index: target.task_index,
|
|
346
|
+
startDate: startDate,
|
|
347
|
+
endDate: endDate,
|
|
348
|
+
taskRecord: taskRecord,
|
|
349
|
+
ganttInstance: this._scene._gantt
|
|
350
|
+
}, resizableResult = this._scene._gantt.parsedOptions.taskBarResizable(arg);
|
|
351
|
+
Array.isArray(resizableResult) ? [leftResizable, rightResizable] = resizableResult : (leftResizable = resizableResult,
|
|
352
|
+
rightResizable = resizableResult);
|
|
353
|
+
} else Array.isArray(this._scene._gantt.parsedOptions.taskBarResizable) ? [leftResizable, rightResizable] = this._scene._gantt.parsedOptions.taskBarResizable : (leftResizable = this._scene._gantt.parsedOptions.taskBarResizable,
|
|
354
|
+
rightResizable = this._scene._gantt.parsedOptions.taskBarResizable);
|
|
355
|
+
if (leftResizable && this.hoverBarLeftIcon.setAttribute("visible", !0), rightResizable && this.hoverBarRightIcon.setAttribute("visible", !0),
|
|
356
|
+
progressAdjustable && this.hoverBarProgressHandle.setAttribute("visibleAll", !0),
|
|
357
|
+
this.hoverBarLeftIcon && (this.hoverBarLeftIcon.setAttribute("x", 0), this.hoverBarLeftIcon.setAttribute("y", Math.ceil(height / 10)),
|
|
358
|
+
this.hoverBarLeftIcon.setAttribute("width", exports.TASKBAR_HOVER_ICON_WIDTH), this.hoverBarLeftIcon.setAttribute("height", height - 2 * Math.ceil(height / 10)),
|
|
359
|
+
this.hoverBarRightIcon.setAttribute("x", width - exports.TASKBAR_HOVER_ICON_WIDTH),
|
|
360
|
+
this.hoverBarRightIcon.setAttribute("y", Math.ceil(height / 10)), this.hoverBarRightIcon.setAttribute("width", exports.TASKBAR_HOVER_ICON_WIDTH),
|
|
361
|
+
this.hoverBarRightIcon.setAttribute("height", height - 2 * Math.ceil(height / 10))),
|
|
362
|
+
this.hoverBarProgressHandle) {
|
|
363
|
+
const {progress: progress} = this._scene._gantt.getTaskInfoByTaskListIndex(target.task_index, target.sub_task_index), progressX = width * progress / 100 - 6;
|
|
364
|
+
this.hoverBarProgressHandle.setAttribute("x", progressX), this.hoverBarProgressHandle.setAttribute("y", height - 3);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
hideHoverBar() {
|
|
368
|
+
this.hoverBarGroup.setAttribute("visibleAll", !1);
|
|
369
|
+
}
|
|
370
|
+
createSelectedBorder(x, y, width, height, attachedToTaskBarNode, showLinkPoint = !1) {
|
|
371
|
+
const record = attachedToTaskBarNode.record, selectedBorder = new vrender_1.Group({
|
|
372
|
+
x: x,
|
|
373
|
+
y: y,
|
|
374
|
+
width: width,
|
|
375
|
+
height: height,
|
|
376
|
+
pickable: !1,
|
|
377
|
+
attachedToTaskBarNode: attachedToTaskBarNode,
|
|
378
|
+
zIndex: 1e4
|
|
379
|
+
});
|
|
380
|
+
selectedBorder.name = "task-bar-select-border", this.barContainer.appendChild(selectedBorder),
|
|
381
|
+
this.selectedBorders.push(selectedBorder);
|
|
382
|
+
const selectRectBorder = new vrender_1.Group({
|
|
383
|
+
x: 0,
|
|
384
|
+
y: 0,
|
|
385
|
+
width: width,
|
|
386
|
+
height: height,
|
|
387
|
+
lineWidth: this._scene._gantt.parsedOptions.taskBarSelectedStyle.borderLineWidth,
|
|
388
|
+
pickable: !1,
|
|
389
|
+
cornerRadius: attachedToTaskBarNode.attribute.cornerRadius,
|
|
390
|
+
fill: !1,
|
|
391
|
+
stroke: this._scene._gantt.parsedOptions.taskBarSelectedStyle.borderColor,
|
|
392
|
+
shadowColor: this._scene._gantt.parsedOptions.taskBarSelectedStyle.shadowColor,
|
|
393
|
+
shadowOffsetX: this._scene._gantt.parsedOptions.taskBarSelectedStyle.shadowOffsetX,
|
|
394
|
+
shadowOffsetY: this._scene._gantt.parsedOptions.taskBarSelectedStyle.shadowOffsetY,
|
|
395
|
+
shadowBlur: this._scene._gantt.parsedOptions.taskBarSelectedStyle.shadowBlur,
|
|
396
|
+
angle: attachedToTaskBarNode.attribute.angle,
|
|
397
|
+
anchor: [ width / 2, height / 2 ]
|
|
398
|
+
});
|
|
399
|
+
if (selectedBorder.appendChild(selectRectBorder), showLinkPoint) {
|
|
400
|
+
const linePointPadding = record.type === ts_types_1.TaskType.MILESTONE ? 15 : 10, linkPointContainer = new vrender_1.Group({
|
|
401
|
+
x: -linePointPadding,
|
|
402
|
+
y: 0,
|
|
403
|
+
width: 10,
|
|
404
|
+
height: height,
|
|
405
|
+
pickable: !0
|
|
406
|
+
}), linkPoint = new vrender_1.Circle({
|
|
407
|
+
x: 5,
|
|
408
|
+
y: height / 2,
|
|
409
|
+
radius: this._scene._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.radius,
|
|
410
|
+
fill: this._scene._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.fillColor,
|
|
411
|
+
stroke: this._scene._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.strokeColor,
|
|
412
|
+
lineWidth: this._scene._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.strokeWidth,
|
|
413
|
+
pickable: !1
|
|
414
|
+
});
|
|
415
|
+
linkPointContainer.appendChild(linkPoint), linkPointContainer.name = "task-bar-link-point-left",
|
|
416
|
+
selectedBorder.appendChild(linkPointContainer);
|
|
417
|
+
const linkPointContainer1 = new vrender_1.Group({
|
|
418
|
+
x: width + (linePointPadding - 10),
|
|
419
|
+
y: 0,
|
|
420
|
+
width: 10,
|
|
421
|
+
height: height,
|
|
422
|
+
pickable: !0
|
|
423
|
+
}), linkPoint1 = new vrender_1.Circle({
|
|
424
|
+
x: 5,
|
|
425
|
+
y: height / 2,
|
|
426
|
+
radius: this._scene._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.radius,
|
|
427
|
+
fill: this._scene._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.fillColor,
|
|
428
|
+
stroke: this._scene._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.strokeColor,
|
|
429
|
+
lineWidth: this._scene._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.strokeWidth,
|
|
430
|
+
pickable: !1,
|
|
431
|
+
pickStrokeBuffer: 10
|
|
432
|
+
});
|
|
433
|
+
linkPointContainer1.appendChild(linkPoint1), linkPointContainer1.name = "task-bar-link-point-right",
|
|
434
|
+
selectedBorder.appendChild(linkPointContainer1);
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
removeSelectedBorder() {
|
|
438
|
+
this.selectedBorders.forEach((border => {
|
|
439
|
+
border.delete();
|
|
440
|
+
})), this.selectedBorders = [];
|
|
441
|
+
}
|
|
442
|
+
removeSecondSelectedBorder() {
|
|
443
|
+
if (2 === this.selectedBorders.length) {
|
|
444
|
+
this.selectedBorders.pop().delete();
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
updateCreatingDependencyLine(x1, y1, x2, y2) {
|
|
448
|
+
this.creatingDependencyLine && (this.creatingDependencyLine.delete(), this.creatingDependencyLine = void 0);
|
|
449
|
+
const line = new vrender_1.Line({
|
|
450
|
+
points: [ {
|
|
451
|
+
x: x1,
|
|
452
|
+
y: y1
|
|
453
|
+
}, {
|
|
454
|
+
x: x2,
|
|
455
|
+
y: y2
|
|
456
|
+
} ],
|
|
457
|
+
stroke: this._scene._gantt.parsedOptions.dependencyLinkLineCreatingStyle.lineColor,
|
|
458
|
+
lineWidth: this._scene._gantt.parsedOptions.dependencyLinkLineCreatingStyle.lineWidth,
|
|
459
|
+
lineDash: this._scene._gantt.parsedOptions.dependencyLinkLineCreatingStyle.lineDash,
|
|
460
|
+
pickable: !1
|
|
461
|
+
});
|
|
462
|
+
this.creatingDependencyLine = line, this.selectedBorders[0].appendChild(line);
|
|
463
|
+
}
|
|
464
|
+
getTaskBarNodeByIndex(index, sub_task_index) {
|
|
465
|
+
let c = this.barContainer.firstChild;
|
|
466
|
+
if (!c) return null;
|
|
467
|
+
for (let i = 0; i < this.barContainer.childrenCount; i++) {
|
|
468
|
+
if (c.task_index === index && (!(0, vutils_1.isValid)(sub_task_index) || (0, vutils_1.isValid)(sub_task_index) && c.sub_task_index === sub_task_index)) return c;
|
|
469
|
+
c = c._next;
|
|
470
|
+
}
|
|
471
|
+
return null;
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
exports.TaskBar = TaskBar;
|
|
476
|
+
//# sourceMappingURL=task-bar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/scenegraph/task-bar.ts"],"names":[],"mappings":"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","file":"task-bar.js","sourcesContent":["import { Group, createText, createRect, Image, Circle, Line, Polygon } from '@visactor/vtable/es/vrender';\nimport type { Scenegraph } from './scenegraph';\n// import { Icon } from './icon';\nimport { computeCountToTimeScale, parseStringTemplate, toBoxArray } from '../tools/util';\nimport { isValid } from '@visactor/vutils';\nimport { defaultTaskBarStyle, getTextPos } from '../gantt-helper';\nimport { GanttTaskBarNode } from './gantt-node';\nimport { TasksShowMode, TaskType } from '../ts-types';\n\nconst TASKBAR_HOVER_ICON = `<svg width=\"100\" height=\"200\" xmlns=\"http://www.w3.org/2000/svg\">\n <line x1=\"30\" y1=\"10\" x2=\"30\" y2=\"190\" stroke=\"black\" stroke-width=\"4\"/>\n <line x1=\"70\" y1=\"10\" x2=\"70\" y2=\"190\" stroke=\"black\" stroke-width=\"4\"/>\n</svg>`;\nexport const TASKBAR_HOVER_ICON_WIDTH = 10;\n\nexport class TaskBar {\n formatMilestoneText(text: string, record: any): string {\n if (!text) {\n return '';\n }\n const fieldPattern = /{([^}]+)}/g;\n const matches = text.match(fieldPattern);\n\n if (matches) {\n matches.forEach(match => {\n const fieldName = match.substring(1, match.length - 1);\n const fieldValue = record[fieldName];\n if (fieldValue !== undefined) {\n text = text.replace(match, String(fieldValue));\n }\n });\n }\n return text;\n }\n\n calculateMilestoneTextPosition(\n position: string,\n milestoneWidth: number,\n padding: number | number[] = 4\n ): {\n textX: number;\n textY: number;\n textAlignValue: CanvasTextAlign;\n textBaselineValue: CanvasTextBaseline;\n } {\n const paddingVal = typeof padding === 'number' ? padding : 4;\n let textX = 0;\n let textY = 0;\n let textAlignValue: CanvasTextAlign = 'left';\n let textBaselineValue: CanvasTextBaseline = 'middle';\n\n // 将文本位置改为以中心点为基准\n const center = milestoneWidth / 2;\n\n switch (position) {\n case 'left':\n textX = -paddingVal;\n textY = center;\n textAlignValue = 'end';\n textBaselineValue = 'middle';\n break;\n case 'right':\n textX = milestoneWidth + paddingVal;\n textY = center;\n textAlignValue = 'start';\n textBaselineValue = 'middle';\n break;\n case 'top':\n textX = center;\n textY = -paddingVal;\n textAlignValue = 'center';\n textBaselineValue = 'bottom';\n break;\n case 'bottom':\n textX = center;\n textY = milestoneWidth + paddingVal;\n textAlignValue = 'center';\n textBaselineValue = 'top';\n break;\n default:\n textX = milestoneWidth + paddingVal;\n textY = center;\n textAlignValue = 'start';\n textBaselineValue = 'middle';\n }\n\n return {\n textX,\n textY,\n textAlignValue,\n textBaselineValue\n };\n }\n group: Group;\n barContainer: Group;\n hoverBarGroup: Group;\n creatingDependencyLine: Line;\n hoverBarLeftIcon: Image;\n hoverBarRightIcon: Image;\n hoverBarProgressHandle: Group;\n _scene: Scenegraph;\n width: number;\n height: number;\n selectedBorders: Group[] = [];\n constructor(scene: Scenegraph) {\n this._scene = scene;\n // const height = Math.min(scene._gantt.tableNoFrameHeight, scene._gantt.drawHeight);\n this.width = scene._gantt.tableNoFrameWidth;\n this.height = scene._gantt.gridHeight;\n this.group = new Group({\n x: 0,\n y: scene._gantt.getAllHeaderRowsHeight(),\n width: this.width,\n height: this.height,\n pickable: false,\n clip: true\n });\n this.group.name = 'task-bar-container';\n scene.ganttGroup.addChild(this.group);\n this.initBars();\n this.initHoverBarIcons();\n }\n\n initBars() {\n this.barContainer = new Group({\n x: 0,\n y: 0,\n width: this._scene._gantt.getAllDateColsWidth(),\n height: this._scene._gantt.getAllTaskBarsHeight(),\n pickable: false,\n clip: true\n });\n this.group.appendChild(this.barContainer);\n\n for (let i = 0; i < this._scene._gantt.itemCount; i++) {\n if (\n this._scene._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Inline ||\n this._scene._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Separate ||\n this._scene._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Arrange ||\n this._scene._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Compact\n ) {\n const record = this._scene._gantt.getRecordByIndex(i);\n if (record.children?.length > 0) {\n for (let j = 0; j < record.children?.length; j++) {\n const barGroup = this.initBar(i, j, record.children.length);\n if (barGroup) {\n this.barContainer.appendChild(barGroup);\n }\n }\n } else {\n const barGroup = this.initBar(i);\n if (barGroup) {\n this.barContainer.appendChild(barGroup);\n }\n }\n continue;\n } else if (this._scene._gantt.parsedOptions.tasksShowMode === TasksShowMode.Project_Sub_Tasks_Inline) {\n const record = this._scene._gantt.getRecordByIndex(i);\n const isExpanded = record.hierarchyState === 'expand';\n // For project type records, we want to show all children in one line when collapsed\n if (record.type === TaskType.PROJECT && record.children?.length > 0 && !isExpanded) {\n const recordIndex = this._scene._gantt.getRecordIndexByTaskShowIndex(i);\n const sub_task_indexs: number[] = Array.isArray(recordIndex) ? [...recordIndex] : [recordIndex];\n\n const callInitBar = (record: any, sub_task_indexs: number[]) => {\n if (record.children?.length > 0) {\n for (let j = 0; j < record.children?.length; j++) {\n const child_record = record.children[j];\n if (child_record.type !== TaskType.PROJECT) {\n const barGroup = this.initBar(i, [...sub_task_indexs, j], record.children.length);\n if (barGroup) {\n this.barContainer.appendChild(barGroup);\n }\n } else {\n //如果是project类型的子任务,需要递归调用 只将类型不是project的子任务添加到barContainer中\n callInitBar(child_record, [...sub_task_indexs, j]);\n }\n }\n }\n };\n callInitBar(record, sub_task_indexs);\n } else {\n // For non-project tasks, use the default Tasks_Separate mode\n const barGroup = this.initBar(i);\n if (barGroup) {\n this.barContainer.appendChild(barGroup);\n }\n }\n continue;\n } else {\n const barGroup = this.initBar(i);\n if (barGroup) {\n this.barContainer.appendChild(barGroup);\n }\n }\n }\n }\n\n /**\n * @param index 任务显示的index,从0开始\n * @param childIndex 子任务的index, 当taskShowMode是sub_tasks_*模式时,会传入sub_task_index。如果是tasks_separate模式,sub_task_index传入undefined。\n * 如果模式Project_Sub_Tasks_Inline时,传入的sub_task_index是一个数组,数组的第一个元素是父任务的index,第二个元素是子任务的index,依次类推算是各层子任务的path。\n */\n initBar(index: number, childIndex?: number | number[], childrenLength?: number) {\n const taskBarCustomLayout = this._scene._gantt.parsedOptions.taskBarCustomLayout;\n const { startDate, endDate, taskDays, progress, taskRecord } = this._scene._gantt.getTaskInfoByTaskListIndex(\n index,\n childIndex\n );\n const isMilestone = taskRecord.type === TaskType.MILESTONE;\n if (\n (isMilestone && !startDate) ||\n (!isMilestone && (taskDays <= 0 || !startDate || !endDate || startDate.getTime() > endDate.getTime()))\n ) {\n return null;\n }\n const { unit, step } = this._scene._gantt.parsedOptions.reverseSortedTimelineScales[0];\n let taskBarSize =\n computeCountToTimeScale(endDate, startDate, unit, step, 1) * this._scene._gantt.parsedOptions.timelineColWidth;\n\n const taskBarStyle = this._scene._gantt.getTaskBarStyle(index, childIndex);\n const taskbarHeight = taskBarStyle.width;\n if (isValid(taskBarStyle.minSize)) {\n taskBarSize = Math.max(taskBarSize, taskBarStyle.minSize);\n }\n // const minDate = createDateAtMidnight(this._scene._gantt.parsedOptions.minDate);\n\n // const subTaskShowRowCount =\n // this._scene._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Separate\n // ? childrenLength || 1\n // : this._scene._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Arrange\n // ? computeRowsCountByRecordDate(this._scene._gantt, this._scene._gantt.records[index])\n // : this._scene._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Compact\n // ? computeRowsCountByRecordDateForCompact(this._scene._gantt, this._scene._gantt.records[index])\n // : 1;\n const oneTaskHeigth = this._scene._gantt.parsedOptions.rowHeight; // this._scene._gantt.getRowHeightByIndex(index) / subTaskShowRowCount;\n const milestoneTaskBarHeight = this._scene._gantt.parsedOptions.taskBarMilestoneStyle.width;\n const x =\n computeCountToTimeScale(startDate, this._scene._gantt.parsedOptions.minDate, unit, step) *\n this._scene._gantt.parsedOptions.timelineColWidth -\n (isMilestone ? milestoneTaskBarHeight / 2 : 0);\n const y =\n this._scene._gantt.getRowsHeightByIndex(0, index - 1) +\n (this._scene._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Separate\n ? ((childIndex as number) ?? 0) * oneTaskHeigth\n : this._scene._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Arrange ||\n this._scene._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Compact\n ? taskRecord.vtable_gantt_showIndex * oneTaskHeigth\n : 0) +\n (oneTaskHeigth - (isMilestone ? milestoneTaskBarHeight : taskbarHeight)) / 2;\n const barGroupBox = new GanttTaskBarNode({\n x,\n y,\n width: isMilestone ? milestoneTaskBarHeight : taskBarSize,\n // height: this._scene._gantt.parsedOptions.rowHeight,\n height: isMilestone ? milestoneTaskBarHeight : taskbarHeight,\n cornerRadius: isMilestone\n ? this._scene._gantt.parsedOptions.taskBarMilestoneStyle.cornerRadius\n : taskBarStyle.cornerRadius,\n lineWidth: isMilestone\n ? this._scene._gantt.parsedOptions.taskBarMilestoneStyle.borderLineWidth * 2\n : (taskBarStyle.borderLineWidth ?? taskBarStyle.borderWidth) * 2,\n stroke: isMilestone\n ? this._scene._gantt.parsedOptions.taskBarMilestoneStyle.borderColor\n : taskBarStyle.borderColor,\n angle: isMilestone ? (45 / 180) * Math.PI : 0,\n anchor: isMilestone ? [x + milestoneTaskBarHeight / 2, y + milestoneTaskBarHeight / 2] : undefined\n // clip: true\n });\n barGroupBox.name = 'task-bar';\n //如果TaskShowMode是tasks_separate模式 这里的task_index其实是table中的bodyIndex;如果TaskShowMode是sub_tasks_***模式 task_index也是对应父节点任务条在table中的bodyIndex(但不会渲染父节点,只是渲染子节点)\n barGroupBox.task_index = index;\n //如果TaskShowMode是tasks_separate模式,不会赋值sub_task_index;如果TaskShowMode是sub_tasks_***模式 这里的sub_task_index是父节点下子元素的index\n barGroupBox.sub_task_index = childIndex as any;\n barGroupBox.record = taskRecord;\n\n const barGroup = new Group({\n x: 0,\n y: 0,\n width: barGroupBox.attribute.width,\n height: barGroupBox.attribute.height,\n cornerRadius: isMilestone\n ? this._scene._gantt.parsedOptions.taskBarMilestoneStyle.cornerRadius\n : taskBarStyle.cornerRadius,\n clip: this._scene._gantt.parsedOptions.taskBarClip\n });\n barGroup.name = 'task-bar-group';\n barGroupBox.appendChild(barGroup);\n barGroupBox.clipGroupBox = barGroup;\n let rootContainer;\n let renderDefaultBar = true;\n let renderDefaultText = true;\n\n if (taskBarCustomLayout) {\n let customLayoutObj;\n if (typeof taskBarCustomLayout === 'function') {\n const arg = {\n width: taskBarSize,\n height: taskbarHeight,\n index,\n startDate,\n endDate,\n taskDays,\n progress,\n taskRecord,\n ganttInstance: this._scene._gantt\n };\n customLayoutObj = taskBarCustomLayout(arg);\n } else {\n customLayoutObj = taskBarCustomLayout;\n }\n if (customLayoutObj) {\n // if (customLayoutObj.rootContainer) {\n // customLayoutObj.rootContainer = decodeReactDom(customLayoutObj.rootContainer);\n // }\n rootContainer = customLayoutObj.rootContainer;\n renderDefaultBar = customLayoutObj.renderDefaultBar ?? false;\n renderDefaultText = customLayoutObj.renderDefaultText ?? false;\n rootContainer && (rootContainer.name = 'task-bar-custom-render');\n }\n }\n\n if (renderDefaultBar) {\n // 创建整个任务条rect\n const rect = createRect({\n x: 0,\n y: 0, //this._scene._gantt.parsedOptions.rowHeight - taskbarHeight) / 2,\n width: barGroupBox.attribute.width,\n height: barGroupBox.attribute.height,\n fill: isMilestone ? this._scene._gantt.parsedOptions.taskBarMilestoneStyle.fillColor : taskBarStyle.barColor,\n pickable: false\n });\n rect.name = 'task-bar-rect';\n barGroup.appendChild(rect);\n barGroupBox.barRect = rect;\n if (taskRecord.type !== TaskType.MILESTONE) {\n // 创建已完成部分任务条rect\n const progress_rect = createRect({\n x: 0,\n y: 0, //(this._scene._gantt.parsedOptions.rowHeight - taskbarHeight) / 2,\n width: (taskBarSize * progress) / 100,\n height: taskbarHeight,\n fill: taskBarStyle.completedBarColor,\n pickable: false\n });\n progress_rect.name = 'task-bar-progress-rect';\n barGroup.appendChild(progress_rect);\n barGroupBox.progressRect = progress_rect;\n }\n }\n\n rootContainer && barGroup.appendChild(rootContainer);\n if (renderDefaultText && taskRecord.type !== TaskType.MILESTONE) {\n const { textAlign, textBaseline, fontSize, fontFamily, textOverflow, color, padding } =\n this._scene._gantt.parsedOptions.taskBarLabelStyle;\n const position = getTextPos(toBoxArray(padding), textAlign, textBaseline, taskBarSize, taskbarHeight);\n //创建label 文字\n const label = createText({\n // visible: false,\n // pickable: false,\n x: position.x, //extAlign === 'center' ? taskBarSize / 2 : textAlign === 'left' ? 10 : taskBarSize - 10,\n y: position.y, //fontSize / 2,\n fontSize: fontSize, // 10\n fill: color,\n fontFamily: fontFamily,\n text: parseStringTemplate(this._scene._gantt.parsedOptions.taskBarLabelText as string, taskRecord),\n maxLineWidth: taskBarSize - TASKBAR_HOVER_ICON_WIDTH,\n textBaseline,\n textAlign,\n ellipsis:\n textOverflow === 'clip'\n ? ''\n : textOverflow === 'ellipsis'\n ? '...'\n : isValid(textOverflow)\n ? textOverflow\n : undefined,\n poptip: {\n position: 'bottom'\n // dx: (taskBarSize - TASKBAR_HOVER_ICON_WIDTH) / 4\n }\n // dx: 12 + 4,\n // dy: this._scene._gantt.barLabelStyle.fontSize / 2\n } as any);\n\n barGroup.appendChild(label);\n barGroupBox.textLabel = label;\n\n barGroupBox.labelStyle = this._scene._gantt.parsedOptions.taskBarLabelStyle;\n\n barGroupBox.updateTextPosition();\n }\n if (\n renderDefaultText &&\n taskRecord.type === 'milestone' &&\n this._scene._gantt.parsedOptions.taskBarMilestoneStyle.labelText\n ) {\n const milestoneStyle = this._scene._gantt.parsedOptions.taskBarMilestoneStyle;\n const textStyle = milestoneStyle.labelTextStyle || {};\n const pos = this.calculateMilestoneTextPosition(\n milestoneStyle.textOrient || 'right',\n milestoneStyle.width,\n textStyle.padding ?? 4\n );\n\n const textContainer = new Group({\n x,\n y,\n width: milestoneStyle.width,\n height: milestoneStyle.width,\n angle: 0,\n pickable: false\n });\n\n const milestoneLabel = createText({\n x: pos.textX,\n y: pos.textY,\n fontSize: textStyle.fontSize || 16,\n fontFamily: textStyle.fontFamily || 'Arial',\n fill: textStyle.color || '#ff0000',\n textBaseline: (textStyle.textBaseline || pos.textBaselineValue) as any,\n textAlign: textStyle.textAlign || pos.textAlignValue,\n text: this.formatMilestoneText(milestoneStyle.labelText, taskRecord),\n pickable: false\n });\n\n textContainer.appendChild(milestoneLabel);\n this.barContainer.appendChild(textContainer);\n\n barGroupBox.milestoneTextLabel = milestoneLabel;\n barGroupBox.milestoneTextContainer = textContainer;\n }\n return barGroupBox;\n }\n updateTaskBarNode(index: number, sub_task_index?: number) {\n const taskbarGroup = this.getTaskBarNodeByIndex(index, sub_task_index);\n if (taskbarGroup) {\n this.barContainer.removeChild(taskbarGroup);\n }\n const barGroup = this.initBar(index, sub_task_index);\n if (barGroup) {\n this.barContainer.insertInto(barGroup, index); //TODO\n barGroup.updateTextPosition();\n }\n }\n initHoverBarIcons() {\n const hoverBarGroup = new Group({\n x: 0,\n y: 0,\n width: 100,\n height: 100,\n clip: false, // 关闭裁剪以允许进度手柄显示在任务条外部\n pickable: false,\n cornerRadius:\n this._scene._gantt.parsedOptions.taskBarHoverStyle.cornerRadius ?? defaultTaskBarStyle.cornerRadius ?? 0,\n fill: this._scene._gantt.parsedOptions.taskBarHoverStyle.barOverlayColor,\n visibleAll: false\n });\n this.hoverBarGroup = hoverBarGroup;\n hoverBarGroup.name = 'task-bar-hover-shadow';\n // this.barContainer.appendChild(hoverBarGroup);\n // 创建左侧的icon\n if (this._scene._gantt.parsedOptions.taskBarResizable) {\n const icon = new Image({\n x: 0,\n y: 0, //this._scene._gantt.parsedOptions.rowHeight - taskbarHeight) / 2,\n width: TASKBAR_HOVER_ICON_WIDTH,\n height: 20,\n image: TASKBAR_HOVER_ICON,\n pickable: true,\n cursor: 'col-resize'\n });\n icon.name = 'task-bar-hover-shadow-left-icon';\n this.hoverBarLeftIcon = icon;\n hoverBarGroup.appendChild(icon);\n\n // 创建右侧的icon\n const rightIcon = new Image({\n x: 0,\n y: 0, //this._scene._gantt.parsedOptions.rowHeight - taskbarHeight) / 2,\n width: TASKBAR_HOVER_ICON_WIDTH,\n height: 20,\n image: TASKBAR_HOVER_ICON,\n pickable: true,\n cursor: 'col-resize'\n });\n rightIcon.name = 'task-bar-hover-shadow-right-icon';\n this.hoverBarRightIcon = rightIcon;\n hoverBarGroup.appendChild(rightIcon);\n }\n\n // 创建进度手柄\n const progressHandle = new Group({\n x: 0,\n y: 0,\n width: 12,\n height: 12,\n pickable: true,\n cursor: 'ew-resize',\n visible: false\n });\n\n // 创建三角形手柄\n const triangleHandle = new Polygon({\n points: [\n { x: 6, y: 0 }, // 顶部中心点\n { x: 0, y: 6 }, // 左下角\n { x: 12, y: 6 } // 右下角\n ],\n fill: '#0064ff',\n stroke: '#ffffff',\n lineWidth: 1,\n pickable: false\n });\n progressHandle.appendChild(triangleHandle);\n\n progressHandle.name = 'task-bar-progress-handle';\n this.hoverBarProgressHandle = progressHandle;\n hoverBarGroup.appendChild(progressHandle);\n }\n\n setX(x: number) {\n this.barContainer.setAttribute('x', x);\n }\n setY(y: number) {\n this.barContainer.setAttribute('y', y);\n }\n /** 重新创建任务条节点 */\n refresh() {\n this.width = this._scene._gantt.tableNoFrameWidth;\n this.height = this._scene._gantt.gridHeight;\n this.group.setAttributes({\n height: this.height,\n width: this.width,\n y: this._scene._gantt.getAllHeaderRowsHeight()\n });\n const x = this.barContainer.attribute.x;\n const y = this.barContainer.attribute.y;\n this.barContainer.removeAllChild();\n this.group.removeChild(this.barContainer);\n this.initBars();\n this.setX(x);\n this.setY(y);\n }\n resize() {\n this.width = this._scene._gantt.tableNoFrameWidth;\n this.height = this._scene._gantt.gridHeight;\n this.group.setAttribute('width', this.width);\n this.group.setAttribute('height', this.height);\n }\n\n showHoverBar(x: number, y: number, width: number, height: number, target?: GanttTaskBarNode) {\n const { startDate, endDate, taskRecord } = this._scene._gantt.getTaskInfoByTaskListIndex(\n target.task_index,\n target.sub_task_index\n );\n if (target && target.name === 'task-bar') {\n // this.hoverBarGroup.releatedTaskBar = target;\n target.appendChild(this.hoverBarGroup);\n }\n this.hoverBarGroup.setAttribute('x', 0);\n this.hoverBarGroup.setAttribute('y', 0);\n this.hoverBarGroup.setAttribute('width', width);\n this.hoverBarGroup.setAttribute('height', height);\n this.hoverBarGroup.setAttribute('visibleAll', true);\n const taskBarStyle = this._scene._gantt.getTaskBarStyle(target.task_index, target.sub_task_index);\n if (taskRecord.type === TaskType.MILESTONE) {\n this.hoverBarGroup.setAttribute('cornerRadius', target.attribute.cornerRadius);\n } else {\n const cornerRadius =\n this._scene._gantt.parsedOptions.taskBarHoverStyle.cornerRadius ?? taskBarStyle.cornerRadius ?? 0;\n this.hoverBarGroup.setAttribute('cornerRadius', cornerRadius);\n }\n this.hoverBarLeftIcon?.setAttribute('visible', false);\n this.hoverBarRightIcon?.setAttribute('visible', false);\n this.hoverBarProgressHandle?.setAttribute('visibleAll', false);\n\n let leftResizable = true;\n let rightResizable = true;\n let progressAdjustable = true;\n\n const progressField = this._scene._gantt.parsedOptions.progressField;\n const hasProgressField =\n progressField && taskRecord[progressField] !== undefined && taskRecord[progressField] !== null;\n\n if (!hasProgressField) {\n progressAdjustable = false;\n } else if (typeof this._scene._gantt.parsedOptions.taskBarProgressAdjustable === 'function') {\n const arg = {\n index: target.task_index,\n startDate,\n endDate,\n taskRecord,\n ganttInstance: this._scene._gantt\n };\n progressAdjustable = this._scene._gantt.parsedOptions.taskBarProgressAdjustable(arg);\n } else {\n progressAdjustable = this._scene._gantt.parsedOptions.taskBarProgressAdjustable;\n }\n\n if (taskRecord.type === TaskType.MILESTONE) {\n leftResizable = false;\n rightResizable = false;\n progressAdjustable = false;\n } else if (typeof this._scene._gantt.parsedOptions.taskBarResizable === 'function') {\n const arg = {\n index: target.task_index,\n startDate,\n endDate,\n taskRecord,\n ganttInstance: this._scene._gantt\n };\n const resizableResult = this._scene._gantt.parsedOptions.taskBarResizable(arg);\n if (Array.isArray(resizableResult)) {\n [leftResizable, rightResizable] = resizableResult;\n } else {\n leftResizable = resizableResult;\n rightResizable = resizableResult;\n }\n } else if (Array.isArray(this._scene._gantt.parsedOptions.taskBarResizable)) {\n [leftResizable, rightResizable] = this._scene._gantt.parsedOptions.taskBarResizable;\n } else {\n leftResizable = this._scene._gantt.parsedOptions.taskBarResizable;\n rightResizable = this._scene._gantt.parsedOptions.taskBarResizable;\n }\n if (leftResizable) {\n this.hoverBarLeftIcon.setAttribute('visible', true);\n }\n if (rightResizable) {\n this.hoverBarRightIcon.setAttribute('visible', true);\n }\n if (progressAdjustable) {\n this.hoverBarProgressHandle.setAttribute('visibleAll', true);\n }\n if (this.hoverBarLeftIcon) {\n this.hoverBarLeftIcon.setAttribute('x', 0);\n this.hoverBarLeftIcon.setAttribute('y', Math.ceil(height / 10));\n this.hoverBarLeftIcon.setAttribute('width', TASKBAR_HOVER_ICON_WIDTH);\n this.hoverBarLeftIcon.setAttribute('height', height - 2 * Math.ceil(height / 10));\n this.hoverBarRightIcon.setAttribute('x', width - TASKBAR_HOVER_ICON_WIDTH);\n this.hoverBarRightIcon.setAttribute('y', Math.ceil(height / 10));\n this.hoverBarRightIcon.setAttribute('width', TASKBAR_HOVER_ICON_WIDTH);\n this.hoverBarRightIcon.setAttribute('height', height - 2 * Math.ceil(height / 10));\n }\n if (this.hoverBarProgressHandle) {\n const { progress } = this._scene._gantt.getTaskInfoByTaskListIndex(target.task_index, target.sub_task_index);\n const progressX = (width * progress) / 100 - 6;\n this.hoverBarProgressHandle.setAttribute('x', progressX);\n this.hoverBarProgressHandle.setAttribute('y', height - 3); // 让三角形有一半在进度条内\n }\n }\n hideHoverBar() {\n this.hoverBarGroup.setAttribute('visibleAll', false);\n }\n\n createSelectedBorder(\n x: number,\n y: number,\n width: number,\n height: number,\n attachedToTaskBarNode: GanttTaskBarNode,\n showLinkPoint: boolean = false\n ) {\n const record = attachedToTaskBarNode.record;\n const selectedBorder = new Group({\n x,\n y,\n width,\n height,\n // lineWidth: this._scene._gantt.parsedOptions.taskBarSelectedStyle.borderLineWidth,\n pickable: false,\n // cornerRadius: attachedToTaskBarNode.attribute.cornerRadius,\n // fill: false,\n // stroke: this._scene._gantt.parsedOptions.taskBarSelectedStyle.borderColor,\n // shadowColor: this._scene._gantt.parsedOptions.taskBarSelectedStyle.shadowColor,\n // shadowOffsetX: this._scene._gantt.parsedOptions.taskBarSelectedStyle.shadowOffsetX,\n // shadowOffsetY: this._scene._gantt.parsedOptions.taskBarSelectedStyle.shadowOffsetY,\n // shadowBlur: this._scene._gantt.parsedOptions.taskBarSelectedStyle.shadowBlur,\n attachedToTaskBarNode: attachedToTaskBarNode,\n zIndex: 10000\n // angle: attachedToTaskBarNode.attribute.angle,\n // anchor: attachedToTaskBarNode.attribute.anchor\n } as any);\n selectedBorder.name = 'task-bar-select-border';\n this.barContainer.appendChild(selectedBorder);\n this.selectedBorders.push(selectedBorder);\n\n const selectRectBorder = new Group({\n x: 0,\n y: 0,\n width,\n height,\n lineWidth: this._scene._gantt.parsedOptions.taskBarSelectedStyle.borderLineWidth,\n pickable: false,\n cornerRadius: attachedToTaskBarNode.attribute.cornerRadius,\n fill: false,\n stroke: this._scene._gantt.parsedOptions.taskBarSelectedStyle.borderColor,\n shadowColor: this._scene._gantt.parsedOptions.taskBarSelectedStyle.shadowColor,\n shadowOffsetX: this._scene._gantt.parsedOptions.taskBarSelectedStyle.shadowOffsetX,\n shadowOffsetY: this._scene._gantt.parsedOptions.taskBarSelectedStyle.shadowOffsetY,\n shadowBlur: this._scene._gantt.parsedOptions.taskBarSelectedStyle.shadowBlur,\n // attachedToTaskBarNode: attachedToTaskBarNode,\n angle: attachedToTaskBarNode.attribute.angle,\n anchor: [width / 2, height / 2]\n });\n // selectRectBorder.name = 'task-bar-select-border';\n selectedBorder.appendChild(selectRectBorder);\n\n if (showLinkPoint) {\n const isMilestone = record.type === TaskType.MILESTONE;\n const linePointPadding = isMilestone ? 15 : 10;\n const linkPointContainer = new Group({\n x: -linePointPadding,\n y: 0,\n width: 10,\n height: height,\n pickable: true\n });\n const linkPoint = new Circle({\n x: 5,\n y: height / 2,\n radius: this._scene._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.radius,\n fill: this._scene._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.fillColor,\n stroke: this._scene._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.strokeColor,\n lineWidth: this._scene._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.strokeWidth,\n pickable: false\n });\n linkPointContainer.appendChild(linkPoint);\n linkPointContainer.name = 'task-bar-link-point-left';\n selectedBorder.appendChild(linkPointContainer);\n\n const linkPointContainer1 = new Group({\n x: width + (linePointPadding - 10),\n y: 0,\n width: 10,\n height: height,\n pickable: true\n });\n const linkPoint1 = new Circle({\n x: 5,\n y: height / 2,\n radius: this._scene._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.radius,\n fill: this._scene._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.fillColor,\n stroke: this._scene._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.strokeColor,\n lineWidth: this._scene._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.strokeWidth,\n pickable: false,\n pickStrokeBuffer: 10\n });\n linkPointContainer1.appendChild(linkPoint1);\n linkPointContainer1.name = 'task-bar-link-point-right';\n selectedBorder.appendChild(linkPointContainer1);\n }\n }\n removeSelectedBorder() {\n this.selectedBorders.forEach(border => {\n border.delete();\n });\n this.selectedBorders = [];\n }\n removeSecondSelectedBorder() {\n if (this.selectedBorders.length === 2) {\n const secondBorder = this.selectedBorders.pop();\n secondBorder.delete();\n }\n }\n updateCreatingDependencyLine(x1: number, y1: number, x2: number, y2: number) {\n if (this.creatingDependencyLine) {\n this.creatingDependencyLine.delete();\n this.creatingDependencyLine = undefined;\n }\n const line = new Line({\n points: [\n { x: x1, y: y1 },\n { x: x2, y: y2 }\n ],\n stroke: this._scene._gantt.parsedOptions.dependencyLinkLineCreatingStyle.lineColor,\n lineWidth: this._scene._gantt.parsedOptions.dependencyLinkLineCreatingStyle.lineWidth,\n lineDash: this._scene._gantt.parsedOptions.dependencyLinkLineCreatingStyle.lineDash,\n pickable: false\n });\n this.creatingDependencyLine = line;\n this.selectedBorders[0].appendChild(line);\n }\n\n getTaskBarNodeByIndex(index: number, sub_task_index?: number): GanttTaskBarNode {\n let c = this.barContainer.firstChild as GanttTaskBarNode;\n if (!c) {\n return null;\n }\n for (let i = 0; i < this.barContainer.childrenCount; i++) {\n if (\n c.task_index === index &&\n (!isValid(sub_task_index) || (isValid(sub_task_index) && c.sub_task_index === sub_task_index))\n ) {\n return c;\n }\n c = c._next as GanttTaskBarNode;\n }\n return null;\n }\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Group } from '@visactor/vtable/es/vrender';
|
|
2
|
+
import type { ILine } from '@visactor/vtable/es/vrender';
|
|
3
|
+
import type { Scenegraph } from './scenegraph';
|
|
4
|
+
export declare class TaskCreationButton {
|
|
5
|
+
_scene: Scenegraph;
|
|
6
|
+
group: Group;
|
|
7
|
+
lineVertical: ILine;
|
|
8
|
+
lineHorizontal: ILine;
|
|
9
|
+
constructor(scene: Scenegraph);
|
|
10
|
+
createAddButton(): void;
|
|
11
|
+
show(x: number, y: number, width: number, height: number): void;
|
|
12
|
+
hide(): void;
|
|
13
|
+
}
|