File: taserieseditor.pas

package info (click to toggle)
lazarus 2.0.0%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 214,460 kB
  • sloc: pascal: 1,862,622; xml: 265,709; cpp: 56,595; sh: 3,008; java: 609; makefile: 535; perl: 297; sql: 222; ansic: 137
file content (136 lines) | stat: -rw-r--r-- 3,439 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
{
 /***************************************************************************
                               TASeriesEditor.pas
                               ----------------
              Component Library Standard Graph Design-time Editors


 ***************************************************************************/

 *****************************************************************************
  See the file COPYING.modifiedLGPL.txt, included in this distribution,
  for details about the license.
 *****************************************************************************

  Author: Alexander Klenin

}
unit TASeriesEditor;

{$H+}

interface

  procedure Register;


implementation

uses
  Classes, ComponentEditors, Forms, Menus, PropEdits, SysUtils,
  TAChartStrConsts, TAGraph, TASubcomponentsEditor;

type
  { TSeriesComponentEditor }

  TSeriesComponentEditor = class(TSubComponentListEditor)
  protected
    function MakeEditorForm: TForm; override;
  public
    function GetVerb(Index: Integer): string; override;
  end;

  { TSeriesPropertyEditor }

  TSeriesPropertyEditor = class(TComponentListPropertyEditor)
  protected
    function GetChildrenCount: Integer; override;
    function MakeEditorForm: TForm; override;
  end;

  { TSeriesEditorForm }

  TSeriesEditorForm = class(TComponentListEditorForm)
  protected
    procedure AddSubcomponent(AParent, AChild: TComponent); override;
    procedure BuildCaption; override;
    function ChildClass: TComponentClass; override;
    procedure EnumerateSubcomponentClasses; override;
    function GetChildrenList: TFPList; override;
    function MakeSubcomponent(
      AOwner: TComponent; ATag: Integer): TComponent; override;
  end;

procedure Register;
begin
  RegisterPropertyEditor(
    TypeInfo(TChartSeriesList), TChart, 'Series', TSeriesPropertyEditor);
  RegisterComponentEditor(TChart, TSeriesComponentEditor);
end;

{ TSeriesComponentEditor }

function TSeriesComponentEditor.GetVerb(Index: Integer): string;
begin
  case Index of
    0: Result := sesSeriesEditorTitle;
    else Result := '';
  end;
end;

function TSeriesComponentEditor.MakeEditorForm: TForm;
begin
  Result := TSeriesEditorForm.Create(Application, GetComponent, Self, nil);
end;

{ TSeriesPropertyEditor }

function TSeriesPropertyEditor.GetChildrenCount: Integer;
begin
  Result := (GetObjectValue as TChartSeriesList).Count;
end;

function TSeriesPropertyEditor.MakeEditorForm: TForm;
begin
  with TSeriesEditorForm do
    Result := Create(Application, GetComponent(0) as TComponent, nil, Self);
end;

{ TSeriesEditorForm }

procedure TSeriesEditorForm.AddSubcomponent(AParent, AChild: TComponent);
begin
  (AParent as TChart).AddSeries(AChild as TBasicChartSeries);
end;

procedure TSeriesEditorForm.BuildCaption;
begin
  Caption := sesSeriesEditorTitle + ' - ' + Parent.Name;
end;

function TSeriesEditorForm.ChildClass: TComponentClass;
begin
  Result := TBasicChartSeries;
end;

procedure TSeriesEditorForm.EnumerateSubcomponentClasses;
var
  i: Integer;
begin
  for i := 0 to SeriesClassRegistry.Count - 1 do
    AddSubcomponentClass(SeriesClassRegistry.GetCaption(i), i);
end;

function TSeriesEditorForm.GetChildrenList: TFPList;
begin
  Result := (Parent as TChart).Series.List;
end;

function TSeriesEditorForm.MakeSubcomponent(
  AOwner: TComponent; ATag: Integer): TComponent;
begin
  Result := TSeriesClass(SeriesClassRegistry.GetClass(ATag)).Create(AOwner);
end;

end.