Răsfoiți Sursa

Switch /defaults accepts an optional delay in seconds to start the operation

Source commit: 312b3a3d9921c60a25172d756ae72949f1182766
Martin Prikryl 6 ani în urmă
părinte
comite
f2873a7c27

+ 7 - 3
source/forms/Copy.cpp

@@ -21,10 +21,10 @@
 #pragma resource "*.dfm"
 #endif
 //---------------------------------------------------------------------------
-bool __fastcall DoCopyDialog(bool ToRemote,
-  bool Move, TStrings * FileList, UnicodeString & TargetDirectory,
+bool __fastcall DoCopyDialog(
+  bool ToRemote, bool Move, TStrings * FileList, UnicodeString & TargetDirectory,
   TGUICopyParamType * Params, int Options, int CopyParamAttrs, TSessionData * SessionData,
-  int * OutputOptions)
+  int * OutputOptions, int AutoSubmit)
 {
   bool Result;
   TCopyDialog *CopyDialog = new TCopyDialog(Application, ToRemote, Move, FileList, Options, CopyParamAttrs, SessionData);
@@ -42,6 +42,10 @@ bool __fastcall DoCopyDialog(bool ToRemote,
     }
     CopyDialog->Directory = TargetDirectory;
     CopyDialog->Params = *Params;
+    if (AutoSubmit > 0)
+    {
+      InitiateDialogTimeout(CopyDialog, AutoSubmit * MSecsPerSec, CopyDialog->OkButton);
+    }
     Result = CopyDialog->Execute();
     if (Result)
     {

+ 5 - 5
source/forms/CustomScpExplorer.cpp

@@ -1125,7 +1125,7 @@ bool __fastcall TCustomScpExplorerForm::CopyParamDialog(
     std::unique_ptr<TSessionData> SessionData(SessionDataForCode());
     FlashOnBackground(); // Particularly when called from ClipboardFakeCreated
     Result = DoCopyDialog(Direction == tdToRemote, Type == ttMove,
-      FileList, TargetDirectory, &CopyParam, Options, CopyParamAttrs, SessionData.get(), &OutputOptions);
+      FileList, TargetDirectory, &CopyParam, Options, CopyParamAttrs, SessionData.get(), &OutputOptions, -1);
 
     if (Result)
     {
@@ -5267,7 +5267,7 @@ void __fastcall TCustomScpExplorerForm::SynchronizeDirectories()
 }
 //---------------------------------------------------------------------------
 bool __fastcall TCustomScpExplorerForm::DoSynchronizeDirectories(
-  UnicodeString & LocalDirectory, UnicodeString & RemoteDirectory, bool UseDefaults)
+  UnicodeString & LocalDirectory, UnicodeString & RemoteDirectory, int UseDefaults)
 {
   TSynchronizeParamType Params;
   Params.LocalDirectory = LocalDirectory;
@@ -5744,7 +5744,7 @@ void __fastcall TCustomScpExplorerForm::FullSynchronizeInNewWindow(
 //---------------------------------------------------------------------------
 int __fastcall TCustomScpExplorerForm::DoFullSynchronizeDirectories(
   UnicodeString & LocalDirectory, UnicodeString & RemoteDirectory,
-  TSynchronizeMode & Mode, int Params, bool & SaveMode, bool UseDefaults)
+  TSynchronizeMode & Mode, int Params, bool & SaveMode, int UseDefaults)
 {
   int Result;
 
@@ -5755,9 +5755,9 @@ int __fastcall TCustomScpExplorerForm::DoFullSynchronizeDirectories(
   TCopyParamType CopyParam = GUIConfiguration->CurrentCopyParam;
   TUsableCopyParamAttrs CopyParamAttrs = Terminal->UsableCopyParamAttrs(0);
   bool Continue =
-    UseDefaults ||
+    (UseDefaults == 0) ||
     DoFullSynchronizeDialog(Mode, Params, LocalDirectory, RemoteDirectory,
-      &CopyParam, SaveSettings, SaveMode, Options, CopyParamAttrs, FullSynchronizeInNewWindow);
+      &CopyParam, SaveSettings, SaveMode, Options, CopyParamAttrs, FullSynchronizeInNewWindow, UseDefaults);
   if (Continue)
   {
     Configuration->Usage->Inc(L"Synchronizations");

+ 5 - 5
source/forms/CustomScpExplorer.h

@@ -774,11 +774,11 @@ public:
   void __fastcall TerminalReady();
   void __fastcall QueueEvent(TManagedTerminal * Terminal, TTerminalQueue * Queue, TQueueEvent Event);
   void __fastcall QueueEmptyNoteClicked(TObject * Sender);
-  bool __fastcall DoSynchronizeDirectories(UnicodeString & LocalDirectory,
-    UnicodeString & RemoteDirectory, bool UseDefaults);
-  int __fastcall DoFullSynchronizeDirectories(UnicodeString & LocalDirectory,
-    UnicodeString & RemoteDirectory, TSynchronizeMode & Mode, int Params, bool & SaveMode,
-    bool UseDefaults);
+  bool __fastcall DoSynchronizeDirectories(
+    UnicodeString & LocalDirectory, UnicodeString & RemoteDirectory, int UseDefaults);
+  int __fastcall DoFullSynchronizeDirectories(
+    UnicodeString & LocalDirectory, UnicodeString & RemoteDirectory, TSynchronizeMode & Mode,
+    int Params, bool & SaveMode, int UseDefaults);
   void __fastcall StandaloneEdit(const UnicodeString & FileName);
   bool __fastcall CanPasteFromClipBoard();
   virtual void __fastcall PasteFromClipBoard();

+ 6 - 1
source/forms/FullSynchronize.cpp

@@ -27,7 +27,8 @@
 bool __fastcall DoFullSynchronizeDialog(TSynchronizeMode & Mode, int & Params,
   UnicodeString & LocalDirectory, UnicodeString & RemoteDirectory,
   TCopyParamType * CopyParams, bool & SaveSettings, bool & SaveMode, int Options,
-  const TUsableCopyParamAttrs & CopyParamAttrs, TFullSynchronizeInNewWindow OnFullSynchronizeInNewWindow)
+  const TUsableCopyParamAttrs & CopyParamAttrs, TFullSynchronizeInNewWindow OnFullSynchronizeInNewWindow,
+  int AutoSubmit)
 {
   bool Result;
   TFullSynchronizeDialog * Dialog = SafeFormCreate<TFullSynchronizeDialog>();
@@ -41,6 +42,10 @@ bool __fastcall DoFullSynchronizeDialog(TSynchronizeMode & Mode, int & Params,
     Dialog->CopyParams = *CopyParams;
     Dialog->SaveSettings = SaveSettings;
     Dialog->SaveMode = SaveMode;
+    if (AutoSubmit > 0)
+    {
+      InitiateDialogTimeout(Dialog, AutoSubmit * MSecsPerSec, Dialog->OkButton);
+    }
     Result = Dialog->Execute();
     if (Result)
     {

+ 1 - 1
source/forms/ScpCommander.cpp

@@ -1007,7 +1007,7 @@ void __fastcall TScpCommanderForm::SynchronizeDirectories()
 {
   UnicodeString LocalDirectory = LocalDirView->PathName;
   UnicodeString RemoteDirectory = RemoteDirView->PathName;
-  DoSynchronizeDirectories(LocalDirectory, RemoteDirectory, false);
+  DoSynchronizeDirectories(LocalDirectory, RemoteDirectory, -1);
 }
 //---------------------------------------------------------------------------
 void __fastcall TScpCommanderForm::FullSynchronizeDirectories()

+ 1 - 1
source/forms/ScpExplorer.cpp

@@ -227,7 +227,7 @@ void __fastcall TScpExplorerForm::SynchronizeDirectories()
 {
   UnicodeString LocalDirectory = WinConfiguration->ScpExplorer.LastLocalTargetDirectory;
   UnicodeString RemoteDirectory = RemoteDirView->PathName;
-  if (DoSynchronizeDirectories(LocalDirectory, RemoteDirectory, false))
+  if (DoSynchronizeDirectories(LocalDirectory, RemoteDirectory, -1))
   {
     WinConfiguration->ScpExplorer.LastLocalTargetDirectory = LocalDirectory;
   }

+ 16 - 4
source/forms/Synchronize.cpp

@@ -35,12 +35,12 @@ bool __fastcall DoSynchronizeDialog(TSynchronizeParamType & Params,
   TSynchronizeSessionLog OnSynchronizeSessionLog,
   TFeedSynchronizeError & OnFeedSynchronizeError,
   TSynchronizeInNewWindow OnSynchronizeInNewWindow,
-  bool Start)
+  int AutoSubmit)
 {
   bool Result;
   TSynchronizeDialog * Dialog = SafeFormCreate<TSynchronizeDialog>(Application);
 
-  Dialog->Init(OnStartStop, OnGetOptions, OnSynchronizeSessionLog, OnFeedSynchronizeError, OnSynchronizeInNewWindow, Start);
+  Dialog->Init(OnStartStop, OnGetOptions, OnSynchronizeSessionLog, OnFeedSynchronizeError, OnSynchronizeInNewWindow, AutoSubmit);
 
   try
   {
@@ -97,7 +97,7 @@ void __fastcall TSynchronizeDialog::Init(TSynchronizeStartStopEvent OnStartStop,
   TSynchronizeSessionLog OnSynchronizeSessionLog,
   TFeedSynchronizeError & OnFeedSynchronizeError,
   TSynchronizeInNewWindow OnSynchronizeInNewWindow,
-  bool StartImmediately)
+  int AutoSubmit)
 {
   FOnStartStop = OnStartStop;
   FOnGetOptions = OnGetOptions;
@@ -105,7 +105,19 @@ void __fastcall TSynchronizeDialog::Init(TSynchronizeStartStopEvent OnStartStop,
   FOnFeedSynchronizeError = &OnFeedSynchronizeError;
   DebugAssert(OnSynchronizeInNewWindow != NULL);
   FOnSynchronizeInNewWindow = OnSynchronizeInNewWindow;
-  FStartImmediately = StartImmediately;
+  if (AutoSubmit == 0)
+  {
+    FStartImmediately = true;
+  }
+  else
+  {
+    FStartImmediately = false;
+
+    if (AutoSubmit > 0)
+    {
+      InitiateDialogTimeout(this, AutoSubmit * MSecsPerSec, StartButton);
+    }
+  }
 }
 //---------------------------------------------------------------------------
 __fastcall TSynchronizeDialog::~TSynchronizeDialog()

+ 1 - 1
source/forms/Synchronize.h

@@ -142,7 +142,7 @@ public:
     TGetSynchronizeOptionsEvent OnGetOptions,
     TSynchronizeSessionLog OnSynchronizeSessionLog,
     TFeedSynchronizeError & OnFeedSynchronizeError, TSynchronizeInNewWindow OnSynchronizeInNewWindow,
-    bool StartImmediately);
+    int AutoSubmit);
   virtual __fastcall ~TSynchronizeDialog();
 
   bool __fastcall Execute();

+ 11 - 4
source/windows/WinInterface.cpp

@@ -407,7 +407,9 @@ void __fastcall TMessageTimeout::DoTimer(TObject * /*Sender*/)
     TForm * Dialog = dynamic_cast<TForm *>(FButton->Parent);
     DebugAssert(Dialog != NULL);
 
-    Dialog->ModalResult = FButton->ModalResult;
+    // Needed particularly for "keep up to date" dialog, which does not close on the button click
+    Enabled = false;
+    FButton->Click();
   }
   else
   {
@@ -415,6 +417,13 @@ void __fastcall TMessageTimeout::DoTimer(TObject * /*Sender*/)
     UpdateButton();
   }
 }
+//---------------------------------------------------------------------------
+void InitiateDialogTimeout(TForm * Dialog, unsigned int Timeout, TButton * Button)
+{
+  TMessageTimeout * MessageTimeout = new TMessageTimeout(Application, Timeout, Button);
+  MessageTimeout->Name = L"MessageTimeout";
+  Dialog->InsertComponent(MessageTimeout);
+}
 //---------------------------------------------------------------------
 class TPublicControl : public TControl
 {
@@ -464,9 +473,7 @@ TForm * __fastcall CreateMoreMessageDialogEx(const UnicodeString Message, TStrin
   {
     if (Params->Timeout > 0)
     {
-      TMessageTimeout * Timeout = new TMessageTimeout(Application, Params->Timeout, TimeoutButton);
-      Timeout->Name = L"MessageTimeout";
-      Dialog->InsertComponent(Timeout);
+      InitiateDialogTimeout(Dialog.get(), Params->Timeout, TimeoutButton);
     }
   }
 

+ 7 - 5
source/windows/WinInterface.h

@@ -112,6 +112,8 @@ Tbx::TTBXSeparatorItem * __fastcall AddMenuSeparator(Tb2item::TTBCustomItem * Me
 void __fastcall AddMenuLabel(Tb2item::TTBCustomItem * Menu, const UnicodeString & Label);
 void __fastcall ClickToolbarItem(Tb2item::TTBCustomItem * Item, bool PositionCursor);
 
+void InitiateDialogTimeout(TForm * Dialog, unsigned int Timeout, TButton * Button);
+
 // windows\WinHelp.cpp
 void __fastcall InitializeWinHelp();
 void __fastcall FinalizeWinHelp();
@@ -211,10 +213,10 @@ const coAllFiles            = 0x1000;
 const cooDoNotShowAgain     = 0x01;
 const cooRemoteTransfer     = 0x02;
 const cooSaveSettings       = 0x04;
-bool __fastcall DoCopyDialog(bool ToRemote,
-  bool Move, TStrings * FileList, UnicodeString & TargetDirectory,
+bool __fastcall DoCopyDialog(
+  bool ToRemote, bool Move, TStrings * FileList, UnicodeString & TargetDirectory,
   TGUICopyParamType * Params, int Options, int CopyParamAttrs,
-  TSessionData * SessionData, int * OutputOptions);
+  TSessionData * SessionData, int * OutputOptions, int AutoSubmit);
 
 // forms\CreateDirectory.cpp
 bool __fastcall DoCreateDirectoryDialog(UnicodeString & Directory,
@@ -336,7 +338,7 @@ bool __fastcall DoSynchronizeDialog(TSynchronizeParamType & Params,
   TSynchronizeSessionLog OnSynchronizeSessionLog,
   TFeedSynchronizeError & OnFeedSynchronizeError,
   TSynchronizeInNewWindow OnSynchronizeInNewWindow,
-  bool Start);
+  int AutoSubmit);
 
 // forms\FullSynchronize.cpp
 struct TUsableCopyParamAttrs;
@@ -351,7 +353,7 @@ bool __fastcall DoFullSynchronizeDialog(TSynchronizeMode & Mode, int & Params,
   UnicodeString & LocalDirectory, UnicodeString & RemoteDirectory,
   TCopyParamType * CopyParams, bool & SaveSettings, bool & SaveMode,
   int Options, const TUsableCopyParamAttrs & CopyParamAttrs,
-  TFullSynchronizeInNewWindow OnFullSynchronizeInNewWindow);
+  TFullSynchronizeInNewWindow OnFullSynchronizeInNewWindow, int AutoSubmit);
 
 // forms\SynchronizeChecklist.cpp
 class TSynchronizeChecklist;

+ 14 - 14
source/windows/WinMain.cpp

@@ -92,7 +92,7 @@ void __fastcall GetLoginData(UnicodeString SessionName, TOptions * Options,
   }
 }
 //---------------------------------------------------------------------------
-void __fastcall Upload(TTerminal * Terminal, TStrings * FileList, bool UseDefaults)
+void __fastcall Upload(TTerminal * Terminal, TStrings * FileList, int UseDefaults)
 {
   UnicodeString TargetDirectory;
   TGUICopyParamType CopyParam = GUIConfiguration->DefaultCopyParam;
@@ -104,9 +104,9 @@ void __fastcall Upload(TTerminal * Terminal, TStrings * FileList, bool UseDefaul
 
   int Options = coDisableQueue;
   int CopyParamAttrs = Terminal->UsableCopyParamAttrs(0).Upload;
-  if (UseDefaults ||
+  if ((UseDefaults == 0) ||
       DoCopyDialog(true, false, FileList, TargetDirectory, &CopyParam, Options,
-        CopyParamAttrs, Data.get(), NULL))
+        CopyParamAttrs, Data.get(), NULL, UseDefaults))
   {
     // Setting parameter overrides only now, otherwise the dialog would present the parametes as non-default
     CopyParam.OnceDoneOperation = odoDisconnect;
@@ -115,8 +115,7 @@ void __fastcall Upload(TTerminal * Terminal, TStrings * FileList, bool UseDefaul
   }
 }
 //---------------------------------------------------------------------------
-void __fastcall Download(TTerminal * Terminal, const UnicodeString FileName,
-  bool UseDefaults)
+void __fastcall Download(TTerminal * Terminal, const UnicodeString FileName, int UseDefaults)
 {
   TRemoteFile * File = NULL;
 
@@ -156,9 +155,9 @@ void __fastcall Download(TTerminal * Terminal, const UnicodeString FileName,
 
     int Options = coDisableQueue;
     int CopyParamAttrs = Terminal->UsableCopyParamAttrs(0).Download;
-    if (UseDefaults ||
+    if ((UseDefaults == 0) ||
         DoCopyDialog(false, false, FileListFriendly.get(), TargetDirectory, &CopyParam,
-          Options, CopyParamAttrs, NULL, NULL))
+          Options, CopyParamAttrs, NULL, NULL, UseDefaults))
     {
       // Setting parameter overrides only now, otherwise the dialog would present the parametes as non-default
 
@@ -219,8 +218,8 @@ void __fastcall SynchronizeDirectories(TTerminal * Terminal,
   }
 }
 //---------------------------------------------------------------------------
-void __fastcall FullSynchronize(TTerminal * Terminal, TCustomScpExplorerForm * ScpExplorer,
-  TStrings * CommandParams, bool UseDefaults)
+void __fastcall FullSynchronize(
+  TTerminal * Terminal, TCustomScpExplorerForm * ScpExplorer, TStrings * CommandParams, int UseDefaults)
 {
   UnicodeString LocalDirectory;
   UnicodeString RemoteDirectory;
@@ -249,8 +248,8 @@ void __fastcall FullSynchronize(TTerminal * Terminal, TCustomScpExplorerForm * S
   Abort();
 }
 //---------------------------------------------------------------------------
-void __fastcall Synchronize(TTerminal * Terminal, TCustomScpExplorerForm * ScpExplorer,
-  TStrings * CommandParams, bool UseDefaults)
+void __fastcall Synchronize(
+  TTerminal * Terminal, TCustomScpExplorerForm * ScpExplorer, TStrings * CommandParams, int UseDefaults)
 {
   UnicodeString LocalDirectory;
   UnicodeString RemoteDirectory;
@@ -961,7 +960,7 @@ int __fastcall Execute()
       ParamCommand = pcNone;
       UnicodeString AutoStartSession;
       UnicodeString DownloadFile;
-      bool UseDefaults = false;
+      int UseDefaults = -1;
 
       // do not check for temp dirs for service tasks (like RegisterAsUrlHandler)
       if (OnlyInstance &&
@@ -978,9 +977,10 @@ int __fastcall Execute()
 
       if (!Params->Empty)
       {
-        if (Params->FindSwitch(DEFAULTS_SWITCH) && CheckSafe(Params))
+        UnicodeString Value;
+        if (Params->FindSwitch(DEFAULTS_SWITCH, Value) && CheckSafe(Params))
         {
-          UseDefaults = true;
+          UseDefaults = StrToIntDef(Value, 0);
         }
 
         if (Params->FindSwitch(UPLOAD_SWITCH, CommandParams))