| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 | //---------------------------------------------------------------------------#include <vcl.h>#pragma hdrstop#include <Common.h>#include <FileMasks.h>#include <CoreMain.h>#include <TextsWin.h>#include <HelpWin.h>#include <Tools.h>#include <VCLCommon.h>#include "SelectMask.h"#include "WinConfiguration.h"//---------------------------------------------------------------------------#pragma package(smart_init)#pragma link "HistoryComboBox"#ifndef NO_RESOURCES#pragma resource "*.dfm"#endif//---------------------------------------------------------------------------bool __fastcall DoSelectMaskDialog(TControl * Parent, bool Select, TFileFilter & Filter){  std::unique_ptr<TSelectMaskDialog> Dialog(new TSelectMaskDialog(Application));  Dialog->Init((Select ? TSelectMaskDialog::smSelect : TSelectMaskDialog::smDeselect), Parent);  DefaultFileFilter(Filter);  Filter.Masks = WinConfiguration->SelectMask;  Filter.Directories = WinConfiguration->SelectDirectories;  TColor Color = TColor();  bool Result = Dialog->Execute(Filter, Color);  if (Result)  {    WinConfiguration->SelectMask = Filter.Masks;    WinConfiguration->SelectDirectories = Filter.Directories;  }  return Result;}//---------------------------------------------------------------------------bool __fastcall DoFilterMaskDialog(TControl * Parent, UnicodeString & Mask){  std::unique_ptr<TSelectMaskDialog> Dialog(new TSelectMaskDialog(Application));  Dialog->Init(TSelectMaskDialog::smFilter, Parent);  TColor Color = TColor();  return Dialog->Execute(Mask, Color);}//---------------------------------------------------------------------------bool __fastcall DoFileColorDialog(TFileColorData & FileColorData){  std::unique_ptr<TSelectMaskDialog> Dialog(new TSelectMaskDialog(Application));  Dialog->Init(TSelectMaskDialog::smFileColor, NULL);  UnicodeString Mask = FileColorData.FileMask.Masks;  bool Result = Dialog->Execute(Mask, FileColorData.Color);  if (Result)  {    FileColorData.FileMask.Masks = Mask;  }  return Result;}//---------------------------------------------------------------------------__fastcall TSelectMaskDialog::TSelectMaskDialog(TComponent * Owner) :  TForm(Owner){  UseSystemSettings(this);  FColor = TColor();  HintLabel(HintText,    FORMAT(L"%s\n \n%s\n \n%s\n \n%s", (LoadStr(MASK_HINT2), LoadStr(FILE_MASK_EX_HINT),      LoadStr(COMBINING_MASKS_HINT), LoadStr(MASK_HELP))));  ColorFileNamesLabel->Font = Screen->IconFont;  ColorSizesLabel->Font = ColorFileNamesLabel->Font;  ColorSizesLabel->Caption =    FormatPanelBytes(10723, WinConfiguration->FormatSizeBytes) + sLineBreak +    FormatPanelBytes(25835, WinConfiguration->FormatSizeBytes) + sLineBreak +    FormatPanelBytes(276445, WinConfiguration->FormatSizeBytes) + sLineBreak;  MenuButton(ColorButton);}//---------------------------------------------------------------------------void __fastcall TSelectMaskDialog::Init(TMode Mode, TControl * Parent){  int CaptionStr;  switch (Mode)  {    case smSelect:      CaptionStr = SELECT_MASK_SELECT_CAPTION;      ClearButton->Hide();      ColorButton->Hide();      break;    case smDeselect:      CaptionStr = SELECT_MASK_DESELECT_CAPTION;      ClearButton->Hide();      ColorButton->Hide();      break;    case smFilter:      CaptionStr = FILTER_MASK_CAPTION;      ApplyToDirectoriesCheck->Hide();      ColorButton->Hide();      HelpKeyword = HELP_FILTER;      break;    case smFileColor:      CaptionStr = FILE_COLOR_CAPTION;      ApplyToDirectoriesCheck->Hide();      ClearButton->Hide();      HelpKeyword = HELP_FILE_COLORS;      break;  }  if (!ColorButton->Visible)  {    ColorFileNamesLabel->Visible = false;    ColorSizesLabel->Visible = false;    ColorPaddingLabel->Visible = false;    ColorButton->Visible = false;    int Diff = ((ColorFileNamesLabel->Top + ColorFileNamesLabel->Height) - (ApplyToDirectoriesCheck->Top + ApplyToDirectoriesCheck->Height));    ClientHeight = ClientHeight - Diff;  }  Caption = LoadStr(CaptionStr);  FParent = Parent;  if (FParent == NULL)  {    Position = poOwnerFormCenter;  }}//---------------------------------------------------------------------------void __fastcall TSelectMaskDialog::FormCloseQuery(TObject *, bool & DebugUsedArg(CanClose)){  if (ModalResult == DefaultResult(this))  {    if (MaskEdit->Focused())    {      MaskEditExit(NULL);    }  }}//---------------------------------------------------------------------------bool __fastcall TSelectMaskDialog::Execute(TFileFilter & FileFilter, TColor & Color){  ApplyToDirectoriesCheck->Checked = FileFilter.Directories;  MaskEdit->Text = FileFilter.Masks;  MaskEdit->Items = WinConfiguration->History[L"Mask"];  ActiveControl = MaskEdit;  FColor = Color;  bool Result = (ShowModal() == DefaultResult(this));  if (Result)  {    MaskEdit->SaveToHistory();    WinConfiguration->History[L"Mask"] = MaskEdit->Items;    FileFilter.Directories = ApplyToDirectoriesCheck->Checked;    FileFilter.Masks = MaskEdit->Text;    Color = FColor;  }  return Result;}//---------------------------------------------------------------------------bool __fastcall TSelectMaskDialog::Execute(UnicodeString & Mask, TColor & Color){  TFileFilter Filter;  DefaultFileFilter(Filter);  Filter.Masks = Mask;  bool Result = Execute(Filter, Color);  if (Result)  {    Mask = Filter.Masks;  }  return Result;}//---------------------------------------------------------------------------void __fastcall TSelectMaskDialog::MaskEditExit(TObject * /*Sender*/){  ValidateMaskEdit(MaskEdit);}//---------------------------------------------------------------------------void __fastcall TSelectMaskDialog::HelpButtonClick(TObject * /*Sender*/){  FormHelp(this);}//---------------------------------------------------------------------------void __fastcall TSelectMaskDialog::ClearButtonClick(TObject * /*Sender*/){  MaskEdit->Text = L"";}//---------------------------------------------------------------------------void __fastcall TSelectMaskDialog::FormShow(TObject * /*Sender*/){  InstallPathWordBreakProc(MaskEdit);  if (FParent != NULL)  {    // Only now it is scaled    CenterFormOn(this, FParent);  }  UpdateControls();}//---------------------------------------------------------------------------void __fastcall TSelectMaskDialog::MaskButtonClick(TObject * /*Sender*/){  TFileMasks Masks = MaskEdit->Text;  if (DoEditMaskDialog(Masks))  {    MaskEdit->Text = Masks.Masks;    UpdateControls();  }}//---------------------------------------------------------------------------void __fastcall TSelectMaskDialog::ColorChange(TColor Color){  FColor = Color;  UpdateControls();}//---------------------------------------------------------------------------void __fastcall TSelectMaskDialog::ColorButtonClick(TObject *){  // Reason for separate Menu variable is given in TPreferencesDialog::EditorFontColorButtonClick  TPopupMenu * Menu = CreateColorPopupMenu(FColor, ColorChange);  // Popup menu has to survive the popup as TBX calls click handler asynchronously (post).  FColorPopupMenu.reset(Menu);  MenuPopup(Menu, ColorButton);}//---------------------------------------------------------------------------void __fastcall TSelectMaskDialog::UpdateControls(){  EnableControl(OKBtn, (!ColorButton->Visible || !MaskEdit->Text.IsEmpty()));  ColorFileNamesLabel->Font->Color = FColor;  ColorSizesLabel->Font->Color = ColorFileNamesLabel->Font->Color;}//---------------------------------------------------------------------------void __fastcall TSelectMaskDialog::MaskEditChange(TObject *){  UpdateControls();}//---------------------------------------------------------------------------
 |