From: Kimmo Varis Date: Sat, 6 Sep 2003 17:17:37 +0000 (+0000) Subject: PATCH: [ 793900 ] Editable file filters - submitted by Perry X-Git-Tag: 2.16.5~7807 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=74cfc1fd5c433ce48f6ed784ee784d953a25ae8f;p=winmerge-jp%2Fwinmerge-jp.git PATCH: [ 793900 ] Editable file filters - submitted by Perry --- diff --git a/Src/FileFilterMgr.cpp b/Src/FileFilterMgr.cpp index 0a7c53105..58b2bbf10 100644 --- a/Src/FileFilterMgr.cpp +++ b/Src/FileFilterMgr.cpp @@ -77,7 +77,8 @@ void FileFilterMgr::LoadFromDirectory(LPCTSTR szPattern, LPCTSTR szExt) if (sFilename.Right(extlen).CompareNoCase(szExt)) return; } - LoadFilterFile(finder.GetFilePath(), sFilename); + FileFilter * pfilter = LoadFilterFile(finder.GetFilePath(), sFilename); + m_filters.Add(pfilter); } } @@ -112,11 +113,11 @@ static void AddFilterPattern(RegList & reglist, CString & str) } // Parse a filter file, and add it to array if valid -void FileFilterMgr::LoadFilterFile(LPCTSTR szFilepath, LPCTSTR szFilename) +FileFilter * FileFilterMgr::LoadFilterFile(LPCTSTR szFilepath, LPCTSTR szFilename) { CStdioFile file; if (!file.Open(szFilepath, CFile::modeRead)) - return; + return NULL; FileFilter *pfilter = new FileFilter; pfilter->fullpath = szFilepath; pfilter->name = szFilename; // default if no name @@ -154,7 +155,7 @@ void FileFilterMgr::LoadFilterFile(LPCTSTR szFilepath, LPCTSTR szFilename) AddFilterPattern(pfilter->dirfilters, str); } } - m_filters.Add(pfilter); + return pfilter; } // Give client back a pointer to the actual filter @@ -204,4 +205,25 @@ BOOL FileFilterMgr::TestDirNameAgainstFilter(FileFilter * pFilter, LPCTSTR szDir CString FileFilterMgr::GetFilterName(int i) { return m_filters[i]->name; +} + +CString FileFilterMgr::GetFullpath(FileFilter * pfilter) const +{ + return pfilter->fullpath; +} + +// Reload filter from disk (by creating a new one to substitute for old one) +void FileFilterMgr::ReloadFilterFromDisk(FileFilter * pfilter) +{ + FileFilter * newfilter = LoadFilterFile(pfilter->fullpath, pfilter->name); + for (int i=0; iGetFilter(szFileFilterName); + if (!filter) + { + ASSERT(0); + return; + } + + CString cmdLine = (CString)_T("notepad ") + m_fileFilterMgr->GetFullpath(filter); + STARTUPINFO stInfo = {0}; + PROCESS_INFORMATION prInfo; + BOOL processSuccess = FALSE; + DWORD exitCode = 0; + stInfo.cb = sizeof(STARTUPINFO); + processSuccess = CreateProcess(NULL, (LPTSTR)(LPCTSTR)cmdLine, NULL, + NULL, FALSE, 0, NULL, NULL, &stInfo, &prInfo); + + if (processSuccess == TRUE) + { + // Wait until process closes down + WaitForSingleObject(prInfo.hProcess, INFINITE); + CloseHandle(prInfo.hThread); + CloseHandle(prInfo.hProcess); + } + + // Reload filter after changing it + m_fileFilterMgr->ReloadFilterFromDisk(filter); + +} + +/** @brief Return TRUE unless we're suppressing this file by filter */ BOOL CMergeApp::includeFile(LPCTSTR szFileName) { if (!m_fileFilterMgr || !m_currentFilter) return TRUE; return m_fileFilterMgr->TestFileNameAgainstFilter(m_currentFilter, szFileName); } +/** @brief Return TRUE unless we're suppressing this directory by filter */ BOOL CMergeApp::includeDir(LPCTSTR szDirName) { if (!m_fileFilterMgr || !m_currentFilter) return TRUE; diff --git a/Src/Merge.h b/Src/Merge.h index b31be9d71..9ec7cb355 100644 --- a/Src/Merge.h +++ b/Src/Merge.h @@ -77,6 +77,7 @@ public: void SetNeedIdleTimer(); CString GetFileFilterName() const { return m_sFileFilterName; } void SetFileFilterName(LPCTSTR szFileFilterName); + void EditFileFilter(LPCTSTR szFileFilterName); void GetFileFilterNameList(CStringList & filefilters, CString & selected) const; // implement file/directory filtering, because app currently holds the filter manager diff --git a/Src/Merge.rc b/Src/Merge.rc index 82a19cd0c..4de2d598c 100644 --- a/Src/Merge.rc +++ b/Src/Merge.rc @@ -1,7 +1,5 @@ //Microsoft Developer Studio generated resource script. // -// $Id$ - #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS @@ -464,8 +462,9 @@ BEGIN EDITTEXT IDC_EDITPATTERN,7,39,221,72,ES_MULTILINE | ES_AUTOHSCROLL | ES_WANTRETURN LTEXT "File filter:",IDC_STATIC,7,128,60,10 - COMBOBOX IDC_FILE_FILTER,81,126,136,63,CBS_DROPDOWNLIST | + COMBOBOX IDC_FILE_FILTER,73,126,117,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Edit",IDC_EDIT_FILE_FILTER,194,126,34,13,WS_DISABLED END IDD_PROPPAGE_COLORS DIALOGEX 0, 0, 235, 156 @@ -1227,7 +1226,6 @@ BEGIN IDS_STATUS_COPYR2L "Copying Right to Left" IDS_STATUS_COPYALL2L "Copying All to Left" IDS_STATUS_COPYALL2R "Copying All to Right" - IDS_STATUSBAR_READONLY "RO" IDS_PROGRAMFILES "Programs|*.exe;*.bat;*.cmd|All Files (*.*)|*.*||" IDS_COLHDR_RSIZE "Right Size" IDS_COLHDR_LTIMEC "Left Creation Time" @@ -1239,6 +1237,18 @@ END STRINGTABLE DISCARDABLE BEGIN + IDS_LEFTONLY "Left Only" + IDS_RIGHTONLY "Right Only" + IDS_COLHDR_RESULT_ABBR "Short Result" + IDS_COLHDR_LATTRIBUTES "Left Attributes" + IDS_COLHDR_RATTRIBUTES "Right Attributes" + IDS_FILE_SKIPPED "File skipped" + IDS_DIR_SKIPPED "Directory skipped" + IDS_STATUSBAR_READONLY "RO" +END + +STRINGTABLE DISCARDABLE +BEGIN IDS_NUM_REPLACED "Replaced %1 string(s)." IDS_EDIT_TEXT_NOT_FOUND "Cannot find string""%s""" IDS_LINE_STATUS_INFO "Line: %s Characters: %d EOL: %s" @@ -1251,17 +1261,6 @@ BEGIN IDC_STATIC_TITLE_RIGHT "Right click on the path to copy" END -STRINGTABLE DISCARDABLE -BEGIN - IDS_LEFTONLY "Left Only" - IDS_RIGHTONLY "Right Only" - IDS_COLHDR_RESULT_ABBR "Short Result" - IDS_COLHDR_LATTRIBUTES "Left Attributes" - IDS_COLHDR_RATTRIBUTES "Right Attributes" - IDS_FILE_SKIPPED "File skipped" - IDS_DIR_SKIPPED "Directory skipped" -END - #endif // English (U.S.) resources ///////////////////////////////////////////////////////////////////////////// diff --git a/Src/PropFilter.cpp b/Src/PropFilter.cpp index c9e236e1d..4401c7c4c 100644 --- a/Src/PropFilter.cpp +++ b/Src/PropFilter.cpp @@ -39,6 +39,7 @@ void CPropFilter::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPropFilter) + DDX_Control(pDX, IDC_EDIT_FILE_FILTER, m_btnEditFileFilter); DDX_Control(pDX, IDC_FILE_FILTER, m_cboFileFilter); DDX_Control(pDX, IDC_EDITPATTERN, m_cPattern); DDX_Check(pDX, IDC_IGNOREREGEXP, m_bIgnoreRegExp); @@ -51,6 +52,7 @@ BEGIN_MESSAGE_MAP(CPropFilter, CPropertyPage) //{{AFX_MSG_MAP(CPropFilter) ON_BN_CLICKED(IDC_IGNOREREGEXP, OnIgnoreregexp) ON_CBN_SELCHANGE(IDC_FILE_FILTER, OnSelchangeFileFilter) + ON_BN_CLICKED(IDC_EDIT_FILE_FILTER, OnEditFileFilter) //}}AFX_MSG_MAP END_MESSAGE_MAP() @@ -71,6 +73,7 @@ BOOL CPropFilter::OnInitDialog() m_cboFileFilter.AddString(name); } m_cboFileFilter.SetCurSel(sel); + m_btnEditFileFilter.EnableWindow(sel!=0); m_cPattern.EnableWindow(m_bIgnoreRegExp); @@ -94,5 +97,19 @@ void CPropFilter::OnSelchangeFileFilter() { m_cboFileFilter.GetWindowText(m_sFileFilterName); if (m_sFileFilterName == _T("")) + { + m_btnEditFileFilter.EnableWindow(FALSE); m_sFileFilterName = _T(""); + } + else + { + m_btnEditFileFilter.EnableWindow(TRUE); + } +} + +void CPropFilter::OnEditFileFilter() +{ + CString filtername; + m_cboFileFilter.GetWindowText(filtername); + theApp.EditFileFilter(filtername); } diff --git a/Src/PropFilter.h b/Src/PropFilter.h index da194624a..1430be0f0 100644 --- a/Src/PropFilter.h +++ b/Src/PropFilter.h @@ -22,6 +22,7 @@ public: // Dialog Data //{{AFX_DATA(CPropFilter) enum { IDD = IDD_PROPPAGE_FILTER }; + CButton m_btnEditFileFilter; CComboBox m_cboFileFilter; CEdit m_cPattern; BOOL m_bIgnoreRegExp; @@ -46,6 +47,7 @@ protected: virtual BOOL OnInitDialog(); afx_msg void OnIgnoreregexp(); afx_msg void OnSelchangeFileFilter(); + afx_msg void OnEditFileFilter(); //}}AFX_MSG DECLARE_MESSAGE_MAP() diff --git a/Src/readme.txt b/Src/readme.txt index 99c18bfb4..a919f79f6 100644 --- a/Src/readme.txt +++ b/Src/readme.txt @@ -1,3 +1,10 @@ +2003-09-06 Kimmo + PATCH: [ 793900 ] Editable file filters + Submitted by Perry + WinMerge: FileFilterMgr.h FileFilterMgr.cpp Merge.h Merge.cpp Merge.rc + PropFilter.h PropFilter.cpp Resource.h + Languages: resource.h *.rc + 2003-09-06 Perry PATCH: [ 800175 ] skip custom draw if comctl32.dll < 4.71 WinMerge: DirView.cpp diff --git a/Src/resource.h b/Src/resource.h index 86b64bc66..bcd9b833c 100644 --- a/Src/resource.h +++ b/Src/resource.h @@ -193,6 +193,7 @@ #define IDC_LIST_HIDE 1058 #define IDC_ADD 1059 #define IDC_REMOVE 1060 +#define IDC_EDIT_FILE_FILTER 1061 #define IDS_NUM_REPLACED 8501 #define IDS_EDIT_TEXT_NOT_FOUND 8502 #define IDS_LINE_STATUS_INFO 8503 @@ -411,7 +412,7 @@ #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 118 #define _APS_NEXT_COMMAND_VALUE 32834 -#define _APS_NEXT_CONTROL_VALUE 1061 +#define _APS_NEXT_CONTROL_VALUE 1062 #define _APS_NEXT_SYMED_VALUE 108 #endif #endif