TAChart: Move Pointer property to TBasicPointSeries

git-svn-id: trunk@31432 -
This commit is contained in:
ask 2011-06-28 16:26:52 +00:00
parent 80486ae12e
commit 1a44819dcf
2 changed files with 76 additions and 32 deletions

View File

@ -136,7 +136,7 @@ type
protected
property Styles: TChartStyles read FStyles write SetStyles;
public
procedure Assign(Source: TPersistent); override;
procedure Assign(ASource: TPersistent); override;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
@ -190,15 +190,20 @@ type
FMarkPositions: TLinearMarkPositions;
function GetLabelDirection(AIndex: Integer): TLabelDirection;
procedure SetMarkPositions(AValue: TLinearMarkPositions);
procedure SetPointer(AValue: TSeriesPointer);
procedure SetUseReticule(AValue: Boolean);
protected
FGraphPoints: array of TDoublePoint;
FLoBound: Integer;
FMinXRange: Double;
FPointer: TSeriesPointer;
FUpBound: Integer;
FUseReticule: Boolean;
procedure AfterDrawPointer(
ADrawer: IChartDrawer; AIndex: Integer; const APos: TPoint); virtual;
procedure DrawLabels(ADrawer: IChartDrawer);
procedure DrawPointers(ADrawer: IChartDrawer);
procedure GetLegendItemsRect(AItems: TChartLegendItems; ABrush: TBrush);
function GetXRange(AX: Double; AIndex: Integer): Double;
function GetZeroLevel: Double; virtual;
@ -209,7 +214,12 @@ type
procedure UpdateMinXRange;
property UseReticule: Boolean
read FUseReticule write SetUseReticule default false;
protected
property Pointer: TSeriesPointer read FPointer write SetPointer;
public
destructor Destroy; override;
public
procedure Assign(ASource: TPersistent); override;
function GetNearestPoint(
ADistFunc: TPointDistFunc; const APoint: TPoint;
out AIndex: Integer; out AImg: TPoint; out AValue: TDoublePoint): Boolean;
@ -486,10 +496,10 @@ begin
Source.AfterDraw;
end;
procedure TChartSeries.Assign(Source: TPersistent);
procedure TChartSeries.Assign(ASource: TPersistent);
begin
if Source is TChartSeries then
with TChartSeries(Source) do begin
if ASource is TChartSeries then
with TChartSeries(ASource) do begin
Self.Marks := FMarks;
Self.FOnGetMark := FOnGetMark;
Self.Source := FSource;
@ -740,6 +750,29 @@ end;
{ TBasicPointSeries }
procedure TBasicPointSeries.AfterDrawPointer(
ADrawer: IChartDrawer; AIndex: Integer; const APos: TPoint);
begin
Unused(ADrawer);
Unused(AIndex, APos);
end;
procedure TBasicPointSeries.Assign(ASource: TPersistent);
begin
if ASource is TBasicPointSeries then
with TBasicPointSeries(ASource) do begin
Self.FPointer := Pointer;
Self.FUseReticule := UseReticule;
end;
inherited Assign(ASource);
end;
destructor TBasicPointSeries.Destroy;
begin
FreeAndNil(FPointer);
inherited;
end;
procedure TBasicPointSeries.DrawLabels(ADrawer: IChartDrawer);
var
prevLabelPoly: TPointArray;
@ -782,6 +815,23 @@ begin
end;
end;
procedure TBasicPointSeries.DrawPointers(ADrawer: IChartDrawer);
var
i: Integer;
p: TDoublePoint;
ai: TPoint;
begin
Assert(Pointer <> nil, 'Series pointer');
if not Pointer.Visible then exit;
for i := FLoBound to FUpBound do begin
p := FGraphPoints[i - FLoBound];
if not ParentChart.IsPointInViewPort(p) then continue;
ai := ParentChart.GraphToImage(p);
Pointer.Draw(ADrawer, ai, Source[i]^.Color);
AfterDrawPointer(ADrawer, i, ai);
end;
end;
function TBasicPointSeries.GetLabelDirection(AIndex: Integer): TLabelDirection;
const
DIR: array [Boolean, Boolean] of TLabelDirection =
@ -910,6 +960,12 @@ begin
UpdateParentChart;
end;
procedure TBasicPointSeries.SetPointer(AValue: TSeriesPointer);
begin
FPointer.Assign(AValue);
UpdateParentChart;
end;
procedure TBasicPointSeries.SetUseReticule(AValue: Boolean);
begin
if FUseReticule = AValue then exit;

