ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/oup/current/Tools/BinEdit.pas
(Generate patch)

Comparing oup/current/Tools/BinEdit.pas (file contents):
Revision 179 by alloc, Sun May 13 22:18:18 2007 UTC vs.
Revision 231 by alloc, Wed Jun 20 22:24:04 2007 UTC

# Line 1 | Line 1
1   unit BinEdit;
2 +
3   interface
4 +
5   uses
6    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7 <  Dialogs, Template, StdCtrls, ExtCtrls, VirtualTrees, Grids, Wrapgrid,
8 <  MPHexEditor, VTHeaderPopup, Menus, StrUtils, Clipbrd,
9 <  Data, TypeDefs, ConnectionManager, Buttons;
7 >  Dialogs, VirtualTrees, Grids, Wrapgrid, MPHexEditor,
8 >  StdCtrls, Menus, ExtCtrls, Buttons,
9 >  Data, TypeDefs, ConnectionManager,
10 >  _TemplateFileList, VTHeaderPopup, ComCtrls;
11  
12   type
13 <  TForm_BinEdit = class(TForm_ToolTemplate)
13 >  TForm_BinEdit = class(TForm_TemplateFileList)
14 >    panel_imexport: TPanel;
15 >    btn_export: TButton;
16 >    btn_import: TButton;
17      hex: TMPHexEditor;
18      Splitter2: TSplitter;
19      value_viewer: TWrapGrid;
14    VST: TVirtualStringTree;
20      Splitter3: TSplitter;
21 +    VST: TVirtualStringTree;
22 +    VTHPopup: TVTHeaderPopupMenu;
23      value_viewer_context: TPopupMenu;
24      value_viewer_context_copy: TMenuItem;
25      value_viewer_context_copyasdec: TMenuItem;
# Line 20 | Line 27 | type
27      value_viewer_context_copyasbitset: TMenuItem;
28      value_viewer_context_copyasstring: TMenuItem;
29      value_viewer_context_copyashex: TMenuItem;
23    VTHPopup: TVTHeaderPopupMenu;
24    panel_imexport: TPanel;
25    btn_export: TButton;
26    btn_import: TButton;
27    procedure FormCreate(Sender: TObject);
30      procedure NewFile(fileinfo: TFileInfo);
31  
30    procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
31    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
32
33    procedure hexKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
34    procedure hexSelectionChanged(Sender: TObject);
35    procedure hexChange(Sender: TObject);
36
37    procedure LoadDat(_fileid: Integer);
32      function Save: Boolean;
33      function GetValue(datatype: Word; offset: Integer): String;
34      procedure SetNewValue(datatype: Word; offset: Integer; Value: String);
35  
36      procedure WriteStructureInfos;
37      procedure ClearStructViewer;
44    procedure VSTDblClick(Sender: TObject);
45    procedure VSTFocusChanged(Sender: TBaseVirtualTree; Node: PVirtualNode;
46      Column: TColumnIndex);
47    procedure VTHPopupColumnChange(const Sender: TBaseVirtualTree;
48      const Column: TColumnIndex; Visible: Boolean);
49    procedure VSTHeaderDragged(Sender: TVTHeader; Column: TColumnIndex;
50      OldPosition: Integer);
51    procedure VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
52      Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
38  
39      procedure ClearValues;
40      procedure WriteValues;
41 +
42 +    procedure FormCreate(Sender: TObject);
43 +    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
44 +    procedure hexChange(Sender: TObject);
45 +    procedure hexKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
46 +    procedure hexSelectionChanged(Sender: TObject);
47      procedure value_viewerDblClick(Sender: TObject);
48 <    procedure value_viewer_context_copyClick(Sender: TObject);
48 >    procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
49 >    procedure value_viewer_contextPopup(Sender: TObject);
50      procedure value_viewerMouseDown(Sender: TObject; Button: TMouseButton;
51        Shift: TShiftState; X, Y: Integer);
52 <    procedure value_viewer_contextPopup(Sender: TObject);
52 >    procedure value_viewer_context_copyClick(Sender: TObject);
53 >    procedure VSTDblClick(Sender: TObject);
54 >    procedure VSTFocusChanged(Sender: TBaseVirtualTree; Node: PVirtualNode;
55 >      Column: TColumnIndex);
56 >    procedure VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
57 >      Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
58 >    procedure VSTHeaderDragged(Sender: TVTHeader; Column: TColumnIndex;
59 >      OldPosition: Integer);
60 >    procedure VTHPopupColumnChange(const Sender: TBaseVirtualTree;
61 >      const Column: TColumnIndex; Visible: Boolean);
62    private
63      fileid: Integer;
64      ConID: Integer;
# Line 65 | Line 66 | type
66    public
67    end;
68  
68 var
69  Form_BinEdit: TForm_BinEdit;
70
69   implementation
72
73 uses ValueEdit, Main, Functions, DatStructureLoader, RawEdit;
70   {$R *.dfm}
71 + uses ValueEdit, Main, Functions, DatStructureLoader, RawEdit, RawList,
72 +  StrUtils, Clipbrd, _TemplateFile;
73 +
74  
75   type
76    PNodeData = ^TNodeData;
# Line 118 | Line 117 | begin
117    //
118   end;
119  
121 procedure TForm_BinEdit.NewFile(fileinfo: TFileInfo);
122 begin
123  LoadDat(fileinfo.ID);
124 end;
125
126
127
128
129 function AddVSTEntry(AVST: TCustomVirtualStringTree; ANode: PVirtualNode;
130  ARecord: TNodeData): PVirtualNode;
131 var
132  Data: PNodeData;
133 begin
134  Result := AVST.AddChild(ANode);
135  Data   := AVST.GetNodeData(Result);
136  AVST.ValidateNode(Result, False);
137  Data^ := ARecord;
138 end;
139
140
141
120  
121 < procedure TForm_BinEdit.LoadDat(_fileid: Integer);
121 > procedure TForm_BinEdit.NewFile(fileinfo: TFileInfo);
122   var
123    mem:  TMemoryStream;
124   begin
# Line 155 | Line 133 | begin
133        end;
134      end;
135    end;
136 <  if _fileid >= 0 then
136 >  if fileinfo.ID >= 0 then
137    begin
138 <    fileid := _fileid;
138 >    fileid := fileinfo.ID;
139      ConID := ConnectionID;
140 <    if ConManager.Connection[ConID].ExtractFileIDOfName(filelist.Items.Strings[filelist.ItemIndex]) <> fileid then
141 <      Self.SelectFileID(ConnectionID, fileid);
140 > //    if ConManager.Connection[ConID].ExtractFileIDOfName(filelist.Items.Strings[filelist.ItemIndex]) <> fileid then
141 > //      Self.SelectFileID(ConnectionID, fileid);
142      Self.ClearStructViewer;
143      mem := nil;
144      ConManager.Connection[ConID].LoadDatFile(fileid, TStream(mem));
# Line 172 | Line 150 | begin
150    end
151    else
152    begin
153 <    fileid := _fileid;
153 >    fileid := -1;
154      ConID := -1;
155      Self.ClearStructViewer;
156      ClearValues;
# Line 183 | Line 161 | end;
161  
162  
163  
164 +
165 + function AddVSTEntry(AVST: TCustomVirtualStringTree; ANode: PVirtualNode;
166 +  ARecord: TNodeData): PVirtualNode;
167 + var
168 +  Data: PNodeData;
169 + begin
170 +  Result := AVST.AddChild(ANode);
171 +  Data   := AVST.GetNodeData(Result);
172 +  AVST.ValidateNode(Result, False);
173 +  Data^ := ARecord;
174 + end;
175 +
176 +
177 +
178 +
179 +
180   function TForm_BinEdit.GetValue(datatype: Word; offset: Integer): String;
181   var
182    Data: TByteData;
183    i:    Integer;
190  tempi: Integer;
184    floatformat: TFormatSettings;
185   begin
186    floatformat.DecimalSeparator := '.';
# Line 225 | Line 218 | begin
218      11:
219      begin
220        if Length(rawlist) > 0 then
221 +      begin
222          for i := 0 to High(rawlist) do
223            if rawlist[i].SrcOffset = offset then
224            begin
# Line 234 | Line 228 | begin
228                Result := 'unused';
229              Break;
230            end;
231 +        if i > High(rawlist) then
232 +          Result := 'unused';
233 +      end;
234      end;
235      12:
236        if hex.Data[offset] = 1 then
# Line 756 | Line 753 | var
753    node: PVirtualNode;
754    nodedata: PNodeData;
755    rawinfo: TRawDataInfo;
756 <  form: TForm_ToolTemplate;
756 >  form: TForm_TemplateFileList;
757   begin
758    if VST.FocusedColumn = 3 then
759    begin
# Line 777 | Line 774 | begin
774          if rawinfo.RawSize > 0 then
775          begin
776            form := nil;
777 <          form := Form_Main.open_child('rawedit', ConID, fileid);
777 >          form := TForm_TemplateFileList(Form_Main.open_child('rawedit', ConID, fileid));
778            if Assigned(form) then
779              TForm_RawEdit(form).LoadRaw(rawinfo);
780          end;
# Line 796 | Line 793 | begin
793        end;
794        if (nodedata.DataType >= 100) and (nodedata.DataType <= 300) then
795        begin
796 <        form := Form_Main.open_child('binedit', ConID, -1);
796 >        form := TForm_TemplateFileList(Form_Main.open_child('binedit', ConID));
797          if Assigned(form) then
798            form.SetFileFilters(nodedata.Value, '', False);
799        end;
# Line 986 | Line 983 | end;
983  
984  
985  
989
986   procedure TForm_BinEdit.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
987   begin
988    if (Shift = [ssCtrl]) and (Key = 83) then

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)