EditMask.cpp 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. //---------------------------------------------------------------------------
  2. #include <FormsPCH.h>
  3. #pragma hdrstop
  4. #include <FileMasks.h>
  5. #include "EditMask.h"
  6. //---------------------------------------------------------------------------
  7. #pragma package(smart_init)
  8. #pragma resource "*.dfm"
  9. //---------------------------------------------------------------------------
  10. bool __fastcall DoEditMaskDialog(TFileMasks & Mask)
  11. {
  12. bool Result;
  13. TEditMaskDialog * Dialog = new TEditMaskDialog(GetFormOwner());
  14. try
  15. {
  16. Result = Dialog->Execute(Mask);
  17. }
  18. __finally
  19. {
  20. delete Dialog;
  21. }
  22. return Result;
  23. }
  24. //---------------------------------------------------------------------------
  25. __fastcall TEditMaskDialog::TEditMaskDialog(TComponent* Owner)
  26. : TForm(Owner)
  27. {
  28. FChanging = false;
  29. UseSystemSettings(this);
  30. HintLabel(MaskHintText,
  31. FORMAT(L"%s\n \n%s\n \n%s\n \n%s", (LoadStr(MASK_HINT2), LoadStr(FILE_MASK_EX_HINT), LoadStr(PATH_MASK_HINT2), LoadStr(MASK_HELP))));
  32. ReadOnlyControl(MaskMemo);
  33. }
  34. //---------------------------------------------------------------------------
  35. void __fastcall TEditMaskDialog::FormCloseQuery(TObject * /*Sender*/,
  36. bool & /*CanClose*/)
  37. {
  38. if (ModalResult == DefaultResult(this))
  39. {
  40. ExitActiveControl(this);
  41. }
  42. }
  43. //---------------------------------------------------------------------------
  44. bool __fastcall TEditMaskDialog::Execute(TFileMasks & Mask)
  45. {
  46. LoadFileMasks(Mask);
  47. bool Result = (ShowModal() == DefaultResult(this));
  48. if (Result)
  49. {
  50. SaveFileMasks(Mask);
  51. }
  52. return Result;
  53. }
  54. //---------------------------------------------------------------------------
  55. void __fastcall TEditMaskDialog::LoadFileMasks(const TFileMasks & Mask)
  56. {
  57. LoadFileMasks(IncludeFileMasksMemo, Mask.IncludeFileMasksStr);
  58. LoadFileMasks(ExcludeFileMasksMemo, Mask.ExcludeFileMasksStr);
  59. LoadFileMasks(IncludeDirectoryMasksMemo, Mask.IncludeDirectoryMasksStr);
  60. LoadFileMasks(ExcludeDirectoryMasksMemo, Mask.ExcludeDirectoryMasksStr);
  61. UpdateControls();
  62. }
  63. //---------------------------------------------------------------------------
  64. void __fastcall TEditMaskDialog::LoadFileMasks(TMemo * Memo, TStrings * MasksStr)
  65. {
  66. Memo->Lines = MasksStr;
  67. }
  68. //---------------------------------------------------------------------------
  69. void __fastcall TEditMaskDialog::SaveFileMasks(TFileMasks & Mask)
  70. {
  71. TStrings * IncludeFileMasks = NULL;
  72. TStrings * ExcludeFileMasks = NULL;
  73. TStrings * IncludeDirectoryMasks = NULL;
  74. TStrings * ExcludeDirectoryMasks = NULL;
  75. try
  76. {
  77. IncludeFileMasks = GetUnwrappedMemoLines(IncludeFileMasksMemo);
  78. ExcludeFileMasks = GetUnwrappedMemoLines(ExcludeFileMasksMemo);
  79. IncludeDirectoryMasks = GetUnwrappedMemoLines(IncludeDirectoryMasksMemo);
  80. ExcludeDirectoryMasks = GetUnwrappedMemoLines(ExcludeDirectoryMasksMemo);
  81. Mask =
  82. TFileMasks::ComposeMaskStr(
  83. IncludeFileMasks, ExcludeFileMasks,
  84. IncludeDirectoryMasks, ExcludeDirectoryMasks);
  85. }
  86. __finally
  87. {
  88. delete IncludeFileMasks;
  89. delete ExcludeFileMasks;
  90. delete IncludeDirectoryMasks;
  91. delete ExcludeDirectoryMasks;
  92. }
  93. }
  94. //---------------------------------------------------------------------------
  95. void __fastcall TEditMaskDialog::HelpButtonClick(TObject * /*Sender*/)
  96. {
  97. FormHelp(this);
  98. }
  99. //---------------------------------------------------------------------------
  100. void __fastcall TEditMaskDialog::ClearButtonClick(TObject * /*Sender*/)
  101. {
  102. IncludeFileMasksMemo->Clear();
  103. ExcludeFileMasksMemo->Clear();
  104. IncludeDirectoryMasksMemo->Clear();
  105. ExcludeDirectoryMasksMemo->Clear();
  106. ExcludeDirectoryAllCheck->Checked = false;
  107. UpdateControls();
  108. }
  109. //---------------------------------------------------------------------------
  110. void __fastcall TEditMaskDialog::FileMasksMemoExit(TObject *Sender)
  111. {
  112. ValidateMaskEdit(dynamic_cast<TMemo *>(Sender), false);
  113. }
  114. //---------------------------------------------------------------------------
  115. void __fastcall TEditMaskDialog::DirectoryMasksMemoExit(TObject *Sender)
  116. {
  117. ValidateMaskEdit(dynamic_cast<TMemo *>(Sender), true);
  118. }
  119. //---------------------------------------------------------------------------
  120. void __fastcall TEditMaskDialog::ControlChange(TObject * /*Sender*/)
  121. {
  122. UpdateControls();
  123. }
  124. //---------------------------------------------------------------------------
  125. void __fastcall TEditMaskDialog::UpdateControls()
  126. {
  127. try
  128. {
  129. TFileMasks Mask;
  130. SaveFileMasks(Mask);
  131. MaskMemo->Lines->Text = Mask.Masks;
  132. }
  133. catch(EFileMasksException & E)
  134. {
  135. MaskMemo->Lines->Text = E.Message;
  136. }
  137. }
  138. //---------------------------------------------------------------------------
  139. void __fastcall TEditMaskDialog::FormKeyDown(
  140. TObject * Sender, WORD & Key, TShiftState Shift)
  141. {
  142. MemoKeyDown(Sender, Key, Shift);
  143. }
  144. //---------------------------------------------------------------------------
  145. void __fastcall TEditMaskDialog::FormShow(TObject * /*Sender*/)
  146. {
  147. InstallPathWordBreakProc(IncludeFileMasksMemo);
  148. InstallPathWordBreakProc(ExcludeFileMasksMemo);
  149. InstallPathWordBreakProc(IncludeDirectoryMasksMemo);
  150. InstallPathWordBreakProc(ExcludeDirectoryMasksMemo);
  151. }
  152. //---------------------------------------------------------------------------
  153. void __fastcall TEditMaskDialog::ExcludeDirectoryAllCheckClick(TObject * /*Sender*/)
  154. {
  155. if (!FChanging)
  156. {
  157. TAutoFlag Flag(FChanging);
  158. if (ExcludeDirectoryAllCheck->Checked)
  159. {
  160. FExcludeDirectoryMasks = ExcludeDirectoryMasksMemo->Lines->Text;
  161. ExcludeDirectoryMasksMemo->Lines->Text = L"*";
  162. }
  163. else
  164. {
  165. ExcludeDirectoryMasksMemo->Lines->Text = FExcludeDirectoryMasks;
  166. }
  167. }
  168. UpdateControls();
  169. }
  170. //---------------------------------------------------------------------------
  171. void __fastcall TEditMaskDialog::ExcludeDirectoryMasksMemoChange(TObject * /*Sender*/)
  172. {
  173. if (!FChanging)
  174. {
  175. TAutoFlag Flag(FChanging);
  176. UnicodeString Mask = ExcludeDirectoryMasksMemo->Lines->Text.Trim();
  177. ExcludeDirectoryAllCheck->Checked = (Mask == L"*") || (Mask == L"*/");
  178. }
  179. UpdateControls();
  180. }
  181. //---------------------------------------------------------------------------