[NEW_FEATURE] Refine the "HighLight all" feature in incremental search dialog.

git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository@190 f5eea248-9336-0410-98b8-ebc06183d4e3
This commit is contained in:
donho 2008-04-26 03:07:18 +00:00
parent 1eb46eaca3
commit 36706f13a4
5 changed files with 57 additions and 75 deletions

View File

@ -7390,12 +7390,6 @@ LRESULT Notepad_plus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa
return _toReduceTabBar?TRUE:FALSE;
}
case NPPM_INTERNAL_MARKALL :
{
markSelectedTextInc(bool(wParam));
return TRUE;
}
// ADD: success->hwnd; failure->NULL
// REMOVE: success->NULL; failure->hwnd
case NPPM_MODELESSDIALOG :
@ -8304,33 +8298,3 @@ void Notepad_plus::markSelectedText()
_findReplaceDlg.markAll2(text2Find);
}
void Notepad_plus::markSelectedTextInc(bool enable)
{
if (!enable)
{//printStr("out");
_pEditView->clearIndicator(SCE_UNIVERSAL_FOUND_STYLE_INC);
return;
}
//Get selection
CharacterRange range = _pEditView->getSelection();
//Dont mark if the selection has not changed.
if (range.cpMin == _prevSelectedRange.cpMin && range.cpMax == _prevSelectedRange.cpMax)
{
_pEditView->clearIndicator(SCE_UNIVERSAL_FOUND_STYLE_INC);
return;
}
//Clear marks
_pEditView->clearIndicator(SCE_UNIVERSAL_FOUND_STYLE_INC);
//If nothing selected, dont mark anything
if (range.cpMin == range.cpMax)
{
return;
}
char text2Find[MAX_PATH];
_pEditView->getSelectedText(text2Find, sizeof(text2Find), false); //do not expand selection (false)
_findReplaceDlg.markAllInc(text2Find);
}

View File

