Index: src/ch/FilterDlg.cpp =================================================================== diff -u -rf3c80778cfee0736195e00274c78040f7908ac5b -r31be0106a2d78fd0ddcb735f5351658abe56dc48 --- src/ch/FilterDlg.cpp (.../FilterDlg.cpp) (revision f3c80778cfee0736195e00274c78040f7908ac5b) +++ src/ch/FilterDlg.cpp (.../FilterDlg.cpp) (revision 31be0106a2d78fd0ddcb735f5351658abe56dc48) @@ -1,25 +1,26 @@ -/*************************************************************************** -* Copyright (C) 2001-2008 by J�zef Starosczyk * -* ixen@copyhandler.com * -* * -* This program is free software; you can redistribute it and/or modify * -* it under the terms of the GNU Library General Public License * -* (version 2) as published by the Free Software Foundation; * -* * -* This program is distributed in the hope that it will be useful, * -* but WITHOUT ANY WARRANTY; without even the implied warranty of * -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -* GNU General Public License for more details. * -* * -* You should have received a copy of the GNU Library General Public * -* License along with this program; if not, write to the * -* Free Software Foundation, Inc., * -* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * -***************************************************************************/ +// ============================================================================ +// Copyright (C) 2001-2020 by Jozef Starosczyk +// ixen {at} copyhandler [dot] com +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU Library General Public License +// (version 2) as published by the Free Software Foundation; +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this program; if not, write to the +// Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// ============================================================================ #include "stdafx.h" #include "ch.h" #include "FilterDlg.h" #include "resource.h" +#include "../libstring/TStringArray.h" #ifdef _DEBUG #define new DEBUG_NEW @@ -31,31 +32,28 @@ // CFilterDlg dialog CFilterDlg::CFilterDlg() - :CLanguageDialog(IDD_FILTER_DIALOG) + :CLanguageDialog(IDD_FILTER_DIALOG), + m_iArchive(FALSE), + m_bAttributes(FALSE), + m_bDate1(FALSE), + m_bDate2(FALSE), + m_iDirectory(FALSE), + m_bFilter(FALSE), + m_iHidden(FALSE), + m_iReadOnly(FALSE), + m_bSize(FALSE), + m_uiSize1(0), + m_bSize2(FALSE), + m_uiSize2(0), + m_iSystem(FALSE), + m_bExclude(FALSE) { - //{{AFX_DATA_INIT(CFilterDlg) - m_iArchive = FALSE; - m_bAttributes = FALSE; - m_bDate1 = FALSE; - m_bDate2 = FALSE; - m_iDirectory = FALSE; - m_bFilter = FALSE; - m_iHidden = FALSE; - m_iReadOnly = FALSE; - m_bSize = FALSE; - m_uiSize1 = 0; - m_bSize2 = FALSE; - m_uiSize2 = 0; - m_iSystem = FALSE; - m_bExclude = FALSE; - //}}AFX_DATA_INIT } - void CFilterDlg::DoDataExchange(CDataExchange* pDX) { CLanguageDialog::DoDataExchange(pDX); - //{{AFX_DATA_MAP(CFilterDlg) + DDX_Control(pDX, IDC_FILTEREXCLUDE_COMBO, m_ctlExcludeMask); DDX_Control(pDX, IDC_SIZE2_SPIN, m_ctlSpin2); DDX_Control(pDX, IDC_SIZE1_SPIN, m_ctlSpin1); @@ -65,12 +63,14 @@ DDX_Control(pDX, IDC_SIZETYPE1_COMBO, m_ctlSizeType1); DDX_Control(pDX, IDC_SIZE2MULTI_COMBO, m_ctlSize2Multi); DDX_Control(pDX, IDC_SIZE1MULTI_COMBO, m_ctlSize1Multi); - DDX_Control(pDX, IDC_FILTER_COMBO, m_ctlFilter); + DDX_Control(pDX, IDC_FILTER_COMBO, m_ctlIncludeMask); DDX_Control(pDX, IDC_DATETYPE_COMBO, m_ctlDateType); DDX_Control(pDX, IDC_DATE2TYPE_COMBO, m_ctlDateType2); DDX_Control(pDX, IDC_DATE2_DATETIMEPICKER, m_ctlDate2); DDX_Control(pDX, IDC_DATE1TYPE_COMBO, m_ctlDateType1); DDX_Control(pDX, IDC_DATE1_DATETIMEPICKER, m_ctlDate1); + DDX_Control(pDX, IDC_INCLUDE_MASK_BUTTON, m_btnIncludeMask); + DDX_Control(pDX, IDC_EXCLUDE_MASK_BUTTON, m_btnExcludeMask); DDX_Check(pDX, IDC_ARCHIVE_CHECK, m_iArchive); DDX_Check(pDX, IDC_ATTRIBUTES_CHECK, m_bAttributes); DDX_Check(pDX, IDC_DATE_CHECK, m_bDate1); @@ -85,7 +85,6 @@ DDX_Text(pDX, IDC_SIZE2_EDIT, m_uiSize2); DDX_Check(pDX, IDC_SYSTEM_CHECK, m_iSystem); DDX_Check(pDX, IDC_EXCLUDEMASK_CHECK, m_bExclude); - //}}AFX_DATA_MAP } @@ -98,6 +97,9 @@ ON_BN_CLICKED(IDC_SIZE_CHECK, OnSizeCheck) ON_BN_CLICKED(IDC_SIZE2_CHECK, OnSize2Check) ON_BN_CLICKED(IDC_EXCLUDEMASK_CHECK, OnExcludemaskCheck) + ON_BN_CLICKED(IDC_INCLUDE_MASK_BUTTON, OnIncludeMaskButton) + ON_BN_CLICKED(IDC_EXCLUDE_MASK_BUTTON, OnExcludeMaskButton) + ON_BN_CLICKED(IDC_EXCLUDEMASK_CHECK, OnExcludemaskCheck) ON_NOTIFY(DTN_DATETIMECHANGE, IDC_TIME1_DATETIMEPICKER, OnDatetimechangeTime1Datetimepicker) ON_NOTIFY(DTN_DATETIMECHANGE, IDC_DATE1_DATETIMEPICKER, OnDatetimechangeDate1Datetimepicker) //}}AFX_MSG_MAP @@ -137,10 +139,10 @@ // copy data from TFileFilter to a dialog - mask m_bFilter = m_ffFilter.GetUseMask(); - m_ctlFilter.SetCurSel(m_ctlFilter.AddString(m_ffFilter.GetCombinedMask().c_str())); + m_ctlIncludeMask.SetCurSel(m_ctlIncludeMask.AddString(m_ffFilter.GetCombinedMask().c_str())); for (int i=0;iGetMenuItemCount(); ++iIndex) + { + int iCmd = pPopup->GetMenuItemID(iIndex); + if(iCmd > 0) + { + CString strText; + pPopup->GetMenuString(iIndex, strText, MF_BYPOSITION); + m_mapFilterEntries.insert({ iCmd, (PCTSTR)strText }); + } + } + UpdateData(FALSE); EnableControls(); @@ -294,9 +311,11 @@ { UpdateData(TRUE); // mask - m_ctlFilter.EnableWindow(m_bFilter); + m_ctlIncludeMask.EnableWindow(m_bFilter); + m_btnIncludeMask.EnableWindow(m_bFilter); m_ctlExcludeMask.EnableWindow(m_bExclude); + m_btnExcludeMask.EnableWindow(m_bExclude); // size m_ctlSizeType1.EnableWindow(m_bSize); @@ -335,7 +354,7 @@ // TFileFilter --> dialogu - mask CString strText; - m_ctlFilter.GetWindowText(strText); + m_ctlIncludeMask.GetWindowText(strText); m_ffFilter.SetUseMask(((m_bFilter != 0) && !strText.IsEmpty())); m_ffFilter.SetCombinedMask((PCTSTR)strText); @@ -383,6 +402,38 @@ CLanguageDialog::OnOK(); } +BOOL CFilterDlg::OnCommand(WPARAM wParam, LPARAM lParam) +{ + if(HIWORD(wParam) == 0) + { + if(LOWORD(wParam) >= ID_POPUP_FILTER_FILE_WILDCARD && LOWORD(wParam) <= ID_POPUP_FILTER_SEPARATOR_CHAR) + { + CComboBox& rCombo = m_bTracksIncludeButton ? m_ctlIncludeMask : m_ctlExcludeMask; + + auto iterFnd = m_mapFilterEntries.find(LOWORD(wParam)); + if(iterFnd != m_mapFilterEntries.end()) + { + string::TString strEntry = iterFnd->second.c_str(); + string::TStringArray arrStrings; + strEntry.Split(L"\t", arrStrings); + + if(arrStrings.GetCount() > 1) + { + CString strText; + rCombo.GetWindowText(strText); + + CString strParsed = arrStrings.GetAt(0).c_str(); + if(!strText.IsEmpty() && strText.Right(1) != L";" && strParsed != L";") + strText += L";"; + + rCombo.SetWindowText(strText + strParsed); + } + } + } + } + return ictranslate::CLanguageDialog::OnCommand(wParam, lParam); +} + int CFilterDlg::GetMultiplier(int iIndex) { switch (iIndex) @@ -434,6 +485,28 @@ EnableControls(); } +void CFilterDlg::OnIncludeMaskButton() +{ + m_bTracksIncludeButton = true; + + // set point in which to set menu + CRect rect; + GetDlgItem(IDC_INCLUDE_MASK_BUTTON)->GetWindowRect(&rect); + + m_menuFilterType.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, rect.right + 1, rect.top, this); +} + +void CFilterDlg::OnExcludeMaskButton() +{ + m_bTracksIncludeButton = false; + + // set point in which to set menu + CRect rect; + GetDlgItem(IDC_EXCLUDE_MASK_BUTTON)->GetWindowRect(&rect); + + m_menuFilterType.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, rect.right + 1, rect.top, this); +} + void CFilterDlg::OnDatetimechangeTime1Datetimepicker(NMHDR* /*pNMHDR*/, LRESULT* pResult) { EnableControls(); Index: src/ch/FilterDlg.h =================================================================== diff -u -r0d5b67ee96b435d63f7bf075dc8e28603793b187 -r31be0106a2d78fd0ddcb735f5351658abe56dc48 --- src/ch/FilterDlg.h (.../FilterDlg.h) (revision 0d5b67ee96b435d63f7bf075dc8e28603793b187) +++ src/ch/FilterDlg.h (.../FilterDlg.h) (revision 31be0106a2d78fd0ddcb735f5351658abe56dc48) @@ -1,23 +1,23 @@ -/*************************************************************************** -* Copyright (C) 2001-2008 by J�zef Starosczyk * -* ixen@copyhandler.com * -* * -* This program is free software; you can redistribute it and/or modify * -* it under the terms of the GNU Library General Public License * -* (version 2) as published by the Free Software Foundation; * -* * -* This program is distributed in the hope that it will be useful, * -* but WITHOUT ANY WARRANTY; without even the implied warranty of * -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -* GNU General Public License for more details. * -* * -* You should have received a copy of the GNU Library General Public * -* License along with this program; if not, write to the * -* Free Software Foundation, Inc., * -* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * -***************************************************************************/ -#ifndef __FILTERDLG_H__ -#define __FILTERDLG_H__ +// ============================================================================ +// Copyright (C) 2001-2020 by Jozef Starosczyk +// ixen {at} copyhandler [dot] com +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU Library General Public License +// (version 2) as published by the Free Software Foundation; +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this program; if not, write to the +// Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// ============================================================================ +#pragma once + #include "../libchengine/TFileFilter.h" ///////////////////////////////////////////////////////////////////////////// @@ -29,8 +29,40 @@ public: CFilterDlg(); // standard constructor -// Dialog Data - //{{AFX_DATA(CFilterDlg) +protected: + void OnLanguageChanged() override; + int GetMultiplier(int iIndex); + void EnableControls(); + void SetSize1(unsigned __int64 ullSize); + void SetSize2(unsigned __int64 ullSize); + + void DoDataExchange(CDataExchange* pDX) override; + + BOOL OnInitDialog() override; + void OnOK() override; + BOOL OnCommand(WPARAM wParam, LPARAM lParam) override; + + afx_msg void OnAttributesCheck(); + afx_msg void OnDateCheck(); + afx_msg void OnDate2Check(); + afx_msg void OnFilterCheck(); + afx_msg void OnSizeCheck(); + afx_msg void OnSize2Check(); + afx_msg void OnExcludemaskCheck(); + afx_msg void OnIncludeMaskButton(); + afx_msg void OnExcludeMaskButton(); + afx_msg void OnDatetimechangeTime1Datetimepicker(NMHDR* pNMHDR, LRESULT* pResult); + afx_msg void OnDatetimechangeDate1Datetimepicker(NMHDR* pNMHDR, LRESULT* pResult); + + DECLARE_MESSAGE_MAP() + +public: + CStringArray m_astrAddMask; + CStringArray m_astrAddExcludeMask; + chengine::TFileFilter m_ffFilter; + +private: + CComboBox m_ctlIncludeMask; CComboBox m_ctlExcludeMask; CSpinButtonCtrl m_ctlSpin2; CSpinButtonCtrl m_ctlSpin1; @@ -40,12 +72,18 @@ CComboBox m_ctlSizeType1; CComboBox m_ctlSize2Multi; CComboBox m_ctlSize1Multi; - CComboBox m_ctlFilter; CComboBox m_ctlDateType; CComboBox m_ctlDateType2; CDateTimeCtrl m_ctlDate2; CComboBox m_ctlDateType1; CDateTimeCtrl m_ctlDate1; + CMFCButton m_btnIncludeMask; + CMFCButton m_btnExcludeMask; + + bool m_bTracksIncludeButton = false; + CMenu m_menuFilterType; + std::map m_mapFilterEntries; + int m_iArchive; BOOL m_bAttributes; BOOL m_bDate1; @@ -60,47 +98,4 @@ UINT m_uiSize2; int m_iSystem; BOOL m_bExclude; - //}}AFX_DATA - - -// Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CFilterDlg) - protected: - void DoDataExchange(CDataExchange* pDX) override; // DDX/DDV support - //}}AFX_VIRTUAL - - // Implementation -public: - void SetSize2(unsigned __int64 ullSize); - chengine::TFileFilter m_ffFilter; - CStringArray m_astrAddMask; - CStringArray m_astrAddExcludeMask; - -protected: - void OnLanguageChanged() override; - int GetMultiplier(int iIndex); - void EnableControls(); - void SetSize1(unsigned __int64 ullSize); - - // Generated message map functions - //{{AFX_MSG(CFilterDlg) - BOOL OnInitDialog() override; - void OnOK() override; - afx_msg void OnAttributesCheck(); - afx_msg void OnDateCheck(); - afx_msg void OnDate2Check(); - afx_msg void OnFilterCheck(); - afx_msg void OnSizeCheck(); - afx_msg void OnSize2Check(); - afx_msg void OnExcludemaskCheck(); - afx_msg void OnDatetimechangeTime1Datetimepicker(NMHDR* pNMHDR, LRESULT* pResult); - afx_msg void OnDatetimechangeDate1Datetimepicker(NMHDR* pNMHDR, LRESULT* pResult); - //}}AFX_MSG - DECLARE_MESSAGE_MAP() }; - -//{{AFX_INSERT_LOCATION}} -// Microsoft Visual C++ will insert additional declarations immediately before the previous line. - -#endif Index: src/ch/ch.rc =================================================================== diff -u -r53e3a91f9bcb2e26f758fc92e9856a69eba71a61 -r31be0106a2d78fd0ddcb735f5351658abe56dc48 --- src/ch/ch.rc (.../ch.rc) (revision 53e3a91f9bcb2e26f758fc92e9856a69eba71a61) +++ src/ch/ch.rc (.../ch.rc) (revision 31be0106a2d78fd0ddcb735f5351658abe56dc48) @@ -274,25 +274,26 @@ EDITTEXT IDC_FEEDBACK_RULES_SUMMARY_EDIT,13,254,255,14,ES_AUTOHSCROLL | WS_DISABLED END -IDD_FILTER_DIALOG DIALOGEX 0, 0, 291, 266 +IDD_FILTER_DIALOG DIALOGEX 0, 0, 291, 267 STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Filtering settings" FONT 8, "Tahoma", 0, 0, 0x1 BEGIN - CONTROL "Include mask (separate by vertical lines ie. *.jpg|*.gif)",IDC_FILTER_CHECK, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,7,277,10 - COMBOBOX IDC_FILTER_COMBO,15,19,269,98,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP - CONTROL "Exclude mask",IDC_EXCLUDEMASK_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,35,277,10 - COMBOBOX IDC_FILTEREXCLUDE_COMBO,15,48,269,170,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP + CONTROL "Include files matching:",IDC_FILTER_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,7,277,10 + COMBOBOX IDC_FILTER_COMBO,15,19,249,98,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP + CONTROL "...",IDC_INCLUDE_MASK_BUTTON,"MfcButton",WS_TABSTOP,267,19,17,12 + CONTROL "Exclude files matching:",IDC_EXCLUDEMASK_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,35,277,10 + COMBOBOX IDC_FILTEREXCLUDE_COMBO,15,48,249,170,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP + CONTROL "...",IDC_EXCLUDE_MASK_BUTTON,"MfcButton",WS_TABSTOP,267,48,17,12 CONTROL "Filtering by size",IDC_SIZE_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,66,277,10 COMBOBOX IDC_SIZETYPE1_COMBO,63,81,34,140,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP EDITTEXT IDC_SIZE1_EDIT,100,80,77,14,ES_AUTOHSCROLL - CONTROL "Spin1",IDC_SIZE1_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,166,80,11,14 + CONTROL "Spin1",IDC_SIZE1_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,166,80,12,14 COMBOBOX IDC_SIZE1MULTI_COMBO,180,81,34,135,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "and",IDC_SIZE2_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,30,101,32,10 COMBOBOX IDC_SIZETYPE2_COMBO,63,99,34,137,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP EDITTEXT IDC_SIZE2_EDIT,100,98,77,14,ES_AUTOHSCROLL - CONTROL "Spin1",IDC_SIZE2_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,166,98,11,14 + CONTROL "Spin1",IDC_SIZE2_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,166,98,12,14 COMBOBOX IDC_SIZE2MULTI_COMBO,180,99,34,143,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Filtering by date",IDC_DATE_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,124,277,10 COMBOBOX IDC_DATETYPE_COMBO,32,138,151,133,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP @@ -315,7 +316,7 @@ CONTROL "Directory",IDC_DIRECTORY_CHECK,"Button",BS_AUTO3STATE | NOT WS_VISIBLE | WS_DISABLED | WS_TABSTOP,191,212,93,10 DEFPUSHBUTTON "&OK",IDOK,179,245,50,14 PUSHBUTTON "&Cancel",IDCANCEL,234,245,50,14 - CONTROL "",IDC_001_STATIC,"Static",SS_ETCHEDHORZ,7,238,276,1 + CONTROL "",IDC_001_STATIC,"Static",SS_ETCHEDHORZ,7,238,275,1 END IDD_SHORTCUTEDIT_DIALOG DIALOGEX 0, 0, 325, 206 @@ -631,7 +632,7 @@ LEFTMARGIN, 7 RIGHTMARGIN, 284 TOPMARGIN, 7 - BOTTOMMARGIN, 259 + BOTTOMMARGIN, 260 END IDD_SHORTCUTEDIT_DIALOG, DIALOG @@ -951,6 +952,26 @@ END END +IDR_FILTER_TYPE_MENU MENU +BEGIN + POPUP "_FILTER_POPUP_" + BEGIN + MENUITEM "file:\twildcard match against filename", ID_POPUP_FILTER_FILE_WILDCARD + MENUITEM "file:*.jpg\tmatches all jpg files", ID_POPUP_FILTER_FILE_WILDCARD_EXAMPLE + MENUITEM SEPARATOR + MENUITEM "path:\twildcard match against full path", ID_POPUP_FILTER_PATH_WILDCARD + MENUITEM "path:D:\\images\\*\tmatches all files in D:\\images folder", ID_POPUP_FILTER_PATH_WILDCARD_EXAMPLE + MENUITEM SEPARATOR + MENUITEM "rfile:\tECMAScript regex match against filename", ID_POPUP_FILTER_FILE_REGEX + MENUITEM "rfile:[a-z][0-9]+\\.jpg\tmatches jpg files starting with letter and ending with digits", ID_POPUP_FILTER_FILE_REGEX_EXAMPLE + MENUITEM SEPARATOR + MENUITEM "rpath:\tECMAScript regex match against full path", ID_POPUP_FILTER_PATH_REGEX + MENUITEM "rpath:.*\\\\[0-9]+\\\\[^\\\\]+\tmatches all files in directories with all-digit name", ID_POPUP_FILTER_PATH_REGEX_EXAMPLE + MENUITEM SEPARATOR + MENUITEM ";\tfilter separator", ID_POPUP_FILTER_SEPARATOR_CHAR + END +END + IDR_TASK_ADVANCED_MENU MENU BEGIN POPUP "_POPUP_" @@ -1431,7 +1452,56 @@ 0 END +IDD_FILTER_DIALOG DLGINIT +BEGIN + IDC_INCLUDE_MASK_BUTTON, 0x37c, 369, 0 +0x4d3c, 0x4346, 0x7542, 0x7474, 0x6e6f, 0x535f, 0x7974, 0x656c, 0x343e, +0x2f3c, 0x464d, 0x4243, 0x7475, 0x6f74, 0x5f6e, 0x7453, 0x6c79, 0x3e65, +0x4d3c, 0x4346, 0x7542, 0x7474, 0x6e6f, 0x415f, 0x7475, 0x736f, 0x7a69, +0x3e65, 0x4146, 0x534c, 0x3c45, 0x4d2f, 0x4346, 0x7542, 0x7474, 0x6e6f, +0x415f, 0x7475, 0x736f, 0x7a69, 0x3e65, 0x4d3c, 0x4346, 0x7542, 0x7474, +0x6e6f, 0x545f, 0x6f6f, 0x746c, 0x7069, 0x3c3e, 0x4d2f, 0x4346, 0x7542, +0x7474, 0x6e6f, 0x545f, 0x6f6f, 0x746c, 0x7069, 0x3c3e, 0x464d, 0x4243, +0x7475, 0x6f74, 0x5f6e, 0x7546, 0x6c6c, 0x6554, 0x7478, 0x6f54, 0x6c6f, +0x543e, 0x5552, 0x3c45, 0x4d2f, 0x4346, 0x7542, 0x7474, 0x6e6f, 0x465f, +0x6c75, 0x546c, 0x7865, 0x5474, 0x6f6f, 0x3e6c, 0x4d3c, 0x4346, 0x7542, +0x7474, 0x6e6f, 0x435f, 0x7275, 0x6f73, 0x5472, 0x7079, 0x3e65, 0x3131, +0x2f3c, 0x464d, 0x4243, 0x7475, 0x6f74, 0x5f6e, 0x7543, 0x7372, 0x726f, +0x7954, 0x6570, 0x3c3e, 0x464d, 0x4243, 0x7475, 0x6f74, 0x5f6e, 0x6d49, +0x6761, 0x5465, 0x7079, 0x3e65, 0x3c38, 0x4d2f, 0x4346, 0x7542, 0x7474, +0x6e6f, 0x495f, 0x616d, 0x6567, 0x7954, 0x6570, 0x3c3e, 0x464d, 0x4243, +0x7475, 0x6f74, 0x5f6e, 0x6d49, 0x6761, 0x4f65, 0x546e, 0x706f, 0x463e, +0x4c41, 0x4553, 0x2f3c, 0x464d, 0x4243, 0x7475, 0x6f74, 0x5f6e, 0x6d49, +0x6761, 0x4f65, 0x546e, 0x706f, 0x3c3e, 0x464d, 0x4243, 0x7475, 0x6f74, +0x5f6e, 0x6d49, 0x6761, 0x4f65, 0x526e, 0x6769, 0x7468, 0x463e, 0x4c41, +0x4553, 0x2f3c, 0x464d, 0x4243, 0x7475, 0x6f74, 0x5f6e, 0x6d49, 0x6761, +0x4f65, 0x526e, 0x6769, 0x7468, "\076" + IDC_EXCLUDE_MASK_BUTTON, 0x37c, 369, 0 +0x4d3c, 0x4346, 0x7542, 0x7474, 0x6e6f, 0x535f, 0x7974, 0x656c, 0x343e, +0x2f3c, 0x464d, 0x4243, 0x7475, 0x6f74, 0x5f6e, 0x7453, 0x6c79, 0x3e65, +0x4d3c, 0x4346, 0x7542, 0x7474, 0x6e6f, 0x415f, 0x7475, 0x736f, 0x7a69, +0x3e65, 0x4146, 0x534c, 0x3c45, 0x4d2f, 0x4346, 0x7542, 0x7474, 0x6e6f, +0x415f, 0x7475, 0x736f, 0x7a69, 0x3e65, 0x4d3c, 0x4346, 0x7542, 0x7474, +0x6e6f, 0x545f, 0x6f6f, 0x746c, 0x7069, 0x3c3e, 0x4d2f, 0x4346, 0x7542, +0x7474, 0x6e6f, 0x545f, 0x6f6f, 0x746c, 0x7069, 0x3c3e, 0x464d, 0x4243, +0x7475, 0x6f74, 0x5f6e, 0x7546, 0x6c6c, 0x6554, 0x7478, 0x6f54, 0x6c6f, +0x543e, 0x5552, 0x3c45, 0x4d2f, 0x4346, 0x7542, 0x7474, 0x6e6f, 0x465f, +0x6c75, 0x546c, 0x7865, 0x5474, 0x6f6f, 0x3e6c, 0x4d3c, 0x4346, 0x7542, +0x7474, 0x6e6f, 0x435f, 0x7275, 0x6f73, 0x5472, 0x7079, 0x3e65, 0x3131, +0x2f3c, 0x464d, 0x4243, 0x7475, 0x6f74, 0x5f6e, 0x7543, 0x7372, 0x726f, +0x7954, 0x6570, 0x3c3e, 0x464d, 0x4243, 0x7475, 0x6f74, 0x5f6e, 0x6d49, +0x6761, 0x5465, 0x7079, 0x3e65, 0x3c38, 0x4d2f, 0x4346, 0x7542, 0x7474, +0x6e6f, 0x495f, 0x616d, 0x6567, 0x7954, 0x6570, 0x3c3e, 0x464d, 0x4243, +0x7475, 0x6f74, 0x5f6e, 0x6d49, 0x6761, 0x4f65, 0x546e, 0x706f, 0x463e, +0x4c41, 0x4553, 0x2f3c, 0x464d, 0x4243, 0x7475, 0x6f74, 0x5f6e, 0x6d49, +0x6761, 0x4f65, 0x546e, 0x706f, 0x3c3e, 0x464d, 0x4243, 0x7475, 0x6f74, +0x5f6e, 0x6d49, 0x6761, 0x4f65, 0x526e, 0x6769, 0x7468, 0x463e, 0x4c41, +0x4553, 0x2f3c, 0x464d, 0x4243, 0x7475, 0x6f74, 0x5f6e, 0x6d49, 0x6761, +0x4f65, 0x526e, 0x6769, 0x7468, "\076" + 0 +END + ///////////////////////////////////////////////////////////////////////////// // // String Table Index: src/ch/resource.h =================================================================== diff -u -r53e3a91f9bcb2e26f758fc92e9856a69eba71a61 -r31be0106a2d78fd0ddcb735f5351658abe56dc48 --- src/ch/resource.h (.../resource.h) (revision 53e3a91f9bcb2e26f758fc92e9856a69eba71a61) +++ src/ch/resource.h (.../resource.h) (revision 31be0106a2d78fd0ddcb735f5351658abe56dc48) @@ -64,6 +64,7 @@ #define IDD_RULE_EDIT_ALL_DIALOG 234 #define IDR_ERROR_MASS_SKIP_MENU 237 #define IDR_ERROR_MASS_RETRY_MENU 238 +#define IDR_FILTER_TYPE_MENU 244 #define IDC_PROGRAM_STATIC 1000 #define IDC_ADDFILE_BUTTON 1002 #define IDC_STATUS_LIST 1003 @@ -93,7 +94,6 @@ #define IDC_TASK_ADVANCED_BUTTON 1017 #define IDC_PAUSE_BUTTON 1018 #define IDC_STANDARD_CHECK 1019 -#define IDC_CUSTOM_RULES_BUTTON 1035 #define IDC_FORCEDIRECTORIES_CHECK 1020 #define IDC_PAUSE_BUTTON2 1020 #define IDC_RESUME_BUTTON 1021 @@ -117,6 +117,7 @@ #define IDC_TASKPROCESSED_STATIC 1033 #define IDC_TRANSFER_STATIC 1034 #define IDC_TASKTRANSFER_STATIC 1034 +#define IDC_CUSTOM_RULES_BUTTON 1035 #define IDC_OVERALL_PROGRESS_STATIC 1035 #define IDC_GLOBALPROCESSED_STATIC 1035 #define IDC_OVERALL_TRANSFER_STATIC 1036 @@ -376,12 +377,10 @@ #define IDC_EXPORT_BUTTON 1322 #define IDC_BUFFERCOUNT_SPIN 1324 #define IDC_BUFFERCOUNT_EDIT 1325 -#define IDC_COMBO1 1325 #define IDC_UPDATECHANNEL_COMBO 1325 #define IDC_COMBO2 1326 #define IDC_UPDATESFREQ_COMBO 1326 #define IDC_MAXREADAHEAD_EDIT 1326 -#define IDC_LIST1 1327 #define IDC_MAXCONCURRENTREADS_EDIT 1327 #define IDC_MAXCONCURRENTWRITES_EDIT 1328 #define IDC_RICHEDIT21 1329 @@ -463,6 +462,8 @@ #define IDC_AVAILABLE_SPACE_HDR_STATIC 1428 #define IDC_DETAILS_STATIC 1429 #define IDC_FEEDBACK_RULES_SUMMARY_EDIT 1431 +#define IDC_INCLUDE_MASK_BUTTON 1443 +#define IDC_EXCLUDE_MASK_BUTTON 1444 #define IDS_APPNAME_STRING 5000 #define IDS_PRIORITY0_STRING 5001 #define IDS_PRIORITY1_STRING 5002 @@ -839,15 +840,24 @@ #define ID_FEEDBACK_RESUME_WHENFILEBIGGERTHANDESTINATION 32832 #define ID_FEEDBACK_RETRY_WHEN_SAME_ERROR 32833 #define ID_FEEDBACK_SKIP_WHEN_SAME_ERROR 32834 +#define ID_POPUP_FILTER_FILE_WILDCARD 32835 +#define ID_POPUP_FILTER_PATH_WILDCARD 32836 +#define ID_POPUP_FILTER_FILE_REGEX 32837 +#define ID_POPUP_FILTER_PATH_REGEX 32838 +#define ID_POPUP_FILTER_FILE_WILDCARD_EXAMPLE 32844 +#define ID_POPUP_FILTER_PATH_WILDCARD_EXAMPLE 32845 +#define ID_POPUP_FILTER_FILE_REGEX_EXAMPLE 32846 +#define ID_POPUP_FILTER_PATH_REGEX_EXAMPLE 32847 +#define ID_POPUP_FILTER_SEPARATOR_CHAR 32848 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_3D_CONTROLS 1 -#define _APS_NEXT_RESOURCE_VALUE 240 -#define _APS_NEXT_COMMAND_VALUE 32835 -#define _APS_NEXT_CONTROL_VALUE 1432 +#define _APS_NEXT_RESOURCE_VALUE 246 +#define _APS_NEXT_COMMAND_VALUE 32849 +#define _APS_NEXT_CONTROL_VALUE 1444 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif Index: src/libchcore/TStringPatternArray.cpp =================================================================== diff -u -r6d90b96005710c802d5f141b69528e9e87a380c9 -r31be0106a2d78fd0ddcb735f5351658abe56dc48 --- src/libchcore/TStringPatternArray.cpp (.../TStringPatternArray.cpp) (revision 6d90b96005710c802d5f141b69528e9e87a380c9) +++ src/libchcore/TStringPatternArray.cpp (.../TStringPatternArray.cpp) (revision 31be0106a2d78fd0ddcb735f5351658abe56dc48) @@ -49,7 +49,7 @@ void TStringPatternArray::FromString(const TString& strPatterns) { TStringArray arrPatterns; - strPatterns.Split(_T("|"), arrPatterns); + strPatterns.Split(_T(";"), arrPatterns); FromStringArray(arrPatterns); } @@ -80,7 +80,7 @@ strMask = GetAt(0).ToString(); for (size_t stIndex = 1; stIndex < stCount; stIndex++) { - strMask += _T("|") + GetAt(stIndex).ToString(); + strMask += _T(";") + GetAt(stIndex).ToString(); } }