View File

@ -185,25 +185,25 @@ type
FLinePen: TPen;
FLineType: TLineType;
FOnDrawPointer: TSeriesPointerDrawEvent;
FPointer: TSeriesPointer;
FShowPoints: Boolean;
procedure DrawSingleLineInStack(ADrawer: IChartDrawer; AIndex: Integer);
function GetShowLines: Boolean;
procedure SetLinePen(AValue: TPen);
procedure SetLineType(AValue: TLineType);
procedure SetPointer(Value: TSeriesPointer);
procedure SetSeriesColor(AValue: TColor);
procedure SetShowLines(Value: Boolean);
procedure SetShowPoints(Value: Boolean);
protected
procedure AfterAdd; override;
procedure AfterDrawPointer(
ADrawer: IChartDrawer; AIndex: Integer; const APos: TPoint); override;
procedure GetLegendItems(AItems: TChartLegendItems); override;
function GetSeriesColor: TColor; override;
public
procedure Assign(ASource: TPersistent); override;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
destructor Destroy; override;
procedure Draw(ADrawer: IChartDrawer); override;
public
@ -219,7 +219,7 @@ type
property MarkPositions;
property OnDrawPointer: TSeriesPointerDrawEvent
read FOnDrawPointer write FOnDrawPointer;
property Pointer: TSeriesPointer read FPointer write SetPointer;
property Pointer;
property SeriesColor: TColor
read GetSeriesColor write SetSeriesColor stored false default clBlack;
property ShowLines: Boolean
@ -324,7 +324,16 @@ uses
procedure TLineSeries.AfterAdd;
begin
inherited AfterAdd;
FPointer.SetOwner(FChart);
Pointer.SetOwner(FChart);
end;
procedure TLineSeries.AfterDrawPointer(
ADrawer: IChartDrawer; AIndex: Integer; const APos: TPoint);
var
ic: IChartTCanvasDrawer;
begin
if Supports(ADrawer, IChartTCanvasDrawer, ic) and Assigned(FOnDrawPointer) then
FOnDrawPointer(Self, ic.Canvas, AIndex, APos);
end;
procedure TLineSeries.Assign(ASource: TPersistent);
@ -334,7 +343,6 @@ begin
Self.LinePen := FLinePen;
Self.FLineType := FLineType;
Self.FOnDrawPointer := FOnDrawPointer;
Self.Pointer := FPointer;
Self.FShowPoints := FShowPoints;
end;
inherited Assign(ASource);
@ -359,7 +367,6 @@ end;
destructor TLineSeries.Destroy;
begin
FreeAndNil(FLinePen);
FreeAndNil(FPointer);
inherited;
end;
@ -491,24 +498,11 @@ var
end;
end;
var
i: Integer;
ai: TPoint;
p: TDoublePoint;
ic: IChartTCanvasDrawer;
begin
DrawLines;
DrawLabels(ADrawer);
if ShowPoints and Pointer.Visible then
for i := FLoBound to FUpBound do begin
p := FGraphPoints[i - FLoBound];
if not ParentChart.IsPointInViewPort(p) then continue;
ai := ParentChart.GraphToImage(p);
Pointer.Draw(ADrawer, ai, Source[i]^.Color);
if Supports(ADrawer, IChartTCanvasDrawer, ic) and Assigned(FOnDrawPointer) then
FOnDrawPointer(Self, ic.Canvas, i, ai);
end;
if ShowPoints then
DrawPointers(ADrawer);
end;
procedure TLineSeries.EndUpdate;
@ -567,12 +561,6 @@ begin
UpdateParentChart;
end;
procedure TLineSeries.SetPointer(Value: TSeriesPointer);
begin
FPointer.Assign(Value);
UpdateParentChart;
end;
procedure TLineSeries.SetSeriesColor(AValue: TColor);
begin
FLinePen.Color := AValue;