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

Comparing:
oup/rewrite/Tools/RawEdit.pas (file contents), Revision 105 by alloc, Wed Feb 21 00:29:27 2007 UTC vs.
oup/current/Tools/RawEdit.pas (file contents), Revision 221 by alloc, Mon Jun 18 14:20:33 2007 UTC

# Line 1 | Line 1
1   unit RawEdit;
2 +
3   interface
4 +
5   uses
6    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7 <  Dialogs, Template, StdCtrls, ExtCtrls, Menus, Grids, Wrapgrid,
8 <  MPHexEditor, Clipbrd, StrUtils, TypeDefs,
7 <  Data, Functions, DatStructureLoader, ConnectionManager, Buttons;
7 >  Dialogs, _TemplateFileList, Menus, StdCtrls, ExtCtrls, Buttons, ComCtrls,
8 >  TypeDefs, Grids, Wrapgrid, MPHexEditor;
9  
10   type
11 <  TForm_RawEdit = class(TForm_ToolTemplate)
11 <    Splitter4: TSplitter;
11 >  TForm_RawEdit = class(TForm_TemplateFileList)
12      panel_imexport: TPanel;
13      btn_export: TButton;
14      btn_import: TButton;
15      GroupBox1: TGroupBox;
16      list_offset: TListBox;
17 +    Splitter4: TSplitter;
18 +    opend: TOpenDialog;
19 +    saved: TSaveDialog;
20      hex: TMPHexEditor;
18    Splitter2: TSplitter;
21      value_viewer: TWrapGrid;
22 +    Splitter2: TSplitter;
23      value_viewer_context: TPopupMenu;
24      value_viewer_context_copy: TMenuItem;
25      value_viewer_context_copyasdec: TMenuItem;
# Line 24 | Line 27 | type
27      value_viewer_context_copyasbitset: TMenuItem;
28      value_viewer_context_copyasstring: TMenuItem;
29      value_viewer_context_copyashex: TMenuItem;
27    opend: TOpenDialog;
28    saved: TSaveDialog;
30      procedure list_offsetClick(Sender: TObject);
31      procedure NewFile(fileinfo: TFileInfo);
32      procedure LoadRaw(raw_info: TRawDataInfo);
# Line 38 | Line 39 | type
39      procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
40      procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
41  
42 <    function GetValue(datatype: Word; offset: LongWord): String;
42 >    function GetValue(datatype: Word; offset: Integer): String;
43      procedure ClearValues;
44      procedure WriteValues;
45 <    procedure SetNewValue(datatype: Word; offset: LongWord; Value: String);
45 >    procedure SetNewValue(datatype: Word; offset: Integer; Value: String);
46  
47      procedure value_viewerDblClick(Sender: TObject);
48      procedure value_viewer_context_copyClick(Sender: TObject);
# Line 53 | Line 54 | type
54      procedure hexSelectionChanged(Sender: TObject);
55      procedure hexChange(Sender: TObject);
56    private
57 <    ConID, fileid, datoffset: Integer;
57 >    fileid, datoffset: Integer;
58    public
59    end;
60  
60 var
61  Form_RawEdit: TForm_RawEdit;
61  
62   implementation
63   {$R *.dfm}
64 < uses Main, ValueEdit, RawList;
64 > uses
65 >  _TemplateFile, ValueEdit, ConnectionManager, StrUtils, Functions, RawList,
66 >  Data, Clipbrd;
67  
68   procedure TForm_RawEdit.NewFile(fileinfo: TFileInfo);
69   var
# Line 100 | Line 101 | end;
101  
102   procedure TForm_RawEdit.LoadRaw(raw_info: TRawDataInfo);
103   var
104 <  i:    LongWord;
104 <  mem: TMemoryStream;
104 >  i:    Integer;
105   begin
106    if hex.Modified then
107    begin
# Line 110 | Line 110 | begin
110        Exit;
111      end;
112    end;
113 <  if list_offset.Count = 0 then
113 >  for i := 0 to filelist.Count - 1 do
114    begin
115 <    for i := 0 to filelist.Count - 1 do
115 >    if ConManager.Connection[ConnectionID].ExtractFileIDOfName(filelist.Items.Strings[i]) = Raw_Info.SrcID then
116      begin
117 <      if ConManager.Connection[ConID].ExtractFileIDOfName(filelist.Items.Strings[i]) = Raw_Info.SrcID then
118 <      begin
119 <        filelist.ItemIndex := i;
120 <        listClick(Self);
121 <        Break;
122 <      end;
117 >      filelist.ItemIndex := i;
118 >      listClick(Self);
119 >      Break;
120      end;
121 <    for i := 0 to list_offset.Count - 1 do
121 >  end;
122 >  for i := 0 to list_offset.Count - 1 do
123 >  begin
124 >    if MidStr(list_offset.Items.Strings[i], 3, 8) = IntToHex(raw_info.SrcOffset, 8) then
125      begin
126 <      if MidStr(list_offset.Items.Strings[i], 3, 8) = IntToHex(raw_info.SrcOffset, 8) then
127 <      begin
128 <        list_offset.ItemIndex := i;
129 <        Break;
130 <      end;
126 >      list_offset.ItemIndex := i;
127 >      list_offsetClick(Self);
128 >      Break;
129      end;
130    end;
133  mem := nil;
134  ConManager.Connection[ConID].LoadRawFile(raw_info.SrcID, raw_info.SrcOffset, TStream(mem));
135  hex.LoadFromStream(mem);
136  ClearValues;
137  hexSelectionChanged(Self);
131   end;
132  
133  
# Line 143 | Line 136 | end;
136  
137  
138   procedure TForm_RawEdit.list_offsetClick(Sender: TObject);
139 + var
140 +  mem: TMemoryStream;
141 +  rawinfo: TRawDataInfo;
142   begin
147  ClearValues;
143    datoffset := StrToInt('$' + MidStr(
144      list_offset.Items.Strings[list_offset.ItemIndex], 3, 8));
145 <  LoadRaw(ConManager.Connection[ConID].GetRawInfo(fileid, datoffset));
145 >
146 >  rawinfo := ConManager.Connection[ConnectionID].GetRawInfo(fileid, datoffset);
147 >
148 >  mem := nil;
149 >  ConManager.Connection[ConnectionID].LoadRawFile(rawinfo.SrcID, rawinfo.SrcOffset, TStream(mem));
150 >  hex.LoadFromStream(mem);
151 >  ClearValues;
152 >  hexSelectionChanged(Self);
153   end;
154  
155  
156  
157  
158 < function TForm_RawEdit.GetValue(datatype: Word; offset: LongWord): String;
158 > function TForm_RawEdit.GetValue(datatype: Word; offset: Integer): String;
159   var
160    Data: TByteData;
161    i:    Word;
# Line 227 | Line 229 | var
229    i, j:  Integer;
230    Data:  TByteData;
231    str:   String;
232 <  Value: LongWord;
232 >  Value: Integer;
233    floatformat: TFormatSettings;
234   begin
235    floatformat.DecimalSeparator := '.';
# Line 310 | Line 312 | begin
312        str := '';
313        if hex.SelCount = 0 then
314        begin
315 <        while (hex.Data[hex.SelStart + j] > 0) and ((hex.SelStart + j) < hex.DataSize) do
315 >        while (hex.SelStart + j) < hex.DataSize do
316          begin
317 +          if hex.Data[hex.SelStart + j] = 0 then
318 +            Break;
319            if hex.Data[hex.selstart + j] >= 32 then
320              str := str + Char(hex.Data[hex.SelStart + j])
321            else
# Line 339 | Line 343 | end;
343  
344   procedure TForm_RawEdit.FormCreate(Sender: TObject);
345   var
346 <  i:     LongWord;
346 >  i:     Integer;
347    exts: String;
348   begin
349    inherited;
# Line 387 | Line 391 | end;
391   function TForm_RawEdit.Save: Boolean;
392   var
393    mem:  TMemoryStream;
394 <  i:    LongWord;
394 >  i:    Integer;
395   begin
396    case MessageBox(Self.Handle, PChar('Save changes to .raw-part of file ' +
397 <      ConManager.Connection[ConID].GetFileInfo(fileid).Name + '?'), PChar('Data changed...'),
397 >      ConManager.Connection[ConnectionID].GetFileInfo(fileid).Name + '?'), PChar('Data changed...'),
398        MB_YESNOCANCEL) of
399      idYes:
400      begin
401        mem := TMemoryStream.Create;
402        hex.SaveToStream(mem);
403        mem.Seek(0, soFromBeginning);
404 <      ConManager.Connection[ConID].UpdateRawFile(fileid, datoffset, mem);
404 >      ConManager.Connection[ConnectionID].UpdateRawFile(fileid, datoffset, mem);
405        mem.Free;
406        hex.Modified := False;
407        for i := 0 to hex.Datasize - 1 do
# Line 505 | Line 509 | var
509    fs: TFileStream;
510   begin
511    saved.Filter     := 'Files of matching extension (*.' +
512 <    ConManager.Connection[ConID].GetFileInfo(fileid).Extension + ')|*.' +
513 <    ConManager.Connection[ConID].GetFileInfo(fileid).Extension +
512 >    ConManager.Connection[ConnectionID].GetFileInfo(fileid).Extension + ')|*.' +
513 >    ConManager.Connection[ConnectionID].GetFileInfo(fileid).Extension +
514      '|All files|*.*';
515 <  saved.DefaultExt := ConManager.Connection[ConID].GetFileInfo(fileid).Extension;
515 >  saved.DefaultExt := ConManager.Connection[ConnectionID].GetFileInfo(fileid).Extension;
516    if saved.Execute then
517    begin
518      fs := TFileStream.Create(saved.FileName, fmCreate);
# Line 524 | Line 528 | procedure TForm_RawEdit.btn_importClick(
528   var
529   //  Data: Tdata;
530    fs:   TFileStream;
527  data: TByteData;
531    i: Integer;
532    rawinfo: TRawDataInfo;
533   begin
534    opend.Filter := 'Files of matching extension (*.' +
535 <    ConManager.Connection[ConID].GetFileInfo(fileid).Extension + ')|*.' +
536 <    ConManager.Connection[ConID].GetFileInfo(fileid).Extension +
535 >    ConManager.Connection[ConnectionID].GetFileInfo(fileid).Extension + ')|*.' +
536 >    ConManager.Connection[ConnectionID].GetFileInfo(fileid).Extension +
537      '|All files|*.*';
538    if opend.Execute then
539    begin
540      fs := TFileStream.Create(opend.FileName, fmOpenRead);
541      if fs.Size <> hex.DataSize then
542      begin
543 <      if (not (CR_ResizeRaw in ConManager.Connection[ConID].ChangeRights)) and (not (CR_AppendRaw in ConManager.Connection[ConnectionID].ChangeRights)) then
543 >      if
544 >        (not (CR_ResizeRaw in ConManager.Connection[ConnectionID].ChangeRights))
545 >        and (not (CR_AppendRaw in ConManager.Connection[ConnectionID].ChangeRights))
546 >        then
547        begin
548          ShowMessage('Can''t import ' + ExtractFilename(importd.FileName) +
549              ', file has to have same size as file in .raw with this backend.' + CrLf +
# Line 557 | Line 563 | begin
563            Exit;
564          end;
565        end;
566 <      rawinfo := ConManager.Connection[ConID].GetRawInfo(fileid, datoffset);
567 <      if CR_ResizeRaw in ConManager.Connection[ConID].ChangeRights then
568 <        ConManager.Connection[ConID].UpdateRawFile(fileid, datoffset, fs)
569 <      else if CR_AppendRaw in ConManager.Connection[ConID].ChangeRights then
570 <        i := ConManager.Connection[ConID].AppendRawFile(rawinfo.LocSep, fs);
571 <        ConManager.Connection[ConID].UpdateDatFilePart(fileid, datoffset, 4, @i);
566 >      rawinfo := ConManager.Connection[ConnectionID].GetRawInfo(fileid, datoffset);
567 >      if CR_ResizeRaw in ConManager.Connection[ConnectionID].ChangeRights then
568 >        ConManager.Connection[ConnectionID].UpdateRawFile(fileid, datoffset, fs)
569 >      else if CR_AppendRaw in ConManager.Connection[ConnectionID].ChangeRights then
570 >        i := ConManager.Connection[ConnectionID].AppendRawFile(rawinfo.LocSep, fs);
571 >        ConManager.Connection[ConnectionID].UpdateDatFilePart(fileid, datoffset, 4, @i);
572      end else begin
573 <      ConManager.Connection[ConID].UpdateRawFile(fileid, datoffset, fs);
573 >      ConManager.Connection[ConnectionID].UpdateRawFile(fileid, datoffset, fs);
574      end;
575      fs.Seek(0, soFromBeginning);
576      hex.LoadFromStream(fs);
# Line 634 | Line 640 | procedure TForm_RawEdit.value_viewer_con
640   var
641   //  i:     Byte;
642    Name:  String;
643 <  Value: LongWord;
643 >  Value: Integer;
644   begin
645    Name := TMenuItem(Sender).Name;
646    if Pos('asstring', Name) > 0 then
# Line 693 | Line 699 | end;
699  
700  
701  
702 < procedure TForm_RawEdit.SetNewValue(datatype: Word; offset: LongWord; Value: String);
702 > procedure TForm_RawEdit.SetNewValue(datatype: Word; offset: Integer; Value: String);
703   var
704    Data: TByteData;
705    value_int: LongWord;
# Line 760 | Line 766 | end;
766  
767   procedure TForm_RawEdit.value_viewerDblClick(Sender: TObject);
768   var
769 <  offset:     LongWord;
769 >  offset:     Integer;
770    datatype:   Word;
771    objectname: String;
772    Value:      String;
# Line 806 | Line 812 | end;
812  
813   begin
814    AddToolListEntry('rawedit', 'Binary .raw-Editor', '');
815 < end.
815 > end.
816 >
817 >

Diff Legend

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