From bfd768b2ecbd15137bc7e6cf4928bb7aaf38d6b6 Mon Sep 17 00:00:00 2001 From: Kimmo Varis Date: Sat, 31 May 2003 10:32:36 +0000 Subject: [PATCH] PATCH: [ 742041 ] Improvements to file/directory filters --- Src/FileFilterMgr.cpp | 31 ++++++++++++++++++++++++------- Src/FileFilterMgr.h | 2 +- Src/Merge.cpp | 2 +- Src/readme.txt | 2 ++ 4 files changed, 28 insertions(+), 9 deletions(-) diff --git a/Src/FileFilterMgr.cpp b/Src/FileFilterMgr.cpp index 85a717154..0a7c53105 100644 --- a/Src/FileFilterMgr.cpp +++ b/Src/FileFilterMgr.cpp @@ -57,18 +57,28 @@ FileFilterMgr::~FileFilterMgr() } // Load -void FileFilterMgr::LoadFromDirectory(LPCTSTR szPattern) +void FileFilterMgr::LoadFromDirectory(LPCTSTR szPattern, LPCTSTR szExt) { DeleteAllFilters(); CFileFind finder; - BOOL bWorking = finder.FindFile(szPattern); - while (bWorking) - { - bWorking = finder.FindNextFile(); + BOOL bWorking = finder.FindFile(szPattern); + int extlen = szExt ? _tcslen(szExt) : 0; + while (bWorking) + { + bWorking = finder.FindNextFile(); if (finder.IsDots() || finder.IsDirectory()) continue; - LoadFilterFile(finder.GetFilePath(), finder.GetFileName()); - } + CString sFilename = finder.GetFileName(); + if (szExt) + { + // caller specified a specific extension + // (This is really a workaround for brokenness in windows, which + // doesn't screen correctly on extension in pattern) + if (sFilename.Right(extlen).CompareNoCase(szExt)) + return; + } + LoadFilterFile(finder.GetFilePath(), sFilename); + } } void FileFilterMgr::DeleteAllFilters() @@ -86,6 +96,13 @@ static void AddFilterPattern(RegList & reglist, CString & str) { str.TrimLeft(); str.MakeUpper(); + LPCTSTR commentLeader = _T(" ##"); + // anything from commentLeader to end of line is a comment + int comment = str.Find(commentLeader); + if (comment >= 0) + { + str = str.Left(comment); + } if (str.IsEmpty()) return; CRegExp * regexp = new CRegExp; if (regexp->RegComp(str)) diff --git a/Src/FileFilterMgr.h b/Src/FileFilterMgr.h index 5e1a744e2..5b8072a8b 100644 --- a/Src/FileFilterMgr.h +++ b/Src/FileFilterMgr.h @@ -28,7 +28,7 @@ private: public: ~FileFilterMgr(); // Reload filter array from specified directory (passed to CFileFind) - void LoadFromDirectory(LPCTSTR szPattern); + void LoadFromDirectory(LPCTSTR szPattern, LPCTSTR szExt); // access to array of filters int GetFilterCount() const { return m_filters.GetSize(); } diff --git a/Src/Merge.cpp b/Src/Merge.cpp index 0c3c8061a..63ae2651e 100644 --- a/Src/Merge.cpp +++ b/Src/Merge.cpp @@ -671,7 +671,7 @@ void CMergeApp::InitializeFileFilters() m_fileFilterMgr = new FileFilterMgr; CString sPattern = GetModulePath() + _T("\\Merge_*.flt"); - m_fileFilterMgr->LoadFromDirectory(sPattern); + m_fileFilterMgr->LoadFromDirectory(sPattern, _T(".flt")); } // fill list with names of known filters diff --git a/Src/readme.txt b/Src/readme.txt index 8f28633cf..b4e932834 100644 --- a/Src/readme.txt +++ b/Src/readme.txt @@ -2,6 +2,8 @@ PATCH: [ 745654 ] Draw long lines WinMerge: MergeEditView.cpp editlib: ccrystaltextview.cpp + PATCH: [ 742041 ] Improvements to file/directory filters + WinMerge: FileFilterMgr.h FileFilterMgr.cpp Merge.cpp 2003-05-29 Christian PATCH: Applied [ 745223 ] Fix pasting different EOL types -- 2.11.0