From 7c928877c9153c8e7d77e5b18e383596f6b0e49d Mon Sep 17 00:00:00 2001 From: ask Date: Fri, 8 Feb 2013 23:09:50 +0000 Subject: [PATCH] TAChart: Broadcast TGUIConnector changes to charts git-svn-id: trunk@40214 - --- components/tachart/tagraph.pas | 10 +++++++++- components/tachart/taguiconnector.pas | 25 +++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/components/tachart/tagraph.pas b/components/tachart/tagraph.pas index 1693ba3f2a..5df9aa62c1 100644 --- a/components/tachart/tagraph.pas +++ b/components/tachart/tagraph.pas @@ -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; diff --git a/components/tachart/taguiconnector.pas b/components/tachart/taguiconnector.pas index 0c6a63afc1..79534ab4d4 100644 --- a/components/tachart/taguiconnector.pas +++ b/components/tachart/taguiconnector.pas @@ -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 }