Ver Fonte

Commands to copy paths to the clipboard on the Synchronization checklist window + Bug fix: Local file with invalid characters replaced could not be explorer from the Synchronization checklist window

Source commit: 205edb72d291cca4041e7a8443c37b8749ec27e0
Martin Prikryl há 7 meses atrás
pai
commit
4dbbc9eb05

+ 10 - 0
source/core/RemoteFiles.cpp

@@ -2934,11 +2934,21 @@ UnicodeString TSynchronizeChecklist::TItem::GetLocalPath() const
   return CombinePaths(Local.Directory, Local.FileName);
 }
 //---------------------------------------------------------------------------
+UnicodeString TSynchronizeChecklist::TItem::ForceGetLocalPath() const
+{
+  return CombinePaths(Local.Directory, DefaultStr(Local.FileName, Remote.FileName));
+}
+//---------------------------------------------------------------------------
 UnicodeString TSynchronizeChecklist::TItem::GetRemotePath() const
 {
   return UnixCombinePaths(Remote.Directory, Remote.FileName);
 }
 //---------------------------------------------------------------------------
+UnicodeString TSynchronizeChecklist::TItem::ForceGetRemotePath() const
+{
+  return UnixCombinePaths(Remote.Directory, GetFileName());
+}
+//---------------------------------------------------------------------------
 UnicodeString TSynchronizeChecklist::TItem::GetLocalTarget() const
 {
   return IncludeTrailingBackslash(Local.Directory);

+ 2 - 0
source/core/RemoteFiles.h

@@ -503,8 +503,10 @@ public:
     __int64 __fastcall GetSize() const;
     __int64 __fastcall GetSize(TAction AAction) const;
     UnicodeString GetLocalPath() const;
+    UnicodeString ForceGetLocalPath() const;
     // Contrary to RemoteFile->FullFileName, this does not include trailing slash for directories
     UnicodeString GetRemotePath() const;
+    UnicodeString ForceGetRemotePath() const;
     UnicodeString GetLocalTarget() const;
     UnicodeString GetRemoteTarget() const;
     TStrings * GetFileList() const;

+ 1 - 1
source/forms/CustomScpExplorer.cpp

@@ -6517,7 +6517,7 @@ void __fastcall TCustomScpExplorerForm::DoSynchronizeExplore(TOperationSide Side
     }
     else
     {
-      OpenFileInExplorer(CombinePaths(LocalPath, Item->GetFileName()));
+      OpenFileInExplorer(Item->ForceGetLocalPath());
     }
   }
   else if (DebugAlwaysTrue(Side == osRemote))

+ 31 - 4
source/forms/SynchronizeChecklist.cpp

@@ -342,8 +342,10 @@ void __fastcall TSynchronizeChecklistDialog::UpdateControls()
   CalculateSizeAllAction->Enabled = (FDirectories > 0) && !FSynchronizing;
   TSynchronizeChecklist::TAction SelectedItemAction =
     (SelCount == 1) ? GetChecklistItemAction(GetChecklistItem(ListView->Selected)) : TSynchronizeChecklist::saNone;
-  ExploreLocalAction->Enabled = (SelCount == 1) && (SelectedItemAction != TSynchronizeChecklist::saDeleteRemote);
-  ExploreRemoteAction->Enabled = (SelCount == 1) && (SelectedItemAction != TSynchronizeChecklist::saDeleteLocal);
+  ExploreLocalAction2->Enabled = (SelCount == 1) && (SelectedItemAction != TSynchronizeChecklist::saDeleteRemote);
+  ExploreRemoteAction2->Enabled = (SelCount == 1) && (SelectedItemAction != TSynchronizeChecklist::saDeleteLocal);
+  LocalPathToClipboardAction->Enabled = (SelCount > 0);
+  RemotePathToClipboardAction->Enabled = LocalPathToClipboardAction->Enabled;
 
   int Count = ListView->Items->Count;
   DebugAssert(FTotals[0] == Count);
@@ -1552,12 +1554,12 @@ void __fastcall TSynchronizeChecklistDialog::DoExplore(TOperationSide Side)
   FOnSynchronizeExplore(Side, Action, ChecklistItem);
 }
 //---------------------------------------------------------------------------
-void __fastcall TSynchronizeChecklistDialog::ExploreLocalActionExecute(TObject *)
+void __fastcall TSynchronizeChecklistDialog::ExploreLocalAction2Execute(TObject *)
 {
   DoExplore(osLocal);
 }
 //---------------------------------------------------------------------------
-void __fastcall TSynchronizeChecklistDialog::ExploreRemoteActionExecute(TObject *)
+void __fastcall TSynchronizeChecklistDialog::ExploreRemoteAction2Execute(TObject *)
 {
   DoExplore(osRemote);
 }
@@ -1835,3 +1837,28 @@ void __fastcall TSynchronizeChecklistDialog::StartQueueItemClick(TObject *)
   DoSynchronize(true);
 }
 //---------------------------------------------------------------------------
+void TSynchronizeChecklistDialog::PathToClipboard(bool Local)
+{
+  std::unique_ptr<TStrings> Paths(new TStringList());
+  TListItem * Item = NULL;
+  while (IterateSelectedItems(Item))
+  {
+    const TSynchronizeChecklist::TItem * ChecklistItem = GetChecklistItem(Item);
+    UnicodeString Path = Local ? ChecklistItem->ForceGetLocalPath() : ChecklistItem->ForceGetRemotePath();
+    Paths->Add(Path);
+  }
+
+  TInstantOperationVisualizer Visualizer;
+  CopyToClipboard(Paths.get());
+}
+//---------------------------------------------------------------------------
+void __fastcall TSynchronizeChecklistDialog::LocalPathToClipboardActionExecute(TObject *)
+{
+  PathToClipboard(true);
+}
+//---------------------------------------------------------------------------
+void __fastcall TSynchronizeChecklistDialog::RemotePathToClipboardActionExecute(TObject *)
+{
+  PathToClipboard(false);
+}
+//---------------------------------------------------------------------------

