CopyParamPreset.cpp 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. //---------------------------------------------------------------------------
  2. #include <FormsPCH.h>
  3. #pragma hdrstop
  4. #include "CopyParamPreset.h"
  5. //---------------------------------------------------------------------------
  6. #pragma link "CopyParams"
  7. #pragma resource "*.dfm"
  8. //---------------------------------------------------------------------------
  9. bool __fastcall DoCopyParamPresetDialog(TCopyParamList * CopyParamList,
  10. int & Index, TCopyParamPresetMode Mode, TCopyParamRuleData * CurrentRuleData,
  11. const TCopyParamType & DefaultCopyParams)
  12. {
  13. bool Result;
  14. TCopyParamPresetDialog * Dialog = new TCopyParamPresetDialog(GetFormOwner(), Mode, CurrentRuleData);
  15. try
  16. {
  17. Result = Dialog->Execute(CopyParamList, Index, DefaultCopyParams);
  18. }
  19. __finally
  20. {
  21. delete Dialog;
  22. }
  23. return Result;
  24. }
  25. //---------------------------------------------------------------------------
  26. __fastcall TCopyParamPresetDialog::TCopyParamPresetDialog(TComponent * Owner,
  27. TCopyParamPresetMode Mode, TCopyParamRuleData * CurrentRuleData)
  28. : TForm(Owner)
  29. {
  30. SetCorrectFormParent(this);
  31. UseSystemSettings(this);
  32. FMode = Mode;
  33. FCurrentRuleData = CurrentRuleData;
  34. Caption = LoadStr(Mode == cpmEdit ? COPY_PARAM_EDIT : COPY_PARAM_ADD);
  35. HintLabel(RuleMaskHintText,
  36. FORMAT(L"%s\n \n%s",(LoadStr(MASK_HINT2), LoadStr(COMBINING_MASKS_HINT))));
  37. }
  38. //---------------------------------------------------------------------------
  39. void __fastcall TCopyParamPresetDialog::UpdateControls()
  40. {
  41. EnableControl(OkButton, !DescriptionEdit->Text.IsEmpty());
  42. EnableControl(RuleGroup, HasRuleCheck->Checked);
  43. CurrentRuleButton->Visible =
  44. (FCurrentRuleData != NULL) &&
  45. // current rule data are loaded implicitly
  46. (FMode != cpmAddCurrent);
  47. }
  48. //---------------------------------------------------------------------------
  49. void __fastcall TCopyParamPresetDialog::ControlChange(TObject * /*Sender*/)
  50. {
  51. UpdateControls();
  52. }
  53. //---------------------------------------------------------------------------
  54. bool __fastcall TCopyParamPresetDialog::Execute(TCopyParamList * CopyParamList,
  55. int & Index, const TCopyParamType & DefaultCopyParams)
  56. {
  57. FCopyParamList = CopyParamList;
  58. if ((FMode == cpmEdit) || (FMode == cpmDuplicate))
  59. {
  60. const TCopyParamRule * Rule;
  61. if (Index >= 0)
  62. {
  63. CopyParamsFrame->Params = *CopyParamList->CopyParams[Index];
  64. Rule = CopyParamList->Rules[Index];
  65. }
  66. else
  67. {
  68. CopyParamsFrame->Params = DefaultCopyParams;
  69. Rule = NULL;
  70. }
  71. if (FMode == cpmEdit)
  72. {
  73. DescriptionEdit->Text = CopyParamList->Names[Index];
  74. FIndex = Index;
  75. }
  76. else
  77. {
  78. DescriptionEdit->Text = L"";
  79. FIndex = -1; // never used
  80. Index = FCopyParamList->Count;
  81. }
  82. HasRuleCheck->Checked = (Rule != NULL);
  83. if (Rule != NULL)
  84. {
  85. SetRuleData(Rule->Data);
  86. }
  87. }
  88. else
  89. {
  90. DescriptionEdit->Text = L"";
  91. CopyParamsFrame->Params = DefaultCopyParams;
  92. if (FMode == cpmAddCurrent)
  93. {
  94. SetRuleData(*FCurrentRuleData);
  95. HasRuleCheck->Checked = true;
  96. }
  97. else
  98. {
  99. HasRuleCheck->Checked = false;
  100. }
  101. FIndex = -1; // never used
  102. if (Index < 0)
  103. {
  104. Index = FCopyParamList->Count;
  105. }
  106. }
  107. CopyParamsFrame->BeforeExecute();
  108. bool Result = (ShowModal() == DefaultResult(this));
  109. if (Result)
  110. {
  111. CopyParamsFrame->AfterExecute();
  112. UnicodeString Name;
  113. TCopyParamType * CopyParam = NULL;
  114. TCopyParamRule * Rule = NULL;
  115. try
  116. {
  117. Name = DescriptionEdit->Text;
  118. CopyParam = new TCopyParamType(CopyParamsFrame->Params);
  119. Rule = GetRule();
  120. }
  121. catch(...)
  122. {
  123. delete CopyParam;
  124. delete Rule;
  125. throw;
  126. }
  127. if (FMode == cpmEdit)
  128. {
  129. FCopyParamList->Change(Index, Name, CopyParam, Rule);
  130. }
  131. else
  132. {
  133. FCopyParamList->Insert(Index, Name, CopyParam, Rule);
  134. }
  135. }
  136. return Result;
  137. }
  138. //---------------------------------------------------------------------------
  139. void __fastcall TCopyParamPresetDialog::SetRuleData(const TCopyParamRuleData & Data)
  140. {
  141. HostNameEdit->Text = Data.HostName;
  142. UserNameEdit->Text = Data.UserName;
  143. RemoteDirectoryEdit->Text = Data.RemoteDirectory;
  144. LocalDirectoryEdit->Text = Data.LocalDirectory;
  145. }
  146. //---------------------------------------------------------------------------
  147. TCopyParamRule * __fastcall TCopyParamPresetDialog::GetRule()
  148. {
  149. TCopyParamRule * Rule = NULL;
  150. if (HasRuleCheck->Checked)
  151. {
  152. TCopyParamRuleData Data;
  153. // Last resort check, in case the mask escapes validation in OnExit by IsCancelButtonBeingClicked
  154. ValidateMask(HostNameEdit->Text);
  155. Data.HostName = HostNameEdit->Text;
  156. ValidateMask(UserNameEdit->Text);
  157. Data.UserName = UserNameEdit->Text;
  158. ValidateMask(RemoteDirectoryEdit->Text);
  159. Data.RemoteDirectory = RemoteDirectoryEdit->Text;
  160. ValidateMask(LocalDirectoryEdit->Text);
  161. Data.LocalDirectory = LocalDirectoryEdit->Text;
  162. Rule = new TCopyParamRule(Data);
  163. }
  164. return Rule;
  165. }
  166. //---------------------------------------------------------------------------
  167. void __fastcall TCopyParamPresetDialog::FormShow(TObject * /*Sender*/)
  168. {
  169. InstallPathWordBreakProc(HostNameEdit);
  170. InstallPathWordBreakProc(UserNameEdit);
  171. InstallPathWordBreakProc(RemoteDirectoryEdit);
  172. InstallPathWordBreakProc(LocalDirectoryEdit);
  173. UpdateControls();
  174. }
  175. //---------------------------------------------------------------------------
  176. void __fastcall TCopyParamPresetDialog::FormCloseQuery(TObject * /*Sender*/,
  177. bool & /*CanClose*/)
  178. {
  179. if (ModalResult == DefaultResult(this))
  180. {
  181. UnicodeString Description = DescriptionEdit->Text;
  182. TCopyParamList::ValidateName(Description);
  183. TCopyParamRule * Rule = GetRule();
  184. if (Rule != NULL)
  185. {
  186. try
  187. {
  188. if (Rule->IsEmpty)
  189. {
  190. throw Exception(LoadStr(COPY_PARAM_NO_RULE));
  191. }
  192. }
  193. __finally
  194. {
  195. delete Rule;
  196. }
  197. }
  198. int Index = FCopyParamList->IndexOfName(Description);
  199. if (((FMode == cpmEdit) && (Index >= 0) && (Index != FIndex)) ||
  200. (((FMode == cpmAdd) || (FMode == cpmAddCurrent) || (FMode == cpmDuplicate)) && (Index >= 0)))
  201. {
  202. DescriptionEdit->SetFocus();
  203. throw Exception(FMTLOAD(COPY_PARAM_DUPLICATE, (Description)));
  204. }
  205. ExitActiveControl(this);
  206. }
  207. }
  208. //---------------------------------------------------------------------------
  209. void __fastcall TCopyParamPresetDialog::CurrentRuleButtonClick(
  210. TObject * /*Sender*/)
  211. {
  212. DebugAssert(FCurrentRuleData != NULL);
  213. SetRuleData(*FCurrentRuleData);
  214. }
  215. //---------------------------------------------------------------------------
  216. void __fastcall TCopyParamPresetDialog::HelpButtonClick(TObject * /*Sender*/)
  217. {
  218. FormHelp(this);
  219. }
  220. //---------------------------------------------------------------------------
  221. void __fastcall TCopyParamPresetDialog::MaskEditExit(TObject * Sender)
  222. {
  223. ValidateMaskEdit(dynamic_cast<TEdit*>(Sender));
  224. }
  225. //---------------------------------------------------------------------------