diff --git a/applications/lazedit/lazedit_translations.pas b/applications/lazedit/lazedit_translations.pas index af67096f5..20f0205fa 100644 --- a/applications/lazedit/lazedit_translations.pas +++ b/applications/lazedit/lazedit_translations.pas @@ -201,6 +201,7 @@ type // Other main.pp constants SLine, SCol, SModified, SIns, SOvr, msgOpenError, msgSaveError, msgSaveAllError, msgFileIsNotText, + msgFileCreateError, msgAskCreateFile, msgFileNotFound, msgModifiedSave, msgMruIndexOutOfBound, msgFileTypeNotForBrowser, msgFileHasNoName, msgErrorBrowser, msgTextNotFound: string; @@ -348,6 +349,8 @@ begin msgSaveAllError := 'The following save all error has occured:'^m'%s'; msgFileIsNotText := 'The selected file '^m'%s'^m' does not seam to be a text file.'; msgFileNotFound := 'File not found:'^m'%s'; + msgFileCreateError := 'Error creating file: '^m'%s'; + msgAskCreateFile := MsgFileNotFound + ^m^m'Create file?'; msgModifiedSave := 'The following file was modified:'^m'%s'^m'Should it be saved?'; msgMruIndexOutOfBound := 'Index out of bounds [%d]'^m; msgFileTypeNotForBrowser := 'The file type is not suited for a browser.'^m+'Continue anyway?'; @@ -507,6 +510,8 @@ begin msgSaveAllError := 'De volgende bestanden zijn niet opgeslagen:'^m'%s'; msgFileIsNotText := 'Dit bestand lijkt geen tekstbestand te zijn'^m'%s'^m'Wilt u het toch openen?'; msgFileNotFound := 'Bestand niet gevonden:'^m'%s'; + msgFileCreateError := 'Fout bij aanmaken van bestand: '^m'%s'; + msgAskCreateFile := MsgFileNotFound + ^m^m'Bestand aanmaken?'; msgModifiedSave := 'Bestand is gewijzigd:'^m'%s'^m'Bestand opslaan?'; msgMruIndexOutOfBound := 'Index voor recent geopende bestanden ligt buiten de grenzen [%d]'^m+ 'Dit is uiteraard een fout van de programmeur'; diff --git a/applications/lazedit/main.pp b/applications/lazedit/main.pp index bc92be8ad..c950ee687 100644 --- a/applications/lazedit/main.pp +++ b/applications/lazedit/main.pp @@ -467,10 +467,12 @@ type function TryMarkSelection(const Pre, Post: String): Boolean; public //File procedures + function AskCreateFile(const Fn: String): Boolean; function AskFileNameOpen: String; function AskFileNameOpenTemplate: String; function AskFileNameSave(const Fn: String; const FileType: TEditorFileType): String; function AskFileNameSaveTemplate: String; + function TryCreateEmptyFile(const Fn: String): Boolean; function TryFileOpen(const Fn: String; const AsTemplate: Boolean = False): Boolean; function TryFileSave(Editor: TEditor; Fn: String): TIoResult; function CloseCurrentEditor: Boolean; @@ -1600,9 +1602,26 @@ begin S := ExpandFileNameUtf8(S); //we want full filename here, e.g. for filename in statusbar if FileExistsUtf8(S) then begin - if not TryFileOpen(S) then ShowError(Format(vTranslations.msgOpenError,[S])); + if not TryFileOpen(S) then + ShowError(Format(vTranslations.msgOpenError,[S])) + else + Inc(Count); end - else ShowError(Format(vTranslations.msgFileNotFound,[S])); + else + begin + if AskCreateFile(S) then + begin + if TryCreateEmptyFile(S) then + begin + if not TryFileOpen(S) then + ShowError(Format(vTranslations.msgOpenError,[S])) + else + Inc(Count); + end + else + ShowError(Format(vTranslations.msgFileCreateError,[S])); + end; + end; end; end; //Start with blank page if no files are specified on commandline @@ -1987,6 +2006,11 @@ begin else Result := False; end; +function TLazEditMainForm.AskCreateFile(const Fn: String): Boolean; +begin + Result := MessageDlg(AppName, Format(vTranslations.msgAskCreateFile,[Fn]), mtConfirmation, [mbYes, mbNo],0) = mrYes; +end; + @@ -2062,6 +2086,15 @@ begin else Result := EmptyStr; end; +function TLazEditMainForm.TryCreateEmptyFile(const Fn: String): Boolean; +var + H: THandle; +begin + H := FileCreate(Fn, fmOpenWrite); + Result := H <> feInvalidHandle; //THandle(-1) + if Result then FileClose(H); +end; + function TLazEditMainForm.TryFileOpen(const Fn: String; const AsTemplate: Boolean = False): Boolean; var Ed: TEditor;