TAChart: Refresh chart for some changes of TDataPointDistanceTool properties in permanent mode

git-svn-id: trunk@38450 -
This commit is contained in:
ask 2012-08-31 09:50:13 +00:00
parent 2a973ceb54
commit d485227dea

View File

@ -61,6 +61,7 @@ type
// Workaround for FPC 2.6 bug. Remove after migration to 2.8. // Workaround for FPC 2.6 bug. Remove after migration to 2.8.
FAnchors: array of TObject; FAnchors: array of TObject;
FDataPointMode: TDataPointMode; FDataPointMode: TDataPointMode;
FLastChart: TChart;
FMarks: TDataPointDistanceToolMarks; FMarks: TDataPointDistanceToolMarks;
FMeasureMode: TChartDistanceMode; FMeasureMode: TChartDistanceMode;
FOnGetDistanceText: TDataPointGetDistanceTextEvent; FOnGetDistanceText: TDataPointGetDistanceTextEvent;
@ -68,6 +69,7 @@ type
FOptions: TOptions; FOptions: TOptions;
FPointerEnd: TDataPointDistanceToolPointer; FPointerEnd: TDataPointDistanceToolPointer;
FPointerStart: TDataPointDistanceToolPointer; FPointerStart: TDataPointDistanceToolPointer;
procedure Changed(ASender: TObject);
function GetPointEnd: TDataPointTool.TPointRef; inline; function GetPointEnd: TDataPointTool.TPointRef; inline;
function GetPointStart: TDataPointTool.TPointRef; function GetPointStart: TDataPointTool.TPointRef;
procedure SetMarks(AValue: TDataPointDistanceToolMarks); procedure SetMarks(AValue: TDataPointDistanceToolMarks);
@ -86,6 +88,7 @@ type
public public
constructor Create(AOwner: TComponent); override; constructor Create(AOwner: TComponent); override;
destructor Destroy; override; destructor Destroy; override;
function Distance(AUnits: TChartUnits = cuAxis): Double; function Distance(AUnits: TChartUnits = cuAxis): Double;
procedure KeyDown(APoint: TPoint); override; procedure KeyDown(APoint: TPoint); override;
procedure KeyUp(APoint: TPoint); override; procedure KeyUp(APoint: TPoint); override;
@ -150,6 +153,15 @@ end;
{ TDataPointDistanceTool } { TDataPointDistanceTool }
procedure TDataPointDistanceTool.Changed(ASender: TObject);
begin
if not (dpdoPermanent in FOptions) then exit;
if FChart <> nil then
FChart.StyleChanged(ASender)
else if FLastChart <> nil then
FLastChart.StyleChanged(ASender);
end;
constructor TDataPointDistanceTool.Create(AOwner: TComponent); constructor TDataPointDistanceTool.Create(AOwner: TComponent);
begin begin
inherited; inherited;
@ -235,12 +247,12 @@ begin
DrawPointer(PointerEnd, p2); DrawPointer(PointerEnd, p2);
if Marks.Visible then begin if Marks.Visible then begin
flip := (dpdoFlipLabel in Options) and ((a > Pi /2) or (a < -Pi / 2)); flip := (dpdoFlipLabel in Options) and ((a > Pi /2) or (a < -Pi / 2));
if dpdoRotateLabel in Options then Marks.SetAdditionalAngle(
Marks.SetAdditionalAngle(IfThen(flip, Pi - a, -a)); IfThen(dpdoRotateLabel in Options, IfThen(flip, Pi - a, -a), 0));
p1 := (p1 + p2) div 2; p1 := (p1 + p2) div 2;
a += IfThen((dpdoLabelAbove in Options) xor flip, -Pi / 2, Pi / 2); a += IfThen((dpdoLabelAbove in Options) xor flip, -Pi / 2, Pi / 2);
p2 := p1 + RotatePointX(Marks.Distance, a); p2 := p1 + RotatePointX(Marks.Distance, a);
Marks.DrawLabel(FChart.Drawer, p1, p2, GetDistanceText, dummy) Marks.DrawLabel(FChart.Drawer, p1, p2, GetDistanceText, dummy);
end; end;
inherited; inherited;
end; end;
@ -327,16 +339,13 @@ begin
end; end;
procedure TDataPointDistanceTool.MouseUp(APoint: TPoint); procedure TDataPointDistanceTool.MouseUp(APoint: TPoint);
var
ch: TChart;
begin begin
MouseMove(APoint); MouseMove(APoint);
if Assigned(OnMeasure) and (PointStart.GraphPos <> PointEnd.GraphPos) then if Assigned(OnMeasure) and (PointStart.GraphPos <> PointEnd.GraphPos) then
OnMeasure(Self); OnMeasure(Self);
if dpdoPermanent in Options then begin if dpdoPermanent in Options then begin
ch := FChart; FLastChart := FChart;
Deactivate; Deactivate
FChart := ch;
end end
else else
Hide; Hide;
@ -369,11 +378,13 @@ procedure TDataPointDistanceTool.SetMarks(AValue: TDataPointDistanceToolMarks);
begin begin
if FMarks = AValue then exit; if FMarks = AValue then exit;
FMarks.Assign(AValue); FMarks.Assign(AValue);
Changed(Self);
end; end;
procedure TDataPointDistanceTool.SetOptions(AValue: TOptions); procedure TDataPointDistanceTool.SetOptions(AValue: TOptions);
begin begin
if FOptions = AValue then exit; if FOptions = AValue then exit;
Changed(Self);
FOptions := AValue; FOptions := AValue;
end; end;
@ -382,6 +393,7 @@ procedure TDataPointDistanceTool.SetPointerEnd(
begin begin
if FPointerEnd = AValue then exit; if FPointerEnd = AValue then exit;
FPointerEnd.Assign(AValue); FPointerEnd.Assign(AValue);
Changed(Self);
end; end;
procedure TDataPointDistanceTool.SetPointerStart( procedure TDataPointDistanceTool.SetPointerStart(
@ -389,6 +401,7 @@ procedure TDataPointDistanceTool.SetPointerStart(
begin begin
if FPointerStart = AValue then exit; if FPointerStart = AValue then exit;
FPointerStart.Assign(AValue); FPointerStart.Assign(AValue);
Changed(Self);
end; end;
initialization initialization