mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-17 19:39:18 +02:00
TAChart: Add TChartListbox.OnAddSeries event
git-svn-id: trunk@31659 -
This commit is contained in:
parent
ad6ec6e704
commit
d67172d19f
@ -108,6 +108,7 @@ object Form1: TForm1
|
||||
Top = 0
|
||||
Width = 138
|
||||
Chart = Chart
|
||||
OnAddSeries = ChartListboxAddSeries
|
||||
OnCheckboxClick = ChartListboxCheckboxClick
|
||||
OnItemClick = ChartListboxItemClick
|
||||
OnSeriesIconDblClick = ChartListboxSeriesIconDblClick
|
||||
|
@ -7,7 +7,7 @@ interface
|
||||
uses
|
||||
Classes, SysUtils, TASources, TASeries, TAGraph, CheckLst, Spin, ComCtrls,
|
||||
ExtCtrls, StdCtrls, FileUtil, Forms, Controls, Graphics, Dialogs,
|
||||
TAChartListbox;
|
||||
TAChartListbox, TACustomSeries, TALegend;
|
||||
|
||||
type
|
||||
|
||||
@ -48,13 +48,15 @@ type
|
||||
procedure CbShowSeriesIconChange(Sender: TObject);
|
||||
procedure CbCheckStyleChange(Sender: TObject);
|
||||
procedure CbKeepSeriesOutChange(Sender: TObject);
|
||||
procedure ChartListboxAddSeries(ASender: TChartListbox;
|
||||
ASeries: TCustomChartSeries; AItems: TChartLegendItems;
|
||||
var ASkip: Boolean);
|
||||
procedure EdColumnsChange(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure ChartListboxCheckboxClick(Sender: TObject; Index: Integer);
|
||||
procedure ChartListboxClick(Sender: TObject);
|
||||
procedure ChartListboxItemClick(Sender: TObject; Index: Integer);
|
||||
procedure ChartListboxSeriesIconDblClick(Sender: TObject; Index: Integer);
|
||||
procedure ChartListboxPopulate(Sender: TObject);
|
||||
private
|
||||
procedure CreateData;
|
||||
end;
|
||||
@ -120,12 +122,6 @@ begin
|
||||
[ItemIndex, Series[ItemIndex].Title]));
|
||||
end;
|
||||
|
||||
procedure TForm1.ChartListboxPopulate(Sender: TObject);
|
||||
begin
|
||||
ChartListbox.RemoveSeries(SinSeries);
|
||||
ChartListbox.RemoveSeries(CosSeries);
|
||||
end;
|
||||
|
||||
procedure TForm1.FormCreate(Sender: TObject);
|
||||
begin
|
||||
CreateData;
|
||||
@ -154,6 +150,13 @@ begin
|
||||
Options := Options - [cloShowIcons];
|
||||
end;
|
||||
|
||||
procedure TForm1.ChartListboxAddSeries(ASender: TChartListbox;
|
||||
ASeries: TCustomChartSeries; AItems: TChartLegendItems; var ASkip: Boolean);
|
||||
begin
|
||||
ASkip := CbKeepSeriesOut.Checked and
|
||||
((ASeries = SinSeries) or (ASeries = CosSeries));
|
||||
end;
|
||||
|
||||
procedure TForm1.CbCheckStyleChange(Sender:TObject);
|
||||
begin
|
||||
if CbCheckStyle.Checked then
|
||||
@ -164,13 +167,7 @@ end;
|
||||
|
||||
procedure TForm1.CbKeepSeriesOutChange(Sender: TObject);
|
||||
begin
|
||||
if CbKeepSeriesOut.Checked then begin
|
||||
ChartListbox.OnPopulate := @ChartListboxPopulate;
|
||||
ChartListbox.RemoveSeries(SinSeries);
|
||||
ChartListbox.RemoveSeries(CosSeries);
|
||||
end
|
||||
else
|
||||
ChartListbox.OnPopulate := nil;
|
||||
ChartListbox.SeriesChanged(Self);
|
||||
end;
|
||||
|
||||
procedure TForm1.EdColumnsChange(Sender: TObject);
|
||||
|
@ -36,9 +36,16 @@ uses
|
||||
TAChartUtils, TACustomSeries, TALegend, TAGraph;
|
||||
|
||||
type
|
||||
TChartListbox = class;
|
||||
|
||||
TChartListboxIndexEvent = procedure (
|
||||
ASender: TObject; AIndex: Integer) of object;
|
||||
|
||||
TChartListboxAddSeriesEvent = procedure (
|
||||
ASender: TChartListbox; ASeries: TCustomChartSeries;
|
||||
AItems: TChartLegendItems; var ASkip: Boolean
|
||||
) of object;
|
||||
|
||||
TCheckBoxesStyle = (cbsCheckbox, cbsRadiobutton);
|
||||
|
||||
TChartListOption = (cloShowCheckboxes, cloShowIcons);
|
||||
@ -55,6 +62,7 @@ type
|
||||
FLegendItems: TChartLegendItems;
|
||||
FListener: TListener;
|
||||
FLockCount: Integer;
|
||||
FOnAddSeries: TChartListboxAddSeriesEvent;
|
||||
FOnCheckboxClick: TChartListboxIndexEvent;
|
||||
FOnItemClick: TChartListboxIndexEvent;
|
||||
FOnPopulate: TNotifyEvent;
|
||||
@ -65,10 +73,10 @@ type
|
||||
function GetLegendItem(AIndex: Integer): TLegendItem;
|
||||
function GetSeries(AIndex: Integer): TCustomChartSeries;
|
||||
function GetSeriesCount: Integer;
|
||||
procedure SeriesChanged(ASender: TObject);
|
||||
procedure SetChart(AValue: TChart);
|
||||
procedure SetChecked(AIndex: Integer; AValue: Boolean);
|
||||
procedure SetCheckStyle(AValue: TCheckBoxesStyle);
|
||||
procedure SetOnAddSeries(AValue: TChartListboxAddSeriesEvent);
|
||||
procedure SetOnPopulate(AValue: TNotifyEvent);
|
||||
procedure SetOptions(AValue: TChartListOptions);
|
||||
|
||||
@ -98,6 +106,8 @@ type
|
||||
function FindSeriesIndex(ASeries: TCustomChartSeries): Integer;
|
||||
procedure MeasureItem(AIndex: Integer; var AHeight: Integer); override;
|
||||
procedure RemoveSeries(ASeries: TCustomChartSeries);
|
||||
procedure SeriesChanged(ASender: TObject);
|
||||
|
||||
property Checked[AIndex: Integer]: Boolean read GetChecked write SetChecked;
|
||||
property Series[AIndex: Integer]: TCustomChartSeries read GetSeries;
|
||||
property SeriesCount: Integer read GetSeriesCount;
|
||||
@ -109,6 +119,8 @@ type
|
||||
property Options: TChartListOptions
|
||||
read FOptions write SetOptions default SHOW_ALL;
|
||||
published
|
||||
property OnAddSeries: TChartListboxAddSeriesEvent
|
||||
read FOnAddSeries write SetOnAddSeries;
|
||||
property OnCheckboxClick: TChartListboxIndexEvent
|
||||
read FOnCheckboxClick write FOnCheckboxClick;
|
||||
property OnItemClick: TChartListboxIndexEvent
|
||||
@ -254,13 +266,20 @@ function TChartListbox.CreateLegendItems: TChartLegendItems;
|
||||
a single legend item is used }
|
||||
var
|
||||
i: Integer;
|
||||
skip: Boolean;
|
||||
begin
|
||||
Result := TChartLegendItems.Create;
|
||||
try
|
||||
if FChart = nil then exit;
|
||||
for i := 0 to FChart.SeriesCount - 1 do
|
||||
if FChart.Series[i] is TCustomChartSeries then
|
||||
if FChart.Series[i] is TCustomChartSeries then begin
|
||||
if Assigned(OnAddSeries) then begin
|
||||
skip := false;
|
||||
FOnAddSeries(Self, TCustomChartSeries(FChart.Series[i]), Result, skip);
|
||||
if skip then continue;
|
||||
end;
|
||||
TCustomChartSeries(FChart.Series[i]).GetSingleLegendItem(Result);
|
||||
end;
|
||||
except
|
||||
FreeAndNil(Result);
|
||||
raise;
|
||||
@ -551,6 +570,13 @@ begin
|
||||
Invalidate;
|
||||
end;
|
||||
|
||||
procedure TChartListbox.SetOnAddSeries(AValue: TChartListboxAddSeriesEvent);
|
||||
begin
|
||||
if TMethod(FOnAddSeries) = TMethod(AValue) then exit;
|
||||
FOnAddSeries := AValue;
|
||||
Populate;
|
||||
end;
|
||||
|
||||
procedure TChartListbox.SetOnPopulate(AValue: TNotifyEvent);
|
||||
begin
|
||||
if TMethod(FOnPopulate) = TMethod(AValue) then exit;
|
||||
|
Loading…
Reference in New Issue
Block a user