Added hot-tracking on flourish layer
Fixed stacking issue with more than two layers
This commit is contained in:
parent
d05d22afe7
commit
fee71b651c
75
src/project/flourish-canvas.js
Normal file
75
src/project/flourish-canvas.js
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
import Canvas from '../references/canvas.js';
|
||||||
|
|
||||||
|
|
||||||
|
class FlourishCanvas extends Canvas {
|
||||||
|
Options = null;
|
||||||
|
Debug = false;
|
||||||
|
|
||||||
|
XPos = -1
|
||||||
|
|
||||||
|
|
||||||
|
constructor(el) {
|
||||||
|
super(el);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
get HeaderHeight() {
|
||||||
|
const a = this;
|
||||||
|
|
||||||
|
return a.Options.HeaderRow.Height[0] + a.Options.HeaderRow.Height[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Load() {
|
||||||
|
const a = this;
|
||||||
|
|
||||||
|
a.el.addEventListener('mousemove', function (e) {
|
||||||
|
// Hottracking
|
||||||
|
if (a.Options.EnableHotTracking) {
|
||||||
|
const point = { X: e.offsetX, Y: e.offsetY };
|
||||||
|
|
||||||
|
if (a.Debug) {
|
||||||
|
console.log(point);
|
||||||
|
}
|
||||||
|
|
||||||
|
a.XPos = point.X;
|
||||||
|
|
||||||
|
a.Invalidate();
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Invalidate() {
|
||||||
|
const a = this;
|
||||||
|
|
||||||
|
if (a.Options == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.Clear();
|
||||||
|
|
||||||
|
if (a.XPos < 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.#drawVerticalLine(a.XPos);
|
||||||
|
}
|
||||||
|
|
||||||
|
#drawVerticalLine(x) {
|
||||||
|
const a = this;
|
||||||
|
const h = this.Height - a.HeaderHeight;
|
||||||
|
|
||||||
|
if (a.Options.HotTrackLine.Width > 1) {
|
||||||
|
x += Math.half(a.Options.HotTrackLine.Width);
|
||||||
|
}
|
||||||
|
|
||||||
|
a.DrawVerticalLine(x, a.HeaderHeight, h, a.Options.HotTrackLine.Colour, { LineWidth: a.Options.HotTrackLine.Width });
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export default FlourishCanvas;
|
@ -1,6 +1,7 @@
|
|||||||
import CanvasContainer from '../references/canvas-container.js';
|
import CanvasContainer from '../references/canvas-container.js';
|
||||||
import BackgroundCanvas from './background-canvas.js';
|
import BackgroundCanvas from './background-canvas.js';
|
||||||
import ForegroundCanvas from './foreground-canvas.js';
|
import ForegroundCanvas from './foreground-canvas.js';
|
||||||
|
import FlourishCanvas from './flourish-canvas.js';
|
||||||
|
|
||||||
import './project.scss';
|
import './project.scss';
|
||||||
|
|
||||||
@ -44,11 +45,19 @@ class GanttChart {
|
|||||||
|
|
||||||
a.CanvasContainer.Layer.push(foreCanvasLayer);
|
a.CanvasContainer.Layer.push(foreCanvasLayer);
|
||||||
|
|
||||||
|
// Add flourish canvas layer
|
||||||
|
const layer3 = a.CanvasContainer.AddLayer();
|
||||||
|
|
||||||
|
const flourishCanvasLayer = new FlourishCanvas(layer3);
|
||||||
|
flourishCanvasLayer.Options = a.Options;
|
||||||
|
|
||||||
|
a.CanvasContainer.Layer.push(flourishCanvasLayer);
|
||||||
|
|
||||||
|
// Invalidate every canvas
|
||||||
a.CanvasContainer.Invalidate();
|
a.CanvasContainer.Invalidate();
|
||||||
|
|
||||||
Document.removeClass(a.CanvasContainer.FlowContainer, "border");
|
Document.removeClass(a.CanvasContainer.FlowContainer, "border");
|
||||||
Document.addClass(a.CanvasContainer.FlowContainer, "gantt-chart");
|
Document.addClass(a.CanvasContainer.FlowContainer, "gantt-chart");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -91,11 +100,16 @@ class GanttChart {
|
|||||||
Width: 1,
|
Width: 1,
|
||||||
ArrowSize: 5
|
ArrowSize: 5
|
||||||
},
|
},
|
||||||
|
HotTrackLine: {
|
||||||
|
Colour: "#D04437",
|
||||||
|
Width: 1
|
||||||
|
},
|
||||||
DateFont: "7pt sans-serif",
|
DateFont: "7pt sans-serif",
|
||||||
DateForeColour: "#636363",
|
DateForeColour: "#636363",
|
||||||
BorderWidth: 1,
|
BorderWidth: 1,
|
||||||
BorderColour: "#B8B8B8",
|
BorderColour: "#B8B8B8",
|
||||||
BorderDashPattern: [1, 1],
|
BorderDashPattern: [1, 1],
|
||||||
|
EnableHotTracking: true,
|
||||||
MinimumRowCount: 6,
|
MinimumRowCount: 6,
|
||||||
ShowDateLines: true,
|
ShowDateLines: true,
|
||||||
ShowStartDayOfWeekLine: true,
|
ShowStartDayOfWeekLine: true,
|
||||||
@ -143,6 +157,7 @@ class GanttChart {
|
|||||||
// Invalidate canvas (background, foreground)
|
// Invalidate canvas (background, foreground)
|
||||||
a.CanvasContainer.Layer[0].Load(new Date(), a.Duration, a.StartOfWeek, a.Tasks.length);
|
a.CanvasContainer.Layer[0].Load(new Date(), a.Duration, a.StartOfWeek, a.Tasks.length);
|
||||||
a.CanvasContainer.Layer[1].Load(new Date(), a.Tasks);
|
a.CanvasContainer.Layer[1].Load(new Date(), a.Tasks);
|
||||||
|
a.CanvasContainer.Layer[2].Load();
|
||||||
|
|
||||||
a.Invalidate();
|
a.Invalidate();
|
||||||
}
|
}
|
||||||
@ -177,6 +192,7 @@ class GanttChart {
|
|||||||
// Invalidate canvas (background, foreground)
|
// Invalidate canvas (background, foreground)
|
||||||
a.CanvasContainer.Layer[0].Load(new Date(project.StartDate), project.Duration, project.Project.StartOfWeek, a.Tasks.length);
|
a.CanvasContainer.Layer[0].Load(new Date(project.StartDate), project.Duration, project.Project.StartOfWeek, a.Tasks.length);
|
||||||
a.CanvasContainer.Layer[1].Load(new Date(project.StartDate), a.Tasks);
|
a.CanvasContainer.Layer[1].Load(new Date(project.StartDate), a.Tasks);
|
||||||
|
a.CanvasContainer.Layer[2].Load();
|
||||||
|
|
||||||
a.Invalidate();
|
a.Invalidate();
|
||||||
}
|
}
|
||||||
|
@ -207,6 +207,8 @@ class CanvasContainer {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let offsetTop = 0;
|
||||||
|
|
||||||
a.Layer.forEach((e, i) => {
|
a.Layer.forEach((e, i) => {
|
||||||
if (i <= 0) {
|
if (i <= 0) {
|
||||||
return;
|
return;
|
||||||
@ -215,7 +217,9 @@ class CanvasContainer {
|
|||||||
// Correct positon because of position-relative to keep container overflow working
|
// Correct positon because of position-relative to keep container overflow working
|
||||||
const h = Document.getHeight(a.Layer[(i - 1)].el);
|
const h = Document.getHeight(a.Layer[(i - 1)].el);
|
||||||
|
|
||||||
a.Layer[i].el.style.top = "-" + h + "px";
|
offsetTop += h;
|
||||||
|
|
||||||
|
a.Layer[i].el.style.top = "-" + offsetTop + "px";
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user