mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-01 21:43:42 +02:00
296 lines
7.0 KiB
ObjectPascal
296 lines
7.0 KiB
ObjectPascal
unit ceMain;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, Forms, Controls, Graphics,
|
|
Dialogs, Menus, StdCtrls, ExtCtrls, Types,
|
|
TAGraph, TATools, TAChartAxis, TATextElements, TASeries, TASources,
|
|
TALegend, TAChartImageList,
|
|
ceAxisFrame;
|
|
|
|
type
|
|
|
|
{ TMainForm }
|
|
|
|
TMainForm = class(TForm)
|
|
Bevel1: TBevel;
|
|
Chart1: TChart;
|
|
Chart1AreaSeries1: TAreaSeries;
|
|
Chart1BarSeries1: TBarSeries;
|
|
Chart1LineSeries1: TLineSeries;
|
|
ChartToolset1: TChartToolset;
|
|
ChartToolset1AxisClickTool1: TAxisClickTool;
|
|
ChartToolset1DataPointClickTool1: TDataPointClickTool;
|
|
ChartToolset1LegendClickTool1: TLegendClickTool;
|
|
ChartToolset1TitleFootClickTool1: TTitleFootClickTool;
|
|
cbDoubleClick: TCheckBox;
|
|
cbUseAllInOneDialog: TCheckBox;
|
|
Label1: TLabel;
|
|
MainMenu: TMainMenu;
|
|
MenuItem1: TMenuItem;
|
|
mnuSeries: TMenuItem;
|
|
mnuChartLegend: TMenuItem;
|
|
mnuLeftAxis: TMenuItem;
|
|
mnuBottomAxis: TMenuItem;
|
|
MenuItem2: TMenuItem;
|
|
mnuChartFooter: TMenuItem;
|
|
mnuChartTitle: TMenuItem;
|
|
mnuSettings: TMenuItem;
|
|
RandomChartSource1: TRandomChartSource;
|
|
RandomChartSource2: TRandomChartSource;
|
|
RandomChartSource3: TRandomChartSource;
|
|
procedure ChartToolset1AxisClickTool1Click(ASender: TChartTool;
|
|
Axis: TChartAxis; AHit: TChartAxisHitTests);
|
|
procedure ChartToolset1DataPointClickTool1PointClick(ATool: TChartTool;
|
|
APoint: TPoint);
|
|
procedure ChartToolset1LegendClickTool1SeriesClick(ASender: TChartTool;
|
|
ALegend: TChartLegend; ASeries: TBasicChartSeries);
|
|
procedure ChartToolset1TitleFootClickTool1Click(ASender: TChartTool;
|
|
ATitle: TChartTitle);
|
|
procedure cbDoubleClickChange(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure mnuBottomAxisClick(Sender: TObject);
|
|
procedure mnuChartFooterClick(Sender: TObject);
|
|
procedure mnuChartLegendClick(Sender: TObject);
|
|
procedure mnuChartTitleClick(Sender: TObject);
|
|
procedure mnuLeftAxisClick(Sender: TObject);
|
|
private
|
|
procedure ChartEditor(AChart: TChart);
|
|
procedure EditAxis(AAxis: TChartAxis; APage: TChartAxisEditorPage);
|
|
procedure EditLegend(ALegend: TChartLegend);
|
|
procedure EditSeries(ASeries: TBasicChartSeries);
|
|
procedure EditTitleFoot(ATitle: TChartTitle);
|
|
procedure MenuSeriesClick(Sender: TObject);
|
|
|
|
public
|
|
|
|
end;
|
|
|
|
var
|
|
MainForm: TMainForm;
|
|
|
|
implementation
|
|
|
|
{$R *.lfm}
|
|
|
|
uses
|
|
TAChartUtils, TACustomSeries,
|
|
ceTitleFootDlg, ceLegendDlg, ceSeriesDlg, ceAxisDlg, ceChartEditor, ceImages;
|
|
|
|
{ TMainForm }
|
|
|
|
procedure TMainForm.ChartEditor(AChart: TChart);
|
|
var
|
|
F: TChartEditorForm;
|
|
begin
|
|
F := TChartEditorForm.Create(nil);
|
|
try
|
|
F.Chart := AChart;
|
|
F.ShowModal;
|
|
finally
|
|
F.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.ChartToolset1TitleFootClickTool1Click(ASender: TChartTool;
|
|
ATitle: TChartTitle);
|
|
begin
|
|
Unused(ASender);
|
|
EditTitleFoot(ATitle);
|
|
end;
|
|
|
|
procedure TMainForm.cbDoubleClickChange(Sender: TObject);
|
|
var
|
|
shift: TShiftState;
|
|
s: String;
|
|
begin
|
|
if cbDoubleClick.Checked then
|
|
begin
|
|
shift := [ssLeft, ssDouble];
|
|
s := 'Double-click';
|
|
end else
|
|
begin
|
|
shift := [ssLeft];
|
|
s := 'Click';
|
|
end;
|
|
Label1.Caption := s + ' on a title, axis, label, grid, data point to open the corresponding editor.';
|
|
|
|
ChartToolset1DatapointClickTool1.Shift := shift;
|
|
ChartToolset1TitleFootClickTool1.Shift := shift;
|
|
ChartToolset1LegendClickTool1.Shift := shift;
|
|
ChartToolset1AxisClickTool1.Shift := shift;
|
|
end;
|
|
|
|
procedure TMainForm.FormCreate(Sender: TObject);
|
|
var
|
|
i: Integer;
|
|
item: TMenuItem;
|
|
begin
|
|
ChartImagesDM.ChartImages.Chart := Chart1;
|
|
|
|
for i := 0 to Chart1.SeriesCount-1 do begin
|
|
item := TMenuItem.Create(MainMenu);
|
|
item.Caption := TCustomChartSeries(Chart1.Series[i]).Title + '...';
|
|
item.OnClick := @MenuSeriesClick;
|
|
item.Tag := PtrInt(Chart1.Series[i]);
|
|
item.ImageIndex := ChartImagesDM.ChartImages.FirstSeriesIndex + i;
|
|
mnuSeries.Add(item);
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.mnuBottomAxisClick(Sender: TObject);
|
|
begin
|
|
EditAxis(Chart1.BottomAxis, aepTitle);
|
|
end;
|
|
|
|
procedure TMainForm.ChartToolset1AxisClickTool1Click(ASender: TChartTool;
|
|
Axis: TChartAxis; AHit: TChartAxisHitTests);
|
|
var
|
|
pg: TChartAxisEditorPage;
|
|
begin
|
|
Unused(ASender);
|
|
if (ahtTitle in AHit) then
|
|
pg := aepTitle
|
|
else if (ahtLabels in AHit) then
|
|
pg := aepLabels
|
|
else if (ahtLine in AHit) then
|
|
pg := aepLine
|
|
else if (ahtGrid in AHit) then
|
|
pg := aepGrid
|
|
else
|
|
exit;
|
|
EditAxis(Axis, pg);
|
|
end;
|
|
|
|
procedure TMainForm.ChartToolset1DataPointClickTool1PointClick(ATool: TChartTool;
|
|
APoint: TPoint);
|
|
begin
|
|
Unused(APoint);
|
|
EditSeries(TDataPointClickTool(ATool).Series);
|
|
end;
|
|
|
|
procedure TMainForm.ChartToolset1LegendClickTool1SeriesClick(
|
|
ASender: TChartTool; ALegend: TChartLegend; ASeries: TBasicChartSeries);
|
|
begin
|
|
Unused(ASender);
|
|
if ASeries = nil then
|
|
EditLegend(ALegend)
|
|
else
|
|
EditSeries(ASeries);
|
|
end;
|
|
|
|
procedure TMainForm.EditAxis(AAxis: TChartAxis; APage: TChartAxisEditorPage);
|
|
var
|
|
F: TChartAxisEditor;
|
|
begin
|
|
if cbUseAllInOneDialog.Checked then
|
|
EditChartAxis(AAxis, APage)
|
|
else
|
|
begin
|
|
F := TChartAxisEditor.Create(nil);
|
|
try
|
|
F.Prepare(AAxis, 'Edit chart axis "%s"');
|
|
F.Page := APage;
|
|
F.ShowModal;
|
|
finally
|
|
F.Free;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.EditLegend(ALegend: TChartLegend);
|
|
var
|
|
F: TChartLegendEditor;
|
|
begin
|
|
if cbUseAllInOneDialog.Checked then
|
|
EditChartLegend(ALegend.GetOwner as TChart)
|
|
else
|
|
begin
|
|
F := TChartLegendEditor.Create(nil);
|
|
try
|
|
F.Prepare(ALegend, 'Edit chart legend');
|
|
F.ShowModal;
|
|
finally
|
|
F.Free;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.EditSeries(ASeries: TBasicChartSeries);
|
|
var
|
|
F: TChartSeriesEditor;
|
|
begin
|
|
if cbUseAllInOneDialog.Checked then
|
|
EditChartSeries(ASeries)
|
|
else
|
|
begin
|
|
F := TChartSeriesEditor.Create(nil);
|
|
try
|
|
F.Prepare(ASeries, 'Edit series "%s"');
|
|
F.ShowModal;
|
|
finally
|
|
F.Free;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.EditTitleFoot(ATitle: TChartTitle);
|
|
var
|
|
F: TChartTitleFootEditor;
|
|
s: String;
|
|
begin
|
|
if cbUseAllInOneDialog.Checked then
|
|
begin
|
|
if ATitle = Chart1.Title then
|
|
EditChartTitle(ATitle.GetOwner as TChart)
|
|
else
|
|
if ATitle = Chart1.Foot then
|
|
EditChartFooter(ATitle.GetOwner as TChart);
|
|
end else
|
|
begin
|
|
F := TChartTitleFootEditor.Create(nil);
|
|
try
|
|
s := 'Edit chart %s';
|
|
if ATitle = Chart1.Title then s := Format(s, ['title']) else s := Format(s, ['footer']);
|
|
F.Prepare(ATitle, s);
|
|
F.ShowModal;
|
|
finally
|
|
F.Free;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.MenuSeriesClick(Sender: TObject);
|
|
var
|
|
ser: TBasicChartSeries;
|
|
begin
|
|
ser := TBasicChartSeries(TMenuItem(Sender).Tag);
|
|
EditSeries(ser);
|
|
end;
|
|
|
|
procedure TMainForm.mnuChartFooterClick(Sender: TObject);
|
|
begin
|
|
EditTitleFoot(Chart1.Foot);
|
|
end;
|
|
|
|
procedure TMainForm.mnuChartLegendClick(Sender: TObject);
|
|
begin
|
|
EditLegend(Chart1.Legend);
|
|
end;
|
|
|
|
procedure TMainForm.mnuChartTitleClick(Sender: TObject);
|
|
begin
|
|
EditTitleFoot(Chart1.Title);
|
|
end;
|
|
|
|
procedure TMainForm.mnuLeftAxisClick(Sender: TObject);
|
|
begin
|
|
EditAxis(Chart1.LeftAxis, aepTitle);
|
|
end;
|
|
|
|
end.
|
|
|