1
0
Эх сурвалжийг харах

On Synchronization Checklist window, local and remote directories can be opened in Windows Explorer and another instance of WinSCP, respectively

Source commit: c7b14c2c5673be35723aee7d00e88d2641330dd4
Martin Prikryl 6 жил өмнө
parent
commit
084a35d7a7

+ 32 - 6
source/forms/CustomScpExplorer.cpp

@@ -4755,13 +4755,10 @@ void __fastcall TCustomScpExplorerForm::NewSession(bool FromSite, const UnicodeS
   }
 }
 //---------------------------------------------------------------------------
-UnicodeString __fastcall TCustomScpExplorerForm::CreateHiddenDuplicateSession()
+UnicodeString __fastcall TCustomScpExplorerForm::SaveHiddenDuplicateSession(TSessionData * SessionData)
 {
   UnicodeString SessionName = StoredSessions->HiddenPrefix + Terminal->SessionData->SessionName;
-
-  // current working directories become defaults here, what is not right
-  std::unique_ptr<TSessionData> SessionData(CloneCurrentSessionData());
-  StoredSessions->NewSession(SessionName, SessionData.get());
+  StoredSessions->NewSession(SessionName, SessionData);
   // modified only, explicit
   StoredSessions->Save(false, true);
 
@@ -4769,6 +4766,13 @@ UnicodeString __fastcall TCustomScpExplorerForm::CreateHiddenDuplicateSession()
   return EncodeUrlString(SessionName);
 }
 //---------------------------------------------------------------------------
+UnicodeString __fastcall TCustomScpExplorerForm::CreateHiddenDuplicateSession()
+{
+  // current working directories become defaults here, what is not right
+  std::unique_ptr<TSessionData> SessionData(CloneCurrentSessionData());
+  return SaveHiddenDuplicateSession(SessionData.get());
+}
+//---------------------------------------------------------------------------
 void __fastcall TCustomScpExplorerForm::DuplicateSession()
 {
   if (OpenInNewWindow())
@@ -5726,6 +5730,28 @@ void __fastcall TCustomScpExplorerForm::DoSynchronizeMove(
   }
 }
 //---------------------------------------------------------------------------
+void __fastcall TCustomScpExplorerForm::DoSynchronizeBrowse(TOperationSide Side, const TSynchronizeChecklist::TItem * Item)
+{
+  UnicodeString LocalPath = ExcludeTrailingBackslash(Item->Local.Directory);
+  if (Side == osLocal)
+  {
+    OpenFolderInExplorer(LocalPath);
+  }
+  else if (DebugAlwaysTrue(Side == osRemote))
+  {
+    // Similar to CreateHiddenDuplicateSession, except that it modifies the initial directories
+    std::unique_ptr<TSessionData> SessionData(CloneCurrentSessionData());
+    SessionData->RemoteDirectory = UnixExcludeTrailingBackslash(Item->Remote.Directory);
+    if (!LocalPath.IsEmpty())
+    {
+      SessionData->LocalDirectory = LocalPath;
+    }
+
+    UnicodeString SessionName = SaveHiddenDuplicateSession(SessionData.get());
+    ExecuteNewInstance(SessionName);
+  }
+}
+//---------------------------------------------------------------------------
 void __fastcall TCustomScpExplorerForm::FullSynchronizeInNewWindow(
   TSynchronizeMode Mode, int Params, const UnicodeString & LocalDirectory, const UnicodeString & RemoteDirectory,
    const TCopyParamType * CopyParams)
@@ -5835,7 +5861,7 @@ int __fastcall TCustomScpExplorerForm::DoFullSynchronizeDirectories(
         {
           if (!DoSynchronizeChecklistDialog(
                 Checklist, Mode, Params, LocalDirectory, RemoteDirectory, CustomCommandMenu, DoFullSynchronize,
-                DoSynchronizeChecklistCalculateSize, DoSynchronizeMove, &SynchronizeParams))
+                DoSynchronizeChecklistCalculateSize, DoSynchronizeMove, DoSynchronizeBrowse, &SynchronizeParams))
           {
             Result = -1;
           }

+ 2 - 0
source/forms/CustomScpExplorer.h

@@ -660,6 +660,7 @@ protected:
     TSynchronizeChecklist * Checklist, const TSynchronizeChecklist::TItemList & Items, void * Token);
   void __fastcall DoSynchronizeMove(
     TOperationSide Side, const UnicodeString & FileName, const UnicodeString & NewFileName, TRemoteFile * RemoteFile);
+  void __fastcall DoSynchronizeBrowse(TOperationSide Side, const TSynchronizeChecklist::TItem * Item);
   void __fastcall FullSynchronize(
     TSynchronizeParams & Params, TProcessedSynchronizationChecklistItem OnProcessedItem,
     TUpdatedSynchronizationChecklistItems OnUpdatedSynchronizationChecklistItems);
@@ -731,6 +732,7 @@ public:
   __fastcall TCustomScpExplorerForm(TComponent* Owner);
   void __fastcall SaveCurrentSession();
   UnicodeString __fastcall CreateHiddenDuplicateSession();
