Selaa lähdekoodia

Bug 1752: Indicate in an Internal editor that the file is new and prevent actions that does not make sense for non-existing files

https://winscp.net/tracker/1752

Source commit: 90e860e34a3f83bc2b6a0235bc03a4f775b78578
Martin Prikryl 6 vuotta sitten
vanhempi
sitoutus
e2c35a305c

+ 7 - 6
source/forms/CustomScpExplorer.cpp

@@ -3060,7 +3060,8 @@ void __fastcall TCustomScpExplorerForm::EditNew(TOperationSide Side)
 
       if (!ExistingFile)
       {
-        if (!FileExists(ApiPath(LocalFileName)))
+        bool NewFile = !FileExists(ApiPath(LocalFileName));
+        if (NewFile)
         {
           int File = FileCreate(ApiPath(LocalFileName));
           if (File < 0)
@@ -3084,7 +3085,7 @@ void __fastcall TCustomScpExplorerForm::EditNew(TOperationSide Side)
           false, MaskParams);
 
         CustomExecuteFile(Side, ExecuteFileBy, LocalFileName, TargetFileName,
-          ExternalEditor, RootTempDir, RemoteDirectory);
+          ExternalEditor, RootTempDir, RemoteDirectory, NewFile);
       }
     }
   }
@@ -3105,7 +3106,7 @@ bool __fastcall TCustomScpExplorerForm::RemoteExecuteForceText(
 void __fastcall TCustomScpExplorerForm::CustomExecuteFile(TOperationSide Side,
   TExecuteFileBy ExecuteFileBy, UnicodeString FileName, UnicodeString OriginalFileName,
   const TEditorData * ExternalEditor, UnicodeString LocalRootDirectory,
-  UnicodeString RemoteDirectory)
+  UnicodeString RemoteDirectory, bool NewFile)
 {
   DebugAssert(!WinConfiguration->DisableOpenEdit);
   DebugAssert((ExecuteFileBy == efExternalEditor) ==
@@ -3150,7 +3151,7 @@ void __fastcall TCustomScpExplorerForm::CustomExecuteFile(TOperationSide Side,
         Editor = ShowEditorForm(FileName, this, OnFileChanged,
           FEditorManager->FileReload, FEditorManager->FileClosed,
           OnSaveAll, OnAnyModified,
-          Caption, FStandaloneEditing, SessionColor, Terminal->SessionData->InternalEditorEncoding);
+          Caption, FStandaloneEditing, SessionColor, Terminal->SessionData->InternalEditorEncoding, NewFile);
       }
       catch(...)
       {
@@ -3169,7 +3170,7 @@ void __fastcall TCustomScpExplorerForm::CustomExecuteFile(TOperationSide Side,
       TForm * Editor =
         ShowEditorForm(FileName, this, NULL, NULL, LocalEditorClosed,
           SaveAllInternalEditors, AnyInternalEditorModified,
-          L"", false, SessionColor, -1);
+          L"", false, SessionColor, -1, NewFile);
       FLocalEditors->Add(Editor);
     }
   }
@@ -3560,7 +3561,7 @@ void __fastcall TCustomScpExplorerForm::ExecuteFile(TOperationSide Side,
     Configuration->Usage->Inc(Counter);
 
     CustomExecuteFile(Side, ExecuteFileBy, LocalFileName, OriginalFileName,
-      ExternalEditor, LocalRootDirectory, RemoteDirectory);
+      ExternalEditor, LocalRootDirectory, RemoteDirectory, false);
   }
 }
 //---------------------------------------------------------------------------

+ 1 - 1
source/forms/CustomScpExplorer.h

@@ -512,7 +512,7 @@ protected:
   void __fastcall CustomExecuteFile(TOperationSide Side,
     TExecuteFileBy ExecuteFileBy, UnicodeString FileName, UnicodeString OriginalFileName,
     const TEditorData * ExternalEditor, UnicodeString LocalRootDirectory,
-    UnicodeString RemoteDirectory);
+    UnicodeString RemoteDirectory, bool NewFile);
   void __fastcall ExecuteFile(TOperationSide Side,
     TExecuteFileBy ExecuteFileBy, const TEditorData * ExternalEditor,
     UnicodeString FullFileName, TObject * Object,

+ 10 - 2
source/forms/Editor.cpp

@@ -28,7 +28,8 @@
 TForm * __fastcall ShowEditorForm(const UnicodeString FileName, TForm * ParentForm,
   TNotifyEvent OnFileChanged, TNotifyEvent OnFileReload, TFileClosedEvent OnClose,
   TNotifyEvent OnSaveAll, TAnyModifiedEvent OnAnyModified,
-  const UnicodeString Caption, bool StandaloneEditor, TColor Color, int InternalEditorEncodingOverride)
+  const UnicodeString Caption, bool StandaloneEditor, TColor Color, int InternalEditorEncodingOverride,
+  bool NewFile)
 {
   TEditorForm * Dialog = new TEditorForm(Application);
   try
@@ -44,6 +45,7 @@ TForm * __fastcall ShowEditorForm(const UnicodeString FileName, TForm * ParentFo
     Dialog->StandaloneEditor = StandaloneEditor;
     Dialog->BackgroundColor = Color;
     Dialog->InternalEditorEncodingOverride = InternalEditorEncodingOverride;
+    Dialog->NewFile = NewFile;
     // load before showing, so when loading failes,
     // we do not show an empty editor
     Dialog->LoadFile();
@@ -804,7 +806,7 @@ void __fastcall TEditorForm::EditorActionsUpdate(TBasicAction *Action,
   }
   else if (Action == ReloadAction)
   {
-    ReloadAction->Enabled = !FReloading;
+    ReloadAction->Enabled = !FReloading && !NewFile;
   }
   else if (Action == DefaultEncodingAction)
   {
@@ -843,6 +845,7 @@ void __fastcall TEditorForm::SaveFile()
     }
     FSaving = true;
     EditorMemo->Modified = false;
+    NewFile = false;
     UpdateControls();
   }
 }
