Subversion Repositories stackman

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 daniel-mar 1
unit texteditor;
2
 
3
interface
4
 
5
uses
6
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
13 daniel-mar 7
  Dialogs, StdCtrls, Menus, ShellAPI, ExtCtrls, System.UITypes;
2 daniel-mar 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.