TAChart: Broadcast TGUIConnector changes to charts

git-svn-id: trunk@40214 -
This commit is contained in:
ask 2013-02-08 23:09:50 +00:00
parent 97642929c0
commit 7c928877c9
2 changed files with 32 additions and 3 deletions

View File

@ -183,6 +183,7 @@ type
FFoot: TChartTitle;
FFrame: TChartPen;
FGUIConnector: TChartGUIConnector;
FGUIConnectorListener: TListener;
FLegend: TChartLegend;
FLogicalExtent: TDoubleRect;
FMargins: TChartMargins;
@ -607,6 +608,8 @@ begin
FConnectorData.FCanvas := Canvas;
FDefaultGUIConnector := TChartGUIConnectorCanvas.Create(Self);
FDefaultGUIConnector.CreateDrawer(FConnectorData);
FGUIConnectorListener := TListener.Create(@FGUIConnector, @StyleChanged);
FScale := DoublePoint(1, 1);
Width := DEFAULT_CHART_WIDTH;
@ -672,6 +675,7 @@ begin
FreeAndNil(FFoot);
FreeAndNil(FAxisList);
FreeAndNil(FFrame);
FreeAndNil(FGUIConnectorListener);
FreeAndNil(FExtent);
FreeAndNil(FExtentSizeLimit);
FreeAndNil(FMargins);
@ -1421,9 +1425,13 @@ begin
if FGUIConnector = AValue then exit;
if FGUIConnector <> nil then
RemoveFreeNotification(FGUIConnector);
if FGUIConnectorListener.IsListening then
FGUIConnector.Broadcaster.Unsubscribe(FGUIConnectorListener);
FGUIConnector := AValue;
if FGUIConnector <> nil then
if FGUIConnector <> nil then begin
FGUIConnector.Broadcaster.Subscribe(FGUIConnectorListener);
FreeNotification(FGUIConnector);
end;
EffectiveGUIConnector.CreateDrawer(FConnectorData);
StyleChanged(Self);
end;

View File

@ -22,7 +22,7 @@ interface
uses
Classes, Graphics,
TADrawUtils, TADrawerCanvas;
TAChartUtils, TADrawUtils, TADrawerCanvas;
type
TChartGUIConnectorData = record
@ -33,10 +33,17 @@ type
end;
TChartGUIConnector = class(TComponent)
strict private
FBroadcaster: TBroadcaster;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure CreateDrawer(var AData: TChartGUIConnectorData); virtual; abstract;
procedure SetBounds(var AData: TChartGUIConnectorData); virtual; abstract;
procedure Display(var AData: TChartGUIConnectorData); virtual; abstract;
property Broadcaster: TBroadcaster read FBroadcaster;
end;
TChartGUIConnectorCanvas = class(TChartGUIConnector)
@ -49,7 +56,21 @@ type
implementation
uses
TAChartUtils;
SysUtils;
{ TChartGUIConnector }
constructor TChartGUIConnector.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FBroadcaster := TBroadcaster.Create;
end;
destructor TChartGUIConnector.Destroy;
begin
FreeAndNil(FBroadcaster);
inherited;
end;
{ TChartGUIConnectorCanvas }