| 5 |
|
uses |
| 6 |
|
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, |
| 7 |
|
Dialogs, _BaseTemplate, ExtCtrls, VirtualTrees, StdCtrls, ComCtrls, Grids, |
| 8 |
< |
MPHexEditor, Wrapgrid; |
| 8 |
> |
MPHexEditor, Wrapgrid, VTHeaderPopup, Menus, _TreeElement; |
| 9 |
|
|
| 10 |
|
type |
| 11 |
|
TForm_Meta = class(TForm_BaseTemplate) |
| 20 |
|
value_viewer: TWrapGrid; |
| 21 |
|
splitter_hex_2: TSplitter; |
| 22 |
|
structviewer: TVirtualStringTree; |
| 23 |
+ |
value_viewer_context: TPopupMenu; |
| 24 |
+ |
value_viewer_context_copy: TMenuItem; |
| 25 |
+ |
value_viewer_context_copyasdec: TMenuItem; |
| 26 |
+ |
value_viewer_context_copyasfloat: TMenuItem; |
| 27 |
+ |
value_viewer_context_copyasbitset: TMenuItem; |
| 28 |
+ |
value_viewer_context_copyasstring: TMenuItem; |
| 29 |
+ |
value_viewer_context_copyashex: TMenuItem; |
| 30 |
+ |
VTHPopup: TVTHeaderPopupMenu; |
| 31 |
+ |
btn_export: TButton; |
| 32 |
+ |
btn_import: TButton; |
| 33 |
|
procedure FormCreate(Sender: TObject); |
| 34 |
|
procedure VSTInitChildren(Sender: TBaseVirtualTree; Node: PVirtualNode; |
| 35 |
|
var ChildCount: Cardinal); |
| 45 |
|
const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; |
| 46 |
|
TextType: TVSTTextType); |
| 47 |
|
private |
| 48 |
+ |
root: TTreeElement; |
| 49 |
|
procedure NewCon(ID: Integer); |
| 50 |
|
public |
| 51 |
|
end; |
| 59 |
|
PNodeData = ^TNodeData; |
| 60 |
|
|
| 61 |
|
TNodeData = record |
| 62 |
< |
Field: TObject; |
| 62 |
> |
Field: TTreeElement; |
| 63 |
|
end; |
| 64 |
|
|
| 65 |
|
function AddVSTEntry(AVST: TCustomVirtualStringTree; ANode: PVirtualNode; |
| 80 |
|
data: TNodeData; |
| 81 |
|
node: PVirtualNode; |
| 82 |
|
Meta: TMetaManager; |
| 83 |
< |
root: TExtensions; |
| 83 |
> |
root: TTreeElement; |
| 84 |
|
begin |
| 85 |
|
if ID >= 0 then |
| 86 |
|
begin |
| 88 |
|
VST.Clear; |
| 89 |
|
VST.BeginUpdate; |
| 90 |
|
root := ConManager.Connection[FConnectionID].MetaData.Root; |
| 91 |
< |
for i := 0 to High(root) do |
| 91 |
> |
for i := 0 to root.ChildCount - 1 do |
| 92 |
|
begin |
| 93 |
< |
data.Field := root[i]; |
| 93 |
> |
data.Field := root.Child[i]; |
| 94 |
|
node := AddVSTEntry(VST, nil, data); |
| 95 |
|
VST.HasChildren[node] := True; |
| 96 |
|
end; |
| 106 |
|
newdata: TNodeData; |
| 107 |
|
newnode: PVirtualNode; |
| 108 |
|
i: Integer; |
| 98 |
– |
id: Integer; |
| 109 |
|
Meta: TMetaManager; |
| 110 |
|
begin |
| 111 |
|
data := Sender.GetNodeData(node); |
| 112 |
|
Meta := ConManager.Connection[ConnectionID].MetaData; |
| 103 |
– |
if data.Field is TFile then |
| 104 |
– |
begin |
| 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; |
| 113 |
|
if data.Field is TExtension then |
| 114 |
< |
begin |
| 127 |
< |
if TExtension(data.Field).FileCount = 0 then |
| 114 |
> |
if TExtension(data.Field).ChildCount = 0 then |
| 115 |
|
TExtension(data.Field).InitList; |
| 116 |
< |
for i := 0 to TExtension(data.Field).FileCount - 1 do |
| 116 |
> |
|
| 117 |
> |
if data.Field.ChildCount > 0 then |
| 118 |
> |
begin |
| 119 |
> |
for i := 0 to data.Field.ChildCount - 1 do |
| 120 |
|
begin |
| 121 |
< |
id := TExtension(data.Field).Files[i]; |
| 132 |
< |
Meta.InitFile(id); |
| 133 |
< |
newdata.Field := Meta.FileById[id]; |
| 121 |
> |
newdata.Field := data.Field.Child[i]; |
| 122 |
|
newnode := AddVSTEntry(TCustomVirtualStringTree(Sender), Node, newdata); |
| 123 |
< |
if Meta.FileById[id].ChildCount > 0 then |
| 123 |
> |
if newdata.Field.ChildCount > 0 then |
| 124 |
|
Sender.HasChildren[newnode] := True; |
| 125 |
|
end; |
| 126 |
|
end; |
| 192 |
|
case Column of |
| 193 |
|
0: |
| 194 |
|
begin |
| 195 |
< |
if Data.Field is TFile then |
| 208 |
< |
begin |
| 209 |
< |
CellText := TFile(Data.Field).FileInfo.Name; |
| 210 |
< |
if CellText = '' then |
| 211 |
< |
CellText := 'Unnamed'; |
| 212 |
< |
end; |
| 213 |
< |
if Data.Field is TExtension then |
| 214 |
< |
CellText := TExtension(Data.Field).Ext; |
| 195 |
> |
CellText := Data.Field.GetCaption; |
| 196 |
|
end; |
| 197 |
|
1: |
| 198 |
|
begin |