mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-19 04:02:11 +02:00
TAChart: Move TChartTool and TChartToolset to TATools unit
git-svn-id: trunk@24279 -
This commit is contained in:
parent
d15a3634aa
commit
2b054216fc
@ -101,47 +101,25 @@ type
|
||||
|
||||
TChartToolEvent = procedure (AChart: TChart; AX, AY: Integer) of object;
|
||||
|
||||
{ TChartTool }
|
||||
{ TBasicСhartTool }
|
||||
|
||||
TChartTool = class(TCollectionItem)
|
||||
private
|
||||
FChart: TChart;
|
||||
FEnabled: Boolean;
|
||||
FShift: TShiftState;
|
||||
TBasicChartTool = class(TCollectionItem)
|
||||
protected
|
||||
FChart: TChart;
|
||||
|
||||
procedure Activate;
|
||||
procedure Deactivate;
|
||||
function IsActive: Boolean;
|
||||
procedure MouseDown(APoint: TPoint); virtual;
|
||||
procedure MouseMove(APoint: TPoint); virtual;
|
||||
procedure MouseUp(APoint: TPoint); virtual;
|
||||
protected
|
||||
property Chart: TChart read FChart;
|
||||
public
|
||||
constructor Create(ACollection: TCollection); override;
|
||||
published
|
||||
property Enabled: Boolean read FEnabled write FEnabled default true;
|
||||
property Shift: TShiftState read FShift write FShift;
|
||||
end;
|
||||
|
||||
TChartToolEventId = (evidMouseDown, evidMouseMove, evidMouseUp);
|
||||
|
||||
{ TChartToolset }
|
||||
|
||||
TChartToolset = class(TComponent)
|
||||
private
|
||||
FTools: TCollection;
|
||||
function GetItem(AIndex: Integer): TChartTool;
|
||||
public
|
||||
constructor Create(AOwner: TComponent); override;
|
||||
destructor Destroy; override;
|
||||
{ TBasicChartToolset }
|
||||
|
||||
TBasicChartToolset = class(TComponent)
|
||||
protected
|
||||
function Dispatch(
|
||||
AChart: TChart; AEventId: TChartToolEventId;
|
||||
AShift: TShiftState; APoint: TPoint): Boolean;
|
||||
property Item[AIndex: Integer]: TChartTool read GetItem; default;
|
||||
published
|
||||
property Tools: TCollection read FTools;
|
||||
AShift: TShiftState; APoint: TPoint): Boolean; virtual; abstract;
|
||||
end;
|
||||
|
||||
{ TChartSeriesList }
|
||||
@ -179,11 +157,11 @@ type
|
||||
FOnDrawReticule: TDrawReticuleEvent;
|
||||
FSeries: TChartSeriesList;
|
||||
FTitle: TChartTitle;
|
||||
FToolset: TChartToolset;
|
||||
FToolset: TBasicChartToolset;
|
||||
|
||||
private
|
||||
FActiveToolIndex: Integer;
|
||||
FBuiltinToolset: TChartToolset;
|
||||
FBuiltinToolset: TBasicChartToolset;
|
||||
FClipRect: TRect;
|
||||
FCurrentExtent: TDoubleRect;
|
||||
FIsZoomed: Boolean;
|
||||
@ -200,7 +178,7 @@ type
|
||||
function GetChartWidth: Integer;
|
||||
function GetMargins(ACanvas: TCanvas): TRect;
|
||||
function GetSeriesCount: Integer;
|
||||
function GetToolset: TChartToolset;
|
||||
function GetToolset: TBasicChartToolset;
|
||||
|
||||
procedure SetAxis(AIndex: Integer; AValue: TChartAxis);
|
||||
procedure SetAxisList(AValue: TChartAxisList);
|
||||
@ -216,7 +194,7 @@ type
|
||||
procedure SetMargins(AValue: TChartMargins);
|
||||
procedure SetReticuleMode(const AValue: TReticuleMode);
|
||||
procedure SetTitle(Value: TChartTitle);
|
||||
procedure SetToolset(const AValue: TChartToolset);
|
||||
procedure SetToolset(const AValue: TBasicChartToolset);
|
||||
|
||||
protected
|
||||
procedure Clean(ACanvas: TCanvas; ARect: TRect);
|
||||
@ -271,6 +249,7 @@ type
|
||||
function YImageToGraph(AY: Integer): Double; inline;
|
||||
|
||||
public
|
||||
property ActiveToolIndex: Integer read FActiveToolIndex;
|
||||
property ChartHeight: Integer read GetChartHeight;
|
||||
property ChartWidth: Integer read GetChartWidth;
|
||||
property ClipRect: TRect read FClipRect;
|
||||
@ -302,7 +281,7 @@ type
|
||||
read FReticuleMode write SetReticuleMode default rmNone;
|
||||
property Series: TChartSeriesList read FSeries;
|
||||
property Title: TChartTitle read FTitle write SetTitle;
|
||||
property Toolset: TChartToolset read FToolset write SetToolset;
|
||||
property Toolset: TBasicChartToolset read FToolset write SetToolset;
|
||||
|
||||
published
|
||||
property OnDrawReticule: TDrawReticuleEvent
|
||||
@ -340,7 +319,7 @@ procedure RegisterSeriesClass(ASeriesClass: TSeriesClass; const ACaption: string
|
||||
|
||||
var
|
||||
SeriesClassRegistry: TStringList;
|
||||
OnInitBuiltinTools: procedure (AToolset: TChartToolset);
|
||||
OnInitBuiltinTools: function(AChart: TChart): TBasicChartToolset;
|
||||
|
||||
implementation
|
||||
|
||||
@ -424,9 +403,7 @@ begin
|
||||
FExtent := TChartExtent.Create(Self);
|
||||
FMargins := TChartMargins.Create(Self);
|
||||
|
||||
FBuiltinToolset := TChartToolset.Create(Self);
|
||||
if Assigned(OnInitBuiltinTools) then
|
||||
OnInitBuiltinTools(FBuiltinToolset);
|
||||
FBuiltinToolset := OnInitBuiltinTools(Self);
|
||||
FActiveToolIndex := -1;
|
||||
end;
|
||||
|
||||
@ -702,7 +679,7 @@ begin
|
||||
Invalidate;
|
||||
end;
|
||||
|
||||
procedure TChart.SetToolset(const AValue: TChartToolset);
|
||||
procedure TChart.SetToolset(const AValue: TBasicChartToolset);
|
||||
begin
|
||||
if FToolset = AValue then exit;
|
||||
FToolset := AValue;
|
||||
@ -1033,7 +1010,7 @@ begin
|
||||
Result := FSeries.FList.Count;
|
||||
end;
|
||||
|
||||
function TChart.GetToolset: TChartToolset;
|
||||
function TChart.GetToolset: TBasicChartToolset;
|
||||
begin
|
||||
Result := FToolset;
|
||||
if Result = nil then
|
||||
@ -1252,100 +1229,16 @@ begin
|
||||
Result := TBasicChartSeries(FList.Items[AIndex]);
|
||||
end;
|
||||
|
||||
{ TChartTool }
|
||||
{ TBasicChartTool }
|
||||
|
||||
procedure TChartTool.Activate;
|
||||
procedure TBasicChartTool.Activate;
|
||||
begin
|
||||
Chart.FActiveToolIndex := Index;
|
||||
FChart.FActiveToolIndex := Index;
|
||||
end;
|
||||
|
||||
constructor TChartTool.Create(ACollection: TCollection);
|
||||
procedure TBasicChartTool.Deactivate;
|
||||
begin
|
||||
inherited Create(ACollection);
|
||||
FEnabled := true;
|
||||
end;
|
||||
|
||||
procedure TChartTool.Deactivate;
|
||||
begin
|
||||
Chart.FActiveToolIndex := -1;
|
||||
end;
|
||||
|
||||
function TChartTool.IsActive: Boolean;
|
||||
begin
|
||||
Result := Chart.FActiveToolIndex = Index;
|
||||
end;
|
||||
|
||||
procedure TChartTool.MouseDown(APoint: TPoint);
|
||||
begin
|
||||
Unused(APoint);
|
||||
end;
|
||||
|
||||
procedure TChartTool.MouseMove(APoint: TPoint);
|
||||
begin
|
||||
Unused(APoint);
|
||||
end;
|
||||
|
||||
procedure TChartTool.MouseUp(APoint: TPoint);
|
||||
begin
|
||||
Unused(APoint);
|
||||
end;
|
||||
|
||||
{ TChartToolset }
|
||||
|
||||
constructor TChartToolset.Create(AOwner: TComponent);
|
||||
begin
|
||||
inherited Create(AOwner);
|
||||
FTools := TCollection.Create(TChartTool);
|
||||
end;
|
||||
|
||||
destructor TChartToolset.Destroy;
|
||||
begin
|
||||
FTools.Free;
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
function TChartToolset.Dispatch(
|
||||
AChart: TChart; AEventId: TChartToolEventId;
|
||||
AShift: TShiftState; APoint: TPoint): Boolean;
|
||||
|
||||
procedure DoDispatch(ATool: TChartTool);
|
||||
begin
|
||||
if (ATool.FChart <> nil) and (ATool.FChart <> AChart) then exit;
|
||||
ATool.FChart := AChart;
|
||||
try
|
||||
case AEventId of
|
||||
evidMouseDown: ATool.MouseDown(APoint);
|
||||
evidMouseMove: ATool.MouseMove(APoint);
|
||||
evidMouseUp : ATool.MouseUp (APoint);
|
||||
end;
|
||||
finally
|
||||
if not ATool.IsActive then
|
||||
ATool.FChart := nil;
|
||||
end;
|
||||
end;
|
||||
|
||||
var
|
||||
i: Integer;
|
||||
t: TChartTool;
|
||||
begin
|
||||
i := AChart.FActiveToolIndex;
|
||||
if InRange(i, 0, Tools.Count - 1) then begin
|
||||
DoDispatch(Item[i]);
|
||||
exit(true);
|
||||
end;
|
||||
for i := 0 to Tools.Count - 1 do begin
|
||||
t := Item[i];
|
||||
if t.Enabled and (t.Shift = AShift) then begin
|
||||
DoDispatch(t);
|
||||
exit(true);
|
||||
end;
|
||||
end;
|
||||
Result := false;
|
||||
end;
|
||||
|
||||
function TChartToolset.GetItem(AIndex: Integer): TChartTool;
|
||||
begin
|
||||
Result := Tools.Items[AIndex] as TChartTool;
|
||||
FChart.FActiveToolIndex := -1;
|
||||
end;
|
||||
|
||||
procedure SkipObsoleteChartProperties;
|
||||
|
@ -22,12 +22,51 @@ interface
|
||||
{$H+}
|
||||
|
||||
uses
|
||||
Types,
|
||||
Classes,
|
||||
TAGraph;
|
||||
|
||||
{ TChartZoomDragTool }
|
||||
|
||||
type
|
||||
|
||||
{ TChartTool }
|
||||
|
||||
TChartTool = class(TBasicChartTool)
|
||||
private
|
||||
FEnabled: Boolean;
|
||||
FShift: TShiftState;
|
||||
protected
|
||||
procedure Dispatch(
|
||||
AChart: TChart; AEventId: TChartToolEventId; APoint: TPoint);
|
||||
function IsActive: Boolean;
|
||||
procedure MouseDown(APoint: TPoint); virtual;
|
||||
procedure MouseMove(APoint: TPoint); virtual;
|
||||
procedure MouseUp(APoint: TPoint); virtual;
|
||||
public
|
||||
constructor Create(ACollection: TCollection); override;
|
||||
published
|
||||
property Enabled: Boolean read FEnabled write FEnabled default true;
|
||||
property Shift: TShiftState read FShift write FShift;
|
||||
end;
|
||||
|
||||
{ TChartToolset }
|
||||
|
||||
TChartToolset = class(TBasicChartToolset)
|
||||
private
|
||||
FTools: TCollection;
|
||||
function GetItem(AIndex: Integer): TChartTool;
|
||||
public
|
||||
constructor Create(AOwner: TComponent); override;
|
||||
destructor Destroy; override;
|
||||
|
||||
function Dispatch(
|
||||
AChart: TChart; AEventId: TChartToolEventId;
|
||||
AShift: TShiftState; APoint: TPoint): Boolean; override;
|
||||
property Item[AIndex: Integer]: TChartTool read GetItem; default;
|
||||
published
|
||||
property Tools: TCollection read FTools;
|
||||
end;
|
||||
|
||||
{ TChartZoomDragTool }
|
||||
|
||||
TChartZoomDragTool = class(TChartTool)
|
||||
private
|
||||
FSelectionRect: TRect;
|
||||
@ -40,11 +79,96 @@ type
|
||||
implementation
|
||||
|
||||
uses
|
||||
Classes, TAChartUtils;
|
||||
Math, TAChartUtils;
|
||||
|
||||
procedure InitBuitlinTools(AToolset: TChartToolset);
|
||||
function InitBuitlinTools(AChart: TChart): TBasicChartToolset;
|
||||
begin
|
||||
TChartZoomDragTool.Create((AToolset as TChartToolset).Tools).Shift := [ssLeft];
|
||||
Result := TChartToolset.Create(AChart);
|
||||
TChartZoomDragTool.Create((Result as TChartToolset).Tools).Shift := [ssLeft];
|
||||
end;
|
||||
|
||||
{ TChartTool }
|
||||
|
||||
constructor TChartTool.Create(ACollection: TCollection);
|
||||
begin
|
||||
inherited Create(ACollection);
|
||||
FEnabled := true;
|
||||
end;
|
||||
|
||||
procedure TChartTool.Dispatch(
|
||||
AChart: TChart; AEventId: TChartToolEventId; APoint: TPoint);
|
||||
begin
|
||||
if (FChart <> nil) and (FChart <> AChart) then exit;
|
||||
FChart := AChart;
|
||||
try
|
||||
case AEventId of
|
||||
evidMouseDown: MouseDown(APoint);
|
||||
evidMouseMove: MouseMove(APoint);
|
||||
evidMouseUp : MouseUp (APoint);
|
||||
end;
|
||||
finally
|
||||
if not IsActive then
|
||||
FChart := nil;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TChartTool.IsActive: Boolean;
|
||||
begin
|
||||
Result := FChart.ActiveToolIndex = Index;
|
||||
end;
|
||||
|
||||
procedure TChartTool.MouseDown(APoint: TPoint);
|
||||
begin
|
||||
Unused(APoint);
|
||||
end;
|
||||
|
||||
procedure TChartTool.MouseMove(APoint: TPoint);
|
||||
begin
|
||||
Unused(APoint);
|
||||
end;
|
||||
|
||||
procedure TChartTool.MouseUp(APoint: TPoint);
|
||||
begin
|
||||
Unused(APoint);
|
||||
end;
|
||||
|
||||
{ TChartToolset }
|
||||
|
||||
constructor TChartToolset.Create(AOwner: TComponent);
|
||||
begin
|
||||
inherited Create(AOwner);
|
||||
FTools := TCollection.Create(TChartTool);
|
||||
end;
|
||||
|
||||
destructor TChartToolset.Destroy;
|
||||
begin
|
||||
FTools.Free;
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
function TChartToolset.Dispatch(
|
||||
AChart: TChart; AEventId: TChartToolEventId;
|
||||
AShift: TShiftState; APoint: TPoint): Boolean;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
i := AChart.ActiveToolIndex;
|
||||
if InRange(i, 0, Tools.Count - 1) then begin
|
||||
Item[i].Dispatch(AChart, AEventId, APoint);
|
||||
exit(true);
|
||||
end;
|
||||
for i := 0 to Tools.Count - 1 do
|
||||
with Item[i] do
|
||||
if Enabled and (Shift = AShift) then begin
|
||||
Dispatch(AChart, AEventId, APoint);
|
||||
exit(true);
|
||||
end;
|
||||
Result := false;
|
||||
end;
|
||||
|
||||
function TChartToolset.GetItem(AIndex: Integer): TChartTool;
|
||||
begin
|
||||
Result := Tools.Items[AIndex] as TChartTool;
|
||||
end;
|
||||
|
||||
{ TChartZoomDragTool }
|
||||
@ -59,17 +183,17 @@ end;
|
||||
procedure TChartZoomDragTool.MouseMove(APoint: TPoint);
|
||||
begin
|
||||
if not IsActive then exit;
|
||||
PrepareXorPen(Chart.Canvas);
|
||||
Chart.Canvas.Rectangle(FSelectionRect);
|
||||
PrepareXorPen(FChart.Canvas);
|
||||
FChart.Canvas.Rectangle(FSelectionRect);
|
||||
FSelectionRect.BottomRight := APoint;
|
||||
Chart.Canvas.Rectangle(FSelectionRect);
|
||||
FChart.Canvas.Rectangle(FSelectionRect);
|
||||
end;
|
||||
|
||||
procedure TChartZoomDragTool.MouseUp(APoint: TPoint);
|
||||
begin
|
||||
Unused(APoint);
|
||||
Deactivate;
|
||||
with Chart do begin
|
||||
with FChart do begin
|
||||
PrepareXorPen(Canvas);
|
||||
Canvas.Rectangle(FSelectionRect);
|
||||
ZoomToRect(FSelectionRect);
|
||||
|
Loading…
Reference in New Issue
Block a user