source: oup/current/Tools/MetaEditor.pas@ 230

Last change on this file since 230 was 229, checked in by alloc, 17 years ago
File size: 6.2 KB
Line 
1unit MetaEditor;
2
3interface
4
5uses
6 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7 Dialogs, _BaseTemplate, ExtCtrls, VirtualTrees, StdCtrls;
8
9type
10 TForm_Meta = class(TForm_BaseTemplate)
11 VST: TVirtualStringTree;
12 Panel2: TPanel;
13 splitter: TSplitter;
14 procedure FormCreate(Sender: TObject);
15 procedure VSTInitChildren(Sender: TBaseVirtualTree; Node: PVirtualNode;
16 var ChildCount: Cardinal);
17 procedure FormClose(Sender: TObject; var Action: TCloseAction);
18 procedure VSTFocusChanged(Sender: TBaseVirtualTree; Node: PVirtualNode;
19 Column: TColumnIndex);
20 procedure VSTFocusChanging(Sender: TBaseVirtualTree; OldNode,
21 NewNode: PVirtualNode; OldColumn, NewColumn: TColumnIndex;
22 var Allowed: Boolean);
23 procedure VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
24 Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
25 procedure VSTPaintText(Sender: TBaseVirtualTree;
26 const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
27 TextType: TVSTTextType);
28 private
29 procedure NewCon(ID: Integer);
30 public
31 end;
32
33
34implementation
35{$R *.dfm}
36uses _MetaManager, _FileTypes, Data;
37
38type
39 PNodeData = ^TNodeData;
40
41 TNodeData = record
42 Field: TObject;
43 end;
44
45function AddVSTEntry(AVST: TCustomVirtualStringTree; ANode: PVirtualNode;
46 ARecord: TNodeData): PVirtualNode;
47var
48 Data: PNodeData;
49begin
50 Result := AVST.AddChild(ANode);
51 Data := AVST.GetNodeData(Result);
52 AVST.ValidateNode(Result, False);
53 Data^ := ARecord;
54end;
55
56
57procedure TForm_Meta.NewCon(ID: Integer);
58var
59 a,b,c: Int64;
60 i: Integer;
61 data: TNodeData;
62 node: PVirtualNode;
63begin
64{
65 if ID >= 0 then
66 begin
67 QueryPerformanceFrequency(c);
68 QueryPerformanceCounter(a);
69 if not Assigned(Meta) then
70 Meta := TMetaManager.Create(ID, Self);
71 QueryPerformanceCounter(b);
72 ShowMessage('Loading Done - ' + FloatToStr((b-a)/c) + 's');
73
74 VST.Clear;
75 VST.BeginUpdate;
76 for i := 0 to Meta.FileCount - 1 do
77 begin
78 if Assigned(Meta.FileById[i]) then
79 begin
80 data.Field := Meta.FileById[i];
81 node := AddVSTEntry(VST, nil, data);
82 if Meta.FileById[i].ChildCount > 0 then
83 VST.HasChildren[node] := True;
84 end;
85 end;
86 VST.EndUpdate;
87 end;
88}
89end;
90
91
92procedure TForm_Meta.VSTInitChildren(Sender: TBaseVirtualTree;
93 Node: PVirtualNode; var ChildCount: Cardinal);
94var
95 data: PNodeData;
96 newdata: TNodeData;
97 newnode: PVirtualNode;
98 i: Integer;
99 id: Integer;
100begin
101{
102 data := VST.GetNodeData(node);
103 for i := 0 to Meta.FileById[TFile(data.Field).FileID].ChildCount - 1 do
104 begin
105 id := Meta.FileById[TFile(data.Field).FileID].LinkByIndex[i].DestID;
106 Meta.InitFile(id);
107 newdata.Field := Meta.FileById[id];
108 newnode := AddVSTEntry(VST, Node, newdata);
109 if Meta.FileById[id].ChildCount > 0 then
110 VST.HasChildren[newnode] := True;
111 end;
112 ChildCount := Meta.FileById[TFile(data.Field).FileID].ChildCount;
113}
114end;
115
116
117procedure TForm_Meta.VSTFocusChanged(Sender: TBaseVirtualTree;
118 Node: PVirtualNode; Column: TColumnIndex);
119var
120 data: PNodeData;
121begin
122 data := Sender.GetNodeData(Node);
123 if data.Field is TFile then
124 begin
125 TFile(data.Field).InitEditor;
126 if Assigned(TFile(data.Field).Editor) then
127 begin
128 panel2.InsertControl(TFile(data.Field).Editor);
129 TFile(data.Field).Opened := True;
130 end;
131 end;
132end;
133
134
135procedure TForm_Meta.VSTFocusChanging(Sender: TBaseVirtualTree; OldNode,
136 NewNode: PVirtualNode; OldColumn, NewColumn: TColumnIndex;
137 var Allowed: Boolean);
138var
139 data: PNodeData;
140 i: Integer;
141begin
142 data := Sender.GetNodeData(NewNode);
143 if data.Field is TFile then
144 begin
145 TFile(data.Field).InitEditor;
146 if Assigned(TFile(data.Field).Editor) then
147 Allowed := not TFile(data.Field).Opened
148 else
149 Allowed := True;
150 end;
151 if Allowed and Assigned(OldNode) then
152 begin
153 data := Sender.GetNodeData(OldNode);
154 if data.Field is TFile then
155 begin
156 if TFile(data.Field).Opened then
157 begin
158 if panel2.ControlCount > 0 then
159 for i := 0 to panel2.ControlCount - 1 do
160 panel2.RemoveControl(panel2.Controls[i]);
161 TFile(data.Field).Opened := False;
162 end;
163 end;
164 end;
165end;
166
167
168procedure TForm_Meta.VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
169 Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
170var
171 Data: PNodeData;
172begin
173 Data := Sender.GetNodeData(Node);
174 CellText := '';
175 if TextType = ttNormal then
176 begin
177 case Column of
178 0:
179 begin
180 if Data.Field is TFile then
181 begin
182 CellText := TFile(Data.Field).FileName;
183 if CellText = '' then
184 CellText := 'Unnamed';
185 end;
186 end;
187 1:
188 begin
189 if Data.Field is TFile then
190 CellText := TFile(Data.Field).FileExt;
191 end;
192 2:
193 begin
194 if Data.Field is TFile then
195 CellText := IntToStr(TFile(Data.Field).FileID);
196 end;
197 end;
198 end;
199end;
200
201
202procedure TForm_Meta.VSTPaintText(Sender: TBaseVirtualTree;
203 const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
204 TextType: TVSTTextType);
205var
206 Data: PNodeData;
207begin
208 Data := Sender.GetNodeData(Node);
209 if TextType = ttNormal then
210 begin
211 case Column of
212 0:
213 begin
214 if Data.Field is TFile then
215 begin
216 if Length(TFile(Data.Field).FileName) = 0 then
217 TargetCanvas.Font.Color := $C06060;
218 if TFile(Data.Field).FileSize = 0 then
219 TargetCanvas.Font.Color := $2020A0;
220 end;
221 end;
222 end;
223 end;
224end;
225
226
227
228procedure TForm_Meta.FormClose(Sender: TObject; var Action: TCloseAction);
229begin
230// Meta.Free;
231 inherited;
232end;
233
234procedure TForm_Meta.FormCreate(Sender: TObject);
235begin
236 inherited;
237 OnNewConnection := NewCon;
238
239 VST.NodeDataSize := SizeOf(TNodeData);
240 VST.Font.Charset := AppSettings.CharSet;
241 VST.Clear;
242
243 UpdateConList;
244end;
245
246end.
Note: See TracBrowser for help on using the repository browser.