Browse Source

Easier use of TValueRestorer

Source commit: 605e98cefaa62284f2b1150fdc355e88d48bdbd3
Martin Prikryl 1 year ago
parent
commit
9f9d4655f1

+ 1 - 2
source/components/UnixDriveView.cpp

@@ -523,8 +523,7 @@ void __fastcall TCustomUnixDriveView::Change(TTreeNode * Node)
           {
             // Prevent further changes while loading the folder.
             // Particularly prevent user from trying to proceed with incremental search.
-            TValueRestorer<bool> ChangingDirectoryRestorer(FChangingDirectory);
-            FChangingDirectory = true;
+            TValueRestorer<bool> ChangingDirectoryRestorer(FChangingDirectory, true);
             Terminal->ChangeDirectory(NodePathName(Node));
           }
           TCustomDriveView::Change(Node);

+ 6 - 7
source/core/Common.h

@@ -356,9 +356,10 @@ class TValueRestorer
 public:
   __fastcall TValueRestorer(T & Target, const T & Value) :
     FTarget(Target),
-    FValue(Value),
+    FValue(Target),
     FArmed(true)
   {
+    FTarget = Value;
   }
 
   __fastcall TValueRestorer(T & Target) :
@@ -392,10 +393,9 @@ class TAutoNestingCounter : public TValueRestorer<int>
 {
 public:
   __fastcall TAutoNestingCounter(int & Target) :
-    TValueRestorer<int>(Target)
+    TValueRestorer<int>(Target, Target + 1)
   {
-    DebugAssert(Target >= 0);
-    ++Target;
+    DebugAssert(FValue >= 0);
   }
 
   __fastcall ~TAutoNestingCounter()
@@ -408,10 +408,9 @@ class TAutoFlag : public TValueRestorer<bool>
 {
 public:
   __fastcall TAutoFlag(bool & Target) :
-    TValueRestorer<bool>(Target)
+    TValueRestorer<bool>(Target, true)
   {
-    DebugAssert(!Target);
-    Target = true;
+    DebugAssert(!FValue);
   }
 
   __fastcall ~TAutoFlag()

+ 3 - 6
source/core/PuttyIntf.cpp

@@ -1491,8 +1491,7 @@ void WritePuttySettings(THierarchicalStorage * Storage, const UnicodeString & AS
   if (PuttyRegistryTypes.empty())
   {
     TGuard Guard(PuttyRegistrySection.get());
-    TValueRestorer<TPuttyRegistryMode> PuttyRegistryModeRestorer(PuttyRegistryMode);
-    PuttyRegistryMode = prmCollect;
+    TValueRestorer<TPuttyRegistryMode> PuttyRegistryModeRestorer(PuttyRegistryMode, prmCollect);
     Conf * conf = conf_new();
     try
     {
@@ -1537,16 +1536,14 @@ void WritePuttySettings(THierarchicalStorage * Storage, const UnicodeString & AS
 void PuttyDefaults(Conf * conf)
 {
   TGuard Guard(PuttyRegistrySection.get());
-  TValueRestorer<TPuttyRegistryMode> PuttyRegistryModeRestorer(PuttyRegistryMode);
-  PuttyRegistryMode = prmFail;
+  TValueRestorer<TPuttyRegistryMode> PuttyRegistryModeRestorer(PuttyRegistryMode, prmFail);
   do_defaults(NULL, conf);
 }
 //---------------------------------------------------------------------------
 void SavePuttyDefaults(const UnicodeString & Name)
 {
   TGuard Guard(PuttyRegistrySection.get());
-  TValueRestorer<TPuttyRegistryMode> PuttyRegistryModeRestorer(PuttyRegistryMode);
-  PuttyRegistryMode = prmPass;
+  TValueRestorer<TPuttyRegistryMode> PuttyRegistryModeRestorer(PuttyRegistryMode, prmPass);
   Conf * conf = conf_new();
   try
   {

+ 2 - 4
source/core/SecureShell.cpp

@@ -2288,8 +2288,7 @@ UnicodeString __fastcall TSecureShell::RetrieveHostKey(const UnicodeString & Hos
   Storage->AccessMode = smRead;
   TGuard Guard(PuttyStorageSection.get());
   DebugAssert(PuttyStorage == NULL);
-  TValueRestorer<THierarchicalStorage *> StorageRestorer(PuttyStorage);
-  PuttyStorage = Storage.get();
+  TValueRestorer<THierarchicalStorage *> StorageRestorer(PuttyStorage, Storage.get());
 
   AnsiString AnsiStoredKeys;
   AnsiStoredKeys.SetLength(10240);
@@ -2449,10 +2448,9 @@ UnicodeString TSecureShell::StoreHostKey(
 {
   TGuard Guard(PuttyStorageSection.get());
   DebugAssert(PuttyStorage == NULL);
-  TValueRestorer<THierarchicalStorage *> StorageRestorer(PuttyStorage);
   std::unique_ptr<THierarchicalStorage> Storage(GetHostKeyStorage());
   Storage->AccessMode = smReadWrite;
-  PuttyStorage = Storage.get();
+  TValueRestorer<THierarchicalStorage *> StorageRestorer(PuttyStorage, Storage.get());
   store_host_key(AnsiString(Host).c_str(), Port, AnsiString(KeyType).c_str(), AnsiString(KeyStr).c_str());
   return Storage->Source;
 }

+ 5 - 10
source/core/Terminal.cpp

@@ -4326,8 +4326,7 @@ void __fastcall TTerminal::DoDeleteFile(
 //---------------------------------------------------------------------------
 bool __fastcall TTerminal::DeleteFiles(TStrings * FilesToDelete, int Params)
 {
-  TValueRestorer<bool> UseBusyCursorRestorer(FUseBusyCursor);
-  FUseBusyCursor = false;
+  TValueRestorer<bool> UseBusyCursorRestorer(FUseBusyCursor, false);
 
   // TODO: avoid resolving symlinks while reading subdirectories.
   // Resolving does not work anyway for relative symlinks in subdirectories
@@ -4552,8 +4551,7 @@ void __fastcall TTerminal::DoChangeFileProperties(const UnicodeString FileName,
 void __fastcall TTerminal::ChangeFilesProperties(TStrings * FileList,
   const TRemoteProperties * Properties)
 {
-  TValueRestorer<bool> UseBusyCursorRestorer(FUseBusyCursor);
-  FUseBusyCursor = false;
+  TValueRestorer<bool> UseBusyCursorRestorer(FUseBusyCursor, false);
 
   AnnounceFileListOperation();
   ProcessFiles(FileList, foSetProperties, ChangeFileProperties, (void *)Properties);
@@ -4561,8 +4559,7 @@ void __fastcall TTerminal::ChangeFilesProperties(TStrings * FileList,
 //---------------------------------------------------------------------------
 bool __fastcall TTerminal::LoadFilesProperties(TStrings * FileList)
 {
-  TValueRestorer<bool> UseBusyCursorRestorer(FUseBusyCursor);
-  FUseBusyCursor = false;
+  TValueRestorer<bool> UseBusyCursorRestorer(FUseBusyCursor, false);
 
   // see comment in TSFTPFileSystem::IsCapable
   bool Result =
@@ -4729,8 +4726,7 @@ bool TTerminal::CalculateFilesSize(TStrings * FileList, __int64 & Size, TCalcula
   // draft-peterson-streamlined-ftp-command-extensions-10
   // Implemented by Serv-U FTP.
 
-  TValueRestorer<bool> UseBusyCursorRestorer(FUseBusyCursor);
-  FUseBusyCursor = false;
+  TValueRestorer<bool> UseBusyCursorRestorer(FUseBusyCursor, false);
 
   ProcessFiles(FileList, foCalculateSize, DoCalculateFileSize, &Params);
   Size = Params.Size;
@@ -5943,8 +5939,7 @@ TSynchronizeChecklist * __fastcall TTerminal::SynchronizeCollect(const UnicodeSt
   TSynchronizeDirectory OnSynchronizeDirectory,
   TSynchronizeOptions * Options)
 {
-  TValueRestorer<bool> UseBusyCursorRestorer(FUseBusyCursor);
-  FUseBusyCursor = false;
+  TValueRestorer<bool> UseBusyCursorRestorer(FUseBusyCursor, false);
 
   TSynchronizeChecklist * Checklist = new TSynchronizeChecklist();
   try

+ 10 - 22
source/forms/CustomScpExplorer.cpp

@@ -598,8 +598,7 @@ void __fastcall TCustomScpExplorerForm::DoSetManagedSession(TManagedTerminal * v
   DebugAssert(!Replace || ((value != NULL) && !value->LocalBrowser));
   FManagedSession = value;
   {
-    TValueRestorer<bool> AllowTransferPresetAutoSelectRestorer(FAllowTransferPresetAutoSelect);
-    FAllowTransferPresetAutoSelect = false;
+    TValueRestorer<bool> AllowTransferPresetAutoSelectRestorer(FAllowTransferPresetAutoSelect, false);
     TAutoFlag SessionChangingFlag(FSessionChanging);
 
     SessionChanged(Replace);
@@ -2529,8 +2528,7 @@ void __fastcall TCustomScpExplorerForm::LocalCustomCommand(TStrings * FileList,
     POutput.reset(new UnicodeString());
   }
 
-  TValueRestorer<TOperationSide> ProgressSideRestorer(FProgressSide);
-  FProgressSide = FCurrentSide;
+  TValueRestorer<TOperationSide> ProgressSideRestorer(FProgressSide, FCurrentSide);
 
   if (!LocalCustomCommand.IsFileCommand(Command))
   {
@@ -4373,12 +4371,9 @@ void __fastcall TCustomScpExplorerForm::DeleteFiles(TOperationSide Side,
 
       try
       {
-        TValueRestorer<TStrings *> DeletedFilesRestorer(FDeletedFiles);
         DebugAssert(FDeletedFiles == NULL);
-        FDeletedFiles = DeletedFiles.get();
-
-        TValueRestorer<TFileOperationFinishedEvent> OnFileOperationFinishedRestorer(FOnFileOperationFinished);
-        FOnFileOperationFinished = FileDeleted;
+        TValueRestorer<TStrings *> DeletedFilesRestorer(FDeletedFiles, DeletedFiles.get());
+        TValueRestorer<TFileOperationFinishedEvent> OnFileOperationFinishedRestorer(FOnFileOperationFinished, FileDeleted);
 
         FMoveToQueue = false;
 
@@ -4421,8 +4416,7 @@ void __fastcall TCustomScpExplorerForm::DeleteFiles(TOperationSide Side,
       {
         Configuration->Usage->Inc(L"LocalLocalDeletes");
       }
-      TValueRestorer<TOperationSide> ProgressSideRestorer(FProgressSide);
-      FProgressSide = FCurrentSide;
+      TValueRestorer<TOperationSide> ProgressSideRestorer(FProgressSide, FCurrentSide);
       try
       {
         TTerminalManager::Instance()->LocalTerminal->DeleteLocalFiles(FileList, FLAGMASK(Alternative, dfAlternative));
@@ -10591,8 +10585,7 @@ void __fastcall TCustomScpExplorerForm::DoOperationOnFoundFiles(
 {
   if (CanOperateOnFoundFiles(ATerminal))
   {
-    TValueRestorer<TFileOperationFinishedEvent> OnFileOperationFinishedRestorer(FOnFileOperationFinished);
-    FOnFileOperationFinished = OnFileOperationFinished;
+    TValueRestorer<TFileOperationFinishedEvent> OnFileOperationFinishedRestorer(FOnFileOperationFinished, OnFileOperationFinished);
     ExecuteFileOperation(Operation, osRemote, FileList, false, NULL);
   }
 }
@@ -12015,21 +12008,16 @@ void TCustomScpExplorerForm::CalculateDirectorySizes(TOperationSide Side)
   CalculateSizeOperation.Index = 0;
 
   __int64 Size = 0;
-  TValueRestorer<TCalculateSizeOperation *> DirectorySizeOperationRestorer(FCalculateSizeOperation);
-  FCalculateSizeOperation = &CalculateSizeOperation;
-
-  TValueRestorer<TFileOperationFinishedEvent> OnFileOperationFinishedRestorer(FOnFileOperationFinished);
-  FOnFileOperationFinished = DirectorySizeCalculated;
-  TValueRestorer<TFileOperation> PrimaryOperationRestorer(FPrimaryOperation);
-  FPrimaryOperation = foCalculateSize;
+  TValueRestorer<TCalculateSizeOperation *> DirectorySizeOperationRestorer(FCalculateSizeOperation, &CalculateSizeOperation);
+  TValueRestorer<TFileOperationFinishedEvent> OnFileOperationFinishedRestorer(FOnFileOperationFinished, DirectorySizeCalculated);
+  TValueRestorer<TFileOperation> PrimaryOperationRestorer(FPrimaryOperation, foCalculateSize);
 
   TCalculatedSizes CalculatedSizes;
   CalculateSizeOperation.Stats.CalculatedSizes = &CalculatedSizes;
 
   if (LocalSide)
   {
-    TValueRestorer<TOperationSide> ProgressSideRestorer(FProgressSide);
-    FProgressSide = Side;
+    TValueRestorer<TOperationSide> ProgressSideRestorer(FProgressSide, Side);
     ManagedSession->CalculateLocalFilesSize(FileList.get(), Size, NULL, true, NULL, &CalculatedSizes);
   }
   else

+ 2 - 4
source/forms/ScpCommander.cpp

@@ -1497,10 +1497,8 @@ void __fastcall TScpCommanderForm::SynchronizeBrowsing(TCustomDirView * ADirView
       !PrevPath.IsEmpty() && PrevPath != ADirView->Path)
   {
     DebugAssert(!IsLocalBrowserMode());
-    TValueRestorer<bool> AllowTransferPresetAutoSelectRestorer(FAllowTransferPresetAutoSelect);
-    FAllowTransferPresetAutoSelect = false;
-    TValueRestorer<bool> SynchronisingBrowseRestorer(FSynchronisingBrowse);
-    FSynchronisingBrowse = true;
+    TValueRestorer<bool> AllowTransferPresetAutoSelectRestorer(FAllowTransferPresetAutoSelect, false);
+    TValueRestorer<bool> SynchronisingBrowseRestorer(FSynchronisingBrowse, true);
 
     try
     {

+ 1 - 2
source/windows/TerminalManager.cpp

@@ -313,8 +313,7 @@ void __fastcall TTerminalManager::DoConnectTerminal(TTerminal * Terminal, bool R
   UnicodeString OrigRemoteDirectory = Terminal->SessionData->RemoteDirectory;
   try
   {
-    TValueRestorer<TTerminal *> OpeningTerminalRestorer(FOpeningTerminal);
-    FOpeningTerminal = Terminal;
+    TValueRestorer<TTerminal *> OpeningTerminalRestorer(FOpeningTerminal, Terminal);
     TTerminalThread * TerminalThread = new TTerminalThread(Terminal);
     TerminalThread->AllowAbandon = (Terminal == ActiveTerminal);
     try