Subversion Repositories stackman

Compare Revisions

Problem with comparison.

Regard whitespace Rev HEAD → Rev 1

/trunk/texteditor.pas
0,0 → 1,192
unit texteditor;
 
interface
 
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, ShellAPI, ExtCtrls;
 
type
TMDITextEditor = class(TForm)
MainMenu1: TMainMenu;
Document1: TMenuItem;
Save: TMenuItem;
N2: TMenuItem;
ExternalOpen: TMenuItem;
Delete: TMenuItem;
N4: TMenuItem;
DocumentClose1: TMenuItem;
Memo1: TMemo;
AutoSaveTimer: TTimer;
procedure DocumentClose1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
procedure SaveClick(Sender: TObject);
procedure DeleteClick(Sender: TObject);
procedure ExternalOpenClick(Sender: TObject);
procedure Memo1Change(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure AutoSaveTimerTimer(Sender: TObject);
private
fcat: string;
fprefix: string;
fautosave: boolean;
changed: boolean;
function DoSave: boolean;
procedure UpdateCaption;
public
property folder: string read fprefix;
property cat: string read fcat;
property autosave: boolean read fautosave;
constructor Create(AOwner: TComponent; Folder, Category: string); reintroduce;
end;
 
var
MDITextEditor: TMDITextEditor;
 
implementation
 
{$R *.dfm}
 
uses
main, categories, global;
 
constructor TMDITextEditor.Create(AOwner: TComponent; Folder, Category: string);
begin
inherited Create(AOwner);
 
fautosave := true;
fcat := category;
fprefix := MyAddTrailingPathDelimiter(folder);
end;
 
procedure TMDITextEditor.DeleteClick(Sender: TObject);
var
fn: string;
i: integer;
begin
fn := getTextFileName(folder, cat);
if commonDelete(fn) then
begin
Close;
 
// TODO: Eigentlich sollte das innerhalb von commonDelete() stattfinden
for i := Screen.FormCount - 1 downto 0 do
begin
if Screen.Forms[i] is TMDICategories then
begin
TMDICategories(Screen.Forms[i]).DeleteNode(folder, cat);
end
end;
end;
end;
 
procedure TMDITextEditor.DocumentClose1Click(Sender: TObject);
begin
Close;
end;
 
function TMDITextEditor.DoSave: boolean;
begin
//if changed then
//begin
result := true;
 
AddToJournal(Format(lng_jnl_textchange, [folder + cat]));
 
try
Memo1.Lines.SaveToFile(getTextFileName(folder, cat));
except
result := false;
end;
 
changed := false;
AutoSaveTimer.Enabled := false;
UpdateCaption;
//end
//else result := true;
end;
 
procedure TMDITextEditor.ExternalOpenClick(Sender: TObject);
var
fn: string;
begin
fn := getTextFileName(folder, cat);
commonExternalOpen(fn);
end;
 
procedure TMDITextEditor.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
 
procedure TMDITextEditor.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
userResponse: integer;
begin
if changed then
begin
if not AUTOSAVE then
begin
BringToFront;
WindowState := wsNormal;
 
userResponse := MessageDlg(Format(lng_savefirst, [folder + cat]),
mtConfirmation, mbYesNoCancel, 0);
case userResponse of
idYes: CanClose := DoSave;
idNo: CanClose := true;
idCancel: begin
CanClose := false;
Exit;
end;
end;
end
else
CanClose := DoSave;
end;
end;
 
procedure TMDITextEditor.FormShow(Sender: TObject);
begin
Memo1.Lines.Clear;
Memo1.Lines.LoadFromFile(getTextFileName(folder, cat));
 
changed := false;
AutoSaveTimer.Enabled := false;
UpdateCaption;
 
Memo1.SetFocus;
end;
 
procedure TMDITextEditor.Memo1Change(Sender: TObject);
begin
changed := true;
AutoSaveTimer.Enabled := true;
UpdateCaption;
end;
 
procedure TMDITextEditor.SaveClick(Sender: TObject);
begin
DoSave;
end;
 
procedure TMDITextEditor.AutoSaveTimerTimer(Sender: TObject);
begin
if AUTOSAVE and Changed then
begin
DoSave;
end;
end;
 
procedure TMDITextEditor.UpdateCaption;
var
capname: string;
begin
capname := Format(lng_texteditor_title, [folder + cat]);
if changed then capname := capname + ' *';
 
if Caption <> capname then Caption := capname; // Kein Aufblitzen
end;
 
end.