Synchronize.cpp 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. //---------------------------------------------------------------------
  2. #include <vcl.h>
  3. #pragma hdrstop
  4. #include <Common.h>
  5. #include <Interface.h>
  6. #include <ScpMain.h>
  7. #include <TextsWin.h>
  8. #include <VCLCommon.h>
  9. #include "Synchronize.h"
  10. #include "WinConfiguration.h"
  11. //---------------------------------------------------------------------
  12. #pragma link "CopyParams"
  13. #pragma link "MoreButton"
  14. #pragma resource "*.dfm"
  15. //---------------------------------------------------------------------
  16. void __fastcall DoSynchronizeDialog(TSynchronizeParamType Params,
  17. TSynchronizeStartStopEvent OnStartStop)
  18. {
  19. TSynchronizeDialog * Dialog = new TSynchronizeDialog(Application);
  20. try
  21. {
  22. Dialog->OnStartStop = OnStartStop;
  23. Dialog->Params = Params;
  24. Dialog->Execute();
  25. }
  26. __finally
  27. {
  28. delete Dialog;
  29. }
  30. }
  31. //---------------------------------------------------------------------
  32. TSynchronizeParamType __fastcall TSynchronizeParamType::operator =(TSynchronizeParamType rhp)
  33. {
  34. Assign(rhp);
  35. return *this;
  36. }
  37. //---------------------------------------------------------------------
  38. void __fastcall TSynchronizeParamType::Assign(TSynchronizeParamType Source)
  39. {
  40. CopyParams.Assign(Source.CopyParams);
  41. AllowTransferMode = Source.AllowTransferMode;
  42. LocalDirectory = Source.LocalDirectory;
  43. RemoteDirectory = Source.RemoteDirectory;
  44. }
  45. //---------------------------------------------------------------------
  46. __fastcall TSynchronizeDialog::TSynchronizeDialog(TComponent* AOwner)
  47. : TForm(AOwner)
  48. {
  49. FParams.AllowTransferMode = True;
  50. FSynchronizing = False;
  51. FMinimizedByMe = False;
  52. UseSystemSettings(this);
  53. CopyParamsFrame->Direction = pdToRemote;
  54. CopyParamsFrame->ForcePreserveTime = true;
  55. }
  56. //---------------------------------------------------------------------------
  57. bool __fastcall TSynchronizeDialog::Execute()
  58. {
  59. SaveSettingsCheck->Checked = false;
  60. ExistingOnlyCheck->Checked = false;
  61. MoreButton->Expanded = WinConfiguration->CopyParamDialogExpanded;
  62. CopyParamsFrame->BeforeExecute();
  63. bool Result = (ShowModal() == mrOk);
  64. if (Result)
  65. {
  66. CopyParamsFrame->AfterExecute();
  67. Configuration->BeginUpdate();
  68. try
  69. {
  70. WinConfiguration->CopyParamDialogExpanded = MoreButton->Expanded;
  71. if (SaveSettingsCheck->Checked)
  72. {
  73. Configuration->CopyParam = Params.CopyParams;
  74. }
  75. }
  76. __finally
  77. {
  78. Configuration->EndUpdate();
  79. }
  80. }
  81. return Result;
  82. }
  83. //---------------------------------------------------------------------------
  84. void __fastcall TSynchronizeDialog::SetParams(TSynchronizeParamType value)
  85. {
  86. FParams = value;
  87. CopyParamsFrame->Params = FParams.CopyParams;
  88. }
  89. //---------------------------------------------------------------------------
  90. TSynchronizeParamType __fastcall TSynchronizeDialog::GetParams()
  91. {
  92. FParams.CopyParams = CopyParamsFrame->Params;
  93. return FParams;
  94. }
  95. //---------------------------------------------------------------------------
  96. void __fastcall TSynchronizeDialog::UpdateControls()
  97. {
  98. EnableControl(StartButton, !FSynchronizing);
  99. StartButton->Default = !FSynchronizing;
  100. EnableControl(StopButton, FSynchronizing);
  101. StopButton->Default = FSynchronizing;
  102. EnableControl(MinimizeButton, FSynchronizing);
  103. EnableControl(CloseButton, !FSynchronizing);
  104. EnableControl(MorePanel, !FSynchronizing);
  105. CopyParamsFrame->AllowTransferMode = FParams.AllowTransferMode;
  106. int Msg = (FSynchronizing ? SYCHRONIZE_WAITING : SYCHRONIZE_DESCRIPTION);
  107. StatusLabel->Caption = FMTLOAD(Msg, (FParams.LocalDirectory, FParams.RemoteDirectory));
  108. }
  109. //---------------------------------------------------------------------------
  110. void __fastcall TSynchronizeDialog::FormShow(TObject * /*Sender*/)
  111. {
  112. if (MoreButton->Expanded) MorePanel->SetFocus();
  113. else StartButton->SetFocus();
  114. UpdateControls();
  115. }
  116. //---------------------------------------------------------------------------
  117. void __fastcall TSynchronizeDialog::Validate()
  118. {
  119. if (Params.CopyParams.TransferMode == tmAutomatic)
  120. {
  121. TFileMasks Masks = CopyParamsFrame->AsciiFileMask;
  122. int Start, Length;
  123. if (!Masks.IsValid(Start, Length))
  124. {
  125. MoreButton->Expanded = True;
  126. // After closing dialog whole text is selected, we want to select only invalid mask
  127. CopyParamsFrame->SelectMask(Start, Length);
  128. throw Exception(FMTLOAD(MASK_ERROR, (Masks.Masks.SubString(Start+1, Length))));
  129. }
  130. }
  131. }
  132. //---------------------------------------------------------------------------
  133. void __fastcall TSynchronizeDialog::DoStartStop(Boolean Start,
  134. TSynchronizeParamType Params)
  135. {
  136. if (FOnStartStop) FOnStartStop(this, Start, Params);
  137. }
  138. //---------------------------------------------------------------------------
  139. void __fastcall TSynchronizeDialog::FormCloseQuery(TObject * /*Sender*/,
  140. bool &CanClose)
  141. {
  142. CanClose = !FSynchronizing;
  143. }
  144. //---------------------------------------------------------------------------
  145. void __fastcall TSynchronizeDialog::StartButtonClick(TObject * /*Sender*/)
  146. {
  147. try
  148. {
  149. FSynchronizing = true;
  150. Validate();
  151. UpdateControls();
  152. DoStartStop(True, Params);
  153. }
  154. catch(...)
  155. {
  156. FSynchronizing = false;
  157. UpdateControls();
  158. throw;
  159. }
  160. }
  161. //---------------------------------------------------------------------------
  162. void __fastcall TSynchronizeDialog::StopButtonClick(TObject * /*Sender*/)
  163. {
  164. Stop();
  165. }
  166. //---------------------------------------------------------------------------
  167. void __fastcall TSynchronizeDialog::Stop()
  168. {
  169. FSynchronizing = false;
  170. DoStartStop(false, Params);
  171. UpdateControls();
  172. if (IsIconic(Application->Handle) && FMinimizedByMe)
  173. {
  174. FMinimizedByMe = false;
  175. Application->Restore();
  176. }
  177. }
  178. //---------------------------------------------------------------------------
  179. void __fastcall TSynchronizeDialog::MinimizeApp()
  180. {
  181. Application->Minimize();
  182. FMinimizedByMe = true;
  183. }
  184. //---------------------------------------------------------------------------
  185. void __fastcall TSynchronizeDialog::MinimizeButtonClick(TObject * /*Sender*/)
  186. {
  187. MinimizeApp();
  188. }
  189. //---------------------------------------------------------------------------
  190. bool __fastcall TSynchronizeDialog::GetExistingOnly()
  191. {
  192. return ExistingOnlyCheck->Checked;
  193. }
  194. //---------------------------------------------------------------------------
  195. void __fastcall TSynchronizeDialog::SetExistingOnly(bool value)
  196. {
  197. ExistingOnlyCheck->Checked = value;
  198. }