TAChart: Make TChartToolset a design-time component

git-svn-id: trunk@24300 -
This commit is contained in:
ask 2010-03-30 13:40:11 +00:00
parent 5b4de80bc0
commit 1a7ff8cf0d
6 changed files with 142 additions and 1 deletions

1
.gitattributes vendored
View File

@ -2146,6 +2146,7 @@ components/tachart/tasources.pas svneol=native#text/pascal
components/tachart/tatools.pas svneol=native#text/pascal
components/tachart/tatypes.pas svneol=native#text/plain
components/tachart/tchart.png -text svneol=unset#images/png
components/tachart/tcharttoolset.png -text
components/tachart/tdbchartsource.png -text
components/tachart/tlistchartsource.png -text svneol=unset#images/png
components/tachart/trandomchartsource.png -text svneol=unset#images/png

View File

@ -67,6 +67,7 @@
</Item10>
<Item11>
<Filename Value="tatools.pas"/>
<HasRegisterProc Value="True"/>
<UnitName Value="TATools"/>
</Item11>
</Files>

View File

@ -19,6 +19,7 @@ begin
RegisterUnit('TASeriesEditor', @TASeriesEditor.Register);
RegisterUnit('TASources', @TASources.Register);
RegisterUnit('TADbSource', @TADbSource.Register);
RegisterUnit('TATools', @TATools.Register);
end;
initialization

View File

