From 71234725a12544aa00e8ca24ccb739f63fd0b881 Mon Sep 17 00:00:00 2001 From: Don Ho Date: Mon, 20 May 2013 21:56:30 +0000 Subject: [PATCH] [ENHANCEMENT] Add "End Reached" and "Top Reached" status in find/replace dialog StatusBar. Make "Error", "End Reached" and "Top Reached" status visible (flash main window) if find/replace dialog is hidden. git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository/trunk@1047 f5eea248-9336-0410-98b8-ebc06183d4e3 --- PowerEditor/src/NppCommands.cpp | 24 ++++++++++--- .../src/ScitillaComponent/FindReplaceDlg.cpp | 34 +++++++++++++------ 2 files changed, 43 insertions(+), 15 deletions(-) diff --git a/PowerEditor/src/NppCommands.cpp b/PowerEditor/src/NppCommands.cpp index 943a90d87..a63364cab 100644 --- a/PowerEditor/src/NppCommands.cpp +++ b/PowerEditor/src/NppCommands.cpp @@ -510,8 +510,12 @@ void Notepad_plus::command(int id) FindOption op = _findReplaceDlg.getCurrentOptions(); op._whichDirection = (id == IDM_SEARCH_FINDNEXT?DIR_DOWN:DIR_UP); generic_string s = _findReplaceDlg.getText2search(); - - _findReplaceDlg.processFindNext(s.c_str(), &op); + FindStatus status = FSNoMessage; + _findReplaceDlg.processFindNext(s.c_str(), &op, &status); + if (status == FSEndReached) + _findReplaceDlg.setStatusbarMessage(TEXT("Find: Found the 1st occurrence from the top. The end of document has been reached."), FSEndReached); + else if (status == FSTopReached) + _findReplaceDlg.setStatusbarMessage(TEXT("Find: Found the 1st occurrence from the bottom. The begin of document has been reached."), FSTopReached); break; } break; @@ -535,7 +539,12 @@ void Notepad_plus::command(int id) FindOption op = _findReplaceDlg.getCurrentOptions(); op._whichDirection = (id == IDM_SEARCH_SETANDFINDNEXT?DIR_DOWN:DIR_UP); - _findReplaceDlg.processFindNext(str, &op); + FindStatus status = FSNoMessage; + _findReplaceDlg.processFindNext(str, &op, &status); + if (status == FSEndReached) + _findReplaceDlg.setStatusbarMessage(TEXT("Find: Found the 1st occurrence from the top. The end of document has been reached."), FSEndReached); + else if (status == FSTopReached) + _findReplaceDlg.setStatusbarMessage(TEXT("Find: Found the 1st occurrence from the bottom. The begin of document has been reached."), FSTopReached); break; } @@ -568,7 +577,14 @@ void Notepad_plus::command(int id) FindOption op; op._isWholeWord = false; op._whichDirection = (id == IDM_SEARCH_VOLATILE_FINDNEXT?DIR_DOWN:DIR_UP); - _findReplaceDlg.processFindNext(text2Find, &op); + + FindStatus status = FSNoMessage; + _findReplaceDlg.processFindNext(text2Find, &op, &status); + if (status == FSEndReached) + _findReplaceDlg.setStatusbarMessage(TEXT("Find: Found the 1st occurrence from the top. The end of document has been reached."), FSEndReached); + else if (status == FSTopReached) + _findReplaceDlg.setStatusbarMessage(TEXT("Find: Found the 1st occurrence from the bottom. The begin of document has been reached."), FSTopReached); + break; } diff --git a/PowerEditor/src/ScitillaComponent/FindReplaceDlg.cpp b/PowerEditor/src/ScitillaComponent/FindReplaceDlg.cpp index 59ae16172..f1ed30206 100644 --- a/PowerEditor/src/ScitillaComponent/FindReplaceDlg.cpp +++ b/PowerEditor/src/ScitillaComponent/FindReplaceDlg.cpp @@ -694,10 +694,10 @@ BOOL CALLBACK FindReplaceDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lP FindStatus findStatus = FSFound; processFindNext(_options._str2Search.c_str(), _env, &findStatus); - if(findStatus == FSEndReached) - setStatusbarMessage(TEXT("Find: Found the 1st occurrence from the top. The end of document has been reached."), FSMessage); - else if(findStatus == FSTopReached) - setStatusbarMessage(TEXT("Find: Found the 1st occurrence from the bottom. The begin of document has been reached."), FSMessage); + if (findStatus == FSEndReached) + setStatusbarMessage(TEXT("Find: Found the 1st occurrence from the top. The end of document has been reached."), FSEndReached); + else if (findStatus == FSTopReached) + setStatusbarMessage(TEXT("Find: Found the 1st occurrence from the bottom. The begin of document has been reached."), FSTopReached); nppParamInst->_isFindReplacing = false; } @@ -1373,13 +1373,11 @@ bool FindReplaceDlg::processReplace(const TCHAR *txt2find, const TCHAR *txt2repl if (status == FSEndReached) { - setStatusbarMessage(TEXT("Replace: Replaced the 1st occurrence from the top. The end of document has been reached."), FSMessage); - //displayMsgDone = true; + setStatusbarMessage(TEXT("Replace: Replaced the 1st occurrence from the top. The end of document has been reached."), FSEndReached); } else if (status == FSTopReached) { - setStatusbarMessage(TEXT("Replace: Replaced the 1st occurrence from the bottom. The begin of document has been reached."), FSMessage); - //displayMsgDone = true; + setStatusbarMessage(TEXT("Replace: Replaced the 1st occurrence from the bottom. The begin of document has been reached."), FSTopReached); } else { @@ -1973,10 +1971,20 @@ void FindReplaceDlg::setStatusbarMessage(const generic_string & msg, FindStatus if (staus == FSNotFound) { ::MessageBeep(0xFFFFFFFF); - FlashWindow(_hSelf, TRUE); + HWND hwnd2Flash = isVisible()?_hSelf:GetParent(_hSelf); + FlashWindow(hwnd2Flash, TRUE); + } + else if (staus == FSTopReached || staus == FSEndReached) + { + if (!isVisible()) + FlashWindow(::GetParent(_hSelf), TRUE); + } + + if (isVisible()) + { + _statusbarFindStatus = staus; + _statusBar.setOwnerDrawText(msg.c_str()); } - _statusbarFindStatus = staus; - _statusBar.setOwnerDrawText(msg.c_str()); } void FindReplaceDlg::execSavedCommand(int cmd, int intValue, generic_string stringValue) @@ -2311,6 +2319,10 @@ void FindReplaceDlg::drawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { fgColor = RGB(0, 0, 0xFF); // blue } + else if (_statusbarFindStatus == FSTopReached || _statusbarFindStatus == FSEndReached) + { + fgColor = RGB(0, 166, 0); // green + } else if (_statusbarFindStatus == FSNoMessage) { ptStr = TEXT("");