diff --git a/PowerEditor/src/Notepad_plus.cpp b/PowerEditor/src/Notepad_plus.cpp index b089c52fa..a16fbd3f7 100644 --- a/PowerEditor/src/Notepad_plus.cpp +++ b/PowerEditor/src/Notepad_plus.cpp @@ -1550,20 +1550,25 @@ bool Notepad_plus::findInFiles() vector fileNames; _findReplaceDlg.putFindResultStr(TEXT("Scanning files to search...")); - _findReplaceDlg.Refresh(); + _findReplaceDlg.refresh(); getMatchedFileNames(dir2Search, patterns2Match, fileNames, isRecursive, isInHiddenDir); TCHAR msg[128]; wsprintf(msg, TEXT("Found %d matching files"), fileNames.size()); _findReplaceDlg.putFindResultStr((const TCHAR*)msg); - _findReplaceDlg.Refresh(); + _findReplaceDlg.refresh(); UINT_PTR pTimer = ::SetTimer(_hSelf, 12614, 500, NULL); bool dontClose = false; for (size_t i = 0 ; i < fileNames.size() ; i++) { + if (!_findReplaceDlg.isFindingInFiles()) + { + break; + } + BufferID id = MainFileManager->getBufferFromName(fileNames.at(i).c_str()); if (id != BUFFER_INVALID) { @@ -1597,7 +1602,8 @@ bool Notepad_plus::findInFiles() wsprintf(msg, TEXT("%d hits"), nbTotal); _findReplaceDlg.putFindResultStr((const TCHAR *)&msg); - _findReplaceDlg.Refresh(); + _findReplaceDlg.refresh(); + _findReplaceDlg.reachEnd(); return true; } @@ -7863,7 +7869,7 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa case WM_TIMER: { - _findReplaceDlg.Refresh(); + _findReplaceDlg.refresh(); } case NPPM_DMMHIDE: diff --git a/PowerEditor/src/ScitillaComponent/FindReplaceDlg.cpp b/PowerEditor/src/ScitillaComponent/FindReplaceDlg.cpp index b6ee4522c..27a47d12e 100644 --- a/PowerEditor/src/ScitillaComponent/FindReplaceDlg.cpp +++ b/PowerEditor/src/ScitillaComponent/FindReplaceDlg.cpp @@ -531,20 +531,14 @@ BOOL CALLBACK FindReplaceDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lP return TRUE; //Single actions - case IDOK : // Find Next + case IDOK : // Find Next : only for FIND_DLG and REPLACE_DLG { bool isUnicode = (*_ppEditView)->getCurrentBuffer()->getUnicodeMode() != uni8Bit; - if ((_currentStatus == FIND_DLG) || (_currentStatus == REPLACE_DLG)) - { - HWND hFindCombo = ::GetDlgItem(_hSelf, IDFINDWHAT); - generic_string str2Search = getTextFromCombo(hFindCombo, isUnicode); - updateCombo(IDFINDWHAT); - processFindNext(str2Search.c_str()); - } - else if (_currentStatus == FINDINFILES_DLG) - { - ::SendMessage(_hSelf, WM_COMMAND, IDD_FINDINFILES_FIND_BUTTON, (LPARAM)_hSelf); - } + + HWND hFindCombo = ::GetDlgItem(_hSelf, IDFINDWHAT); + generic_string str2Search = getTextFromCombo(hFindCombo, isUnicode); + updateCombo(IDFINDWHAT); + processFindNext(str2Search.c_str()); } return TRUE; @@ -574,26 +568,31 @@ BOOL CALLBACK FindReplaceDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lP case IDD_FINDINFILES_FIND_BUTTON : { - if (_currentStatus == FINDINFILES_DLG) - { - const int filterSize = 256; - TCHAR filters[filterSize]; - TCHAR directory[MAX_PATH]; - ::GetDlgItemText(_hSelf, IDD_FINDINFILES_FILTERS_COMBO, filters, filterSize); - addText2Combo(filters, ::GetDlgItem(_hSelf, IDD_FINDINFILES_FILTERS_COMBO)); - _filters = filters; + _isFindingInFiles = true; + showFindInFilesButton(); + const int filterSize = 256; + TCHAR filters[filterSize]; + TCHAR directory[MAX_PATH]; + ::GetDlgItemText(_hSelf, IDD_FINDINFILES_FILTERS_COMBO, filters, filterSize); + addText2Combo(filters, ::GetDlgItem(_hSelf, IDD_FINDINFILES_FILTERS_COMBO)); + _filters = filters; - ::GetDlgItemText(_hSelf, IDD_FINDINFILES_DIR_COMBO, directory, MAX_PATH); - addText2Combo(directory, ::GetDlgItem(_hSelf, IDD_FINDINFILES_DIR_COMBO)); - _directory = directory; - - if ((lstrlen(directory) > 0) && (directory[lstrlen(directory)-1] != '\\')) - _directory += TEXT("\\"); - - updateCombo(IDFINDWHAT); - findAllIn(FILES_IN_DIR); - } + ::GetDlgItemText(_hSelf, IDD_FINDINFILES_DIR_COMBO, directory, MAX_PATH); + addText2Combo(directory, ::GetDlgItem(_hSelf, IDD_FINDINFILES_DIR_COMBO)); + _directory = directory; + if ((lstrlen(directory) > 0) && (directory[lstrlen(directory)-1] != '\\')) + _directory += TEXT("\\"); + + updateCombo(IDFINDWHAT); + findAllIn(FILES_IN_DIR); + } + return TRUE; + + case IDD_FINDINFILES_FINDSTOP_BUTTON : + { + _isFindingInFiles = false; + showFindInFilesButton(); } return TRUE; @@ -1294,7 +1293,7 @@ void FindReplaceDlg::findAllIn(InWhat op) ::SendMessage(_hParent, (op==ALL_OPEN_DOCS)?WM_FINDALL_INOPENEDDOC:WM_FINDINFILES, 0, 0); - Refresh(); + refresh(); } void FindReplaceDlg::putFindResultStr(const TCHAR *text) @@ -1302,7 +1301,7 @@ void FindReplaceDlg::putFindResultStr(const TCHAR *text) wsprintf(_findAllResultStr, TEXT("%s"), text); } -void FindReplaceDlg::Refresh() +void FindReplaceDlg::refresh() { ::SendMessage(_hParent, NPPM_DMMSHOW, 0, (LPARAM)_pFinder->getHSelf()); } @@ -1313,8 +1312,6 @@ void FindReplaceDlg::enableReplaceFunc(bool isEnable) int hideOrShow = isEnable?SW_SHOW:SW_HIDE; RECT *pClosePos = isEnable?&_replaceClosePos:&_findClosePos; - //::EnableWindow(::GetDlgItem(_hSelf, IDD_FINDINFILES_FIND_BUTTON), FALSE); - //::EnableWindow(::GetDlgItem(_hSelf, IDOK), TRUE); enableFindInFilesControls(false); // replce controls @@ -1378,7 +1375,8 @@ void FindReplaceDlg::enableFindInFilesControls(bool isEnable) ::ShowWindow(::GetDlgItem(_hSelf, IDD_FINDINFILES_DIR_STATIC), isEnable?SW_SHOW:SW_HIDE); ::ShowWindow(::GetDlgItem(_hSelf, IDD_FINDINFILES_DIR_COMBO), isEnable?SW_SHOW:SW_HIDE); ::ShowWindow(::GetDlgItem(_hSelf, IDD_FINDINFILES_BROWSE_BUTTON), isEnable?SW_SHOW:SW_HIDE); - ::ShowWindow(::GetDlgItem(_hSelf, IDD_FINDINFILES_FIND_BUTTON), isEnable?SW_SHOW:SW_HIDE); + //::ShowWindow(::GetDlgItem(_hSelf, IDD_FINDINFILES_FIND_BUTTON), isEnable?SW_SHOW:SW_HIDE); + showFindInFilesButton(isEnable); ::ShowWindow(::GetDlgItem(_hSelf, IDD_FINDINFILES_GOBACK_BUTTON), isEnable?SW_SHOW:SW_HIDE); ::ShowWindow(::GetDlgItem(_hSelf, IDD_FINDINFILES_RECURSIVE_CHECK), isEnable?SW_SHOW:SW_HIDE); ::ShowWindow(::GetDlgItem(_hSelf, IDD_FINDINFILES_INHIDDENDIR_CHECK), isEnable?SW_SHOW:SW_HIDE); diff --git a/PowerEditor/src/ScitillaComponent/FindReplaceDlg.h b/PowerEditor/src/ScitillaComponent/FindReplaceDlg.h index 76caf62e2..bdbb2fa9f 100644 --- a/PowerEditor/src/ScitillaComponent/FindReplaceDlg.h +++ b/PowerEditor/src/ScitillaComponent/FindReplaceDlg.h @@ -192,7 +192,7 @@ class FindReplaceDlg : public StaticDialog friend class FindIncrementDlg; public : FindReplaceDlg() : StaticDialog(), _pFinder(NULL), _isRTL(false), _isRecursive(true),_isInHiddenDir(false),\ - _fileNameLenMax(1024) { + _fileNameLenMax(1024), _isFindingInFiles(false) { _uniFileName = new char[(_fileNameLenMax + 3) * 2]; _winVer = (NppParameters::getInstance())->getWinVersion(); }; @@ -274,7 +274,7 @@ public : }; void putFindResultStr(const TCHAR *text); - void Refresh(); + void refresh(); void setSearchWord2Finder(){ generic_string str2Search = getText2search(); @@ -309,8 +309,27 @@ public : const generic_string & getFilters() const {return _filters;}; const generic_string & getDirectory() const {return _directory;}; const FindOption & getCurrentOptions() const {return _options;}; - bool isRecursive() { return _isRecursive; } - bool isInHiddenDir() { return _isInHiddenDir; } + bool isRecursive() const { return _isRecursive; }; + bool isInHiddenDir() const { return _isInHiddenDir; }; + void showFindInFilesButton(bool shouldBeShown = true) { + bool fif, fifStop; + if (shouldBeShown) + { + fif = !_isFindingInFiles; + fifStop = _isFindingInFiles; + } + else + { + fif = fifStop = false; + } + ::ShowWindow(::GetDlgItem(_hSelf, IDD_FINDINFILES_FIND_BUTTON), fif?SW_SHOW:SW_HIDE); + ::ShowWindow(::GetDlgItem(_hSelf, IDD_FINDINFILES_FINDSTOP_BUTTON), fifStop?SW_SHOW:SW_HIDE); + }; + bool isFindingInFiles() const {return _isFindingInFiles;}; + void reachEnd() { + _isFindingInFiles = false; + showFindInFilesButton(); + }; protected : virtual BOOL CALLBACK run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam); @@ -325,6 +344,7 @@ private : bool _doMarkLine; bool _doStyleFoundToken; bool _isInSelection; + bool _isFindingInFiles; RECT _findClosePos, _replaceClosePos, _findInFilesClosePos; diff --git a/PowerEditor/src/ScitillaComponent/FindReplaceDlg.rc b/PowerEditor/src/ScitillaComponent/FindReplaceDlg.rc index a980abfce..9251762d9 100644 --- a/PowerEditor/src/ScitillaComponent/FindReplaceDlg.rc +++ b/PowerEditor/src/ScitillaComponent/FindReplaceDlg.rc @@ -71,6 +71,7 @@ BEGIN PUSHBUTTON "Replace &All",IDREPLACEALL,217,56,90,14, WS_TABSTOP PUSHBUTTON "Replace all in all opened documents",IDC_REPLACE_OPENEDFILES,217,74,90,21,BS_MULTILINE | WS_TABSTOP PUSHBUTTON "Find them all",IDD_FINDINFILES_FIND_BUTTON,217,20,90,14,WS_GROUP + PUSHBUTTON "Stop searching",IDD_FINDINFILES_FINDSTOP_BUTTON,217,20,90,14,WS_GROUP PUSHBUTTON "Close",IDCANCEL,217,99,90,14, WS_TABSTOP GROUPBOX "Transparency",IDC_TRANSPARENT_GRPBOX,227,123,83,49 diff --git a/PowerEditor/src/ScitillaComponent/FindReplaceDlg_rc.h b/PowerEditor/src/ScitillaComponent/FindReplaceDlg_rc.h index 59fcb3925..2a33a5e38 100644 --- a/PowerEditor/src/ScitillaComponent/FindReplaceDlg_rc.h +++ b/PowerEditor/src/ScitillaComponent/FindReplaceDlg_rc.h @@ -56,6 +56,7 @@ #define IDD_FINDINFILES_GOBACK_BUTTON 1657 #define IDD_FINDINFILES_RECURSIVE_CHECK 1658 #define IDD_FINDINFILES_INHIDDENDIR_CHECK 1659 +#define IDD_FINDINFILES_FINDSTOP_BUTTON 1660 #define IDD_FINDRESULT 1670