mirror of
https://github.com/doublecmd/doublecmd.git
synced 2026-06-21 09:58:13 +00:00
FIX: Display message when cannot open or save file in editor (bug [2923306]).
This commit is contained in:
parent
5f8056b2c8
commit
e9e73e5a8a
2 changed files with 82 additions and 43 deletions
124
src/feditor.pas
124
src/feditor.pas
|
|
@ -149,7 +149,14 @@ type
|
|||
sEncodingIn,
|
||||
sEncodingOut,
|
||||
sOriginalText: String;
|
||||
|
||||
procedure ChooseEncoding(mnuMenuItem: TMenuItem; sEncoding: String);
|
||||
{en
|
||||
Saves editor content to a file.
|
||||
@returns(@true if successful)
|
||||
}
|
||||
function SaveFile(const sFileName: String): Boolean;
|
||||
|
||||
public
|
||||
{ Public declarations }
|
||||
SynEditSearch: TSynEditSearch;
|
||||
|
|
@ -157,7 +164,11 @@ type
|
|||
Function CreateNewTab:Integer; // return tab number
|
||||
Function OpenFileNewTab(const sFileName:String):Integer;
|
||||
}
|
||||
procedure OpenFile(const sFileName:String);
|
||||
{en
|
||||
Opens a file.
|
||||
@returns(@true if successful)
|
||||
}
|
||||
function OpenFile(const sFileName: String): Boolean;
|
||||
procedure UpdateStatus;
|
||||
procedure SetEncodingIn(Sender:TObject);
|
||||
procedure SetEncodingOut(Sender:TObject);
|
||||
|
|
@ -177,20 +188,22 @@ uses
|
|||
SynEditTypes, uGlobsPaths, uGlobs, fEditorConf, LCLType, LConvEncoding;
|
||||
|
||||
procedure ShowEditor(const sFileName:String);
|
||||
var editor: TfrmEditor;
|
||||
var
|
||||
editor: TfrmEditor;
|
||||
begin
|
||||
editor := TfrmEditor.Create(Application);
|
||||
gEditorPos.Restore(editor);
|
||||
try
|
||||
LoadAttrFromFile(gpIniDir + csDefaultName);
|
||||
if sFileName = '' then
|
||||
editor.actFileNew.Execute
|
||||
else
|
||||
editor.OpenFile(sFileName);
|
||||
editor.ShowOnTop;
|
||||
finally
|
||||
//editor.Free;
|
||||
LoadAttrFromFile(gpIniDir + csDefaultName);
|
||||
|
||||
if sFileName = '' then
|
||||
editor.actFileNew.Execute
|
||||
else
|
||||
begin
|
||||
if not editor.OpenFile(sFileName) then
|
||||
Exit;
|
||||
end;
|
||||
|
||||
editor.ShowOnTop;
|
||||
end;
|
||||
|
||||
procedure TfrmEditor.FormCreate(Sender: TObject);
|
||||
|
|
@ -264,17 +277,32 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
procedure TfrmEditor.OpenFile(const sFileName:String);
|
||||
function TfrmEditor.OpenFile(const sFileName: String): Boolean;
|
||||
var
|
||||
h: TSynCustomHighlighter;
|
||||
fsFileStream: TFileStreamEx;
|
||||
begin
|
||||
Result := False;
|
||||
try
|
||||
fsFileStream:= TFileStreamEx.Create(sFileName, fmOpenRead or fmShareDenyNone);
|
||||
Editor.Lines.LoadFromStream(fsFileStream);
|
||||
finally
|
||||
fsFileStream.Free;
|
||||
try
|
||||
Editor.Lines.LoadFromStream(fsFileStream);
|
||||
finally
|
||||
fsFileStream.Free;
|
||||
end;
|
||||
except
|
||||
on EFCreateError do
|
||||
begin
|
||||
msgWarning(rsMsgErrECreate + ' ' + sFileName);
|
||||
Exit;
|
||||
end;
|
||||
on EFOpenError do
|
||||
begin
|
||||
msgWarning(rsMsgErrEOpen + ' ' + sFileName);
|
||||
Exit;
|
||||
end;
|
||||
end;
|
||||
|
||||
// set up text encoding
|
||||
sOriginalText:= Editor.Lines.Text; // save original text
|
||||
sEncodingIn:= GuessEncoding(sOriginalText); // try to guess encoding
|
||||
|
|
@ -292,6 +320,39 @@ begin
|
|||
bChanged:=False;
|
||||
bNoname:=False;
|
||||
UpdateStatus;
|
||||
Result := True;
|
||||
end;
|
||||
|
||||
function TfrmEditor.SaveFile(const sFileName: String): Boolean;
|
||||
var
|
||||
slStringList: TStringListEx;
|
||||
begin
|
||||
Result := False;
|
||||
slStringList:= TStringListEx.Create;
|
||||
try
|
||||
// restore encoding
|
||||
slStringList.Text:= ConvertEncoding(Editor.Lines.Text, EncodingUTF8, sEncodingOut);
|
||||
try
|
||||
// save to file
|
||||
slStringList.SaveToFile(sFileName);
|
||||
except
|
||||
on e: EFCreateError do
|
||||
begin
|
||||
msgWarning(rsMsgErrSaveFile + ' ' + sFileName);
|
||||
Exit;
|
||||
end;
|
||||
on EFOpenError do
|
||||
begin
|
||||
msgWarning(rsMsgErrSaveFile + ' ' + sFileName);
|
||||
Exit;
|
||||
end;
|
||||
end;
|
||||
|
||||
Result := True;
|
||||
|
||||
finally
|
||||
slStringList.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TfrmEditor.actFileNewExecute(Sender: TObject);
|
||||
|
|
@ -414,11 +475,10 @@ end;
|
|||
|
||||
procedure TfrmEditor.actFileOpenExecute(Sender: TObject);
|
||||
begin
|
||||
//inherited;
|
||||
dmComData.OpenDialog.Filter:='*.*';
|
||||
if not dmComData.OpenDialog.Execute then Exit;
|
||||
OpenFile(dmComData.OpenDialog.FileName);
|
||||
UpdateStatus;
|
||||
if OpenFile(dmComData.OpenDialog.FileName) then
|
||||
UpdateStatus;
|
||||
end;
|
||||
|
||||
procedure TfrmEditor.SetHighLighter(Sender:TObject);
|
||||
|
|
@ -528,45 +588,23 @@ begin
|
|||
end;
|
||||
|
||||
procedure TfrmEditor.actFileSaveExecute(Sender: TObject);
|
||||
var
|
||||
slStringList: TStringListEx;
|
||||
begin
|
||||
inherited;
|
||||
if bNoname then
|
||||
actFileSaveAs.Execute
|
||||
else
|
||||
begin
|
||||
try
|
||||
// restore encoding
|
||||
slStringList:= TStringListEx.Create;
|
||||
slStringList.Text:= ConvertEncoding(Editor.Lines.Text, EncodingUTF8, sEncodingOut);
|
||||
// save to file
|
||||
slStringList.SaveToFile(Caption);
|
||||
finally
|
||||
slStringList.Free;
|
||||
end;
|
||||
SaveFile(Caption);
|
||||
bChanged:=False;
|
||||
UpdateStatus;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TfrmEditor.actFileSaveAsExecute(Sender: TObject);
|
||||
var
|
||||
slStringList: TStringListEx;
|
||||
begin
|
||||
inherited;
|
||||
dmComData.SaveDialog.FileName:=Caption;
|
||||
dmComData.SaveDialog.Filter:='*.*'; // rewrite for highlighter
|
||||
if not dmComData.SaveDialog.Execute then Exit;
|
||||
try
|
||||
// restore encoding
|
||||
slStringList:= TStringListEx.Create;
|
||||
slStringList.Text:= ConvertEncoding(Editor.Lines.Text, EncodingUTF8, sEncodingOut);
|
||||
// save to file
|
||||
slStringList.SaveToFile(dmComData.SaveDialog.FileName);
|
||||
finally
|
||||
slStringList.Free;
|
||||
end;
|
||||
SaveFile(dmComData.SaveDialog.FileName);
|
||||
bChanged:=False;
|
||||
bNoname:=False;
|
||||
Caption:=dmComData.SaveDialog.FileName;
|
||||
|
|
@ -777,4 +815,4 @@ end;
|
|||
initialization
|
||||
{$I feditor.lrs}
|
||||
|
||||
end.
|
||||
end.
|
||||
|
|
@ -97,6 +97,7 @@ resourcestring
|
|||
rsMsgErrSetAttribute = 'Can not set attributes for "%s"';
|
||||
rsMsgErrSetDateTime = 'Can not set date/time for "%s"';
|
||||
rsMsgErrDateNotSupported = 'Date %s is not supported';
|
||||
rsMsgErrSaveFile = 'Cannot save file';
|
||||
// for context menu
|
||||
rsMnuActions = 'Actions';
|
||||
rsMnuView = 'View';
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue