tvplanit: Support recurring events in GanttView.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8543 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2022-10-12 16:40:15 +00:00
parent 7630af7726
commit 8f81cf7a6d
4 changed files with 271 additions and 93 deletions

View File

@ -83,7 +83,7 @@ procedure TVpGanttViewPainter.DrawActiveDate;
var
R: TRect;
dayRec: TVpGanttDayRec;
eventRec: TVpGanttEventRec;
eventRec: PVpGanttEventRec;
dx, dy: Integer;
bs: TBrushStyle;
pw: Integer;
@ -103,7 +103,7 @@ begin
end;
R := Rect(
dayRec.Rect.Left, eventRec.EventRect.Top, dayRec.Rect.Right, eventRec.EventRect.Bottom
dayRec.Rect.Left, eventRec^.EventRect.Top, dayRec.Rect.Right, eventRec^.EventRect.Bottom
);
OffsetRect(R, -dx, -dy);
@ -273,7 +273,7 @@ end;
procedure TVpGanttViewPainter.DrawEvents;
var
i: Integer;
eventRec: TVpGanttEventRec;
eventRec: PVpGanttEventRec;
event: TVpEvent;
cat: TVpCategoryInfo;
R: TRect;
@ -302,12 +302,12 @@ begin
for i := 0 to FGanttView.NumEvents-1 do
begin
eventRec := FGanttView.EventRecords[i];
event := eventRec.Event;
if event.EndTime < FGanttView.FirstDate then
event := eventRec^.Event;
if eventRec^.EndTime < FGanttView.FirstDate then
Continue;
if event.StartTime > FGanttView.LastDate + 1then
if eventRec^.StartTime > FGanttView.LastDate + 1then
exit;
R := ScaleRect(eventRec.EventRect);
R := ScaleRect(eventRec^.EventRect);
OffsetRect(R, -dx, -dy);
inc(R.Top, top_margin);
dec(R.Bottom, bottom_margin);
@ -330,7 +330,7 @@ var
x1, x2, y0, y1, y2: Integer;
dx, dy: Integer;
i, n, numEvents: Integer;
eventRec: TVpGanttEventRec;
eventRec: PVpGanttEventRec;
dayRec: TVpGanttDayRec;
monthRec: TVpGanttMonthRec;
R: TRect;
@ -364,7 +364,7 @@ begin
for i := 0 to numEvents - 1 do
begin
eventRec := FGanttView.EventRecords[i];
R := ScaleRect(eventRec.EventRect);
R := ScaleRect(eventRec^.EventRect);
y1 := y0 + R.Bottom;
if y1 >= FScaledTotalColHeaderHeight then
begin
@ -381,7 +381,7 @@ begin
if numEvents > 0 then
begin
eventRec := FGanttView.EventRecords[numEvents-1];
R := ScaleRect(eventRec.EventRect);
R := ScaleRect(eventRec^.EventRect);
y2 := R.Bottom - dy;
n := FGanttView.NumDays;
for i := 0 to n-1 do
@ -477,7 +477,7 @@ var
str: String;
i: Integer;
dy: Integer;
eventRec: TVpGanttEventRec;
eventRec: PVpGanttEventRec;
begin
RenderCanvas.Brush.Color := RealRowHeadAttrColor;
@ -511,7 +511,7 @@ begin
for i := 0 to FGanttView.NumEvents-1 do
begin
eventRec := FGanttView.EventRecords[i];
R := ScaleRect(eventRec.HeadRect);
R := ScaleRect(eventRec^.HeadRect);
OffsetRect(R, 0, -dy);
if R.Top < FScaledTotalColHeaderHeight then
Continue;
@ -537,7 +537,7 @@ begin
RenderCanvas.ClipRect := R;
inc(R.Left, FScaledTextMargin + 2);
P := Point(R.Left, (R.Top + R.Bottom - strH) div 2);
str := eventRec.Caption;
str := eventRec^.Caption;
TPSTextOut(RenderCanvas, Angle, RenderIn, P.X, P.Y, str);
finally
RenderCanvas.Clipping := false;
@ -568,7 +568,7 @@ begin
y1 := RealTop + FScaledTotalColHeaderHeight;
if nEvents > 0 then
begin
R := ScaleRect(EventRecords[nEvents-1].HeadRect);
R := ScaleRect(EventRecords[nEvents-1]^.HeadRect);
y2 := R.Bottom - dy;
end else
y2 := y1;