--- oup/current/Tools/MetaEditor.pas 2007/07/14 16:50:55 238 +++ oup/current/Tools/MetaEditor.pas 2009/05/06 13:47:23 321 @@ -51,6 +51,10 @@ type Column: TColumnIndex; const P: TPoint; var AskParent: Boolean; var PopupMenu: TPopupMenu); procedure vst_setRootClick(Sender: TObject); + procedure vst_newRootClick(Sender: TObject); + procedure VSTGetHint(Sender: TBaseVirtualTree; Node: PVirtualNode; + Column: TColumnIndex; var LineBreakStyle: TVTTooltipLineBreakStyle; + var HintText: WideString); private root: TTreeElement; procedure NewCon(ID: Integer); @@ -61,7 +65,8 @@ type implementation {$R *.dfm} -uses _MetaManager, _MetaTypes, ConnectionManager, Data, _FileTypes; +uses _MetaManager, _MetaTypes, ConnectionManager, Data, _FileTypes, Main, + TypeDefs; type PNodeData = ^TNodeData; @@ -86,6 +91,7 @@ procedure TForm_Meta.NewCon(ID: Integer) begin if ID >= 0 then SetRoot(ConManager.Connection[FConnectionID].MetaData.Root); +//SetRoot(ConManager.Connection[FConnectionID].MetaData.FileById[454]); end; @@ -94,16 +100,19 @@ var i: Integer; data: TNodeData; node: PVirtualNode; + basenode: PVirtualNode; begin if FConnectionID <> TreeElem.ConnectionID then SelectConnection(TreeElem.ConnectionID); root := TreeElem; VST.Clear; VST.BeginUpdate; + data.Field := root; + basenode := AddVSTEntry(VST, nil, data); for i := 0 to root.ChildCount - 1 do begin data.Field := root.Child[i]; - node := AddVSTEntry(VST, nil, data); + node := AddVSTEntry(VST, basenode, data); if data.Field.ChildCount > 0 then VST.HasChildren[node] := True; end; @@ -117,10 +126,8 @@ var newdata: TNodeData; newnode: PVirtualNode; i: Integer; - Meta: TMetaManager; begin data := Sender.GetNodeData(node); - Meta := ConManager.Connection[ConnectionID].MetaData; if data.Field.ChildCount > 0 then begin @@ -136,20 +143,27 @@ begin end; + procedure TForm_Meta.VSTFocusChanged(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex); var data: PNodeData; + ffile: TResource; begin data := Sender.GetNodeData(Node); - if data.Field is TFile then + ffile := nil; + if data.Field is TResource then + ffile := TResource(data.Field); + if data.Field is _MetaTypes.TDatLink then + if Assigned(_MetaTypes.TDatLink(data.Field).TargetFile) then + ffile := TResource(_MetaTypes.TDatLink(data.Field).TargetFile); + if Assigned(ffile) then begin - TFile(data.Field).InitEditor; - if Assigned(TFile(data.Field).Editor) then + if Assigned(ffile.Editor) then begin - TFile(data.Field).Editor.Align := alClient; - tab_meta.InsertControl(TFile(data.Field).Editor); - TFile(data.Field).Opened := True; + ffile.Editor.Align := alClient; + tab_meta.InsertControl(ffile.Editor); + ffile.Opened := True; end; end; end; @@ -163,25 +177,24 @@ var i: Integer; begin data := Sender.GetNodeData(NewNode); - if data.Field is TFile then + if data.Field is TResource then begin - TFile(data.Field).InitEditor; - if Assigned(TFile(data.Field).Editor) then - Allowed := not TFile(data.Field).Opened + if Assigned(TResource(data.Field).Editor) then + Allowed := not TResource(data.Field).Opened else Allowed := True; end; if Allowed and Assigned(OldNode) then begin data := Sender.GetNodeData(OldNode); - if data.Field is TFile then + if data.Field is TResource then begin - if TFile(data.Field).Opened then + if TResource(data.Field).Opened then begin 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; + TResource(data.Field).Opened := False; end; end; end; @@ -198,22 +211,10 @@ begin if TextType = ttNormal then begin case Column of - 0: - begin - CellText := Data.Field.GetCaption; - end; - 1: - begin - if Data.Field is TFile then - CellText := TFile(Data.Field).FileInfo.Extension; - end; + 0: CellText := Data.Field.Caption; + 1: CellText := data.Field.VType; 2: begin - if Data.Field is TFile then - CellText := IntToStr(TFile(Data.Field).FileInfo.ID); - end; - 3: - begin if Data.Field is TDataField then CellText := TDataField(Data.Field).ValueAsString; end; @@ -234,11 +235,11 @@ begin case Column of 0: begin - if Data.Field is TFile then + if Data.Field is TResource then begin - if Length(TFile(Data.Field).FileInfo.Name) = 0 then + if Length(TResource(Data.Field).FileInfo.Name) = 0 then TargetCanvas.Font.Color := $C06060; - if TFile(Data.Field).FileInfo.Size = 0 then + if TResource(Data.Field).FileInfo.Size = 0 then TargetCanvas.Font.Color := $2020A0; end; end; @@ -248,6 +249,46 @@ end; +procedure TForm_Meta.VSTGetHint(Sender: TBaseVirtualTree; Node: PVirtualNode; + Column: TColumnIndex; var LineBreakStyle: TVTTooltipLineBreakStyle; + var HintText: WideString); +var + data: PNodeData; + CellText: WideString; + + ifile: TResource; +begin + inherited; + if Assigned(Node) then + begin + VSTGetText(Sender, Node, Column, ttNormal, CellText); + if Length(CellText) > 0 then + begin + data := Sender.GetNodeData(Node); + if data.Field is TDataField then + begin + case Column of + 0,1: HintText := TDataField(data.Field).Description; + 2: HintText := ''; + end; + end; + if data.Field is TResource then + begin + ifile := TResource(data.Field); + case Column of + 0: HintText := + 'FileID: ' + IntToStr(ifile.FileInfo.ID) + #13#10 + + 'Name: ' + ifile.FileInfo.Name + #13#10 + + 'Extension: ' + ifile.FileInfo.Extension + #13#10 + + '.dat-size: ' + IntToStr(ifile.FileInfo.Size) + #13#10; + end; + end; + end; + end + else + HintText := ''; +end; + procedure TForm_Meta.VSTGetPopupMenu(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; const P: TPoint; var AskParent: Boolean; var PopupMenu: TPopupMenu); @@ -263,7 +304,7 @@ begin data := Sender.GetNodeData(Node); if Column = 0 then begin - if TTreeElement(data.Field).GetChildCount > 0 then + if TTreeElement(data.Field).ChildCount > 0 then PopupMenu := vst_popup else PopupMenu := nil; @@ -271,6 +312,19 @@ begin end; end; +procedure TForm_Meta.vst_newRootClick(Sender: TObject); +var + data: PNodeData; + form: TForm_BaseTemplate; +begin + inherited; + data := VST.GetNodeData(VST.FocusedNode); + form := nil; + form := Form_Main.open_child('meta'); + if form is TForm_Meta then + TForm_Meta(form).SetRoot(data.Field); +end; + procedure TForm_Meta.vst_setRootClick(Sender: TObject); var data: PNodeData;