@ -16,6 +16,46 @@ LazarusResources.Add('tchart','PNG',[
+#255#169'^'#233'3000'#236#221#187#159'&-'#10'X'#197'OS'#0#0'jxy'#210'uhA'#6#0
+#0#0#0'IEND'#174'B`'#130
]);
LazarusResources.Add('tcharttoolset','PNG',[
#137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#3#0#0#0#215#169#205
+#202#0#0#3#0'PLTE'#200#200#200#0#0#0'ww'#146#255#255#255#194#192#193#223#223
+#219#130#130#133#140#140#140#198#198#194#129#130#135#220#220#233#146#146#145
+#200#200#197#135#136#142#157#157#166#160#160#158#167#167#166#143#143#152#162
+#162#159#171#171#169#147#147#156#164#164#161#255#158'^'#173#173#172#150#152
+#160#168#169#167#200#186#182#205#191#188#179#179#178#142'ns'#179'TQ'#134'PN'
+#204#186#183#156#11#10#231#132''#188'tp'#158#147#145'JJ'#255'T:'#201#154'))'
+#175#25#19#235#137#129#210#136#131#156'U5w'#177'6'#172'vs'#190'"'#23#242#147
+#138#234#170#165#147'O5'#220#220#216#158'LJ'#208'+'#28#245#150#138#244#186
+#179#135'hf'#193#191#192#217#213#209#155'62'#222'2'#30#251#155#141#234#168
+#160#128'mm'#6#0#0'h'#5#0#228'8!'#255#151#131#151'H@'#214#209#206#157'SM'#179
+'+'#26#133'hgs'#0'l'#0'e'#0'.'#0't'#0'p'#0'g'#0'n'#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#8#0#0#0#18
+#247#0#0#0#5#200#0#152'|'#145#0#21' '#18#247#212#5'Q'#0'x|'#145#0#21#19#145#5
+'m'#0#0'|='#0#0'|'#145#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'('#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0'3'#206#0#226'|'#145#0#0#247#18#245'$'#0#0#0#200#0#21#0#18
+#248#144#238#24'@'#192'|'#255'|'#145#255#255#255#145'@'#187#214#142'|E'#0#1#0
+#0#0#18#247#24#0#128#0#200#192#16#0#18#248#144#238#24#5'p|'#255'|'#145#255
+#255#255#0#0#0#4'='#0'L|'#145#0#18#248#129#9'_'#0#183'|('#0#0#1#17#224#12#255
+#255#224'('#1#24#1#17#0#0#0#0#0#0#248'4'#0'z,'#255#165#0#0#0#1'tRNS'#0'@'#230
+#216'f'#0#0#0#1'bKGD'#255#165#7#242#197#0#0#0#9'pHYs'#0#0'.#'#0#0'.#'#1'x'
+#165'?v'#0#0#0#25'tEXtSoftware'#0'Paint.NET v3.5.2'#215#238'iC'#0#0#0#150'ID'
+'ATx'#218#157#210#197#18#194'@'#16'E'#209'!L'#227'.'#193#157'A'#131#187';'
+#252#255#31'Q'#20'!'#21'f'#222'*w'#217'g'#247#170#25's'#144#166'f'#130'[N'
+#227'&'#208''#220#6#30#175#15#131'?'#16#132#224#10#133'#Q'#8'D'#177'x'#2#3
+'%S'#233#207'U'#215'e'#160'L6'#151'/ '#160'b'#169'\'#129'P'#173#213#27'M'#0
+#162#213#238't{}'#9#12#131#132#160#193'p4'#158'L'#1#208'l'#190'X'#174#214#0
+'6'#219#221#254'p'#180#129#213#233'|'#185#222#224#186#247#199#243'e'#1#151
+#250#129#218#23#24'Ws'#242'"o'#183#235#16#203#158'}Hb'#0#0#0#0'IEND'#174'B`'
+#130
]);
LazarusResources.Add('tlistchartsource','PNG',[
#137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0
+#0#0#4'gAMA'#0#0#177#143#11#252'a'#5#0#0#0#24'tEXtSoftware'#0'Paint.NET v3.3'

View File

@ -47,6 +47,8 @@ type
property Shift: TShiftState read FShift write FShift;
end;
TChartToolClass = class of TChartTool;
{ TChartToolset }
TChartToolset = class(TBasicChartToolset)
@ -83,12 +85,38 @@ type
procedure MouseMove(APoint: TPoint); override;
end;
procedure Register;
procedure RegisterChartToolClass(
AToolClass: TChartToolClass; const ACaption: String);
implementation
uses
GraphMath, Math, Types,
CollectionPropEditForm, Forms, GraphMath, Math, Menus, PropEdits, Types,
TAChartUtils;
type
{ TChartToolsEditor }
TChartToolsEditor = class(TCollectionPropertyEditor)
public
class function ShowCollectionEditor(
ACollection: TCollection; OwnerPersistent: TPersistent;
const PropName: String): TCustomForm; override;
end;
{ TChartToolsEditorForm }
TChartToolsEditorForm = class(TCollectionPropertyEditorForm)
private
procedure OnAddToolClick(ASender: TObject);
end;
var
ToolsClassRegistry: TStringList;
ChartToolsForm: TChartToolsEditorForm;
function InitBuitlinTools(AChart: TChart): TBasicChartToolset;
var
ts: TChartToolset;
@ -99,6 +127,69 @@ begin
TChartReticuleTool.Create(ts.Tools);
end;
procedure InitChartToolsForm;
var
m: TPopupMenu;
mi: TMenuItem;
i: Integer;
begin
if ChartToolsForm <> nil then exit;
ChartToolsForm := TChartToolsEditorForm.Create(Application);
m := TPopupMenu.Create(ChartToolsForm);
for i := 0 to ToolsClassRegistry.Count - 1 do begin
mi := TMenuItem.Create(ChartToolsForm);
mi.Caption := ToolsClassRegistry[i];
mi.Tag := i;
mi.OnClick := @ChartToolsForm.OnAddToolClick;
m.Items.Add(mi);
end;
ChartToolsForm.AddButton.DropdownMenu := m;
ChartToolsForm.AddButton.OnClick := nil;
end;
procedure Register;
begin
RegisterComponents(CHART_COMPONENT_IDE_PAGE, [TChartToolset]);
RegisterPropertyEditor(
TypeInfo(TCollection), TChartToolset, 'Tools', TChartToolsEditor);
end;
procedure RegisterChartToolClass(
AToolClass: TChartToolClass; const ACaption: String);
begin
ToolsClassRegistry.AddObject(ACaption, TObject(AToolClass));
end;
{ TChartToolsEditor }
class function TChartToolsEditor.ShowCollectionEditor(
ACollection: TCollection; OwnerPersistent: TPersistent;
const PropName: String): TCustomForm;
begin
InitChartToolsForm;
ChartToolsForm.SetCollection(ACollection, OwnerPersistent, PropName);
ChartToolsForm.EnsureVisible;
Result := ChartToolsForm;
end;
{ TChartToolsEditorForm }
procedure TChartToolsEditorForm.OnAddToolClick(ASender: TObject);
begin
if Collection = nil then exit;
with ASender as TMenuItem do
TChartToolClass(ToolsClassRegistry.Objects[Tag]).Create(Collection);
FillCollectionListBox;
if CollectionListBox.Items.Count > 0 then
CollectionListBox.ItemIndex := CollectionListBox.Items.Count - 1;
SelectInObjectInspector(True, False);
UpdateButtons;
UpdateCaption;
Modified;
end;
{ TChartTool }
constructor TChartTool.Create(ACollection: TCollection);
@ -250,7 +341,14 @@ end;
initialization
ToolsClassRegistry := TStringList.Create;
OnInitBuiltinTools := @InitBuitlinTools;
RegisterChartToolClass(TChartZoomDragTool, 'Zoom drag tool');
RegisterChartToolClass(TChartReticuleTool, 'Reticule tool');
finalization
ToolsClassRegistry.Free;
end.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB