Subversion Repositories stackman

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. unit texteditor;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, StdCtrls, Menus, ShellAPI, ExtCtrls;
  8.  
  9. type
  10.   TMDITextEditor = class(TForm)
  11.     MainMenu1: TMainMenu;
  12.     Document1: TMenuItem;
  13.     Save: TMenuItem;
  14.     N2: TMenuItem;
  15.     ExternalOpen: TMenuItem;
  16.     Delete: TMenuItem;
  17.     N4: TMenuItem;
  18.     DocumentClose1: TMenuItem;
  19.     Memo1: TMemo;
  20.     AutoSaveTimer: TTimer;
  21.     procedure DocumentClose1Click(Sender: TObject);
  22.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  23.     procedure FormShow(Sender: TObject);
  24.     procedure SaveClick(Sender: TObject);
  25.     procedure DeleteClick(Sender: TObject);
  26.     procedure ExternalOpenClick(Sender: TObject);
  27.     procedure Memo1Change(Sender: TObject);
  28.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  29.     procedure AutoSaveTimerTimer(Sender: TObject);
  30.   private
  31.     fcat: string;
  32.     fprefix: string;
  33.     fautosave: boolean;
  34.     changed: boolean;
  35.     function DoSave: boolean;
  36.     procedure UpdateCaption;
  37.   public
  38.     property folder: string read fprefix;
  39.     property cat: string read fcat;
  40.     property autosave: boolean read fautosave;
  41.     constructor Create(AOwner: TComponent; Folder, Category: string); reintroduce;
  42.   end;
  43.  
  44. var
  45.   MDITextEditor: TMDITextEditor;
  46.  
  47. implementation
  48.  
  49. {$R *.dfm}
  50.  
  51. uses
  52.   main, categories, global;
  53.  
  54. constructor TMDITextEditor.Create(AOwner: TComponent; Folder, Category: string);
  55. begin
  56.   inherited Create(AOwner);
  57.  
  58.   fautosave := true;
  59.   fcat := category;
  60.   fprefix := MyAddTrailingPathDelimiter(folder);
  61. end;
  62.  
  63. procedure TMDITextEditor.DeleteClick(Sender: TObject);
  64. var
  65.   fn: string;
  66.   i: integer;
  67. begin
  68.   fn := getTextFileName(folder, cat);
  69.   if commonDelete(fn) then
  70.   begin
  71.     Close;
  72.  
  73.     // TODO: Eigentlich sollte das innerhalb von commonDelete() stattfinden
  74.     for i := Screen.FormCount - 1 downto 0 do
  75.     begin
  76.       if Screen.Forms[i] is TMDICategories then
  77.       begin
  78.         TMDICategories(Screen.Forms[i]).DeleteNode(folder, cat);
  79.       end
  80.     end;
  81.   end;
  82. end;
  83.  
  84. procedure TMDITextEditor.DocumentClose1Click(Sender: TObject);
  85. begin
  86.   Close;
  87. end;
  88.  
  89. function TMDITextEditor.DoSave: boolean;
  90. begin
  91.   //if changed then
  92.   //begin
  93.     result := true;
  94.  
  95.     AddToJournal(Format(lng_jnl_textchange, [folder + cat]));
  96.  
  97.     try
  98.       Memo1.Lines.SaveToFile(getTextFileName(folder, cat));
  99.     except
  100.       result := false;
  101.     end;
  102.  
  103.     changed := false;
  104.     AutoSaveTimer.Enabled := false;
  105.     UpdateCaption;
  106.   //end
  107.   //else result := true;
  108. end;
  109.  
  110. procedure TMDITextEditor.ExternalOpenClick(Sender: TObject);
  111. var
  112.   fn: string;
  113. begin
  114.   fn := getTextFileName(folder, cat);
  115.   commonExternalOpen(fn);
  116. end;
  117.  
  118. procedure TMDITextEditor.FormClose(Sender: TObject; var Action: TCloseAction);
  119. begin
  120.   Action := caFree;
  121. end;
  122.  
  123. procedure TMDITextEditor.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  124. var
  125.   userResponse: integer;
  126. begin
  127.   if changed then
  128.   begin
  129.     if not AUTOSAVE then
  130.     begin
  131.       BringToFront;
  132.       WindowState := wsNormal;
  133.  
  134.       userResponse := MessageDlg(Format(lng_savefirst, [folder + cat]),
  135.         mtConfirmation, mbYesNoCancel, 0);
  136.       case userResponse of
  137.         idYes: CanClose := DoSave;
  138.         idNo: CanClose := true;
  139.         idCancel: begin
  140.           CanClose := false;
  141.           Exit;
  142.         end;
  143.       end;
  144.     end
  145.     else
  146.       CanClose := DoSave;
  147.   end;
  148. end;
  149.  
  150. procedure TMDITextEditor.FormShow(Sender: TObject);
  151. begin
  152.   Memo1.Lines.Clear;
  153.   Memo1.Lines.LoadFromFile(getTextFileName(folder, cat));
  154.  
  155.   changed := false;
  156.   AutoSaveTimer.Enabled := false;
  157.   UpdateCaption;
  158.  
  159.   Memo1.SetFocus;
  160. end;
  161.  
  162. procedure TMDITextEditor.Memo1Change(Sender: TObject);
  163. begin
  164.   changed := true;
  165.   AutoSaveTimer.Enabled := true;
  166.   UpdateCaption;
  167. end;
  168.  
  169. procedure TMDITextEditor.SaveClick(Sender: TObject);
  170. begin
  171.   DoSave;
  172. end;
  173.  
  174. procedure TMDITextEditor.AutoSaveTimerTimer(Sender: TObject);
  175. begin
  176.   if AUTOSAVE and Changed then
  177.   begin
  178.     DoSave;
  179.   end;
  180. end;
  181.  
  182. procedure TMDITextEditor.UpdateCaption;
  183. var
  184.   capname: string;
  185. begin
  186.   capname := Format(lng_texteditor_title, [folder + cat]);
  187.   if changed then capname := capname + ' *';
  188.  
  189.   if Caption <> capname then Caption := capname; // Kein Aufblitzen
  190. end;
  191.  
  192. end.
  193.