ScpExplorer.cpp 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #pragma hdrstop
  4. #include "ScpExplorer.h"
  5. #include <Common.h>
  6. #include <ScpMain.h>
  7. #include "NonVisual.h"
  8. #include "Glyphs.h"
  9. #include "Tools.h"
  10. #include "WinConfiguration.h"
  11. #include <VCLCommon.h>
  12. //---------------------------------------------------------------------------
  13. #pragma package(smart_init)
  14. #pragma link "CustomDirView"
  15. #pragma link "CustomScpExplorer"
  16. #pragma link "CustomUnixDirView"
  17. #pragma link "IEListView"
  18. #pragma link "NortonLikeListView"
  19. #pragma link "UnixDirView"
  20. #pragma link "CustomPathComboBox"
  21. #pragma link "IEComboBox"
  22. #pragma link "UnixPathComboBox"
  23. #pragma link "IEPathComboBox"
  24. #pragma link "CustomDriveView"
  25. #pragma link "UnixDriveView"
  26. #pragma link "TB2Dock"
  27. #pragma link "TBX"
  28. #pragma link "TB2Item"
  29. #pragma link "TB2Toolbar"
  30. #pragma link "TBXStatusBars"
  31. #pragma link "TBXExtItems"
  32. #pragma link "TB2ExtItems"
  33. #pragma link "TBXToolPals"
  34. #pragma resource "*.dfm"
  35. //---------------------------------------------------------------------------
  36. __fastcall TScpExplorerForm::TScpExplorerForm(TComponent* Owner)
  37. : TCustomScpExplorerForm(Owner)
  38. {
  39. BackButton->LinkSubitems = HistoryMenu(osRemote, true)->Items;
  40. ForwardButton->LinkSubitems = HistoryMenu(osRemote, false)->Items;
  41. TopDock->PopupMenu = NonVisualDataModule->ExplorerBarPopup;
  42. RemoteStatusBar->PopupMenu = TopDock->PopupMenu;
  43. QueueDock->PopupMenu = TopDock->PopupMenu;
  44. RemoteDriveView->PopupMenu = TopDock->PopupMenu;
  45. BottomDock->PopupMenu = TopDock->PopupMenu;
  46. LeftDock->PopupMenu = TopDock->PopupMenu;
  47. RightDock->PopupMenu = TopDock->PopupMenu;
  48. reinterpret_cast<TLabel*>(RemotePanelSplitter)->OnDblClick = RemotePanelSplitterDblClick;
  49. QueuePanel->Parent = RemotePanel;
  50. QueueSplitter->Parent = RemotePanel;
  51. // set common explorer shorcuts to our actions
  52. NonVisualDataModule->ExplorerShortcuts();
  53. }
  54. //---------------------------------------------------------------------------
  55. void __fastcall TScpExplorerForm::RestoreFormParams()
  56. {
  57. assert(Configuration);
  58. TCustomScpExplorerForm::RestoreFormParams();
  59. RestoreForm(WinConfiguration->ScpExplorer.WindowParams, this);
  60. }
  61. //---------------------------------------------------------------------------
  62. void __fastcall TScpExplorerForm::ConfigurationChanged()
  63. {
  64. TCustomScpExplorerForm::ConfigurationChanged();
  65. UnixPathComboBox->ShowFullPath = WinConfiguration->ScpExplorer.ShowFullAddress;
  66. }
  67. //---------------------------------------------------------------------------
  68. void __fastcall TScpExplorerForm::RestoreParams()
  69. {
  70. assert(Configuration);
  71. TCustomScpExplorerForm::RestoreParams();
  72. RemoteDirView->UnixColProperties->ParamsStr = WinConfiguration->ScpExplorer.DirViewParams;
  73. RemoteDirView->UnixColProperties->ExtVisible = false; // just to make sure
  74. RemoteDirView->ViewStyle = (TViewStyle)WinConfiguration->ScpExplorer.ViewStyle;
  75. LoadToolbarsLayoutStr(WinConfiguration->ScpExplorer.ToolbarsLayout);
  76. SessionCombo->EditWidth = WinConfiguration->ScpExplorer.SessionComboWidth;
  77. RemoteStatusBar->Visible = WinConfiguration->ScpExplorer.StatusBar;
  78. RemoteDriveView->Visible = WinConfiguration->ScpExplorer.DriveView;
  79. RemoteDriveView->Width = WinConfiguration->ScpExplorer.DriveViewWidth;
  80. }
  81. //---------------------------------------------------------------------------
  82. void __fastcall TScpExplorerForm::StoreParams()
  83. {
  84. assert(Configuration);
  85. Configuration->BeginUpdate();
  86. try
  87. {
  88. WinConfiguration->ScpExplorer.ToolbarsLayout = GetToolbarsLayoutStr();
  89. WinConfiguration->ScpExplorer.SessionComboWidth = SessionCombo->EditWidth;
  90. WinConfiguration->ScpExplorer.StatusBar = RemoteStatusBar->Visible;
  91. WinConfiguration->ScpExplorer.WindowParams = StoreForm(this);
  92. WinConfiguration->ScpExplorer.DirViewParams = RemoteDirView->UnixColProperties->ParamsStr;
  93. WinConfiguration->ScpExplorer.ViewStyle = RemoteDirView->ViewStyle;
  94. WinConfiguration->ScpExplorer.DriveView = RemoteDriveView->Visible;
  95. WinConfiguration->ScpExplorer.DriveViewWidth = RemoteDriveView->Width;
  96. TCustomScpExplorerForm::StoreParams();
  97. }
  98. __finally
  99. {
  100. WinConfiguration->EndUpdate();
  101. }
  102. }
  103. //---------------------------------------------------------------------------
  104. bool __fastcall TScpExplorerForm::CopyParamDialog(TTransferDirection Direction,
  105. TTransferType Type, Boolean Temp, TStrings * FileList,
  106. AnsiString & TargetDirectory, TGUICopyParamType & CopyParam, bool Confirm,
  107. bool DragDrop)
  108. {
  109. // Temp means d&d here so far, may change in future!
  110. if ((Direction == tdToLocal) && !Temp && TargetDirectory.IsEmpty())
  111. {
  112. TargetDirectory = WinConfiguration->ScpExplorer.LastLocalTargetDirectory;
  113. }
  114. bool Result = TCustomScpExplorerForm::CopyParamDialog(
  115. Direction, Type, Temp, FileList, TargetDirectory, CopyParam, Confirm, DragDrop);
  116. if (Result && (Direction == tdToLocal) && !Temp)
  117. {
  118. WinConfiguration->ScpExplorer.LastLocalTargetDirectory = TargetDirectory;
  119. }
  120. return Result;
  121. }
  122. //---------------------------------------------------------------------------
  123. void __fastcall TScpExplorerForm::DoShow()
  124. {
  125. TCustomScpExplorerForm::DoShow();
  126. RemoteDirView->SetFocus();
  127. }
  128. //---------------------------------------------------------------------------
  129. bool __fastcall TScpExplorerForm::AllowedAction(TAction * Action, TActionAllowed Allowed)
  130. {
  131. #define FLAG ((TActionFlag)(Action->Tag))
  132. return
  133. // always require Explorer flag
  134. (FLAG & afExplorer) &&
  135. // if action is execution or update, we don't require any other flag
  136. // if we check for shortcut, we require that action is designed for remote panel
  137. ((Allowed != aaShortCut) || (FLAG & afRemote));
  138. #undef FLAG
  139. }
  140. //---------------------------------------------------------------------------
  141. TControl * __fastcall TScpExplorerForm::GetComponent(Byte Component)
  142. {
  143. switch (Component) {
  144. case fcSessionCombo: return reinterpret_cast<TControl*>(SessionCombo);
  145. case fcTransferCombo: return reinterpret_cast<TControl*>(TransferCombo);
  146. case fcSessionToolbar: return SessionToolbar;
  147. case fcCustomCommandsBand: return CustomCommandsToolbar;
  148. case fcColorMenu: return reinterpret_cast<TControl*>(ColorMenuItem);
  149. case fcColorPalette: return reinterpret_cast<TControl*>(SessionColorPalette);
  150. case fcExplorerMenuBand: return MenuToolbar;
  151. case fcExplorerAddressBand: return AddressToolbar;
  152. case fcExplorerToolbarBand: return ButtonsToolbar;
  153. case fcExplorerSelectionBand: return SelectionToolbar;
  154. case fcExplorerSessionBand: return SessionToolbar;
  155. case fcExplorerPreferencesBand: return PreferencesToolbar;
  156. case fcExplorerSortBand: return SortToolbar;
  157. case fcExplorerUpdatesBand: return UpdatesToolbar;
  158. case fcExplorerTransferBand: return TransferToolbar;
  159. case fcExplorerCustomCommandsBand: return CustomCommandsToolbar;
  160. default: return TCustomScpExplorerForm::GetComponent(Component);
  161. }
  162. }
  163. //---------------------------------------------------------------------------
  164. void __fastcall TScpExplorerForm::SynchronizeDirectories()
  165. {
  166. AnsiString LocalDirectory = WinConfiguration->ScpExplorer.LastLocalTargetDirectory;
  167. AnsiString RemoteDirectory = RemoteDirView->PathName;
  168. if (DoSynchronizeDirectories(LocalDirectory, RemoteDirectory))
  169. {
  170. WinConfiguration->ScpExplorer.LastLocalTargetDirectory = LocalDirectory;
  171. }
  172. }
  173. //---------------------------------------------------------------------------
  174. void __fastcall TScpExplorerForm::FullSynchronizeDirectories()
  175. {
  176. AnsiString LocalDirectory = WinConfiguration->ScpExplorer.LastLocalTargetDirectory;
  177. AnsiString RemoteDirectory = RemoteDirView->PathName;
  178. bool SaveMode = true;
  179. TSynchronizeMode Mode = (TSynchronizeMode)GUIConfiguration->SynchronizeMode;
  180. if (DoFullSynchronizeDirectories(LocalDirectory, RemoteDirectory, Mode, SaveMode))
  181. {
  182. WinConfiguration->ScpExplorer.LastLocalTargetDirectory = LocalDirectory;
  183. if (SaveMode)
  184. {
  185. GUIConfiguration->SynchronizeMode = Mode;
  186. }
  187. }
  188. }
  189. //---------------------------------------------------------------------------
  190. void __fastcall TScpExplorerForm::FixControlsPlacement()
  191. {
  192. TCustomScpExplorerForm::FixControlsPlacement();
  193. TControl * ControlsOrder[] =
  194. { RemoteDirView, QueueSplitter, QueuePanel, BottomDock, RemoteStatusBar };
  195. SetVerticalControlsOrder(ControlsOrder, LENOF(ControlsOrder));
  196. TControl * RemoteControlsOrder[] =
  197. { RemoteDriveView, RemotePanelSplitter, RemoteDirView };
  198. SetHorizontalControlsOrder(RemoteControlsOrder, LENOF(RemoteControlsOrder));
  199. }
  200. //---------------------------------------------------------------------------
  201. void __fastcall TScpExplorerForm::RemoteStatusBarDblClick(TObject * /*Sender*/)
  202. {
  203. FileSystemInfo();
  204. }
  205. //---------------------------------------------------------------------------
  206. void __fastcall TScpExplorerForm::RemoteDirViewUpdateStatusBar(
  207. TObject * /*Sender*/, const TStatusFileInfo & FileInfo)
  208. {
  209. UpdateFileStatusBar(RemoteStatusBar, FileInfo, 0);
  210. }
  211. //---------------------------------------------------------------------------
  212. void __fastcall TScpExplorerForm::RemotePanelSplitterDblClick(TObject * /*Sender*/)
  213. {
  214. // for some reason PostComponentHide is not necessary here (see queue panel)
  215. ComponentVisible[fcRemoteTree] = false;
  216. }