@@ -1090,6 +1093,10 @@ void __fastcall TEditorForm::UpdateControls()
   {
     Status = LoadStr(EDITOR_SAVING);
   }
+  else if (NewFile)
+  {
+    Status = LoadStr(EDITOR_NEW);
+  }
   else if (IsFileModified())
   {
     Status = LoadStr(EDITOR_MODIFIED);
@@ -1097,6 +1104,7 @@ void __fastcall TEditorForm::UpdateControls()
   StatusBar->Panels->Items[4]->Caption = Status;
 
   EditorActions->UpdateAction(SaveAction);
+  Encoding->Enabled = !NewFile;
 }
 //---------------------------------------------------------------------------
 void __fastcall TEditorForm::EditorMemoMouseUp(TObject * /*Sender*/,

+ 2 - 0
source/forms/Editor.h

@@ -118,6 +118,7 @@ private:
   bool FClosePending;
   TColor FBackgroundColor;
   int FInternalEditorEncodingOverride;
+  bool FNewFile;
   bool FReloading;
 
   static unsigned int FInstances;
@@ -141,6 +142,7 @@ public:
   __property TForm * ParentForm = { read = FParentForm, write = FParentForm };
   __property TColor BackgroundColor = { read = FBackgroundColor, write = SetBackgroundColor };
   __property int InternalEditorEncodingOverride = { read = FInternalEditorEncodingOverride, write = FInternalEditorEncodingOverride };
+  __property bool NewFile = { read = FNewFile, write = FNewFile };
 protected:
   bool __fastcall CursorInUpperPart();
   void __fastcall Find();

+ 1 - 0
source/resource/TextsWin.h

@@ -617,6 +617,7 @@
 #define PREFERENCES_DRAGEXT_BROKEN 6018
 #define FILE_COLOR_CAPTION      6019
 #define UPDATES_DONATE_HTML     6020
+#define EDITOR_NEW              6021
 
 // 2xxx is reserved for TextsFileZilla.h
 

+ 1 - 0
source/resource/TextsWin1.rc

@@ -622,6 +622,7 @@ BEGIN
         PREFERENCES_DRAGEXT_BROKEN, "Shell extension cannot work on this system."
         FILE_COLOR_CAPTION, "File color"
         UPDATES_DONATE_HTML, "To enable automatic updates, please <a href=\"%DONATE_URL%\">donate to WinSCP development</a> or %GET_IMG% WinSCP from <a href=\"%STORE_URL%\">Microsoft Store</a>."
+        EDITOR_NEW, "New"
 
         WIN_VARIABLE_STRINGS, "WIN_VARIABLE"
         WINSCP_COPYRIGHT, "Copyright © 2000-2019 Martin Prikryl"

+ 2 - 1
source/windows/WinInterface.h

@@ -378,7 +378,8 @@ typedef void __fastcall (__closure *TAnyModifiedEvent)
 TForm * __fastcall ShowEditorForm(const UnicodeString FileName, TForm * ParentForm,
   TNotifyEvent OnFileChanged, TNotifyEvent OnFileReload, TFileClosedEvent OnClose,
   TNotifyEvent OnSaveAll, TAnyModifiedEvent OnAnyModified,
-  const UnicodeString Caption, bool StandaloneEditor, TColor Color, int InternalEditorEncodingOverride);
+  const UnicodeString Caption, bool StandaloneEditor, TColor Color, int InternalEditorEncodingOverride,
+  bool NewFile);
 void __fastcall ReconfigureEditorForm(TForm * Form);
 void __fastcall EditorFormFileUploadComplete(TForm * Form);
 void __fastcall EditorFormFileSave(TForm * Form);