tvplanit: Replace TVpWeekView's updown control by 4 speedbuttons for navigation to prev/next month/week, issue #39035.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8388 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2022-08-12 22:21:13 +00:00
parent ea7af462bb
commit a2d1123b51
3 changed files with 80 additions and 84 deletions

View File

@ -1299,30 +1299,22 @@ end;
procedure TVpMonthView.PopupNextMonth(Sender: TObject); procedure TVpMonthView.PopupNextMonth(Sender: TObject);
begin begin
SpinButtonClick(FNextMonthBtn); Date := IncMonth(Date, +1);
end; end;
procedure TVpMonthView.PopupPrevMonth(Sender: TObject); procedure TVpMonthView.PopupPrevMonth(Sender: TObject);
begin begin
SpinButtonClick(FPrevMonthBtn); Date := IncMonth(Date, -1);
end; end;
procedure TVpMonthView.PopupNextYear(Sender: TObject); procedure TVpMonthView.PopupNextYear(Sender: TObject);
//var
// M, D, Y: Word;
begin begin
SpinButtonClick(FNextYearBtn); Date := IncYear(Date, +1);
// DecodeDate(Date, Y, M, D);
// Date := EncodeDate(Y + 1, M, 1);
end; end;
procedure TVpMonthView.PopupPrevYear(Sender: TObject); procedure TVpMonthView.PopupPrevYear(Sender: TObject);
//var
// M, D, Y: Word;
begin begin
SpinButtonClick(FPrevYearBtn); Date := IncYear(Date, -1);
// DecodeDate(Date, Y, M, D);
// Date := EncodeDate(Y - 1, M, 1);
end; end;
procedure TVpMonthView.PopupCustomDate(Sender: TObject); procedure TVpMonthView.PopupCustomDate(Sender: TObject);

View File