+ 32 - 10
source/forms/SynchronizeChecklist.dfm

@@ -2107,11 +2107,23 @@ object SynchronizeChecklistDialog: TSynchronizeChecklistDialog
       object TMenuItem
       end
     end
-    object ExploreLocalDirectory1: TMenuItem
-      Action = ExploreLocalAction
+    object LocalDirectory1: TMenuItem
+      Caption = '&Local Directory'
+      object ExploreLocalDirectory1: TMenuItem
+        Action = ExploreLocalAction2
+      end
+      object CopyPathtoClipboard2: TMenuItem
+        Action = LocalPathToClipboardAction
+      end
     end
-    object ExploreRemoteDirectory1: TMenuItem
-      Action = ExploreRemoteAction
+    object RemoteDirectory1: TMenuItem
+      Caption = '&Remote Directory'
+      object ExploreRemoteDirectory1: TMenuItem
+        Action = ExploreRemoteAction2
+      end
+      object CopyPathtoClipboard1: TMenuItem
+        Action = RemotePathToClipboardAction
+      end
     end
     object N2: TMenuItem
       Caption = '-'
@@ -2182,19 +2194,29 @@ object SynchronizeChecklistDialog: TSynchronizeChecklistDialog
       Caption = 'Uncheck All Actions in This &Directory'
       OnExecute = UncheckDirectoryActionExecute
     end
-    object ExploreLocalAction: TAction
-      Caption = 'Explore &Local Directory'
-      OnExecute = ExploreLocalActionExecute
+    object ExploreLocalAction2: TAction
+      Caption = '&Explore'
+      OnExecute = ExploreLocalAction2Execute
     end
-    object ExploreRemoteAction: TAction
-      Caption = 'Explore &Remote Directory'
-      OnExecute = ExploreRemoteActionExecute
+    object ExploreRemoteAction2: TAction
+      Caption = '&Explore'
+      OnExecute = ExploreRemoteAction2Execute
     end
     object FindMoveCandidateAction: TAction
       Caption = '&Find Move Candidate'
       ShortCut = 49269
       OnExecute = FindMoveCandidateActionExecute
     end
+    object LocalPathToClipboardAction: TAction
+      Caption = 'Copy &Path to Clipboard'
+      ShortCut = 16603
+      OnExecute = LocalPathToClipboardActionExecute
+    end
+    object RemotePathToClipboardAction: TAction
+      Caption = 'Copy &Path to Clipboard'
+      ShortCut = 16605
+      OnExecute = RemotePathToClipboardActionExecute
+    end
   end
   object ActionImages120: TPngImageList
     Height = 20

+ 13 - 4
source/forms/SynchronizeChecklist.h

@@ -65,8 +65,8 @@ __published:
   TMenuItem *N3;
   TMenuItem *CheckAllFilesinThisDirectory1;
   TMenuItem *UncheckAllActionsinThisDirectory1;
-  TAction *ExploreLocalAction;
-  TAction *ExploreRemoteAction;
+  TAction *ExploreLocalAction2;
+  TAction *ExploreRemoteAction2;
   TMenuItem *ExploreLocalDirectory1;
   TMenuItem *ExploreRemoteDirectory1;
   TAction *FindMoveCandidateAction;
@@ -80,6 +80,12 @@ __published:
   TPopupMenu *OkPopupMenu;
   TMenuItem *StartItem;
   TMenuItem *StartQueueItem;
+  TMenuItem *LocalDirectory1;
+  TMenuItem *RemoteDirectory1;
+  TAction *RemotePathToClipboardAction;
+  TMenuItem *CopyPathtoClipboard1;
+  TAction *LocalPathToClipboardAction;
+  TMenuItem *CopyPathtoClipboard2;
   void __fastcall HelpButtonClick(TObject * Sender);
   void __fastcall FormShow(TObject * Sender);
   void __fastcall StatusBarDrawPanel(TStatusBar *StatusBar,
@@ -116,8 +122,8 @@ __published:
   void __fastcall MoveActionExecute(TObject *Sender);
   void __fastcall CheckDirectoryActionExecute(TObject *Sender);
   void __fastcall UncheckDirectoryActionExecute(TObject *Sender);
-  void __fastcall ExploreLocalActionExecute(TObject *Sender);
-  void __fastcall ExploreRemoteActionExecute(TObject *Sender);
+  void __fastcall ExploreLocalAction2Execute(TObject *Sender);
+  void __fastcall ExploreRemoteAction2Execute(TObject *Sender);
   void __fastcall ListViewRecreate(TObject *Sender);
   void __fastcall ToolsMenuButtonClick(TObject *Sender);
   void __fastcall FindMoveCandidateActionExecute(TObject *Sender);
@@ -125,6 +131,8 @@ __published:
   void __fastcall StartItemClick(TObject *Sender);
   void __fastcall OkButtonDropDownClick(TObject *Sender);
   void __fastcall StartQueueItemClick(TObject *Sender);
+  void __fastcall LocalPathToClipboardActionExecute(TObject *Sender);
+  void __fastcall RemotePathToClipboardActionExecute(TObject *Sender);
 
 public:
   __fastcall TSynchronizeChecklistDialog(
@@ -212,6 +220,7 @@ protected:
   bool IterateItems(TListItem *& Item, TItemStates States);
   bool IterateSelectedItems(TListItem *& Item);
   void DoSynchronize(bool Queue);
+  void PathToClipboard(bool Local);
 };
 //----------------------------------------------------------------------------
 #endif