CopyParams.cpp 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #pragma hdrstop
  4. #include <Common.h>
  5. #include "CopyParams.h"
  6. #include <VCLCommon.h>
  7. #include <ScpMain.h>
  8. #include "CustomWinConfiguration.h"
  9. #include "TextsWin.h"
  10. #include "Tools.h"
  11. //---------------------------------------------------------------------------
  12. #pragma package(smart_init)
  13. #pragma link "Rights"
  14. #pragma link "HistoryComboBox"
  15. #pragma link "XPThemes"
  16. #pragma resource "*.dfm"
  17. //---------------------------------------------------------------------------
  18. __fastcall TCopyParamsFrame::TCopyParamsFrame(TComponent* Owner)
  19. : TFrame(Owner)
  20. {
  21. // on start set different value than we want to allow property-setter to proceed
  22. FDirection = pdToLocal;
  23. Direction = pdToRemote;
  24. FOptions = cfAllowTransferMode | cfAllowExcludeMask | cfAllowClearArchive;
  25. RightsFrame->AllowAddXToDirectories = True;
  26. FParams = new TCopyParamType();
  27. TCopyParamType DefParams;
  28. Params = DefParams;
  29. InstallPathWordBreakProc(AsciiFileMaskCombo);
  30. InstallPathWordBreakProc(ExcludeFileMaskCombo);
  31. HintLabel(ExcludeFileMaskHintText,
  32. FORMAT("%s\n \n%s",(LoadStr(MASK_HINT), LoadStr(PATH_MASK_HINT))));
  33. }
  34. //---------------------------------------------------------------------------
  35. __fastcall TCopyParamsFrame::~TCopyParamsFrame()
  36. {
  37. delete FParams;
  38. }
  39. //---------------------------------------------------------------------------
  40. void __fastcall TCopyParamsFrame::SetParams(TCopyParamType value)
  41. {
  42. assert((value.TransferMode == tmAscii) ||
  43. (value.TransferMode == tmBinary) || (value.TransferMode == tmAutomatic));
  44. switch (value.TransferMode) {
  45. case tmAscii: TMTextButton->Checked = True; break;
  46. case tmBinary: TMBinaryButton->Checked = True; break;
  47. default: TMAutomaticButton->Checked = True; break;
  48. }
  49. FOrigMasks = value.AsciiFileMask.Masks;
  50. AsciiFileMaskCombo->Text = value.AsciiFileMask.Masks;
  51. switch (value.FileNameCase) {
  52. case ncNoChange: CCNoChangeButton->Checked = True; break;
  53. case ncLowerCase: CCLowerCaseButton->Checked = True; break;
  54. case ncUpperCase: CCUpperCaseButton->Checked = True; break;
  55. case ncFirstUpperCase: CCFirstUpperCaseButton->Checked = True; break;
  56. case ncLowerCaseShort: CCLowerCaseShortButton->Checked = True; break;
  57. }
  58. ReplaceInvalidCharsCheck->Checked =
  59. (value.InvalidCharsReplacement != TCopyParamType::NoReplacement);
  60. RightsFrame->AddXToDirectories = value.AddXToDirectories;
  61. RightsFrame->Rights = value.Rights;
  62. PreserveRightsCheck->Checked = value.PreserveRights;
  63. PreserveReadOnlyCheck->Checked = value.PreserveReadOnly;
  64. assert(PreserveTimeCheck);
  65. PreserveTimeCheck->Checked = value.PreserveTime;
  66. CommonCalculateSizeCheck->Checked = value.CalculateSize;
  67. NegativeExcludeCombo->ItemIndex = (value.NegativeExclude ? 1 : 0);
  68. ExcludeFileMaskCombo->Text = value.ExcludeFileMask.Masks;
  69. ClearArchiveCheck->Checked = value.ClearArchive;
  70. *FParams = value;
  71. UpdateControls();
  72. }
  73. //---------------------------------------------------------------------------
  74. TCopyParamType __fastcall TCopyParamsFrame::GetParams()
  75. {
  76. TCopyParamType Result = *FParams;
  77. assert(TMTextButton->Checked || TMBinaryButton->Checked || TMAutomaticButton->Checked);
  78. if (TMTextButton->Checked) Result.TransferMode = tmAscii;
  79. else
  80. if (TMBinaryButton->Checked) Result.TransferMode = tmBinary;
  81. else Result.TransferMode = tmAutomatic;
  82. Result.AsciiFileMask.Masks = AsciiFileMaskCombo->Text;
  83. if (!Result.AsciiFileMask.IsValid()) Result.AsciiFileMask.Masks = FOrigMasks;
  84. if (CCLowerCaseButton->Checked) Result.FileNameCase = ncLowerCase;
  85. else
  86. if (CCUpperCaseButton->Checked) Result.FileNameCase = ncUpperCase;
  87. else
  88. if (CCFirstUpperCaseButton->Checked) Result.FileNameCase = ncFirstUpperCase;
  89. else
  90. if (CCLowerCaseShortButton->Checked) Result.FileNameCase = ncLowerCaseShort;
  91. else Result.FileNameCase = ncNoChange;
  92. Result.ReplaceInvalidChars = ReplaceInvalidCharsCheck->Checked;
  93. Result.AddXToDirectories = RightsFrame->AddXToDirectories;
  94. Result.Rights = RightsFrame->Rights;
  95. Result.PreserveRights = PreserveRightsCheck->Checked;
  96. Result.PreserveReadOnly = PreserveReadOnlyCheck->Checked;
  97. assert(PreserveTimeCheck);
  98. Result.PreserveTime = PreserveTimeCheck->Checked;
  99. Result.CalculateSize = CommonCalculateSizeCheck->Checked;
  100. Result.ExcludeFileMask.Masks = ExcludeFileMaskCombo->Text;
  101. Result.NegativeExclude = (NegativeExcludeCombo->ItemIndex == 1);
  102. Result.ClearArchive = ClearArchiveCheck->Checked;
  103. return Result;
  104. }
  105. //---------------------------------------------------------------------------
  106. TCheckBox * __fastcall TCopyParamsFrame::GetPreserveTimeCheck()
  107. {
  108. switch (Direction) {
  109. case pdToRemote: return RemotePreserveTimeCheck;
  110. case pdToLocal: return LocalPreserveTimeCheck;
  111. case pdBoth:
  112. default: return CommonPreserveTimestampCheck;
  113. }
  114. }
  115. //---------------------------------------------------------------------------
  116. void __fastcall TCopyParamsFrame::UpdateControls()
  117. {
  118. EnableControl(CommonPropertiesGroup, FLAGCLEAR(Options, cfAllowExcludeMaskOnly) && Enabled);
  119. EnableControl(LocalPropertiesGroup, FLAGCLEAR(Options, cfAllowExcludeMaskOnly) && Enabled);
  120. EnableControl(RemotePropertiesGroup, FLAGCLEAR(Options, cfAllowExcludeMaskOnly) && Enabled);
  121. EnableControl(TransferModeGroup,
  122. FLAGSET(Options, cfAllowTransferMode) &&
  123. FLAGCLEAR(Options, cfAllowExcludeMaskOnly) && Enabled);
  124. EnableControl(AsciiFileMaskLabel,
  125. TransferModeGroup->Enabled && TMAutomaticButton->Checked);
  126. EnableControl(AsciiFileMaskCombo,
  127. TransferModeGroup->Enabled && TMAutomaticButton->Checked);
  128. EnableControl(PreserveRightsCheck, FLAGCLEAR(Options, cfAllowExcludeMaskOnly) && Enabled);
  129. EnableControl(RightsFrame, PreserveRightsCheck->Checked &&
  130. PreserveRightsCheck->Enabled);
  131. EnableControl(ExcludeFileMaskCombo,
  132. (FLAGSET(Options, cfAllowExcludeMask) || FLAGSET(Options, cfAllowExcludeMaskOnly)) &&
  133. Enabled);
  134. EnableControl(ExclusionFileMaskLabel, ExcludeFileMaskCombo->Enabled);
  135. EnableControl(NegativeExcludeCombo, ExcludeFileMaskCombo->Enabled);
  136. EnableControl(ClearArchiveCheck, FLAGSET(Options, cfAllowClearArchive) &&
  137. FLAGCLEAR(Options, cfAllowExcludeMaskOnly) && Enabled);
  138. EnableControl(PreserveTimeCheck, FLAGCLEAR(Options, cfDisablePreserveTime) &&
  139. FLAGCLEAR(Options, cfAllowExcludeMaskOnly) && Enabled);
  140. EnableControl(ChangeCaseGroup, FLAGCLEAR(Options, cfAllowExcludeMaskOnly) && Enabled);
  141. }
  142. //---------------------------------------------------------------------------
  143. void __fastcall TCopyParamsFrame::SetDirection(TParamsForDirection value)
  144. {
  145. if (Direction != value)
  146. {
  147. Boolean APreserveTime = PreserveTimeCheck->Checked;
  148. FDirection = value;
  149. PreserveTimeCheck->Checked = APreserveTime;
  150. LocalPropertiesGroup->Visible = (Direction == pdToLocal || Direction == pdAll );
  151. RemotePropertiesGroup->Visible = (Direction == pdToRemote || Direction == pdAll );
  152. CommonPropertiesGroup->Visible = (Direction == pdBoth || Direction == pdAll );
  153. LocalPreserveTimeCheck->Visible = (Direction != pdAll);
  154. RemotePreserveTimeCheck->Visible = (Direction != pdAll);
  155. ReplaceInvalidCharsCheck->Visible =
  156. (Direction == pdToLocal || Direction == pdBoth || Direction == pdAll);
  157. CCFirstUpperCaseButton->Visible =
  158. (Direction == pdToLocal || Direction == pdToRemote);
  159. CCLowerCaseShortButton->Visible =
  160. (Direction == pdToRemote || Direction == pdBoth || Direction == pdAll);
  161. if (Direction == pdBoth || Direction == pdAll)
  162. {
  163. CCLowerCaseShortButton->Top = CCFirstUpperCaseButton->Top;
  164. }
  165. else
  166. {
  167. CCLowerCaseShortButton->Top = ReplaceInvalidCharsCheck->Top;
  168. }
  169. UpdateControls();
  170. }
  171. }
  172. //---------------------------------------------------------------------------
  173. void __fastcall TCopyParamsFrame::ControlChange(TObject * /*Sender*/)
  174. {
  175. UpdateControls();
  176. }
  177. //---------------------------------------------------------------------------
  178. void __fastcall TCopyParamsFrame::BeforeExecute()
  179. {
  180. assert(CustomWinConfiguration);
  181. AsciiFileMaskCombo->Items = CustomWinConfiguration->History["Mask"];
  182. ExcludeFileMaskCombo->Items = CustomWinConfiguration->History["ExcludeMask"];
  183. }
  184. //---------------------------------------------------------------------------
  185. void __fastcall TCopyParamsFrame::AfterExecute()
  186. {
  187. assert(CustomWinConfiguration);
  188. AsciiFileMaskCombo->SaveToHistory();
  189. CustomWinConfiguration->History["Mask"] = AsciiFileMaskCombo->Items;
  190. ExcludeFileMaskCombo->SaveToHistory();
  191. CustomWinConfiguration->History["ExcludeMask"] = ExcludeFileMaskCombo->Items;
  192. }
  193. //---------------------------------------------------------------------------
  194. void __fastcall TCopyParamsFrame::Validate()
  195. {
  196. if (AsciiFileMaskCombo->Focused())
  197. {
  198. ValidateMaskEdit(AsciiFileMaskCombo);
  199. }
  200. if (ExcludeFileMaskCombo->Focused())
  201. {
  202. ValidateMaskEdit(ExcludeFileMaskCombo);
  203. }
  204. }
  205. //---------------------------------------------------------------------------
  206. void __fastcall TCopyParamsFrame::SetOptions(int value)
  207. {
  208. FOptions = value;
  209. UpdateControls();
  210. }
  211. //---------------------------------------------------------------------------
  212. void __fastcall TCopyParamsFrame::SetEnabled(Boolean Value)
  213. {
  214. TFrame::SetEnabled(Value);
  215. UpdateControls();
  216. }
  217. //---------------------------------------------------------------------------
  218. void __fastcall TCopyParamsFrame::ValidateMaskComboExit(TObject * Sender)
  219. {
  220. ValidateMaskEdit(dynamic_cast<TComboBox*>(Sender));
  221. }
  222. //---------------------------------------------------------------------------