@ -59,7 +59,7 @@ uses
{$ELSE} {$ELSE}
Windows, Messages, Windows, Messages,
{$ENDIF} {$ENDIF}
Classes, Graphics, Controls, ComCtrls, ExtCtrls, StdCtrls, Forms, Menus, Classes, Graphics, Controls, ComCtrls, ExtCtrls, StdCtrls, Buttons, Forms, Menus,
VpConst, VpBase, VpBaseDS, VpMisc, VpData, VpSR, VpCanvasUtils, VpDayView; VpConst, VpBase, VpBaseDS, VpMisc, VpData, VpSR, VpCanvasUtils, VpDayView;
type type
@ -158,6 +158,11 @@ type
FAllowDragAndDrop: Boolean; FAllowDragAndDrop: Boolean;
FApplyCategoryInfos: Boolean; FApplyCategoryInfos: Boolean;
FDragDropTransparent: Boolean; FDragDropTransparent: Boolean;
FPrevWeekBtn: TSpeedButton;
FPrevMonthBtn: TSpeedButton;
FNextMonthBtn: TSpeedButton;
FNextWeekBtn: TSpeedButton;
{ event variables } { event variables }
FBeforeEdit: TVpBeforeEditEvent; FBeforeEdit: TVpBeforeEditEvent;
FAfterEdit: TVpAfterEditEvent; FAfterEdit: TVpAfterEditEvent;
@ -173,7 +178,6 @@ type
// wvDayHeadHeight: Integer; // wvDayHeadHeight: Integer;
wvHeaderHeight: Integer; wvHeaderHeight: Integer;
wvStartDate: TDateTime; wvStartDate: TDateTime;
wvSpinButtons: TUpDown;
wvEventList: TList; wvEventList: TList;
wvEventArray: TVpEventArray; wvEventArray: TVpEventArray;
wvWeekdayArray: TVpWeekdayArray; wvWeekdayArray: TVpWeekdayArray;
@ -215,10 +219,10 @@ type
procedure InitializeDefaultPopup; procedure InitializeDefaultPopup;
{ internal methods } { internal methods }
procedure SpinButtonClick(Sender: TObject);
procedure wvEditInPlace(Sender: TObject); procedure wvEditInPlace(Sender: TObject);
procedure wvHookUp; procedure wvHookUp;
procedure wvPopulate; procedure wvPopulate;
procedure wvSpinButtonClick(Sender: TObject; Button: TUDBtnType);
{ event related methods } { event related methods }
procedure EditEvent; procedure EditEvent;
@ -474,17 +478,38 @@ begin
FHeadAttr := TVpWvHeadAttributes.Create(self); FHeadAttr := TVpWvHeadAttributes.Create(self);
FAllDayEventAttr := TVpAllDayEventAttributes.Create(self); FAllDayEventAttr := TVpAllDayEventAttributes.Create(self);
FPrevMonthBtn := TSpeedButton.Create(self);
FPrevMonthBtn.Hint := RSPrevMonth;
FPrevMonthBtn.OnClick := SpinButtonClick;
FPrevWeekBtn := TSpeedButton.Create(self);
FPrevWeekBtn.Hint := RSPrevWeek;
FPrevWeekBtn.OnClick := SpinButtonClick;
FNextWeekBtn := TSpeedButton.Create(self);
FNextWeekBtn.Hint := RSNextWeek;
FNextWeekBtn.OnClick := SpinButtonClick;
FNextMonthBtn := TSpeedButton.Create(self);
FNextMonthBtn.Hint := RSNextMonth;
FNextMonthBtn.OnClick := SpinButtonClick;
// Speedbutton glyphs
{$IFDEF NEW_ICONS}
LoadGlyphFromRCDATA(FPrevMonthBtn.Glyph, 'VpLArrows', 16, 24, 32);
LoadGlyphFromRCDATA(FPrevWeekBtn.Glyph, 'VpLArrow', 16, 24, 32);
LoadGlyphFromRCDATA(FNextWeekBtn.Glyph, 'VpRArrow', 16, 24, 32);
LoadGlyphFromRCDATA(FNextMonthBtn.Glyph, 'VpRArrows', 16, 24, 32);
{$ELSE}
FPrevMonthBtn.Glyph.LoadFromResourceName(HINSTANCE, 'VPLEFTARROWS');
FPrevWeekBtn.Glyph.LoadFromResourceName(HINSTANCE, 'VPLEFTARROW');
FNextWeekBtn.Glyph.LoadFromResourceName(HINSTANCE, 'VPRIGHTARROW');
FNextMonthUpBtn.Glyph.LoadFromResourceName(HINSTANCE, 'VPRIGHTARROWS');
{$ENDIF}
FEventFont := TVpFont.Create(self); FEventFont := TVpFont.Create(self);
FEventFont.Assign(Font); FEventFont.Assign(Font);
FShowEventTime := true; FShowEventTime := true;
wvInLinkHandler := false; wvInLinkHandler := false;
wvEventList := TList.Create; wvEventList := TList.Create;
wvClickTimer := TTimer.Create(self); wvClickTimer := TTimer.Create(self);
wvSpinButtons := TUpDown.Create(self);
wvSpinButtons.OnClick := wvSpinButtonClick;
wvSpinButtons.Orientation := udHorizontal;
wvSpinButtons.Min := -32768;
wvSpinButtons.Max := 32767;
wvHotPoint := Point(0, 0); wvHotPoint := Point(0, 0);
wvDragging := false; wvDragging := false;
wvMouseDownPoint := Point(0, 0); wvMouseDownPoint := Point(0, 0);
@ -547,7 +572,6 @@ begin
FHeadAttr.Free; FHeadAttr.Free;
wvClickTimer.Free; wvClickTimer.Free;
FEventFont.Free; FEventFont.Free;
wvSpinButtons.Free;
wvEventList.Free; wvEventList.Free;
FDefaultPopup.Free; FDefaultPopup.Free;
inherited; inherited;
@ -787,16 +811,18 @@ begin
end; end;
end; end;
end; end;
{=====}
procedure TVpWeekView.wvSpinButtonClick(Sender: TObject; Button: TUDBtnType); procedure TVpWeekView.SpinButtonClick(Sender: TObject);
begin begin
if Button = btNext then if Sender = FPrevWeekBtn then
Date := Date + 7 Date := IncWeek(Date, -1)
else else if Sender = FNextWeekBtn then
Date := Date - 7; Date := IncWeek(Date, +1)
else if Sender = FPrevMonthBtn then
Date := IncMonth(Date, -1)
else if Sender = FNextMonthBtn then
Date := IncMonth(Date, +1);
end; end;
{=====}
procedure TVpWeekView.SetColor(Value: TColor); procedure TVpWeekView.SetColor(Value: TColor);
begin begin
@ -805,7 +831,6 @@ begin
Invalidate; Invalidate;
end; end;
end; end;
{=====}
procedure TVpWeekView.SetActiveEvent(AValue: TVpEvent); procedure TVpWeekView.SetActiveEvent(AValue: TVpEvent);
begin begin
@ -829,7 +854,6 @@ begin
Invalidate; Invalidate;
end; end;
end; end;
{=====}
procedure TVpWeekView.SetLineColor(Value: TColor); procedure TVpWeekView.SetLineColor(Value: TColor);
begin begin
@ -857,7 +881,6 @@ begin
FEventFont.Assign(Value); FEventFont.Assign(Value);
Invalidate; Invalidate;
end; end;
{=====}
procedure TVpWeekView.SetLayout(AValue: TVpWeekviewLayout); procedure TVpWeekView.SetLayout(AValue: TVpWeekviewLayout);
begin begin
@ -874,7 +897,6 @@ begin
Invalidate; Invalidate;
end; end;
end; end;
{=====}
procedure TVpWeekView.SetTimeFormat(Value: TVpTimeFormat); procedure TVpWeekView.SetTimeFormat(Value: TVpTimeFormat);
begin begin
@ -883,7 +905,6 @@ begin
Invalidate; Invalidate;
end; end;
end; end;
{=====}
procedure TVpWeekView.SetActiveDate(Value: TDateTime); procedure TVpWeekView.SetActiveDate(Value: TDateTime);
begin begin
@ -905,7 +926,6 @@ begin
ControlLink.Notify(self, neDateChange, FActiveDate); ControlLink.Notify(self, neDateChange, FActiveDate);
end; end;
end; end;
{=====}
procedure TVpWeekView.SetWeekStartsOn(Value: TVpDayType); procedure TVpWeekView.SetWeekStartsOn(Value: TVpDayType);
begin begin
@ -914,7 +934,6 @@ begin
Invalidate; Invalidate;
end; end;
end; end;
{=====}
{$IFNDEF LCL} {$IFNDEF LCL}
procedure TVpWeekView.WMSize(var Msg: TWMSize); procedure TVpWeekView.WMSize(var Msg: TWMSize);
@ -926,7 +945,6 @@ begin
{ force a repaint on resize } { force a repaint on resize }
Invalidate; Invalidate;
end; end;
{=====}
procedure TVpWeekView.CreateParams(var Params: TCreateParams); procedure TVpWeekView.CreateParams(var Params: TCreateParams);
begin begin
@ -939,14 +957,15 @@ begin
{$ENDIF} {$ENDIF}
end; end;
end; end;
{=====}
procedure TVpWeekView.CreateWnd; procedure TVpWeekView.CreateWnd;
begin begin
inherited; inherited;
wvSpinButtons.Parent := self; FPrevMonthBtn.Parent := Self;
FPrevWeekBtn.Parent := Self;
FNextWeekBtn.Parent := Self;
FNextMonthBtn.Parent := Self;
end; end;
{=====}
procedure TVpWeekView.DoEndDrag(Target: TObject; X, Y: Integer); procedure TVpWeekView.DoEndDrag(Target: TObject; X, Y: Integer);
begin begin
@ -1369,69 +1388,35 @@ procedure TVpWeekView.PopupToday(Sender: TObject);
begin begin
Date := Now; Date := Now;
end; end;
{=====}
procedure TVpWeekView.PopupNextWeek(Sender: TObject); procedure TVpWeekView.PopupNextWeek(Sender: TObject);
begin begin
Date := Date + 7; Date := Date + 7;
end; end;
{=====}
procedure TVpWeekView.PopupPrevWeek(Sender: TObject); procedure TVpWeekView.PopupPrevWeek(Sender: TObject);
begin begin
Date := Date - 7; Date := Date - 7;
end; end;
{=====}
procedure TVpWeekView.PopupNextMonth(Sender: TObject); procedure TVpWeekView.PopupNextMonth(Sender: TObject);
var
M, D, Y: Word;
begin begin
DecodeDate(Date, Y, M, D); Date := IncMonth(Date, 1);
if M = 12 then begin
M := 1;
Y := Y + 1;
end else
M := M + 1;
if (D > DaysInAMonth(Y, M)) then
D := DaysInAMonth(Y, M);
Date := EncodeDate(Y, M, D);
end; end;
{=====}
procedure TVpWeekView.PopupPrevMonth(Sender : TObject); procedure TVpWeekView.PopupPrevMonth(Sender : TObject);
var
M, D, Y: Word;
begin begin
DecodeDate(Date, Y, M, D); Date := IncMonth(Date, -1);
if M = 1 then begin
M := 12;
Y := Y - 1;
end else
M := M - 1;
if (D > DaysInAMonth(Y, M)) then
D := DaysInAMonth(Y, M);
Date := EncodeDate(Y, M, D);
end; end;
{=====}
procedure TVpWeekView.PopupNextYear(Sender: TObject); procedure TVpWeekView.PopupNextYear(Sender: TObject);
var
M, D, Y: Word;
begin begin
DecodeDate(Date, Y, M, D); Date := IncYear(Date, +1);
Date := EncodeDate(Y + 1, M, 1);
end; end;
{=====}
procedure TVpWeekView.PopupPrevYear(Sender: TObject); procedure TVpWeekView.PopupPrevYear(Sender: TObject);
var
M, D, Y : Word;
begin begin
DecodeDate(Date, Y, M, D); Date := IncYear(Date, -1);
Date := EncodeDate(Y - 1, M, 1);
end; end;
procedure TVpWeekView.PopupCustomDate(Sender: TObject); procedure TVpWeekView.PopupCustomDate(Sender: TObject);

