1
0

SelectMask.cpp 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. //---------------------------------------------------------------------------
  2. #include <FormsPCH.h>
  3. #pragma hdrstop
  4. #include <FileMasks.h>
  5. #include "SelectMask.h"
  6. //---------------------------------------------------------------------------
  7. #pragma package(smart_init)
  8. #pragma link "HistoryComboBox"
  9. #pragma resource "*.dfm"
  10. //---------------------------------------------------------------------------
  11. bool __fastcall DoSelectMaskDialog(TControl * Parent, bool Select, TFileFilter & Filter)
  12. {
  13. std::unique_ptr<TSelectMaskDialog> Dialog(new TSelectMaskDialog(Application));
  14. Dialog->Init((Select ? TSelectMaskDialog::smSelect : TSelectMaskDialog::smDeselect), Parent);
  15. DefaultFileFilter(Filter);
  16. Filter.Masks = WinConfiguration->SelectMask;
  17. Filter.Directories = WinConfiguration->SelectDirectories;
  18. TColor Color = TColor();
  19. bool Result = Dialog->Execute(Filter, Color);
  20. if (Result)
  21. {
  22. WinConfiguration->SelectMask = Filter.Masks;
  23. WinConfiguration->SelectDirectories = Filter.Directories;
  24. }
  25. return Result;
  26. }
  27. //---------------------------------------------------------------------------
  28. bool __fastcall DoFilterMaskDialog(TControl * Parent, UnicodeString & Mask)
  29. {
  30. std::unique_ptr<TSelectMaskDialog> Dialog(new TSelectMaskDialog(Application));
  31. Dialog->Init(TSelectMaskDialog::smFilter, Parent);
  32. TColor Color = TColor();
  33. return Dialog->Execute(Mask, Color);
  34. }
  35. //---------------------------------------------------------------------------
  36. bool __fastcall DoFileColorDialog(TFileColorData & FileColorData)
  37. {
  38. std::unique_ptr<TSelectMaskDialog> Dialog(new TSelectMaskDialog(Application));
  39. Dialog->Init(TSelectMaskDialog::smFileColor, NULL);
  40. UnicodeString Mask = FileColorData.FileMask.Masks;
  41. bool Result = Dialog->Execute(Mask, FileColorData.Color);
  42. if (Result)
  43. {
  44. FileColorData.FileMask.Masks = Mask;
  45. }
  46. return Result;
  47. }
  48. //---------------------------------------------------------------------------
  49. __fastcall TSelectMaskDialog::TSelectMaskDialog(TComponent * Owner) :
  50. TForm(Owner)
  51. {
  52. UseSystemSettings(this);
  53. FColor = TColor();
  54. HintLabel(HintText,
  55. FORMAT(L"%s\n \n%s\n \n%s\n \n%s", (LoadStr(MASK_HINT2), LoadStr(FILE_MASK_EX_HINT),
  56. LoadStr(COMBINING_MASKS_HINT), LoadStr(MASK_HELP))));
  57. ColorFileNamesLabel->Font = Screen->IconFont;
  58. ColorSizesLabel->Font = ColorFileNamesLabel->Font;
  59. ColorSizesLabel->Caption =
  60. FormatPanelBytes(10723, WinConfiguration->FormatSizeBytes) + sLineBreak +
  61. FormatPanelBytes(25835, WinConfiguration->FormatSizeBytes) + sLineBreak +
  62. FormatPanelBytes(276445, WinConfiguration->FormatSizeBytes) + sLineBreak;
  63. MenuButton(ColorButton);
  64. }
  65. //---------------------------------------------------------------------------
  66. void __fastcall TSelectMaskDialog::Init(TMode Mode, TControl * Parent)
  67. {
  68. int CaptionStr;
  69. switch (Mode)
  70. {
  71. case smSelect:
  72. CaptionStr = SELECT_MASK_SELECT_CAPTION;
  73. ClearButton->Hide();
  74. ColorButton->Hide();
  75. break;
  76. case smDeselect:
  77. CaptionStr = SELECT_MASK_DESELECT_CAPTION;
  78. ClearButton->Hide();
  79. ColorButton->Hide();
  80. break;
  81. case smFilter:
  82. CaptionStr = FILTER_MASK_CAPTION;
  83. ApplyToDirectoriesCheck->Hide();
  84. ColorButton->Hide();
  85. HelpKeyword = HELP_FILTER;
  86. break;
  87. case smFileColor:
  88. CaptionStr = FILE_COLOR_CAPTION;
  89. ApplyToDirectoriesCheck->Hide();
  90. ClearButton->Hide();
  91. HelpKeyword = HELP_FILE_COLORS;
  92. break;
  93. }
  94. if (!ColorButton->Visible)
  95. {
  96. ColorFileNamesLabel->Visible = false;
  97. ColorSizesLabel->Visible = false;
  98. ColorPaddingLabel->Visible = false;
  99. ColorButton->Visible = false;
  100. int Diff = ((ColorFileNamesLabel->Top + ColorFileNamesLabel->Height) - (ApplyToDirectoriesCheck->Top + ApplyToDirectoriesCheck->Height));
  101. ClientHeight = ClientHeight - Diff;
  102. }
  103. Caption = LoadStr(CaptionStr);
  104. FParent = Parent;
  105. if (FParent == NULL)
  106. {
  107. Position = poOwnerFormCenter;
  108. }
  109. }
  110. //---------------------------------------------------------------------------
  111. void __fastcall TSelectMaskDialog::FormCloseQuery(TObject *, bool & DebugUsedArg(CanClose))
  112. {
  113. if (ModalResult == DefaultResult(this))
  114. {
  115. if (MaskEdit->Focused())
  116. {
  117. MaskEditExit(NULL);
  118. }
  119. }
  120. }
  121. //---------------------------------------------------------------------------
  122. bool __fastcall TSelectMaskDialog::Execute(TFileFilter & FileFilter, TColor & Color)
  123. {
  124. ApplyToDirectoriesCheck->Checked = FileFilter.Directories;
  125. MaskEdit->Text = FileFilter.Masks;
  126. MaskEdit->Items = WinConfiguration->History[L"Mask"];
  127. ActiveControl = MaskEdit;
  128. FColor = Color;
  129. bool Result = (ShowModal() == DefaultResult(this));
  130. if (Result)
  131. {
  132. MaskEdit->SaveToHistory();
  133. WinConfiguration->History[L"Mask"] = MaskEdit->Items;
  134. FileFilter.Directories = ApplyToDirectoriesCheck->Checked;
  135. FileFilter.Masks = MaskEdit->Text;
  136. Color = FColor;
  137. }
  138. return Result;
  139. }
  140. //---------------------------------------------------------------------------
  141. bool __fastcall TSelectMaskDialog::Execute(UnicodeString & Mask, TColor & Color)
  142. {
  143. TFileFilter Filter;
  144. DefaultFileFilter(Filter);
  145. Filter.Masks = Mask;
  146. bool Result = Execute(Filter, Color);
  147. if (Result)
  148. {
  149. Mask = Filter.Masks;
  150. }
  151. return Result;
  152. }
  153. //---------------------------------------------------------------------------
  154. void __fastcall TSelectMaskDialog::MaskEditExit(TObject * /*Sender*/)
  155. {
  156. ValidateMaskEdit(MaskEdit);
  157. }
  158. //---------------------------------------------------------------------------
  159. void __fastcall TSelectMaskDialog::HelpButtonClick(TObject * /*Sender*/)
  160. {
  161. FormHelp(this);
  162. }
  163. //---------------------------------------------------------------------------
  164. void __fastcall TSelectMaskDialog::ClearButtonClick(TObject * /*Sender*/)
  165. {
  166. MaskEdit->Text = L"";
  167. }
  168. //---------------------------------------------------------------------------
  169. void __fastcall TSelectMaskDialog::FormShow(TObject * /*Sender*/)
  170. {
  171. InstallPathWordBreakProc(MaskEdit);
  172. if (FParent != NULL)
  173. {
  174. // Only now it is scaled
  175. CenterFormOn(this, FParent);
  176. }
  177. UpdateControls();
  178. }
  179. //---------------------------------------------------------------------------
  180. void __fastcall TSelectMaskDialog::MaskButtonClick(TObject * /*Sender*/)
  181. {
  182. TFileMasks Masks = MaskEdit->Text;
  183. if (DoEditMaskDialog(Masks))
  184. {
  185. MaskEdit->Text = Masks.Masks;
  186. UpdateControls();
  187. }
  188. }
  189. //---------------------------------------------------------------------------
  190. void __fastcall TSelectMaskDialog::ColorChange(TColor Color)
  191. {
  192. FColor = Color;
  193. UpdateControls();
  194. }
  195. //---------------------------------------------------------------------------
  196. void __fastcall TSelectMaskDialog::ColorButtonClick(TObject *)
  197. {
  198. // Reason for separate Menu variable is given in TPreferencesDialog::EditorFontColorButtonClick
  199. TPopupMenu * Menu = CreateColorPopupMenu(FColor, ColorChange);
  200. // Popup menu has to survive the popup as TBX calls click handler asynchronously (post).
  201. FColorPopupMenu.reset(Menu);
  202. MenuPopup(Menu, ColorButton);
  203. }
  204. //---------------------------------------------------------------------------
  205. void __fastcall TSelectMaskDialog::UpdateControls()
  206. {
  207. EnableControl(OKBtn, (!ColorButton->Visible || !MaskEdit->Text.IsEmpty()));
  208. ColorFileNamesLabel->Font->Color = FColor;
  209. ColorSizesLabel->Font->Color = ColorFileNamesLabel->Font->Color;
  210. }
  211. //---------------------------------------------------------------------------
  212. void __fastcall TSelectMaskDialog::MaskEditChange(TObject *)
  213. {
  214. UpdateControls();
  215. }
  216. //---------------------------------------------------------------------------