+  UnicodeString __fastcall SaveHiddenDuplicateSession(TSessionData * SessionData);
   TSessionData * __fastcall CloneCurrentSessionData();
   bool __fastcall SaveWorkspace(bool EnableAutoSave);
   virtual void __fastcall CompareDirectories();

+ 23 - 3
source/forms/SynchronizeChecklist.cpp

@@ -35,12 +35,12 @@ bool __fastcall DoSynchronizeChecklistDialog(TSynchronizeChecklist * Checklist,
   const UnicodeString LocalDirectory, const UnicodeString RemoteDirectory,
   TCustomCommandMenuEvent OnCustomCommandMenu, TFullSynchronizeEvent OnSynchronize,
   TSynchronizeChecklistCalculateSize OnSynchronizeChecklistCalculateSize, TSynchronizeMoveEvent OnSynchronizeMove,
-  void * Token)
+  TSynchronizeBrowseEvent OnSynchronizeBrowse, void * Token)
 {
   std::unique_ptr<TSynchronizeChecklistDialog> Dialog(
     new TSynchronizeChecklistDialog(
       Application, Mode, Params, LocalDirectory, RemoteDirectory, OnCustomCommandMenu, OnSynchronize,
-      OnSynchronizeChecklistCalculateSize, OnSynchronizeMove, Token));
+      OnSynchronizeChecklistCalculateSize, OnSynchronizeMove, OnSynchronizeBrowse, Token));
   return Dialog->Execute(Checklist);
 }
 //---------------------------------------------------------------------
