RemoteTransfer.cpp 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  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. #pragma resource "*.dfm"
  15. //---------------------------------------------------------------------------
  16. bool __fastcall DoRemoteCopyDialog(TStrings * Sessions, TStrings * Directories,
  17. TDirectRemoteCopy AllowDirectCopy, void *& Session, AnsiString & Target, AnsiString & FileMask,
  18. bool & DirectCopy)
  19. {
  20. bool Result;
  21. TRemoteTransferDialog * Dialog = SafeFormCreate<TRemoteTransferDialog>();
  22. try
  23. {
  24. Dialog->Init(Sessions, Directories, AllowDirectCopy);
  25. Result = Dialog->Execute(Session, Target, FileMask, DirectCopy);
  26. }
  27. __finally
  28. {
  29. delete Dialog;
  30. }
  31. return Result;
  32. }
  33. //---------------------------------------------------------------------------
  34. __fastcall TRemoteTransferDialog::TRemoteTransferDialog(TComponent * Owner)
  35. : TForm(Owner)
  36. {
  37. UseSystemSettings(this);
  38. Caption = LoadStr(REMOTE_COPY_TITLE);
  39. InstallPathWordBreakProc(DirectoryEdit);
  40. }
  41. //---------------------------------------------------------------------------
  42. void __fastcall TRemoteTransferDialog::Init(TStrings * Sessions,
  43. TStrings * Directories, TDirectRemoteCopy AllowDirectCopy)
  44. {
  45. SessionCombo->Items = Sessions;
  46. FDirectories = Directories;
  47. assert(SessionCombo->Items->Count > 0);
  48. assert(SessionCombo->Items->Count == FDirectories->Count);
  49. FAllowDirectCopy = AllowDirectCopy;
  50. }
  51. //---------------------------------------------------------------------------
  52. bool __fastcall TRemoteTransferDialog::Execute(void *& Session, AnsiString & Target,
  53. AnsiString & FileMask, bool & DirectCopy)
  54. {
  55. FCurrentSession = -1;
  56. for (int Index = 0; Index < SessionCombo->Items->Count; Index++)
  57. {
  58. if (SessionCombo->Items->Objects[Index] == Session)
  59. {
  60. FCurrentSession = Index;
  61. SessionCombo->ItemIndex = Index;
  62. break;
  63. }
  64. }
  65. assert(FCurrentSession >= 0);
  66. DirectoryEdit->Items = CustomWinConfiguration->History["RemoteTarget"];
  67. DirectoryEdit->Text = UnixIncludeTrailingBackslash(Target) + FileMask;
  68. FDirectCopy = DirectCopy;
  69. NotDirectCopyCheck->Checked = !DirectCopy;
  70. bool Result = (ShowModal() == mrOk);
  71. if (Result)
  72. {
  73. Session = SessionCombo->Items->Objects[SessionCombo->ItemIndex];
  74. CustomWinConfiguration->History["RemoteTarget"] = DirectoryEdit->Items;
  75. Target = UnixExtractFilePath(DirectoryEdit->Text);
  76. FileMask = UnixExtractFileName(DirectoryEdit->Text);
  77. DirectCopy = !NotDirectCopyCheck->Checked;
  78. }
  79. return Result;
  80. }
  81. //---------------------------------------------------------------------------
  82. void __fastcall TRemoteTransferDialog::UpdateControls()
  83. {
  84. EnableControl(NotDirectCopyCheck,
  85. (SessionCombo->ItemIndex == FCurrentSession) &&
  86. (FAllowDirectCopy != drcDisallow));
  87. EnableControl(OkButton, !DirectoryEdit->Text.IsEmpty());
  88. }
  89. //---------------------------------------------------------------------------
  90. void __fastcall TRemoteTransferDialog::ControlChange(TObject * /*Sender*/)
  91. {
  92. UpdateControls();
  93. }
  94. //---------------------------------------------------------------------------
  95. void __fastcall TRemoteTransferDialog::FormShow(TObject * /*Sender*/)
  96. {
  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. if (SessionCombo->ItemIndex == FCurrentSession)
  112. {
  113. NotDirectCopyCheck->Checked = !FDirectCopy;
  114. }
  115. else
  116. {
  117. NotDirectCopyCheck->Checked = true;
  118. }
  119. UpdateControls();
  120. }
  121. //---------------------------------------------------------------------------
  122. void __fastcall TRemoteTransferDialog::FormCloseQuery(TObject * /*Sender*/,
  123. bool & /*CanClose*/)
  124. {
  125. if (ModalResult != mrCancel)
  126. {
  127. if ((SessionCombo->ItemIndex == FCurrentSession) &&
  128. (FAllowDirectCopy == drcConfirmCommandSession) &&
  129. !NotDirectCopyCheck->Checked &&
  130. GUIConfiguration->ConfirmCommandSession)
  131. {
  132. TMessageParams Params(mpNeverAskAgainCheck);
  133. int Answer = MessageDialog(LoadStr(REMOTE_COPY_COMMAND_SESSION),
  134. qtConfirmation, qaOK | qaCancel, HelpKeyword, &Params);
  135. if (Answer == qaNeverAskAgain)
  136. {
  137. GUIConfiguration->ConfirmCommandSession = false;
  138. }
  139. else if (Answer != qaOK)
  140. {
  141. Abort();
  142. }
  143. }
  144. }
  145. }
  146. //---------------------------------------------------------------------------
  147. void __fastcall TRemoteTransferDialog::NotDirectCopyCheckClick(
  148. TObject * /*Sender*/)
  149. {
  150. if (SessionCombo->ItemIndex == FCurrentSession)
  151. {
  152. FDirectCopy = !NotDirectCopyCheck->Checked;
  153. }
  154. }
  155. //---------------------------------------------------------------------------