mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-09 15:16:04 +02:00
TAChart: Do not crash after removing a referenced chart source.
git-svn-id: trunk@20158 -
This commit is contained in:
parent
39ae87f65f
commit
28d862e408
@ -353,6 +353,7 @@ type
|
||||
FSeries: TChartSeries;
|
||||
public
|
||||
constructor Create(ASeries: TChartSeries);
|
||||
procedure Forget; override;
|
||||
procedure Notify; override;
|
||||
end;
|
||||
|
||||
@ -363,6 +364,12 @@ begin
|
||||
FSeries := ASeries;
|
||||
end;
|
||||
|
||||
procedure TChartSeriesListener.Forget;
|
||||
begin
|
||||
inherited Forget;
|
||||
FSeries.FSource := nil;
|
||||
end;
|
||||
|
||||
procedure TChartSeriesListener.Notify;
|
||||
begin
|
||||
FSeries.UpdateParentChart;
|
||||
@ -713,13 +720,11 @@ end;
|
||||
procedure TLineSeries.SetXValue(AIndex: Integer; AValue: Double);
|
||||
begin
|
||||
ListSource.SetXValue(AIndex, AValue);
|
||||
UpdateParentChart;
|
||||
end;
|
||||
|
||||
procedure TLineSeries.SetYValue(AIndex: Integer; AValue: Double);
|
||||
begin
|
||||
ListSource.SetXValue(AIndex, AValue);
|
||||
UpdateParentChart;
|
||||
ListSource.SetYValue(AIndex, AValue);
|
||||
end;
|
||||
|
||||
function TLineSeries.GetXImgValue(AIndex: Integer): Integer;
|
||||
|
@ -24,8 +24,9 @@ type
|
||||
private
|
||||
FIsListening: Boolean;
|
||||
public
|
||||
procedure Forget; virtual;
|
||||
procedure Notify; virtual; abstract;
|
||||
property IsListening: Boolean read FIsListening write FIsListening;
|
||||
property IsListening: Boolean read FIsListening;
|
||||
end;
|
||||
|
||||
{ TCustomChartSource }
|
||||
@ -193,7 +194,7 @@ var
|
||||
i: Integer;
|
||||
begin
|
||||
for i := 0 to High(FListeners) do
|
||||
FListeners[i].IsListening := false;
|
||||
FListeners[i].Forget;
|
||||
FListeners := nil;
|
||||
inherited Destroy;
|
||||
end;
|
||||
@ -252,7 +253,7 @@ begin
|
||||
raise EListenerError.Create('Listener subscribed twice');
|
||||
if FindListener(AListener) >= 0 then
|
||||
raise EListenerError.Create('Duplicate listener');
|
||||
AListener.IsListening := true;
|
||||
AListener.FIsListening := true;
|
||||
SetLength(FListeners, Length(FListeners) + 1);
|
||||
FListeners[High(FListeners)] := AListener;
|
||||
end;
|
||||
@ -263,7 +264,7 @@ var
|
||||
begin
|
||||
if not AListener.IsListening then
|
||||
raise EListenerError.Create('Listener not subscribed');
|
||||
AListener.IsListening := false;
|
||||
AListener.FIsListening := false;
|
||||
j := FindListener(AListener);
|
||||
if j < 0 then
|
||||
raise EListenerError.Create('Listener not found');
|
||||
@ -676,5 +677,12 @@ begin
|
||||
Notify;
|
||||
end;
|
||||
|
||||
{ TListener }
|
||||
|
||||
procedure TListener.Forget;
|
||||
begin
|
||||
FIsListening := false;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user