mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-27 03:53:40 +02:00
99 lines
1.9 KiB
ObjectPascal
99 lines
1.9 KiB
ObjectPascal
{
|
|
*****************************************************************************
|
|
See the file COPYING.modifiedLGPL.txt, included in this distribution,
|
|
for details about the license.
|
|
*****************************************************************************
|
|
|
|
Authors: Alexander Klenin
|
|
|
|
}
|
|
unit TALegendPanel;
|
|
|
|
{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, Controls, TAChartUtils, TAGraph;
|
|
|
|
type
|
|
|
|
{ TChartLegendPanel }
|
|
|
|
TChartLegendPanel = class(TCustomControl)
|
|
private
|
|
FChart: TChart;
|
|
FListener: TListener;
|
|
procedure ChartChanged(ASender: TObject);
|
|
procedure SetChart(AValue: TChart);
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
procedure Paint; override;
|
|
published
|
|
property Chart: TChart read FChart write SetChart;
|
|
published
|
|
property Align;
|
|
property Anchors;
|
|
property BorderSpacing;
|
|
property Visible;
|
|
end;
|
|
|
|
procedure Register;
|
|
|
|
implementation
|
|
|
|
uses
|
|
SysUtils;
|
|
|
|
procedure Register;
|
|
begin
|
|
RegisterComponents(CHART_COMPONENT_IDE_PAGE, [TChartLegendPanel]);
|
|
end;
|
|
|
|
{ TChartLegendPanel }
|
|
|
|
procedure TChartLegendPanel.ChartChanged(ASender: TObject);
|
|
begin
|
|
// TODO: Do not auto-update on chart zooming/scrolling.
|
|
Unused(ASender);
|
|
Invalidate;
|
|
end;
|
|
|
|
constructor TChartLegendPanel.Create(AOwner: TComponent);
|
|
begin
|
|
inherited Create(AOwner);
|
|
FListener := TListener.Create(@FChart, @ChartChanged);
|
|
Width := 40;
|
|
Height := 20;
|
|
end;
|
|
|
|
destructor TChartLegendPanel.Destroy;
|
|
begin
|
|
FreeAndNil(FListener);
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TChartLegendPanel.Paint;
|
|
var
|
|
r: TRect;
|
|
begin
|
|
if Chart = nil then exit;
|
|
r := Rect(0, 0, Width, Height);
|
|
Chart.DrawLegendOn(Canvas, r);
|
|
end;
|
|
|
|
procedure TChartLegendPanel.SetChart(AValue: TChart);
|
|
begin
|
|
if FChart = AValue then exit;
|
|
if FListener.IsListening then
|
|
FChart.Broadcaster.Unsubscribe(FListener);
|
|
FChart := AValue;
|
|
if FChart <> nil then
|
|
FChart.Broadcaster.Subscribe(FListener);
|
|
Invalidate;
|
|
end;
|
|
|
|
end.
|
|
|