FullSynchronize.cpp 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #pragma hdrstop
  4. #include "FullSynchronize.h"
  5. #include "VCLCommon.h"
  6. #include <ScpMain.h>
  7. #include <Common.h>
  8. #include <Configuration.h>
  9. #include <TextsWin.h>
  10. #include <CustomWinConfiguration.h>
  11. //---------------------------------------------------------------------------
  12. #pragma package(smart_init)
  13. #pragma link "XPGroupBox"
  14. #pragma link "HistoryComboBox"
  15. #pragma resource "*.dfm"
  16. //---------------------------------------------------------------------------
  17. bool __fastcall DoFullSynchronizeDialog(TSynchronizeMode & Mode, int & Params,
  18. AnsiString & LocalDirectory, AnsiString & RemoteDirectory)
  19. {
  20. bool Result;
  21. TFullSynchronizeDialog * Dialog = new TFullSynchronizeDialog(Application);
  22. try
  23. {
  24. Dialog->Mode = Mode;
  25. Dialog->Params = Params;
  26. Dialog->LocalDirectory = LocalDirectory;
  27. Dialog->RemoteDirectory = RemoteDirectory;
  28. Result = Dialog->Execute();
  29. if (Result)
  30. {
  31. Mode = Dialog->Mode;
  32. Params = Dialog->Params;
  33. LocalDirectory = Dialog->LocalDirectory;
  34. RemoteDirectory = Dialog->RemoteDirectory;
  35. }
  36. }
  37. __finally
  38. {
  39. delete Dialog;
  40. }
  41. return Result;
  42. }
  43. //---------------------------------------------------------------------------
  44. __fastcall TFullSynchronizeDialog::TFullSynchronizeDialog(TComponent* Owner)
  45. : TForm(Owner)
  46. {
  47. UseSystemSettings(this);
  48. FParams = 0;
  49. }
  50. //---------------------------------------------------------------------------
  51. void __fastcall TFullSynchronizeDialog::UpdateControls()
  52. {
  53. EnableControl(SynchronizeDeleteCheck, !SynchronizeBothButton->Checked);
  54. EnableControl(OkButton, !LocalDirectoryEdit->Text.IsEmpty() &&
  55. !RemoteDirectoryEdit->Text.IsEmpty());
  56. }
  57. //---------------------------------------------------------------------------
  58. void __fastcall TFullSynchronizeDialog::ControlChange(TObject * /*Sender*/)
  59. {
  60. UpdateControls();
  61. }
  62. //---------------------------------------------------------------------------
  63. bool __fastcall TFullSynchronizeDialog::Execute()
  64. {
  65. LocalDirectoryEdit->Items = CustomWinConfiguration->History["LocalDirectory"];
  66. RemoteDirectoryEdit->Items = CustomWinConfiguration->History["RemoteDirectory"];
  67. bool Result = (ShowModal() == mrOk);
  68. if (Result)
  69. {
  70. LocalDirectoryEdit->SaveToHistory();
  71. CustomWinConfiguration->History["LocalDirectory"] = LocalDirectoryEdit->Items;
  72. RemoteDirectoryEdit->SaveToHistory();
  73. CustomWinConfiguration->History["RemoteDirectory"] = RemoteDirectoryEdit->Items;
  74. }
  75. return Result;
  76. }
  77. //---------------------------------------------------------------------------
  78. void __fastcall TFullSynchronizeDialog::SetRemoteDirectory(const AnsiString value)
  79. {
  80. RemoteDirectoryEdit->Text = value;
  81. }
  82. //---------------------------------------------------------------------------
  83. AnsiString __fastcall TFullSynchronizeDialog::GetRemoteDirectory()
  84. {
  85. return RemoteDirectoryEdit->Text;
  86. }
  87. //---------------------------------------------------------------------------
  88. void __fastcall TFullSynchronizeDialog::SetLocalDirectory(const AnsiString value)
  89. {
  90. LocalDirectoryEdit->Text = value;
  91. }
  92. //---------------------------------------------------------------------------
  93. AnsiString __fastcall TFullSynchronizeDialog::GetLocalDirectory()
  94. {
  95. return LocalDirectoryEdit->Text;
  96. }
  97. //---------------------------------------------------------------------------
  98. void __fastcall TFullSynchronizeDialog::SetMode(TSynchronizeMode value)
  99. {
  100. switch (value)
  101. {
  102. case smRemote:
  103. SynchronizeRemoteButton->Checked = true;
  104. break;
  105. case smLocal:
  106. SynchronizeLocalButton->Checked = true;
  107. break;
  108. case smBoth:
  109. SynchronizeBothButton->Checked = true;
  110. break;
  111. default:
  112. assert(false);
  113. }
  114. }
  115. //---------------------------------------------------------------------------
  116. TSynchronizeMode __fastcall TFullSynchronizeDialog::GetMode()
  117. {
  118. if (SynchronizeRemoteButton->Checked)
  119. {
  120. return smRemote;
  121. }
  122. else if (SynchronizeLocalButton->Checked)
  123. {
  124. return smLocal;
  125. }
  126. else
  127. {
  128. assert(SynchronizeBothButton->Checked);
  129. return smBoth;
  130. }
  131. }
  132. //---------------------------------------------------------------------------
  133. void __fastcall TFullSynchronizeDialog::SetParams(int value)
  134. {
  135. FParams = value & ~(spDelete | spNoConfirmation);
  136. SynchronizeDeleteCheck->Checked = (value & spDelete) != 0;
  137. SynchronizeNoConfirmationCheck->Checked = (value & spNoConfirmation) != 0;
  138. }
  139. //---------------------------------------------------------------------------
  140. int __fastcall TFullSynchronizeDialog::GetParams()
  141. {
  142. return FParams |
  143. (SynchronizeDeleteCheck->Checked ? spDelete : 0) |
  144. (SynchronizeNoConfirmationCheck->Checked ? spNoConfirmation : 0);
  145. }
  146. //---------------------------------------------------------------------------
  147. void __fastcall TFullSynchronizeDialog::LocalDirectoryBrowseButtonClick(
  148. TObject * /*Sender*/)
  149. {
  150. AnsiString Directory = LocalDirectoryEdit->Text;
  151. if (SelectDirectory(Directory, LoadStr(SELECT_LOCAL_DIRECTORY), false))
  152. {
  153. LocalDirectoryEdit->Text = Directory;
  154. }
  155. }
  156. //---------------------------------------------------------------------------
  157. void __fastcall TFullSynchronizeDialog::FormCloseQuery(TObject * /*Sender*/,
  158. bool & CanClose)
  159. {
  160. if (ModalResult != mrCancel)
  161. {
  162. AnsiString Dir = LocalDirectoryEdit->Text;
  163. AnsiString Drive = ExtractFileDrive(Dir);
  164. if (Drive.IsEmpty() || (Drive.Length() != 2) || (Drive[2] != ':'))
  165. {
  166. LocalDirectoryEdit->SetFocus();
  167. LocalDirectoryEdit->SelectAll();
  168. SimpleErrorDialog(LoadStr(ABSOLUTE_PATH_REQUIRED));
  169. CanClose = false;
  170. }
  171. }
  172. }
  173. //---------------------------------------------------------------------------