tvplanit: Move drawing code of TVpContactGrid to separate unit (VpContactGridPainter). Split off some shared code to TVpBasePainter.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@4811 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2016-06-23 11:53:21 +00:00
parent ba2e8bce22
commit 9b8ce7a12b
8 changed files with 2331 additions and 80 deletions

View File

@ -25,9 +25,9 @@ object MainForm: TMainForm
Height = 532 Height = 532
Top = 48 Top = 48
Width = 780 Width = 780
ActivePage = TabEvents ActivePage = TabContacts
Align = alClient Align = alClient
TabIndex = 0 TabIndex = 2
TabOrder = 0 TabOrder = 0
object TabEvents: TTabSheet object TabEvents: TTabSheet
Caption = 'Events' Caption = 'Events'

View File

@ -32,7 +32,7 @@ Portions created by TurboPower Software Inc. are Copyright (C) 2002 TurboPower S
Contributor(s): "/> Contributor(s): "/>
<Version Major="1" Release="4"/> <Version Major="1" Release="4"/>
<Files Count="68"> <Files Count="69">
<Item1> <Item1>
<Filename Value="../source/vpalarmdlg.lfm"/> <Filename Value="../source/vpalarmdlg.lfm"/>
<Type Value="LFM"/> <Type Value="LFM"/>
@ -306,6 +306,10 @@ Contributor(s): "/>
<Filename Value="../source/vpbasepainter.pas"/> <Filename Value="../source/vpbasepainter.pas"/>
<UnitName Value="VpBasePainter"/> <UnitName Value="VpBasePainter"/>
</Item68> </Item68>
<Item69>
<Filename Value="../source/vpcontactgridpainter.pas"/>
<UnitName Value="VpContactGridPainter"/>
</Item69>
</Files> </Files>
<i18n> <i18n>
<EnableI18N Value="True"/> <EnableI18N Value="True"/>

View File

