4 |
|
|
5 |
|
uses |
6 |
|
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, |
7 |
< |
Dialogs, _BaseTemplate, ExtCtrls, VirtualTrees, StdCtrls; |
7 |
> |
Dialogs, _BaseTemplate, ExtCtrls, VirtualTrees, StdCtrls, ComCtrls, Grids, |
8 |
> |
MPHexEditor, Wrapgrid; |
9 |
|
|
10 |
|
type |
11 |
|
TForm_Meta = class(TForm_BaseTemplate) |
12 |
|
VST: TVirtualStringTree; |
12 |
– |
Panel2: TPanel; |
13 |
|
splitter: TSplitter; |
14 |
+ |
rightPages: TPageControl; |
15 |
+ |
tab_hex: TTabSheet; |
16 |
+ |
tab_meta: TTabSheet; |
17 |
+ |
panel_hex_actions: TPanel; |
18 |
+ |
hex: TMPHexEditor; |
19 |
+ |
splitter_hex_1: TSplitter; |
20 |
+ |
value_viewer: TWrapGrid; |
21 |
+ |
splitter_hex_2: TSplitter; |
22 |
+ |
structviewer: TVirtualStringTree; |
23 |
|
procedure FormCreate(Sender: TObject); |
24 |
|
procedure VSTInitChildren(Sender: TBaseVirtualTree; Node: PVirtualNode; |
25 |
|
var ChildCount: Cardinal); |
42 |
|
|
43 |
|
implementation |
44 |
|
{$R *.dfm} |
45 |
< |
uses _MetaManager, _MetaTypes, ConnectionManager, Data; |
45 |
> |
uses _MetaManager, _MetaTypes, ConnectionManager, Data, _FileTypes; |
46 |
|
|
47 |
|
type |
48 |
|
PNodeData = ^TNodeData; |
69 |
|
data: TNodeData; |
70 |
|
node: PVirtualNode; |
71 |
|
Meta: TMetaManager; |
72 |
+ |
root: TExtensions; |
73 |
|
begin |
74 |
|
if ID >= 0 then |
75 |
|
begin |
76 |
+ |
//VST |
77 |
|
VST.Clear; |
78 |
|
VST.BeginUpdate; |
79 |
< |
Meta := ConManager.Connection[ID].MetaData; |
80 |
< |
for i := 0 to Meta.FileCount - 1 do |
79 |
> |
root := ConManager.Connection[FConnectionID].MetaData.Root; |
80 |
> |
for i := 0 to High(root) do |
81 |
|
begin |
82 |
< |
if Assigned(Meta.FileById[i]) then |
83 |
< |
begin |
84 |
< |
data.Field := Meta.FileById[i]; |
74 |
< |
node := AddVSTEntry(VST, nil, data); |
75 |
< |
if Meta.FileById[i].ChildCount > 0 then |
76 |
< |
VST.HasChildren[node] := True; |
77 |
< |
end; |
82 |
> |
data.Field := root[i]; |
83 |
> |
node := AddVSTEntry(VST, nil, data); |
84 |
> |
VST.HasChildren[node] := True; |
85 |
|
end; |
86 |
|
VST.EndUpdate; |
87 |
|
end; |
99 |
|
Meta: TMetaManager; |
100 |
|
begin |
101 |
|
data := Sender.GetNodeData(node); |
102 |
< |
Meta := ConManager.Connection[ID].MetaData; |
103 |
< |
for i := 0 to TFile(data.Field).ChildCount - 1 do |
102 |
> |
Meta := ConManager.Connection[ConnectionID].MetaData; |
103 |
> |
if data.Field is TFile then |
104 |
|
begin |
105 |
< |
id := TFile(data.Field).LinkByIndex[i].DestID; |
106 |
< |
Meta.InitFile(id); |
107 |
< |
newdata.Field := Meta.FileById[id]; |
108 |
< |
newnode := AddVSTEntry(TCustomVirtualStringTree(Sender), Node, newdata); |
109 |
< |
if Meta.FileById[id].ChildCount > 0 then |
110 |
< |
Sender.HasChildren[newnode] := True; |
105 |
> |
if TFile(data.Field).ChildCount > 0 then |
106 |
> |
begin |
107 |
> |
for i := 0 to TFile(data.Field).ChildCount - 1 do |
108 |
> |
begin |
109 |
> |
id := TFile(data.Field).LinkByIndex[i].DestID; |
110 |
> |
Meta.InitFile(id); |
111 |
> |
newdata.Field := Meta.FileById[id]; |
112 |
> |
newnode := AddVSTEntry(TCustomVirtualStringTree(Sender), Node, newdata); |
113 |
> |
if Meta.FileById[id].ChildCount > 0 then |
114 |
> |
Sender.HasChildren[newnode] := True; |
115 |
> |
end; |
116 |
> |
end; |
117 |
> |
if TFile(data.Field).RawCount > 0 then |
118 |
> |
begin |
119 |
> |
for i := 0 to TFile(data.Field).RawCount - 1 do |
120 |
> |
begin |
121 |
> |
// Exit; |
122 |
> |
end; |
123 |
> |
end; |
124 |
> |
end; |
125 |
> |
if data.Field is TExtension then |
126 |
> |
begin |
127 |
> |
if TExtension(data.Field).FileCount = 0 then |
128 |
> |
TExtension(data.Field).InitList; |
129 |
> |
for i := 0 to TExtension(data.Field).FileCount - 1 do |
130 |
> |
begin |
131 |
> |
id := TExtension(data.Field).Files[i]; |
132 |
> |
Meta.InitFile(id); |
133 |
> |
newdata.Field := Meta.FileById[id]; |
134 |
> |
newnode := AddVSTEntry(TCustomVirtualStringTree(Sender), Node, newdata); |
135 |
> |
if Meta.FileById[id].ChildCount > 0 then |
136 |
> |
Sender.HasChildren[newnode] := True; |
137 |
> |
end; |
138 |
|
end; |
139 |
|
ChildCount := Sender.ChildCount[Node]; |
140 |
|
end; |
151 |
|
TFile(data.Field).InitEditor; |
152 |
|
if Assigned(TFile(data.Field).Editor) then |
153 |
|
begin |
154 |
< |
panel2.InsertControl(TFile(data.Field).Editor); |
154 |
> |
TFile(data.Field).Editor.Align := alClient; |
155 |
> |
tab_meta.InsertControl(TFile(data.Field).Editor); |
156 |
|
TFile(data.Field).Opened := True; |
157 |
|
end; |
158 |
|
end; |
182 |
|
begin |
183 |
|
if TFile(data.Field).Opened then |
184 |
|
begin |
185 |
< |
if panel2.ControlCount > 0 then |
186 |
< |
for i := 0 to panel2.ControlCount - 1 do |
187 |
< |
panel2.RemoveControl(panel2.Controls[i]); |
185 |
> |
if tab_meta.ControlCount > 0 then |
186 |
> |
for i := 0 to tab_meta.ControlCount - 1 do |
187 |
> |
tab_meta.RemoveControl(tab_meta.Controls[i]); |
188 |
|
TFile(data.Field).Opened := False; |
189 |
|
end; |
190 |
|
end; |
210 |
|
if CellText = '' then |
211 |
|
CellText := 'Unnamed'; |
212 |
|
end; |
213 |
+ |
if Data.Field is TExtension then |
214 |
+ |
CellText := TExtension(Data.Field).Ext; |
215 |
|
end; |
216 |
|
1: |
217 |
|
begin |