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

Comparing:
oup/rewrite/Main.pas (file contents), Revision 93 by alloc, Thu Jan 18 17:15:59 2007 UTC vs.
oup/current/Main.pas (file contents), Revision 241 by alloc, Tue Jul 17 22:27:16 2007 UTC

# Line 6 | Line 6 | uses
6    MPHexEditor, ToolWin, ImgList, Tabs,
7    MDITab, TB2Item, TB2Dock, TB2Toolbar, TB2MDI, OneInst,
8    Data, TypeDefs, ConnectionManager,
9 < //  Functions, Exporters, DataStructures,
10 <  Settings, {Helper_LevelDB, }
11 <  Template, BinEdit, Extractor, Preview, RawEdit, TxmpReplace;
9 >  Functions, Settings,
10 >  RawEdit, BinEdit, Extractor, Preview, TxmpReplace,
11 >  _BaseTemplate, _TemplateFile, _TemplateFileList;
12  
13   type
14    TForm_Main = class(TForm)
# Line 44 | Line 44 | type
44      menu_windows_previous: TTBItem;
45      menu_sep2:  TTBSeparatorItem;
46      menu_About: TTBItem;
47 <    Toolbar:    TTBToolbar;
47 >    Toolbar_main: TTBToolbar;
48      tbOpen:     TTBItem;
49      DockLeft:   TTBDock;
50      DockRight:  TTBDock;
# Line 57 | Line 57 | type
57      menu_view_statusbar: TTBItem;
58      menu_view_toolbar: TTBItem;
59      tb_separator1: TTBSeparatorItem;
60    tb_preview: TTBItem;
61    tb_structure: TTBItem;
62    tb_compare: TTBItem;
63    tb_extractor: TTBItem;
64    tb_txmpreplacer: TTBItem;
65    tb_rawedit: TTBItem;
66    tb_datedit: TTBItem;
60      menu_windows_tilevert: TTBItem;
68    tb_meta: TTBItem;
61      menu_meta: TTBItem;
62      TBSeparatorItem1: TTBSeparatorItem;
63      tb_db2dat: TTBItem;
# Line 75 | Line 67 | type
67      Images_Close: TImageList;
68      menu_conns: TTBSubmenuItem;
69      menu_windows: TTBSubmenuItem;
70 +    menu_filemanager: TTBItem;
71 +    Toolbar_tools: TTBToolbar;
72 +    tb_preview: TTBItem;
73 +    tb_datedit: TTBItem;
74 +    tb_rawedit: TTBItem;
75 +    tb_txmpreplacer: TTBItem;
76 +    tb_extractor: TTBItem;
77 +    tb_meta: TTBItem;
78 +    tb_filemanager: TTBItem;
79 +    tb_compare: TTBItem;
80 +    tb_structure: TTBItem;
81 +    menu_view_toolbar_tools: TTBItem;
82      procedure FormClose(Sender: TObject; var Action: TCloseAction);
83      procedure FormResize(Sender: TObject);
84      procedure FormCreate(Sender: TObject);
# Line 89 | Line 93 | type
93        Shift: TShiftState; X, Y: Integer);
94      procedure MDITabMouseMove(Sender: TObject; Shift: TShiftState; X,
95        Y: Integer);
96 <    procedure ToolbarDockChanged(Sender: TObject);
96 >    procedure Toolbar_mainDockChanged(Sender: TObject);
97      procedure CreateConnection(filename: String);
98 +    function CheckConnectionCloseable(index: Integer): Boolean;
99  
100      procedure menu_loadfileClick(Sender: TObject);
101      procedure menu_loaddbClick(Sender: TObject);
# Line 107 | Line 112 | type
112      procedure menu_txmpreplaceClick(Sender: TObject);
113      procedure menu_previewClick(Sender: TObject);
114      procedure menu_metaClick(Sender: TObject);
110    function open_child(window_context: String; connection, fileid: Integer): TForm_ToolTemplate;
115  
116      procedure menu_windows_cascadeClick(Sender: TObject);
117      procedure menu_windows_tilevertClick(Sender: TObject);
# Line 124 | Line 128 | type
128      procedure menu_AboutClick(Sender: TObject);
129  
130      procedure WMCopyData(var Msg: TWMCopyData); message WM_COPYDATA;
131 +    procedure menu_filemanagerClick(Sender: TObject);
132 +    procedure menu_view_toolbar_toolsClick(Sender: TObject);
133    private
128    ConnectionManager: TConnectionManager;
134    public
135 +    function open_child(window_context: String; Connection, FileID: Integer): TForm_BaseTemplate; overload;
136 +    function open_child(window_context: String; Connection: Integer): TForm_BaseTemplate; overload;
137 +    function open_child(window_context: String): TForm_BaseTemplate; overload;
138      procedure DefaultHandler(var Message); override;
139    end;
140  
# Line 135 | Line 143 | var
143  
144   implementation
145  
146 + uses
147 +  LevelDB, MetaEditor, FileManager;
148 +
149   {$R *.dfm}
150  
151  
# Line 153 | Line 164 | procedure TForm_Main.CreateConnection(fi
164   var
165    RepMsg: TStatusMessages;
166   begin
167 <  ConnectionManager.OpenConnection(filename, RepMsg);
167 >  ConManager.OpenConnection(filename, RepMsg);
168    ShowOpenMsg(RepMsg);
169    if RepMsg = SM_OK then
170    begin
171      UpdateStatBar;
172 +    UpdateConLists;
173    end;
174   end;
175  
176 + function TForm_Main.CheckConnectionCloseable(index: Integer): Boolean;
177 + var
178 +  i: Integer;
179 +  toolform: TForm_BaseTemplate;
180 + begin
181 +  Result := True;
182 +  if MDITab.MDIChildCount > 0 then
183 +  begin
184 +    for i := 0 to MDITab.MDIChildCount - 1 do
185 +    begin
186 +      if MDITab.MDIChildren[i] is TForm_BaseTemplate then
187 +      begin
188 +        toolform := TForm_BaseTemplate(MDITab.MDIChildren[i]);
189 +        if toolform.ConnectionID = ConManager.ConnectionByIndex[index].ConnectionID then
190 +        begin
191 +          if not toolform.Closeable then
192 +          begin
193 +            ShowMessage('Can not close toolwindow: ' + toolform.Caption);
194 +            Result := False;
195 +          end;
196 +        end;
197 +      end;
198 +    end;
199 +  end;
200 + end;
201 +
202 +
203   { Eine zweite Instanz hat uns ihre Kommandozeilenparameter geschickt }
204   procedure TForm_Main.WMCopyData(var Msg: TWMCopyData);
205   var
# Line 208 | Line 247 | end;
247  
248  
249   procedure TForm_Main.FormCreate(Sender: TObject);
211 var
212  RepMsg: TStatusMessages;
250   begin
251    Self.Caption := 'Oni Un/Packer ' + version;
252    Self.FormResize(Self);
253  
254 <  ConnectionManager := TConnectionManager.Create;
255 <  ConnectionManager.OnCoonnectionListChanged := UpdateConLists;
254 >  ConManager.OnCoonnectionListChanged := UpdateConLists;
255 >
256 >  Application.HintPause := 250;
257 >  Application.HintHidePause := 5000;
258  
259    if FileExists(ExtractFilepath(Application.EXEname) + '\oniunpacker.ini') then
260    begin
# Line 227 | Line 266 | begin
266    end
267    else
268    begin
269 +    ShowMessage('Warning!' + #13#10 +
270 +                'It seems like this is the first time you OUP.' + #13#10 +
271 +                'I do not take any responsibility for messed up data files' + #13+#10 +
272 +                'Do not forget to make backup copies of your *.dat/*.raw/*.sep files!');
273      AppSettings.DatPath        := ExtractFilepath(Application.EXEname);
274      AppSettings.ExtractPath    := ExtractFilepath(Application.EXEname) + '\extract';
232    AppSettings.FilenumbersAsHex := False;
275      AppSettings.CharSet        := DEFAULT_CHARSET;
276      AppSettings.HideUnusedData := False;
277    end;
# Line 292 | Line 334 | var
334    pt: TPoint;
335    tabIndex: Integer;
336    hint: String;
337 +  tool: TForm_BaseTemplate;
338   begin
339    pt.X := X;
340    pt.Y := Y;
# Line 300 | Line 343 | begin
343  
344    if tabIndex >= 0 then
345    begin
346 <    if MDITab.MDIChildren[tabIndex] is TForm_ToolTemplate then
346 >    if MDITab.MDIChildren[tabIndex] is TForm_BaseTemplate then
347      begin
348 <      if TForm_ToolTemplate(MDITab.MDIChildren[tabIndex]).Connection <> nil then
348 >      tool := TForm_BaseTemplate(MDITab.MDIChildren[tabIndex]);
349 >      if tool.ConnectionID > -1 then
350          hint := 'Connection: ' +
351 <              ExtractFileName(TForm_ToolTemplate(MDITab.MDIChildren[tabIndex]).Connection.FileName) + #13+#10
351 >              ExtractFileName(ConManager.Connection[tool.ConnectionID].FileName)
352        else
353 <        hint := 'Connection: none' + #13+#10;
354 <      if TForm_ToolTemplate(MDITab.MDIChildren[tabIndex]).SelectedFile.ID >= 0 then
355 <        hint := hint + 'Selected File: ' +
356 <              TForm_ToolTemplate(MDITab.MDIChildren[tabIndex]).SelectedFile.FileName
357 <      else
358 <        hint := hint + 'Selected File: none';
353 >        hint := 'Connection: none';
354 >      if tool is TForm_TemplateFile then
355 >      begin
356 >        if TForm_TemplateFile(tool).SelectedFile.ID > -1 then
357 >          hint := hint + #13+#10 + 'Selected File: ' +
358 >                FormatNumber(TForm_TemplateFile(tool).SelectedFile.ID, 5, '0') + '-' +
359 >                TForm_TemplateFile(tool).SelectedFile.Name + '.' +
360 >                TForm_TemplateFile(tool).SelectedFile.Extension
361 >        else
362 >          hint := hint + #13+#10 + 'Selected File: none';
363 >      end;
364      end
365      else
366        hint := 'Window: ' + MDITab.MDIChildren[tabIndex].Caption;
# Line 380 | Line 429 | begin
429    tb_rawedit.Enabled := active;
430    tb_txmpreplacer.Enabled := active;
431    tb_extractor.Enabled := active;
432 +  tb_meta.Enabled := active;
433   //  tb_compare.Enabled := active;
434   //  tb_structure.Enabled := active;
435   end;
436  
437   procedure TForm_Main.UpdateStatBar;
438   begin
439 <  if Length(DataConnections) > 0 then
439 >  if ConManager.Count > 0 then
440    begin
441      Self.Caption      := 'Oni Un/Packer ' + version;
442      ActivateTools(True);
443 <    statbar.Panels.Items[1].Text := 'Connections: ' + IntToStr(Length(DataConnections));
443 >    statbar.Panels.Items[1].Text := 'Connections: ' + IntToStr(ConManager.Count);
444    end
445    else
446    begin
# Line 400 | Line 450 | begin
450      statbar.Panels.Items[2].Text := '';
451      ActivateTools(False);
452    end;
453 <  menu_conns.Enabled := Length(DataConnections) > 0;
453 >  menu_conns.Enabled := ConManager.Count > 0;
454   end;
455  
456  
457  
458  
459 < procedure TForm_Main.ToolbarDockChanged(Sender: TObject);
459 > procedure TForm_Main.Toolbar_mainDockChanged(Sender: TObject);
460   var
461    toolbar: TTBToolbar;
462    position: TTBDockPosition;
463    mode: TTBItemDisplayMode;
464    i: Integer;
415  isEnabled: Boolean;
465   begin
466    toolbar := TTBToolbar(Sender);
467    if toolbar.Floating then
# Line 446 | Line 495 | var
495   begin
496    if MDITab.MDIChildCount > 0 then
497      for i := 0 to MDITab.MDIChildCount - 1 do
498 <      if MDITab.MDIChildren[i] is TForm_ToolTemplate then
499 <        TForm_ToolTemplate(MDITab.MDIChildren[i]).UpdateConList;
498 >      if MDITab.MDIChildren[i] is TForm_BaseTemplate then
499 >        TForm_BaseTemplate(MDITab.MDIChildren[i]).UpdateConList;
500  
501    menu_conns.Clear;
502 <  if ConnectionManager.Count > 0 then
502 >  if ConManager.Count > 0 then
503    begin
504 <    for i := 0 to ConnectionManager.Count - 1 do
504 >    for i := 0 to ConManager.Count - 1 do
505      begin
506        entry := TTBItem.Create(menu_conns);
507 <      entry.Caption := ExtractFileName(DataConnections[i].FileName);
507 >      entry.Caption := ExtractFileName(ConManager.ConnectionByIndex[i].FileName);
508        entry.Name := 'menu_conn_' + IntToStr(i);
509        entry.OnClick := menu_conns_itemClick;
510        menu_conns.Add(entry);
# Line 467 | Line 516 | end;
516  
517   procedure TForm_Main.LoadFile(typedb: Boolean);
518   var
519 <  ext: String;
519 >  i: Integer;
520   begin
521    opend.InitialDir := AppSettings.DatPath;
522    opend.Filter     := 'Compatible level files|*.dat;*.oldb|Oni level (*.dat)|*.dat|OUP level database (*.oldb)|*.oldb|Any (*.*)|*';
# Line 477 | Line 526 | begin
526      opend.FilterIndex := 2;
527    if opend.Execute then
528    begin
529 <    ext := ExtractFileExt(opend.FileName);
530 <    if ext = '.dat' then
531 <    begin
483 <      CreateConnection(opend.FileName);
484 <    end else if ext = '.oldb' then
485 <    begin
486 <      CreateConnection(opend.FileName);
487 <    end else
488 <      ShowMessage('Incompatible file');
529 >    if opend.Files.Count > 0 then
530 >      for i := 0 to opend.Files.Count - 1 do
531 >        CreateConnection(opend.Files.Strings[i]);
532      AppSettings.DatPath := ExtractFilepath(opend.FileName);
533    end;
534    UpdateStatBar;
# Line 524 | Line 567 | end;
567   {####################################}
568   procedure TForm_Main.menu_createdbClick(Sender: TObject);
569   begin
527  ShowMessage('Not yet usable');
528 {
570    opend.Filter     := 'Oni-Dat-Files|*.dat';
571    saved.Filter     := 'OUP-Level-DB (*.oldb)|*.oldb';
572    saved.DefaultExt := 'oldb';
573    if opend.Execute then
574      if saved.Execute then
575        Form_LevelDB.CreateDatabase(opend.FileName, saved.FileName);
535 }
576   end;
577  
578  
579   procedure TForm_Main.menu_createlvlClick(Sender: TObject);
580   begin
541  ShowMessage('Not yet usable');
542 {
581    opend.Filter     := 'OUP-Level-DB (*.oldb)|*.oldb';
582    saved.Filter     := 'Oni-Dat-Files|*.dat';
583    saved.DefaultExt := 'dat';
584    if opend.Execute then
585      if saved.Execute then
586        Form_LevelDB.CreateLevel(opend.FileName, saved.FileName);
549 }
587   end;
588  
589  
# Line 555 | Line 592 | end;
592   {#################################}
593   procedure TForm_Main.menu_previewClick(Sender: TObject);
594   begin
595 <  open_child('preview', nil, -1);
595 >  open_child('preview');
596   end;
597  
598   procedure TForm_Main.menu_bineditClick(Sender: TObject);
599   begin
600 <  open_child('binedit', nil, -1);
600 >  open_child('binedit');
601   end;
602  
603   procedure TForm_Main.menu_raweditClick(Sender: TObject);
604   begin
605 <  open_child('rawedit', nil, -1);
605 >  open_child('rawedit');
606   end;
607  
608   procedure TForm_Main.menu_txmpreplaceClick(Sender: TObject);
609   begin
610 <  open_child('txmpreplace', nil, -1);
610 >  open_child('txmpreplace');
611   end;
612  
613   procedure TForm_Main.menu_extractorClick(Sender: TObject);
614   begin
615 <  open_child('extractor', nil, -1);
615 >  open_child('extractor');
616   end;
617  
618   procedure TForm_Main.menu_metaClick(Sender: TObject);
619   begin
620 <  ShowMessage('TBD');
620 >  open_child('meta');
621   end;
622  
623   procedure TForm_Main.menu_filecompareClick(Sender: TObject);
624   begin
625 <  open_child('compare', nil, -1);
625 >  open_child('compare');
626   end;
627  
628  
629 < {#################################}
629 > procedure TForm_Main.menu_filemanagerClick(Sender: TObject);
630 > begin
631 >  open_child('filemanager');
632 > end;
633 >
634 > {#################################}
635   {#####   View-Menu-Handlers  #####}
636   {#################################}
637   procedure TForm_Main.menu_windows_cascadeClick(Sender: TObject);
# Line 651 | Line 693 | end;
693   procedure TForm_Main.menu_conns_itemClick(Sender: TObject);
694   var
695    name: String;
696 <  i: Integer;
696 >  index: Integer;
697 >  RepMsg: TStatusMessages;
698   begin
699 <  name := TTBItem(Sender).Caption;
699 >  index := TTBItem(Sender).Parent.IndexOf(TTBItem(Sender));
700 >  name := ExtractFileName(ConManager.ConnectionByIndex[index].FileName);
701    if MessageBox(Handle, PChar('Do you really want to close data-connection to' +#13+#10+
702          name + '?'), PChar('Close?'), MB_YESNO + MB_ICONQUESTION) = ID_YES then
703    begin
704 <    for i := 0 to High(DataConnections) do
705 <      if ExtractFileName(DataConnections[i].FileName) = name then
706 <      begin
707 <        CloseDataConnection(DataConnections[i]);
664 <        Break;
665 <      end;
704 >    CheckConnectionCloseable(index);
705 >    ConManager.CloseConnectionByIndex(index, RepMsg);
706 >    ShowOpenMsg(RepMsg);
707 >    UpdateConLists;
708    end;
709    UpdateStatBar;
710   end;
# Line 674 | Line 716 | end;
716   procedure TForm_Main.menu_view_toolbarClick(Sender: TObject);
717   begin
718    menu_view_toolbar.Checked := not menu_view_toolbar.Checked;
719 <  Toolbar.Visible := menu_view_toolbar.Checked;
719 >  Toolbar_main.Visible := menu_view_toolbar.Checked;
720 > end;
721 >
722 > procedure TForm_Main.menu_view_toolbar_toolsClick(Sender: TObject);
723 > begin
724 >  menu_view_toolbar_tools.Checked := not menu_view_toolbar_tools.Checked;
725 >  Toolbar_tools.Visible := menu_view_toolbar_tools.Checked;
726   end;
727  
728   procedure TForm_Main.menu_view_statusbarClick(Sender: TObject);
# Line 700 | Line 748 | end;
748  
749  
750  
751 < function TForm_Main.open_child(window_context: String; connection, fileid: Integer): TForm_ToolTemplate;
751 > function TForm_Main.open_child(window_context: String; connection, fileid: Integer): TForm_BaseTemplate;
752 > type
753 >  TTemplate = class of TForm_BaseTemplate;
754 >  TTool = record
755 >      name: String;
756 >      icon: Integer;
757 >      caption: String;
758 >      classt: TTemplate;
759 >  end;
760 > const
761 >  Tools: array[0..6] of TTool = (
762 >    (name: 'binedit';     icon: 5; caption: 'Binary .dat-Editor'; classt: TForm_BinEdit),
763 >    (name: 'extractor';   icon: 8; caption: 'Extractor';          classt: TForm_Extractor),
764 >    (name: 'preview';     icon: 4; caption: 'Preview-Window';     classt: TForm_Preview),
765 >    (name: 'rawedit';     icon: 6; caption: 'Binary .raw-Editor'; classt: TForm_RawEdit),
766 >    (name: 'txmpreplace'; icon: 7; caption: 'TXMP Replacer';      classt: TForm_TxmpReplace),
767 >    (name: 'filemanager'; icon:-1; caption: 'FileManager';        classt: TForm_FileManager),
768 >    (name: 'meta'; icon: 11; caption: 'MetaEditor'; classt: TForm_Meta)
769 >  );
770   var
771 <  toolform:    TForm_ToolTemplate;
771 >  toolform:    TForm_BaseTemplate;
772    i:           Integer;
773    tag:         Integer;
708  caption_end: String;
774    iconindex:   Integer;
775   begin
776    Result := nil;
# Line 717 | Line 782 | begin
782          tag := MDIChildren[i].Tag + 1;
783  
784    iconindex := -1;
720  caption_end := IntToStr(tag) + '       ';
785  
786 <  if window_context = 'binedit' then
787 <  begin
788 <    toolform         := TForm_BinEdit.Create(Self);
789 <    toolform.Caption := 'Binary .dat-Editor ' + caption_end;
790 <    iconindex        := 5;
791 <  end;
792 <  if window_context = 'extractor' then
793 <  begin
794 <    toolform         := TForm_Extractor.Create(Self);
795 <    toolform.Caption := 'Extractor ' + caption_end;
796 <    iconindex        := 8;
797 <  end;
734 <  if window_context = 'preview' then
735 <  begin
736 <    toolform         := TForm_Preview.Create(Self);
737 <    toolform.Caption := 'Preview-Window ' + caption_end;
738 <    iconindex        := 4;
739 <  end;
740 <  if window_context = 'rawedit' then
741 <  begin
742 <    toolform         := TForm_RawEdit.Create(Self);
743 <    toolform.Caption := 'Binary .raw-Editor ' + caption_end;
744 <    iconindex        := 6;
745 <  end;
746 <  if window_context = 'txmpreplace' then
747 <  begin
748 <    toolform         := TForm_TxmpReplace.Create(Application);
749 <    toolform.Caption := 'TXMP Replacer ' + caption_end;
750 <    iconindex        := 7;
786 >  toolform := nil;
787 >
788 >  for i := 0 to High(Tools) do
789 >    if Tools[i].name = window_context then
790 >      Break;
791 >  if i < Length(Tools) then
792 >  begin
793 >    toolform         := TTemplate(Tools[i].classt).Create(Self);
794 >    toolform.Caption := Tools[i].caption + ' ' + IntToStr(tag) + '       ';
795 >    iconindex        := Tools[i].icon;
796 >  end else begin
797 >    ShowMessage('WindowContext not found!');
798    end;
799  
800    if Assigned(toolform) then
# Line 756 | Line 803 | begin
803      toolform.Tag     := tag;
804      MDITab.AddTab(TForm(toolform), iconindex);
805      toolform.Caption := AnsiReplaceStr(toolform.Caption, '       ', '');
806 <    if (fileid > -1) and (connection <> nil) then
806 >    if Connection > -1 then
807      begin
808 <      toolform.SelectFileID(connection, fileid);
808 >      toolform.SelectConnection(connection);
809 >      if (FileID > -1) and (toolform is TForm_TemplateFile) then
810 >        TForm_TemplateFile(toolform).SelectFileID(Connection, FileID);
811      end;
812      Result := toolform;
813    end;
814   end;
815  
816 + function TForm_Main.open_child(window_context: String; Connection: Integer): TForm_BaseTemplate;
817 + begin
818 +  Result := open_child(window_context, Connection, -1);
819 + end;
820 +
821 + function TForm_Main.open_child(window_context: String): TForm_BaseTemplate;
822 + begin
823 +  Result := open_child(window_context, -1, -1);
824 + end;
825 +
826   end.

Diff Legend

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