View File

@ -600,6 +600,7 @@ var
HeadStrLen: Integer; HeadStrLen: Integer;
weekNo: Integer; weekNo: Integer;
startStr, endStr: String; startStr, endStr: String;
txtStart: Integer;
begin begin
RenderCanvas.Brush.Color := RealHeadAttrColor; RenderCanvas.Brush.Color := RealHeadAttrColor;
RenderCanvas.Font.Assign(TFont(FWeekView.HeadAttributes.Font)); RenderCanvas.Font.Assign(TFont(FWeekView.HeadAttributes.Font));
@ -657,16 +658,34 @@ begin
HeadTextRect.Right - HeadTextRect.Left - TextMargin ); HeadTextRect.Right - HeadTextRect.Left - TextMargin );
end; end;
{ position the spinner } { Position the spinner }
with TVpWeekViewOpener(FWeekView) do begin with TVpWeekViewOpener(FWeekView) do begin
wvSpinButtons.Height := Trunc(wvHeaderHeight * 0.8); FPrevMonthBtn.Height := Trunc(wvHeaderHeight * 0.8);;
wvSpinButtons.Width := wvSpinButtons.Height * 2; FPrevMonthBtn.Width := FPrevMonthBtn.Height;
wvSpinButtons.Left := TextMargin; FPrevMonthBtn.Left := TextMargin;
wvSpinButtons.Top := (wvHeaderHeight - wvSpinButtons.Height) div 2 + 2; FPrevMonthBtn.Top := (wvHeaderHeight - FPrevMonthBtn.Height) div 2 + 2;
FPrevWeekBtn.Height := FPrevMonthBtn.Height;
FPrevWeekBtn.Width := FPrevMonthBtn.Height;
FPrevWeekBtn.Left := FPrevMonthBtn.Left + FPrevMonthBtn.Width;
FPrevWeekBtn.Top := FPrevMonthBtn.Top;
FNextWeekBtn.Height := FPrevMonthBtn.Height;
FNextWeekBtn.Width := FPrevMonthBtn.Height;
FNextWeekBtn.Left := FPrevWeekBtn.Left + FPrevWeekBtn.Width;
FNextWeekBtn.Top := FPrevMonthBtn.Top;
FNextMonthBtn.Height := FPrevMonthBtn.Height;
FNextMonthBtn.Width := FPrevMonthBtn.Height;
FNextMonthBtn.Left := FNextWeekBtn.Left + FNextWeekBtn.Width;
FNextMonthBtn.Top := FPrevMonthBtn.Top;
txtStart := FNextMonthBtn.Left + FNextMonthBtn.Width + TextMargin;
end; end;
TPSTextOut(RenderCanvas, Angle, RenderIn, TPSTextOut(RenderCanvas, Angle, RenderIn,
HeadTextRect.Left + TextMargin, txtStart,
(HeadTextRect.Top + HeadTextRect.Bottom - RenderCanvas.TextHeight('Tg')) div 2, //HeadTextRect.Top + TextMargin, (HeadTextRect.Top + HeadTextRect.Bottom - RenderCanvas.TextHeight('Tg')) div 2,
HeadStr HeadStr
); );
end; end;