@@ -48,7 +48,8 @@ __fastcall TSynchronizeChecklistDialog::TSynchronizeChecklistDialog(
   TComponent * AOwner, TSynchronizeMode Mode, int Params,
   const UnicodeString & LocalDirectory, const UnicodeString & RemoteDirectory,
   TCustomCommandMenuEvent OnCustomCommandMenu, TFullSynchronizeEvent OnSynchronize,
-  TSynchronizeChecklistCalculateSize OnSynchronizeChecklistCalculateSize, TSynchronizeMoveEvent OnSynchronizeMove, void * Token)
+  TSynchronizeChecklistCalculateSize OnSynchronizeChecklistCalculateSize, TSynchronizeMoveEvent OnSynchronizeMove,
+  TSynchronizeBrowseEvent OnSynchronizeBrowse, void * Token)
   : TForm(AOwner)
 {
   FFormRestored = false;
@@ -59,6 +60,7 @@ __fastcall TSynchronizeChecklistDialog::TSynchronizeChecklistDialog(
   FOnCustomCommandMenu = OnCustomCommandMenu;
   FOnSynchronizeChecklistCalculateSize = OnSynchronizeChecklistCalculateSize;
   FOnSynchronizeMove = OnSynchronizeMove;
+  FOnSynchronizeBrowse = OnSynchronizeBrowse;
   DebugAssert(OnSynchronize != NULL);
   FOnSynchronize = OnSynchronize;
   FToken = Token;
@@ -189,6 +191,8 @@ void __fastcall TSynchronizeChecklistDialog::UpdateControls()
   ReverseAction->Enabled = (ListView->SelCount > 0) && DebugAlwaysTrue(!FSynchronizing);
   MoveAction->Enabled = (GetMoveItems() != TSynchronizeMoveItems());
   CalculateSizeAction->Enabled = (ListView->SelCount > 0) && AnyDirectory && DebugAlwaysTrue(!FSynchronizing);
+  BrowseLocalAction->Enabled = (ListView->SelCount == 1) && (GetChecklistItem(ListView->Selected)->Action != TSynchronizeChecklist::saDeleteRemote);
+  BrowseRemoteAction->Enabled = (ListView->SelCount == 1) && (GetChecklistItem(ListView->Selected)->Action != TSynchronizeChecklist::saDeleteLocal);
 
   SelectAllAction->Enabled = (ListView->SelCount < ListView->Items->Count) && !FSynchronizing;
 }
@@ -1309,3 +1313,19 @@ void __fastcall TSynchronizeChecklistDialog::UncheckDirectoryActionExecute(TObje
   CheckDirectory(false);
 }
 //---------------------------------------------------------------------------
+void __fastcall TSynchronizeChecklistDialog::DoBrowse(TOperationSide Side)
+{
+  const TSynchronizeChecklist::TItem * ChecklistItem = GetChecklistItem(ListView->Selected);
+  FOnSynchronizeBrowse(Side, ChecklistItem);
+}
+//---------------------------------------------------------------------------
+void __fastcall TSynchronizeChecklistDialog::BrowseLocalActionExecute(TObject *)
+{
+  DoBrowse(osLocal);
+}
+//---------------------------------------------------------------------------
+void __fastcall TSynchronizeChecklistDialog::BrowseRemoteActionExecute(TObject *)
+{
+  DoBrowse(osRemote);
+}
+//---------------------------------------------------------------------------

+ 14 - 0
source/forms/SynchronizeChecklist.dfm

@@ -2363,6 +2363,12 @@ object SynchronizeChecklistDialog: TSynchronizeChecklistDialog
       object TMenuItem
       end
     end
+    object BrowseLocalDirectory2: TMenuItem
+      Action = BrowseLocalAction
+    end
+    object BrowseLocalDirectory1: TMenuItem
+      Action = BrowseRemoteAction
+    end
     object N2: TMenuItem
       Caption = '-'
     end
@@ -2430,6 +2436,14 @@ object SynchronizeChecklistDialog: TSynchronizeChecklistDialog
       Caption = 'Uncheck All Actions in This &Directory'
       OnExecute = UncheckDirectoryActionExecute
     end
+    object BrowseLocalAction: TAction
+      Caption = 'Browse &Local Directory'
+      OnExecute = BrowseLocalActionExecute
+    end
+    object BrowseRemoteAction: TAction
+      Caption = 'Browse &Remote Directory'
+      OnExecute = BrowseRemoteActionExecute
+    end
   end
   object ActionImages120: TPngImageList
     Height = 20

+ 9 - 1
source/forms/SynchronizeChecklist.h

@@ -64,6 +64,10 @@ __published:
   TMenuItem *N3;
   TMenuItem *CheckAllFilesinThisDirectory1;
   TMenuItem *UncheckAllActionsinThisDirectory1;
+  TAction *BrowseLocalAction;
+  TAction *BrowseRemoteAction;
+  TMenuItem *BrowseLocalDirectory1;
+  TMenuItem *BrowseLocalDirectory2;
   void __fastcall HelpButtonClick(TObject * Sender);
   void __fastcall FormShow(TObject * Sender);
   void __fastcall StatusBarDrawPanel(TStatusBar *StatusBar,
@@ -102,6 +106,8 @@ __published:
   void __fastcall MoveActionExecute(TObject *Sender);
   void __fastcall CheckDirectoryActionExecute(TObject *Sender);
   void __fastcall UncheckDirectoryActionExecute(TObject *Sender);
+  void __fastcall BrowseLocalActionExecute(TObject *Sender);
+  void __fastcall BrowseRemoteActionExecute(TObject *Sender);
 
 public:
   __fastcall TSynchronizeChecklistDialog(
@@ -109,7 +115,7 @@ public:
     const UnicodeString & LocalDirectory, const UnicodeString & RemoteDirectory,
     TCustomCommandMenuEvent OnCustomCommandMenu, TFullSynchronizeEvent OnSynchronize,
     TSynchronizeChecklistCalculateSize OnSynchronizeChecklistCalculateSize, TSynchronizeMoveEvent OnSynchronizeMove,
-    void * Token);
+    TSynchronizeBrowseEvent OnSynchronizeBrowse, void * Token);
   virtual __fastcall ~TSynchronizeChecklistDialog();
 
   bool __fastcall Execute(TSynchronizeChecklist * Checklist);
@@ -133,6 +139,7 @@ protected:
   TCustomCommandMenuEvent FOnCustomCommandMenu;
   TSynchronizeChecklistCalculateSize FOnSynchronizeChecklistCalculateSize;
   TSynchronizeMoveEvent FOnSynchronizeMove;
+  TSynchronizeBrowseEvent FOnSynchronizeBrowse;
   typedef std::map<const TSynchronizeChecklist::TItem *, TSynchronizeChecklist::TAction> TActions;
   TActions FActions;
   TFullSynchronizeEvent FOnSynchronize;
@@ -172,6 +179,7 @@ protected:
   TSynchronizeMoveItems __fastcall GetMoveItems();
   void __fastcall DeleteItem(TListItem * Item);
   void __fastcall CheckDirectory(bool Check);
+  void __fastcall DoBrowse(TOperationSide Side);
   static int __fastcall CompareNumber(__int64 Value1, __int64 Value2);
 };
 //----------------------------------------------------------------------------

+ 2 - 1
source/windows/WinInterface.h

@@ -366,12 +366,13 @@ typedef void __fastcall (__closure *TSynchronizeChecklistCalculateSize)
   (TSynchronizeChecklist * Checklist, const TSynchronizeChecklist::TItemList & Items, void * Token);
 typedef void __fastcall (__closure *TSynchronizeMoveEvent)(
   TOperationSide Side, const UnicodeString & FileName, const UnicodeString & NewFileName, TRemoteFile * RemoteFile);
+typedef void __fastcall (__closure *TSynchronizeBrowseEvent)(TOperationSide Side, const TSynchronizeChecklist::TItem * Item);
 bool __fastcall DoSynchronizeChecklistDialog(TSynchronizeChecklist * Checklist,
   TSynchronizeMode Mode, int Params,
   const UnicodeString LocalDirectory, const UnicodeString RemoteDirectory,
   TCustomCommandMenuEvent OnCustomCommandMenu, TFullSynchronizeEvent OnSynchronize,
   TSynchronizeChecklistCalculateSize OnSynchronizeChecklistCalculateSize, TSynchronizeMoveEvent OnSynchronizeMove,
-  void * Token);
+  TSynchronizeBrowseEvent OnSynchronizeBrowse, void * Token);
 
 // forms\Editor.cpp
 typedef void __fastcall (__closure *TFileClosedEvent)