--- oup/current/Tools/MetaEditor.pas 2007/06/12 16:42:53 212 +++ oup/current/Tools/MetaEditor.pas 2007/06/12 17:35:56 214 @@ -2,14 +2,17 @@ unit MetaEditor; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, VirtualTrees, _MetaManager, StdCtrls; + Dialogs, VirtualTrees, _MetaManager, StdCtrls, ExtCtrls; type TForm_Meta = class(TForm) VST: TVirtualStringTree; + Panel1: TPanel; Button1: TButton; - Label3: TLabel; combo_connection: TComboBox; + Label3: TLabel; + Splitter1: TSplitter; + Panel2: TPanel; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormCreate(Sender: TObject); procedure VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; @@ -20,9 +23,13 @@ type procedure VSTPaintText(Sender: TBaseVirtualTree; const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType); + procedure VSTFocusChanged(Sender: TBaseVirtualTree; Node: PVirtualNode; + Column: TColumnIndex); + procedure VSTFocusChanging(Sender: TBaseVirtualTree; OldNode, + NewNode: PVirtualNode; OldColumn, NewColumn: TColumnIndex; + var Allowed: Boolean); private public - MetaManager: TMetaManager; end; var @@ -63,16 +70,16 @@ var id: Integer; begin data := VST.GetNodeData(node); - for i := 0 to MetaManager.FileById[TFile(data.Field).FileID].ChildCount - 1 do + for i := 0 to Meta.FileById[TFile(data.Field).FileID].ChildCount - 1 do begin - id := MetaManager.FileById[TFile(data.Field).FileID].LinkByIndex[i].DestID; - MetaManager.InitFile(id); - newdata.Field := MetaManager.FileById[id]; + id := Meta.FileById[TFile(data.Field).FileID].LinkByIndex[i].DestID; + Meta.InitFile(id); + newdata.Field := Meta.FileById[id]; newnode := AddVSTEntry(VST, Node, newdata); - if MetaManager.FileById[id].ChildCount > 0 then + if Meta.FileById[id].ChildCount > 0 then VST.HasChildren[newnode] := True; end; - ChildCount := MetaManager.FileById[TFile(data.Field).FileID].ChildCount; + ChildCount := Meta.FileById[TFile(data.Field).FileID].ChildCount; end; @@ -93,19 +100,20 @@ begin QueryPerformanceFrequency(c); QueryPerformanceCounter(a); - MetaManager := TMetaManager.Create(conid); + if not Assigned(Meta) then + Meta := TMetaManager.Create(conid); QueryPerformanceCounter(b); ShowMessage('Loading Done - ' + FloatToStr((b-a)/c) + 's'); VST.Clear; VST.BeginUpdate; - for i := 0 to MetaManager.FileCount - 1 do + for i := 0 to Meta.FileCount - 1 do begin - if Assigned(MetaManager.FileById[i]) then + if Assigned(Meta.FileById[i]) then begin - data.Field := MetaManager.FileById[i]; + data.Field := Meta.FileById[i]; node := AddVSTEntry(VST, nil, data); - if MetaManager.FileById[i].ChildCount > 0 then + if Meta.FileById[i].ChildCount > 0 then VST.HasChildren[node] := True; end; end; @@ -115,7 +123,7 @@ end; procedure TForm_Meta.FormClose(Sender: TObject; var Action: TCloseAction); begin - MetaManager.Free; + Meta.Free; Action := caFree; end; @@ -158,6 +166,55 @@ end; +procedure TForm_Meta.VSTFocusChanged(Sender: TBaseVirtualTree; + Node: PVirtualNode; Column: TColumnIndex); +var + data: PNodeData; +begin + data := Sender.GetNodeData(Node); + if data.Field is TFile then + begin + TFile(data.Field).InitEditor; + if Assigned(TFile(data.Field).Editor) then + begin + panel2.InsertControl(TFile(data.Field).Editor); + TFile(data.Field).Opened := True; + end; + end; +end; + +procedure TForm_Meta.VSTFocusChanging(Sender: TBaseVirtualTree; OldNode, + NewNode: PVirtualNode; OldColumn, NewColumn: TColumnIndex; + var Allowed: Boolean); +var + data: PNodeData; + i: Integer; +begin + data := Sender.GetNodeData(NewNode); + if data.Field is TFile then + begin + TFile(data.Field).InitEditor; + if Assigned(TFile(data.Field).Editor) then + Allowed := not TFile(data.Field).Opened + else + Allowed := True; + end; + if Allowed and Assigned(OldNode) then + begin + data := Sender.GetNodeData(OldNode); + if data.Field is TFile then + 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]); + TFile(data.Field).Opened := False; + end; + end; + end; +end; + procedure TForm_Meta.VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString); var @@ -204,8 +261,12 @@ begin 0: begin if Data.Field is TFile then + begin if Length(TFile(Data.Field).FileName) = 0 then - TargetCanvas.Font.Color := $000060; + TargetCanvas.Font.Color := $C06060; + if TFile(Data.Field).FileSize = 0 then + TargetCanvas.Font.Color := $2020A0; + end; end; end; end;