--- oup/current/Tools/MetaEditor.pas 2007/06/20 22:24:04 231 +++ oup/current/Tools/MetaEditor.pas 2007/06/28 09:24:08 232 @@ -4,13 +4,22 @@ interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, _BaseTemplate, ExtCtrls, VirtualTrees, StdCtrls; + Dialogs, _BaseTemplate, ExtCtrls, VirtualTrees, StdCtrls, ComCtrls, Grids, + MPHexEditor, Wrapgrid; type TForm_Meta = class(TForm_BaseTemplate) VST: TVirtualStringTree; - Panel2: TPanel; splitter: TSplitter; + rightPages: TPageControl; + tab_hex: TTabSheet; + tab_meta: TTabSheet; + panel_hex_actions: TPanel; + hex: TMPHexEditor; + splitter_hex_1: TSplitter; + value_viewer: TWrapGrid; + splitter_hex_2: TSplitter; + structviewer: TVirtualStringTree; procedure FormCreate(Sender: TObject); procedure VSTInitChildren(Sender: TBaseVirtualTree; Node: PVirtualNode; var ChildCount: Cardinal); @@ -33,7 +42,7 @@ type implementation {$R *.dfm} -uses _MetaManager, _MetaTypes, ConnectionManager, Data; +uses _MetaManager, _MetaTypes, ConnectionManager, Data, _FileTypes; type PNodeData = ^TNodeData; @@ -60,21 +69,19 @@ var data: TNodeData; node: PVirtualNode; Meta: TMetaManager; + root: TExtensions; begin if ID >= 0 then begin + //VST VST.Clear; VST.BeginUpdate; - Meta := ConManager.Connection[ID].MetaData; - for i := 0 to Meta.FileCount - 1 do + root := ConManager.Connection[FConnectionID].MetaData.Root; + for i := 0 to High(root) do begin - if Assigned(Meta.FileById[i]) then - begin - data.Field := Meta.FileById[i]; - node := AddVSTEntry(VST, nil, data); - if Meta.FileById[i].ChildCount > 0 then - VST.HasChildren[node] := True; - end; + data.Field := root[i]; + node := AddVSTEntry(VST, nil, data); + VST.HasChildren[node] := True; end; VST.EndUpdate; end; @@ -92,15 +99,42 @@ var Meta: TMetaManager; begin data := Sender.GetNodeData(node); - Meta := ConManager.Connection[ID].MetaData; - for i := 0 to TFile(data.Field).ChildCount - 1 do + Meta := ConManager.Connection[ConnectionID].MetaData; + if data.Field is TFile then begin - id := TFile(data.Field).LinkByIndex[i].DestID; - Meta.InitFile(id); - newdata.Field := Meta.FileById[id]; - newnode := AddVSTEntry(TCustomVirtualStringTree(Sender), Node, newdata); - if Meta.FileById[id].ChildCount > 0 then - Sender.HasChildren[newnode] := True; + if TFile(data.Field).ChildCount > 0 then + begin + for i := 0 to TFile(data.Field).ChildCount - 1 do + begin + id := TFile(data.Field).LinkByIndex[i].DestID; + Meta.InitFile(id); + newdata.Field := Meta.FileById[id]; + newnode := AddVSTEntry(TCustomVirtualStringTree(Sender), Node, newdata); + if Meta.FileById[id].ChildCount > 0 then + Sender.HasChildren[newnode] := True; + end; + end; + if TFile(data.Field).RawCount > 0 then + begin + for i := 0 to TFile(data.Field).RawCount - 1 do + begin +// Exit; + end; + end; + end; + if data.Field is TExtension then + begin + if TExtension(data.Field).FileCount = 0 then + TExtension(data.Field).InitList; + for i := 0 to TExtension(data.Field).FileCount - 1 do + begin + id := TExtension(data.Field).Files[i]; + Meta.InitFile(id); + newdata.Field := Meta.FileById[id]; + newnode := AddVSTEntry(TCustomVirtualStringTree(Sender), Node, newdata); + if Meta.FileById[id].ChildCount > 0 then + Sender.HasChildren[newnode] := True; + end; end; ChildCount := Sender.ChildCount[Node]; end; @@ -117,7 +151,8 @@ begin TFile(data.Field).InitEditor; if Assigned(TFile(data.Field).Editor) then begin - panel2.InsertControl(TFile(data.Field).Editor); + TFile(data.Field).Editor.Align := alClient; + tab_meta.InsertControl(TFile(data.Field).Editor); TFile(data.Field).Opened := True; end; end; @@ -147,9 +182,9 @@ begin begin if TFile(data.Field).Opened then begin - if panel2.ControlCount > 0 then - for i := 0 to panel2.ControlCount - 1 do - panel2.RemoveControl(panel2.Controls[i]); + if tab_meta.ControlCount > 0 then + for i := 0 to tab_meta.ControlCount - 1 do + tab_meta.RemoveControl(tab_meta.Controls[i]); TFile(data.Field).Opened := False; end; end; @@ -175,6 +210,8 @@ begin if CellText = '' then CellText := 'Unnamed'; end; + if Data.Field is TExtension then + CellText := TExtension(Data.Field).Ext; end; 1: begin