RemoteTransfer.cpp 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #pragma hdrstop
  4. #include <Common.h>
  5. #include <VCLCommon.h>
  6. #include <TextsWin.h>
  7. #include <CustomWinConfiguration.h>
  8. #include <CoreMain.h>
  9. #include <WinInterface.h>
  10. #include "RemoteTransfer.h"
  11. //---------------------------------------------------------------------------
  12. #pragma package(smart_init)
  13. #pragma link "HistoryComboBox"
  14. #ifndef NO_RESOURCES
  15. #pragma resource "*.dfm"
  16. #endif
  17. //---------------------------------------------------------------------------
  18. bool __fastcall DoRemoteCopyDialog(TStrings * Sessions, TStrings * Directories,
  19. TDirectRemoteCopy AllowDirectCopy, void *& Session, UnicodeString & Target, UnicodeString & FileMask,
  20. bool & DirectCopy, void * CurrentSession)
  21. {
  22. bool Result;
  23. TRemoteTransferDialog * Dialog = SafeFormCreate<TRemoteTransferDialog>();
  24. try
  25. {
  26. Dialog->Init(Sessions, Directories, AllowDirectCopy, CurrentSession);
  27. Result = Dialog->Execute(Session, Target, FileMask, DirectCopy);
  28. }
  29. __finally
  30. {
  31. delete Dialog;
  32. }
  33. return Result;
  34. }
  35. //---------------------------------------------------------------------------
  36. __fastcall TRemoteTransferDialog::TRemoteTransferDialog(TComponent * Owner)
  37. : TForm(Owner)
  38. {
  39. UseSystemSettings(this);
  40. Caption = LoadStr(REMOTE_COPY_TITLE);
  41. }
  42. //---------------------------------------------------------------------------
  43. void __fastcall TRemoteTransferDialog::Init(TStrings * Sessions,
  44. TStrings * Directories, TDirectRemoteCopy AllowDirectCopy, void * CurrentSession)
  45. {
  46. SessionCombo->Items = Sessions;
  47. FDirectories = Directories;
  48. assert(SessionCombo->Items->Count > 0);
  49. assert(SessionCombo->Items->Count == FDirectories->Count);
  50. FAllowDirectCopy = AllowDirectCopy;
  51. FCurrentSession = CurrentSession;
  52. }
  53. //---------------------------------------------------------------------------
  54. bool __fastcall TRemoteTransferDialog::Execute(void *& Session, UnicodeString & Target,
  55. UnicodeString & FileMask, bool & DirectCopy)
  56. {
  57. for (int Index = 0; Index < SessionCombo->Items->Count; Index++)
  58. {
  59. if (SessionCombo->Items->Objects[Index] == Session)
  60. {
  61. SessionCombo->ItemIndex = Index;
  62. break;
  63. }
  64. }
  65. DirectoryEdit->Items = CustomWinConfiguration->History[L"RemoteTarget"];
  66. DirectoryEdit->Text = UnixIncludeTrailingBackslash(Target) + FileMask;
  67. FDirectCopy = DirectCopy;
  68. UpdateNotDirectCopyCheck();
  69. bool Result = (ShowModal() == DefaultResult(this));
  70. if (Result)
  71. {
  72. Session = SessionCombo->Items->Objects[SessionCombo->ItemIndex];
  73. CustomWinConfiguration->History[L"RemoteTarget"] = DirectoryEdit->Items;
  74. Target = UnixExtractFilePath(DirectoryEdit->Text);
  75. FileMask = UnixExtractFileName(DirectoryEdit->Text);
  76. DirectCopy = !NotDirectCopyCheck->Checked;
  77. }
  78. return Result;
  79. }
  80. //---------------------------------------------------------------------------
  81. void __fastcall TRemoteTransferDialog::UpdateControls()
  82. {
  83. EnableControl(NotDirectCopyCheck,
  84. IsCurrentSessionSelected() &&
  85. (FAllowDirectCopy != drcDisallow));
  86. EnableControl(OkButton, !DirectoryEdit->Text.IsEmpty());
  87. }
  88. //---------------------------------------------------------------------------
  89. void __fastcall TRemoteTransferDialog::ControlChange(TObject * /*Sender*/)
  90. {
  91. UpdateControls();
  92. }
  93. //---------------------------------------------------------------------------
  94. void __fastcall TRemoteTransferDialog::FormShow(TObject * /*Sender*/)
  95. {
  96. InstallPathWordBreakProc(DirectoryEdit);
  97. UpdateControls();
  98. DirectoryEdit->SetFocus();
  99. }
  100. //---------------------------------------------------------------------------
  101. void __fastcall TRemoteTransferDialog::HelpButtonClick(TObject * /*Sender*/)
  102. {
  103. FormHelp(this);
  104. }
  105. //---------------------------------------------------------------------------
  106. void __fastcall TRemoteTransferDialog::SessionComboChange(TObject * /*Sender*/)
  107. {
  108. DirectoryEdit->Text =
  109. UnixIncludeTrailingBackslash(FDirectories->Strings[SessionCombo->ItemIndex]) +
  110. UnixExtractFileName(DirectoryEdit->Text);
  111. UpdateNotDirectCopyCheck();
  112. UpdateControls();
  113. }
  114. //---------------------------------------------------------------------------
  115. void __fastcall TRemoteTransferDialog::UpdateNotDirectCopyCheck()
  116. {
  117. if (IsCurrentSessionSelected())
  118. {
  119. NotDirectCopyCheck->Checked = !FDirectCopy;
  120. }
  121. else
  122. {
  123. NotDirectCopyCheck->Checked = true;
  124. }
  125. }
  126. //---------------------------------------------------------------------------
  127. void __fastcall TRemoteTransferDialog::FormCloseQuery(TObject * /*Sender*/,
  128. bool & /*CanClose*/)
  129. {
  130. if (ModalResult == DefaultResult(this))
  131. {
  132. if (IsCurrentSessionSelected() &&
  133. (FAllowDirectCopy == drcConfirmCommandSession) &&
  134. !NotDirectCopyCheck->Checked &&
  135. GUIConfiguration->ConfirmCommandSession)
  136. {
  137. TMessageParams Params(mpNeverAskAgainCheck);
  138. unsigned int Answer = MessageDialog(LoadStr(REMOTE_COPY_COMMAND_SESSION2),
  139. qtConfirmation, qaOK | qaCancel, HelpKeyword, &Params);
  140. if (Answer == qaNeverAskAgain)
  141. {
  142. GUIConfiguration->ConfirmCommandSession = false;
  143. }
  144. else if (Answer != qaOK)
  145. {
  146. Abort();
  147. }
  148. }
  149. }
  150. }
  151. //---------------------------------------------------------------------------
  152. void __fastcall TRemoteTransferDialog::NotDirectCopyCheckClick(
  153. TObject * /*Sender*/)
  154. {
  155. if (IsCurrentSessionSelected())
  156. {
  157. FDirectCopy = !NotDirectCopyCheck->Checked;
  158. }
  159. }
  160. //---------------------------------------------------------------------------
  161. bool __fastcall TRemoteTransferDialog::IsCurrentSessionSelected()
  162. {
  163. return (SessionCombo->Items->Objects[SessionCombo->ItemIndex] == FCurrentSession);
  164. }
  165. //---------------------------------------------------------------------------