@ -22,6 +22,20 @@ type
StopLine: Integer; StopLine: Integer;
UseGran: TVpGranularity; UseGran: TVpGranularity;
DisplayOnly: Boolean; DisplayOnly: Boolean;
protected
RealWidth: Integer;
RealHeight: Integer;
RealLeft: Integer;
RealRight: Integer;
RealTop: Integer;
RealBottom: Integer;
SaveBrushColor: TColor;
SavePenStyle: TPenStyle;
SavePenColor: TColor;
procedure InitPenBrush; virtual;
procedure SavePenBrush; virtual;
procedure RestorePenBrush; virtual;
procedure SetMeasurements; virtual;
public public
constructor Create(ARenderCanvas: TCanvas); constructor Create(ARenderCanvas: TCanvas);
procedure RenderToCanvas(ARenderIn: TRect; AAngle: TVpRotationAngle; procedure RenderToCanvas(ARenderIn: TRect; AAngle: TVpRotationAngle;
@ -31,6 +45,9 @@ type
implementation implementation
uses
VpCanvasUtils;
{ TBasePainter } { TBasePainter }
constructor TVpBasePainter.Create(ARenderCanvas: TCanvas); constructor TVpBasePainter.Create(ARenderCanvas: TCanvas);
@ -38,6 +55,14 @@ begin
RenderCanvas := ARenderCanvas; RenderCanvas := ARenderCanvas;
end; end;
procedure TVpBasePainter.InitPenBrush;
begin
RenderCanvas.Pen.Style := psSolid;
RenderCanvas.Pen.Width := 1;
RenderCanvas.Pen.Mode := pmCopy;
RenderCanvas.Brush.Style := bsSolid;
end;
procedure TVpBasePainter.RenderToCanvas(ARenderIn: TRect; procedure TVpBasePainter.RenderToCanvas(ARenderIn: TRect;
AAngle: TVpRotationAngle; AScale: Extended; ARenderDate: TDateTime; AAngle: TVpRotationAngle; AScale: Extended; ARenderDate: TDateTime;
AStartLine, AStopLine: Integer; AGranularity: TVpGranularity; AStartLine, AStopLine: Integer; AGranularity: TVpGranularity;
@ -56,4 +81,28 @@ begin
// call the old RenderToCanvas method here... // call the old RenderToCanvas method here...
end; end;
procedure TVpBasePainter.RestorePenBrush;
begin
RenderCanvas.Pen.Style := SavePenStyle;
RenderCanvas.Brush.Color := SaveBrushColor;
RenderCanvas.Pen.Color := SavePenColor;
end;
procedure TVpBasePainter.SavePenBrush;
begin
SavePenStyle := RenderCanvas.Pen.Style;
SaveBrushColor := RenderCanvas.Brush.Color;
SavePenColor := RenderCanvas.Pen.Color;
end;
procedure TVpBasePainter.SetMeasurements;
begin
RealWidth := TPSViewportWidth(Angle, RenderIn);
RealHeight := TPSViewportHeight(Angle, RenderIn);
RealLeft := TPSViewportLeft(Angle, RenderIn);
RealRight := TPSViewportRight(Angle, RenderIn);
RealTop := TPSViewportTop(Angle, RenderIn);
RealBottom := TPSViewportBottom(Angle, RenderIn);
end;
end. end.

View File

@ -267,7 +267,7 @@ type
implementation implementation
uses uses
SysUtils, Math, Forms, Dialogs, VpContactEditDlg; SysUtils, Math, Forms, Dialogs, VpContactEditDlg, VpContactGridPainter;
(*****************************************************************************) (*****************************************************************************)
@ -599,6 +599,20 @@ procedure TVpContactGrid.RenderToCanvas (RenderCanvas : TCanvas;
StopLine : Integer; StopLine : Integer;
UseGran : TVpGranularity; UseGran : TVpGranularity;
DisplayOnly : Boolean); DisplayOnly : Boolean);
var
painter: TVpContactGridPainter;
begin
cgPainting := true;
painter := TVpContactGridPainter.Create(Self, RenderCanvas);
try
painter.RenderToCanvas(RenderIn, Angle, Scale, RenderDate, StartLine,
StopLine, UseGran, DisplayOnly);
finally
painter.Free;
cgPainting := false;
end;
end;
(*
var var
SaveBrushColor : TColor; SaveBrushColor : TColor;
SavePenStyle : TPenStyle; SavePenStyle : TPenStyle;
@ -1811,6 +1825,7 @@ begin
cgPainting := false; cgPainting := false;
end; end;
{=====} {=====}
*)
{ Introduced to support the buttonbar component !!.02} { Introduced to support the buttonbar component !!.02}
function TVpContactGrid.SelectContactByName(const Name: String): Boolean; function TVpContactGrid.SelectContactByName(const Name: String): Boolean;

File diff suppressed because it is too large Load Diff

View File

@ -36,12 +36,6 @@ type
Drawn: Boolean; Drawn: Boolean;
ScrollBarOffset: Integer; ScrollBarOffset: Integer;
EventCount: Integer; EventCount: Integer;
RealWidth: Integer;
RealHeight: Integer;
RealLeft: Integer;
RealRight: Integer;
RealTop: Integer;
RealBottom: Integer;
DayWidth: Integer; DayWidth: Integer;
RealNumDays: Integer; RealNumDays: Integer;
Rgn: HRGN; Rgn: HRGN;
@ -91,9 +85,11 @@ type
procedure DrawRowHeader(R: TRect); procedure DrawRowHeader(R: TRect);
procedure FreeBitmaps; procedure FreeBitmaps;
procedure GetIcons(Event: TVpEvent); procedure GetIcons(Event: TVpEvent);
procedure InitColors;
procedure InitializeEventRectangles; procedure InitializeEventRectangles;
procedure ScaleIcons(EventRect: TRect); procedure ScaleIcons(EventRect: TRect);
procedure SetMeasurements;
procedure SetMeasurements; override;
public public
constructor Create(ADayView: TVpDayview; ARenderCanvas: TCanvas); constructor Create(ADayView: TVpDayview; ARenderCanvas: TCanvas);
@ -1515,28 +1511,8 @@ begin
CustomH := dvBmpCustom.Height; CustomH := dvBmpCustom.Height;
end; end;
procedure TVpDayViewPainter.InitializeEventRectangles; procedure TVpDayViewPainter.InitColors;
var
I : Integer;
begin begin
EventCount := 0;
with TVpDayViewOpener(FDayView) do
for I := 0 to pred(Length(dvEventArray)) do begin
dvEventArray[I].Rec.Left := -1;
dvEventArray[I].Rec.Top := -1;
dvEventArray[I].Rec.Right := -1;
dvEventArray[I].Rec.Bottom := -1;
dvEventArray[I].Event := nil;
end;
end;
procedure TVpDayViewPainter.RenderToCanvas(ARenderIn: TRect;
AAngle: TVpRotationAngle; AScale: Extended; ARenderDate: TDateTime;
AStartLine, AStopLine: Integer; AUseGran: TVpGranularity; ADisplayOnly: Boolean);
begin
inherited;
// Here begins the original routine...
if DisplayOnly then begin if DisplayOnly then begin
BevelShadow := clBlack; BevelShadow := clBlack;
BevelHighlight := clBlack; BevelHighlight := clBlack;
@ -1568,6 +1544,33 @@ begin
ADEventAttrBkgColor := FDayView.AllDayEventAttributes.EventBackgroundColor; ADEventAttrBkgColor := FDayView.AllDayEventAttributes.EventBackgroundColor;
ADEventBorderColor := FDayView.AllDayEventAttributes.EventBorderColor; ADEventBorderColor := FDayView.AllDayEventAttributes.EventBorderColor;
end; end;
end;
procedure TVpDayViewPainter.InitializeEventRectangles;
var
I : Integer;
begin
EventCount := 0;
with TVpDayViewOpener(FDayView) do
for I := 0 to pred(Length(dvEventArray)) do begin
dvEventArray[I].Rec.Left := -1;
dvEventArray[I].Rec.Top := -1;
dvEventArray[I].Rec.Right := -1;
dvEventArray[I].Rec.Bottom := -1;
dvEventArray[I].Event := nil;
end;
end;
procedure TVpDayViewPainter.RenderToCanvas(ARenderIn: TRect;
AAngle: TVpRotationAngle; AScale: Extended; ARenderDate: TDateTime;
AStartLine, AStopLine: Integer; AUseGran: TVpGranularity; ADisplayOnly: Boolean);
begin
inherited;
// Here begins the original routine...
InitColors;
SavePenBrush;
InitPenBrush;
SetMeasurements; SetMeasurements;
@ -1579,11 +1582,6 @@ begin
else else
ScrollBarOffset := 14; ScrollBarOffset := 14;
// dvPainting := true; -- moved to TVpDayView
SavePenStyle := RenderCanvas.Pen.Style;
SaveBrushColor := RenderCanvas.Brush.Color;
SavePenColor := RenderCanvas.Pen.Color;
Rgn := CreateRectRgn(RenderIn.Left, RenderIn.Top, RenderIn.Right, RenderIn.Bottom); Rgn := CreateRectRgn(RenderIn.Left, RenderIn.Top, RenderIn.Right, RenderIn.Bottom);
try try
SelectClipRgn(RenderCanvas.Handle, Rgn); SelectClipRgn(RenderCanvas.Handle, Rgn);
@ -1730,15 +1728,12 @@ begin
end; end;
{ Reinstate RenderCanvas settings } { Reinstate RenderCanvas settings }
RenderCanvas.Pen.Style := SavePenStyle; RestorePenBrush;
RenderCanvas.Brush.Color := SaveBrushColor;
RenderCanvas.Pen.Color := SavePenColor;
finally finally
SelectClipRgn(RenderCanvas.Handle, 0); SelectClipRgn(RenderCanvas.Handle, 0);
DeleteObject(Rgn); DeleteObject(Rgn);
end; end;
// dvPainting := false; -- moved to TVpDayView
end; end;
procedure TVpDayViewPainter.ScaleIcons(EventRect: TRect); procedure TVpDayViewPainter.ScaleIcons(EventRect: TRect);
@ -1774,12 +1769,7 @@ end;
procedure TVpDayViewPainter.SetMeasurements; procedure TVpDayViewPainter.SetMeasurements;
begin begin
RealWidth := TPSViewportWidth(Angle, RenderIn); inherited;
RealHeight := TPSViewportHeight(Angle, RenderIn);
RealLeft := TPSViewportLeft(Angle, RenderIn);
RealRight := TPSViewportRight(Angle, RenderIn);
RealTop := TPSViewportTop(Angle, RenderIn);
RealBottom := TPSViewportBottom(Angle, RenderIn);
TVpDayViewOpener(FDayView).dvCalcColHeadHeight(Scale); TVpDayViewOpener(FDayView).dvCalcColHeadHeight(Scale);
end; end;

View File

@ -136,9 +136,9 @@ procedure StripString(var Str: string);
begin begin
if Length (Str) < 1 then if Length (Str) < 1 then
Exit; Exit;
while not (Str[1] in ['A'..'Z', 'a'..'z', '0'..'9']) do while (Length(Str) > 0) and (not (Str[1] in ['A'..'Z', 'a'..'z', '0'..'9'])) do
delete(Str, 1, 1); delete(Str, 1, 1);
while not (Str[Length(Str)] in ['A'..'Z', 'a'..'z', '0'..'9']) do while (Length(Str) > 0) and (not (Str[Length(Str)] in ['A'..'Z', 'a'..'z', '0'..'9'])) do
delete(Str, Length(Str), 1); delete(Str, Length(Str), 1);
end; end;
{=====} {=====}

View File

@ -20,12 +20,6 @@ type
DayRectHeight: Integer; DayRectHeight: Integer;
StrLn: Integer; StrLn: Integer;
StartDate: TDateTime; StartDate: TDateTime;
RealWidth: Integer;
RealHeight: Integer;
RealLeft: Integer;
RealRight: Integer;
RealTop: Integer;
RealBottom: Integer;
ADEventsRect: TRect; ADEventsRect: TRect;
Rgn: HRGN; Rgn: HRGN;
DotDotDotColor: TColor; DotDotDotColor: TColor;
@ -47,7 +41,8 @@ type
procedure DrawBorders; procedure DrawBorders;
procedure DrawDays; procedure DrawDays;
procedure DrawHeader; procedure DrawHeader;
procedure SetMeasurements; procedure InitColors;
procedure SetMeasurements; override;
public public
constructor Create(AWeekView: TVpWeekView; ARenderCanvas: TCanvas); constructor Create(AWeekView: TVpWeekView; ARenderCanvas: TCanvas);
@ -575,13 +570,8 @@ begin
); );
end; end;
procedure TVpWeekViewPainter.RenderToCanvas(ARenderIn: TRect; procedure TVpWeekViewPainter.InitColors;
AAngle: TVpRotationAngle; AScale: Extended; ARenderDate: TDateTime;
AStartLine, AStopLine: Integer; AUseGran: TVpGranularity; ADisplayOnly: Boolean);
begin begin
inherited;
// Here begins the original routine...
if DisplayOnly then begin if DisplayOnly then begin
BevelHighlightColor := clBlack; BevelHighlightColor := clBlack;
BevelShadowColor := clBlack; BevelShadowColor := clBlack;
@ -608,16 +598,17 @@ begin
ADEventBorderColor := FWeekView.AllDayEventAttributes.EventBorderColor; ADEventBorderColor := FWeekView.AllDayEventAttributes.EventBorderColor;
end; end;
DotDotDotColor := clBlack; DotDotDotColor := clBlack;
end;
// wvPainting := true; --- moved to TVpWeekView procedure TVpWeekViewPainter.RenderToCanvas(ARenderIn: TRect;
SavePenStyle := RenderCanvas.Pen.Style; AAngle: TVpRotationAngle; AScale: Extended; ARenderDate: TDateTime;
SaveBrushColor := RenderCanvas.Brush.Color; AStartLine, AStopLine: Integer; AUseGran: TVpGranularity; ADisplayOnly: Boolean);
SavePenColor := RenderCanvas.Pen.Color; begin
inherited;
RenderCanvas.Pen.Style := psSolid; InitColors;
RenderCanvas.Pen.Width := 1; SavePenBrush;
RenderCanvas.Pen.Mode := pmCopy; InitPenBrush;
RenderCanvas.Brush.Style := bsSolid;
Rgn := CreateRectRgn(RenderIn.Left, RenderIn.Top, RenderIn.Right, RenderIn.Bottom); Rgn := CreateRectRgn(RenderIn.Left, RenderIn.Top, RenderIn.Right, RenderIn.Bottom);
try try
@ -644,20 +635,12 @@ begin
DeleteObject(Rgn); DeleteObject(Rgn);
end; end;
RenderCanvas.Pen.Style := SavePenStyle; RestorePenBrush;
RenderCanvas.Brush.Color := SaveBrushColor;
RenderCanvas.Pen.Color := SavePenColor;
// wvPainting := false; --- moved to TVpWeekView
end; end;
procedure TVpWeekViewPainter.SetMeasurements; procedure TVpWeekViewPainter.SetMeasurements;
begin begin
RealWidth := TPSViewportWidth(Angle, RenderIn); inherited;
RealHeight := TPSViewportHeight(Angle, RenderIn);
RealLeft := TPSViewportLeft(Angle, RenderIn);
RealRight := TPSViewportRight(Angle, RenderIn);
RealTop := TPSViewportTop(Angle, RenderIn);
RealBottom := TPSViewportBottom(Angle, RenderIn);
with TVpWeekViewOpener(FWeekView) do with TVpWeekViewOpener(FWeekView) do
if RenderDate = 0 then if RenderDate = 0 then