@ -959,17 +959,20 @@ int FindReplaceDlg::markAll(const char *txt2find)
int FindReplaceDlg::markAll2(const char *txt2find)
{
int nbFound = processAll(ProcessMarkAll_2, txt2find, NULL, true, NULL);
FindOption opt;
opt._isMatchCase = false;
opt._isWholeWord = true;
int nbFound = processAll(ProcessMarkAll_2, txt2find, NULL, true, NULL, &opt);
return nbFound;
}
int FindReplaceDlg::markAllInc(const char *txt2find)
int FindReplaceDlg::markAllInc(const char *txt2find, FindOption *opt)
{
int nbFound = processAll(ProcessMarkAll_IncSearch, txt2find, NULL, true, NULL);
int nbFound = processAll(ProcessMarkAll_IncSearch, txt2find, NULL, true, NULL, opt);
return nbFound;
}
int FindReplaceDlg::processAll(ProcessOperation op, const char *txt2find, const char *txt2replace, bool isEntire, const char *fileName)
int FindReplaceDlg::processAll(ProcessOperation op, const char *txt2find, const char *txt2replace, bool isEntire, const char *fileName, FindOption *opt)
{
int nbReplaced = 0;
@ -982,7 +985,7 @@ int FindReplaceDlg::processAll(ProcessOperation op, const char *txt2find, const
if (!fileName)
fileName = "";
FindOption *pOptions = &_options;
FindOption *pOptions = opt?opt:&_options;
bool isUnicode = (*_ppEditView)->getCurrentBuffer().getUnicodeMode() != uni8Bit;
int stringSizeFind = 0;
@ -1024,12 +1027,12 @@ int FindReplaceDlg::processAll(ProcessOperation op, const char *txt2find, const
bool isRegExp = pOptions->_searchType == FindRegex;
int flags = Searching::buildSearchFlags(pOptions);
/*
if (op == ProcessMarkAll_2)
flags = SCFIND_WHOLEWORD;
else if (op == ProcessMarkAll_IncSearch)
flags ^= SCFIND_WHOLEWORD;
*/
CharacterRange cr = (*_ppEditView)->getSelection();
int docLength = int((*_ppEditView)->execute(SCI_GETLENGTH));
@ -1500,37 +1503,33 @@ BOOL CALLBACK FindIncrementDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
}
return TRUE;
case IDC_INCFINDMATCHCASE:
case IDC_INCFINDTEXT :
{
if (HIWORD(wParam) == EN_CHANGE)
{
if (_doSearchFromBegin)
{
FindOption fo;
fo._isWholeWord = false;
fo._isIncremental = true;
fo._isMatchCase = (BST_CHECKED == ::SendDlgItemMessage(_hSelf, IDC_INCFINDMATCHCASE, BM_GETCHECK, 0, 0));
bool isHiLieAll = (BST_CHECKED == ::SendDlgItemMessage(_hSelf, IDC_INCFINDHILITEALL, BM_GETCHECK, 0, 0));
string str2Search = _pFRDlg->getTextFromCombo(::GetDlgItem(_hSelf, IDC_INCFINDTEXT), isUnicode);
_pFRDlg->processFindNext(str2Search.c_str(), &fo);
if (isHiLieAll)
{
::SendMessage(_hParent, NPPM_INTERNAL_MARKALL, TRUE, 0);
}
}
else
_doSearchFromBegin = true;
}
}
return TRUE;
case IDC_INCFINDHILITEALL :
{
bool isHiLieAll = (BST_CHECKED == ::SendDlgItemMessage(_hSelf, IDC_INCFINDHILITEALL, BM_GETCHECK, 0, 0));
//printStr(isHiLieAll?"yes":"no");
::SendMessage(_hParent, NPPM_INTERNAL_MARKALL, (BOOL)isHiLieAll, 0);
if (_doSearchFromBegin)
{
FindOption fo;
fo._isWholeWord = false;
fo._isIncremental = true;
fo._isMatchCase = (BST_CHECKED == ::SendDlgItemMessage(_hSelf, IDC_INCFINDMATCHCASE, BM_GETCHECK, 0, 0));
string str2Search = _pFRDlg->getTextFromCombo(::GetDlgItem(_hSelf, IDC_INCFINDTEXT), isUnicode);
bool isFound = _pFRDlg->processFindNext(str2Search.c_str(), &fo);
if (!isFound)
{
CharacterRange range = (*(_pFRDlg->_ppEditView))->getSelection();
(*(_pFRDlg->_ppEditView))->execute(SCI_SETSEL, -1, range.cpMin);
}
bool isHiLieAll = (BST_CHECKED == ::SendDlgItemMessage(_hSelf, IDC_INCFINDHILITEALL, BM_GETCHECK, 0, 0));
if (str2Search == "")
isHiLieAll = false;
markSelectedTextInc(isHiLieAll, &fo);
}
else
_doSearchFromBegin = true;
}
return TRUE;
@ -1561,6 +1560,25 @@ BOOL CALLBACK FindIncrementDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
return FALSE;
}
void FindIncrementDlg::markSelectedTextInc(bool enable, FindOption *opt)
{
(*(_pFRDlg->_ppEditView))->clearIndicator(SCE_UNIVERSAL_FOUND_STYLE_INC);
if (!enable)
return;
//Get selection
CharacterRange range = (*(_pFRDlg->_ppEditView))->getSelection();
//If nothing selected, dont mark anything
if (range.cpMin == range.cpMax)
return;
char text2Find[MAX_PATH];
(*(_pFRDlg->_ppEditView))->getSelectedText(text2Find, sizeof(text2Find), false); //do not expand selection (false)
_pFRDlg->markAllInc(text2Find, opt);
}
void FindIncrementDlg::addToRebar(ReBar * rebar) {
if(_pRebar)
return;

View File

@ -237,9 +237,9 @@ public :
int markAll(const char *str2find);
int markAll2(const char *str2find);
int markAllInc(const char *str2find);
int markAllInc(const char *str2find, FindOption *opt);
int processAll(ProcessOperation op, const char *txt2find, const char *txt2replace, bool isEntire = false, const char *fileName = NULL);
int processAll(ProcessOperation op, const char *txt2find, const char *txt2replace, bool isEntire = false, const char *fileName = NULL, FindOption *opt = NULL);
void replaceAllInOpenedDocs();
void findAllIn(InWhat op);
void setSearchText(const char * txt2find, bool isUTF8 = false) {
@ -413,6 +413,7 @@ private :
bool _doSearchFromBegin;
virtual BOOL CALLBACK run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam);
void markSelectedTextInc(bool enable, FindOption *opt = NULL);
};
#endif //FIND_REPLACE_DLG_H

View File

@ -684,7 +684,6 @@ void ScintillaEditView::defineDocType(LangType typeDoc)
{
if (getCurrentBuffer()._unicodeMode == uni8Bit)
execute(SCI_SETCODEPAGE, _codepage);
}
execute(SCI_SETSTYLEBITS, 5);

View File

@ -284,7 +284,7 @@
#define NPPM_INTERNAL_ISTABBARREDUCED (NOTEPADPLUS_USER_INTERNAL + 12)
#define NPPM_INTERNAL_ISFOCUSEDTAB (NOTEPADPLUS_USER_INTERNAL + 13)
#define NPPM_INTERNAL_GETMENU (NOTEPADPLUS_USER_INTERNAL + 14)
#define NPPM_INTERNAL_MARKALL (NOTEPADPLUS_USER_INTERNAL + 15)
//#define NPPM_INTERNAL_MARKALL (NOTEPADPLUS_USER_INTERNAL + 15)
// See Notepad_plus_msgs.h
//#define NOTEPADPLUS_USER (WM_USER + 1000)