mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-18 13:39:11 +02:00
TAChart: Add TChartTool.Draw and TChartTool.DrawingMode. Publish DrawingMode property for TZoomDragTool.
git-svn-id: trunk@31964 -
This commit is contained in:
parent
cba541db5e
commit
f1e69d3d5f
@ -111,6 +111,7 @@ type
|
||||
function Dispatch(
|
||||
AChart: TChart; AEventId: TChartToolEventId;
|
||||
AShift: TShiftState; APoint: TPoint): Boolean; virtual; abstract; overload;
|
||||
procedure Draw(AChart: TChart; ADrawer: IChartDrawer); virtual; abstract;
|
||||
end;
|
||||
|
||||
TBasicChartSeriesEnumerator = class(TFPListEnumerator)
|
||||
@ -297,6 +298,7 @@ type
|
||||
function SaveToImage(AClass: TRasterImageClass): TRasterImage;
|
||||
procedure StyleChanged(Sender: TObject); override;
|
||||
procedure ZoomFull; override;
|
||||
property Drawer: IChartDrawer read FDrawer;
|
||||
|
||||
public // Coordinate conversion
|
||||
function GraphToImage(const AGraphPoint: TDoublePoint): TPoint;
|
||||
@ -746,6 +748,7 @@ begin
|
||||
ldd.FItems.Free;
|
||||
end;
|
||||
DrawReticule(ADrawer);
|
||||
GetToolset.Draw(Self, ADrawer);
|
||||
|
||||
for s in Series do
|
||||
s.AfterDraw;
|
||||
|
@ -23,7 +23,7 @@ interface
|
||||
|
||||
uses
|
||||
Classes, Controls, CustomTimer, Types,
|
||||
TAChartUtils, TAGraph, TATypes;
|
||||
TAChartUtils, TADrawUtils, TAGraph, TATypes;
|
||||
|
||||
type
|
||||
|
||||
@ -32,11 +32,14 @@ type
|
||||
|
||||
TChartToolEvent = procedure (ATool: TChartTool; APoint: TPoint) of object;
|
||||
|
||||
TChartToolDrawingMode = (tdmDefault, tdmNormal, tdmXor);
|
||||
|
||||
{ TChartTool }
|
||||
|
||||
TChartTool = class(TBasicChartTool)
|
||||
strict private
|
||||
FActiveCursor: TCursor;
|
||||
FDrawingMode: TChartToolDrawingMode;
|
||||
FEnabled: Boolean;
|
||||
FEventsAfter: array [TChartToolEventId] of TChartToolEvent;
|
||||
FEventsBefore: array [TChartToolEventId] of TChartToolEvent;
|
||||
@ -48,10 +51,13 @@ type
|
||||
procedure SetActiveCursor(AValue: TCursor);
|
||||
procedure SetAfterEvent(AIndex: Integer; AValue: TChartToolEvent);
|
||||
procedure SetBeforeEvent(AIndex: Integer; AValue: TChartToolEvent);
|
||||
procedure SetDrawingMode(AValue: TChartToolDrawingMode);
|
||||
procedure SetToolset(AValue: TChartToolset);
|
||||
protected
|
||||
procedure ReadState(Reader: TReader); override;
|
||||
procedure SetParentComponent(AParent: TComponent); override;
|
||||
property DrawingMode: TChartToolDrawingMode
|
||||
read FDrawingMode write SetDrawingMode default tdmDefault;
|
||||
strict protected
|
||||
procedure Activate; override;
|
||||
procedure Deactivate; override;
|
||||
@ -68,13 +74,15 @@ type
|
||||
public
|
||||
constructor Create(AOwner: TComponent); override;
|
||||
destructor Destroy; override;
|
||||
public
|
||||
function GetParentComponent: TComponent; override;
|
||||
function HasParent: Boolean; override;
|
||||
public
|
||||
procedure Assign(Source: TPersistent); override;
|
||||
procedure Dispatch(
|
||||
AChart: TChart; AEventId: TChartToolEventId; APoint: TPoint); overload;
|
||||
function GetParentComponent: TComponent; override;
|
||||
procedure Draw(AChart: TChart; ADrawer: IChartDrawer); virtual;
|
||||
procedure Handled;
|
||||
function HasParent: Boolean; override;
|
||||
|
||||
property ActiveCursor: TCursor
|
||||
read FActiveCursor write SetActiveCursor default crDefault;
|
||||
@ -137,6 +145,7 @@ type
|
||||
function Dispatch(
|
||||
AChart: TChart; AEventId: TChartToolEventId;
|
||||
AShift: TShiftState; APoint: TPoint): Boolean; override;
|
||||
procedure Draw(AChart: TChart; ADrawer: IChartDrawer); override;
|
||||
property Item[AIndex: Integer]: TChartTool read GetItem; default;
|
||||
published
|
||||
property Tools: TChartTools read FTools;
|
||||
@ -185,7 +194,10 @@ type
|
||||
procedure MouseDown(APoint: TPoint); override;
|
||||
procedure MouseMove(APoint: TPoint); override;
|
||||
procedure MouseUp(APoint: TPoint); override;
|
||||
public
|
||||
procedure Draw(AChart: TChart; ADrawer: IChartDrawer); override;
|
||||
published
|
||||
property DrawingMode;
|
||||
property Proportional: Boolean
|
||||
read GetProportional write SetProportional stored false default false;
|
||||
deprecated;
|
||||
@ -566,6 +578,12 @@ begin
|
||||
ev(Self, APoint);
|
||||
end;
|
||||
|
||||
procedure TChartTool.Draw(AChart: TChart; ADrawer: IChartDrawer);
|
||||
begin
|
||||
Unused(ADrawer);
|
||||
FChart := AChart;
|
||||
end;
|
||||
|
||||
function TChartTool.GetAfterEvent(AIndex: Integer): TChartToolEvent;
|
||||
begin
|
||||
Result := FEventsAfter[TChartToolEventId(AIndex)];
|
||||
@ -669,6 +687,12 @@ begin
|
||||
FChart.Cursor := ActiveCursor;
|
||||
end;
|
||||
|
||||
procedure TChartTool.SetDrawingMode(AValue: TChartToolDrawingMode);
|
||||
begin
|
||||
if FDrawingMode = AValue then exit;
|
||||
FDrawingMode := AValue;
|
||||
end;
|
||||
|
||||
procedure TChartTool.SetIndex(AValue: Integer);
|
||||
begin
|
||||
Toolset.Tools.Move(Index, EnsureRange(AValue, 0, Toolset.Tools.Count - 1));
|
||||
@ -749,6 +773,14 @@ begin
|
||||
Result := false;
|
||||
end;
|
||||
|
||||
procedure TChartToolset.Draw(AChart: TChart; ADrawer: IChartDrawer);
|
||||
var
|
||||
t: TChartTool;
|
||||
begin
|
||||
for t in Tools do
|
||||
t.Draw(AChart, ADrawer);
|
||||
end;
|
||||
|
||||
procedure TChartToolset.GetChildren(Proc: TGetChildProc; Root: TComponent);
|
||||
var
|
||||
t: TChartTool;
|
||||
@ -849,6 +881,19 @@ end;
|
||||
|
||||
{ TZoomDragTool }
|
||||
|
||||
procedure TZoomDragTool.Draw(AChart: TChart; ADrawer: IChartDrawer);
|
||||
begin
|
||||
if not IsActive or IsAnimating then exit;
|
||||
inherited;
|
||||
case DrawingMode of
|
||||
tdmDefault, tdmXor:
|
||||
PrepareXorPen(FChart.Canvas);
|
||||
tdmNormal:
|
||||
FChart.Drawer.PrepareSimplePen($0);
|
||||
end;
|
||||
FChart.Drawer.Rectangle(FSelectionRect);
|
||||
end;
|
||||
|
||||
function TZoomDragTool.GetProportional: Boolean;
|
||||
begin
|
||||
Result := RatioLimit = zrlProportional;
|
||||
@ -866,10 +911,18 @@ end;
|
||||
procedure TZoomDragTool.MouseMove(APoint: TPoint);
|
||||
begin
|
||||
if not IsActive or IsAnimating then exit;
|
||||
PrepareXorPen(FChart.Canvas);
|
||||
FChart.Canvas.Rectangle(FSelectionRect);
|
||||
FSelectionRect.BottomRight := APoint;
|
||||
FChart.Canvas.Rectangle(FSelectionRect);
|
||||
case DrawingMode of
|
||||
tdmDefault, tdmXor: begin
|
||||
PrepareXorPen(FChart.Canvas);
|
||||
FChart.Canvas.Rectangle(FSelectionRect);
|
||||
FSelectionRect.BottomRight := APoint;
|
||||
FChart.Canvas.Rectangle(FSelectionRect);
|
||||
end;
|
||||
tdmNormal: begin
|
||||
FSelectionRect.BottomRight := APoint;
|
||||
FChart.StyleChanged(Self);
|
||||
end;
|
||||
end;
|
||||
Handled;
|
||||
end;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user