[NEW_FEATURE] Add hilite all in Incremental search.
git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository@189 f5eea248-9336-0410-98b8-ebc06183d4e3
This commit is contained in:
parent
ef941865d7
commit
1eb46eaca3
@ -7390,6 +7390,12 @@ 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 :
|
||||
@ -8295,7 +8301,36 @@ void Notepad_plus::markSelectedText()
|
||||
return;
|
||||
}
|
||||
}
|
||||
FindOption op;
|
||||
op._isWholeWord = true;
|
||||
_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);
|
||||
}
|
||||
|
||||
|
@ -684,6 +684,7 @@ private:
|
||||
void setFileOpenSaveDlgFilters(FileDialog & fDlg);
|
||||
void reloadOnSwitchBack();
|
||||
void markSelectedText();
|
||||
void markSelectedTextInc(bool enable);
|
||||
|
||||
bool isQualifiedWord(const char *str)
|
||||
{
|
||||
|
@ -963,6 +963,12 @@ int FindReplaceDlg::markAll2(const char *txt2find)
|
||||
return nbFound;
|
||||
}
|
||||
|
||||
int FindReplaceDlg::markAllInc(const char *txt2find)
|
||||
{
|
||||
int nbFound = processAll(ProcessMarkAll_IncSearch, txt2find, NULL, true, NULL);
|
||||
return nbFound;
|
||||
}
|
||||
|
||||
int FindReplaceDlg::processAll(ProcessOperation op, const char *txt2find, const char *txt2replace, bool isEntire, const char *fileName)
|
||||
{
|
||||
int nbReplaced = 0;
|
||||
@ -1017,7 +1023,12 @@ int FindReplaceDlg::processAll(ProcessOperation op, const char *txt2find, const
|
||||
}
|
||||
|
||||
bool isRegExp = pOptions->_searchType == FindRegex;
|
||||
int flags = (op == ProcessMarkAll_2)?SCFIND_WHOLEWORD:Searching::buildSearchFlags(pOptions);
|
||||
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));
|
||||
@ -1187,6 +1198,13 @@ int FindReplaceDlg::processAll(ProcessOperation op, const char *txt2find, const
|
||||
startPosition = (direction == DIR_UP)?posFind - foundTextLen:posFind + foundTextLen;
|
||||
break; }
|
||||
|
||||
case ProcessMarkAll_IncSearch: {
|
||||
(*_ppEditView)->execute(SCI_SETINDICATORCURRENT, SCE_UNIVERSAL_FOUND_STYLE_INC);
|
||||
(*_ppEditView)->execute(SCI_INDICATORFILLRANGE, start, end - start);
|
||||
|
||||
startPosition = (direction == DIR_UP)?posFind - foundTextLen:posFind + foundTextLen;
|
||||
break; }
|
||||
|
||||
case ProcessCountAll: {
|
||||
startPosition = posFind + foundTextLen;
|
||||
break; }
|
||||
@ -1483,6 +1501,7 @@ BOOL CALLBACK FindIncrementDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
|
||||
return TRUE;
|
||||
|
||||
case IDC_INCFINDTEXT :
|
||||
{
|
||||
if (HIWORD(wParam) == EN_CHANGE)
|
||||
{
|
||||
if (_doSearchFromBegin)
|
||||
@ -1491,17 +1510,33 @@ BOOL CALLBACK FindIncrementDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
|
||||
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);
|
||||
}
|
||||
return TRUE;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
case WM_ERASEBKGND:
|
||||
{
|
||||
HWND hParent = ::GetParent(_hSelf);
|
||||
@ -1513,11 +1548,9 @@ BOOL CALLBACK FindIncrementDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
|
||||
LRESULT lResult = SendMessage(hParent, WM_ERASEBKGND,(WPARAM)winDC, 0);
|
||||
::SetWindowOrgEx(winDC, ptOrig.x, ptOrig.y, NULL);
|
||||
return (BOOL)lResult;
|
||||
break; }
|
||||
case WM_SIZE:
|
||||
{
|
||||
//Handle sizing (resize editbox?)
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_MOVE:
|
||||
{
|
||||
::InvalidateRect(_hSelf, NULL, TRUE); //when moving, force background redraw
|
||||
|
@ -57,7 +57,7 @@ struct TargetRange {
|
||||
};
|
||||
|
||||
enum SearchType { FindNormal, FindExtended, FindRegex };
|
||||
enum ProcessOperation { ProcessFindAll, ProcessReplaceAll, ProcessCountAll, ProcessMarkAll, ProcessMarkAll_2 };
|
||||
enum ProcessOperation { ProcessFindAll, ProcessReplaceAll, ProcessCountAll, ProcessMarkAll, ProcessMarkAll_2, ProcessMarkAll_IncSearch };
|
||||
|
||||
struct FindOption {
|
||||
bool _isWholeWord;
|
||||
@ -237,6 +237,7 @@ public :
|
||||
|
||||
int markAll(const char *str2find);
|
||||
int markAll2(const char *str2find);
|
||||
int markAllInc(const char *str2find);
|
||||
|
||||
int processAll(ProcessOperation op, const char *txt2find, const char *txt2replace, bool isEntire = false, const char *fileName = NULL);
|
||||
void replaceAllInOpenedDocs();
|
||||
@ -408,7 +409,7 @@ private :
|
||||
ReBar * _pRebar;
|
||||
REBARBANDINFO _rbBand;
|
||||
|
||||
HWND _hEditBox, _hSearchPrev, _hSearchNext, _hCheckCase;
|
||||
//HWND _hEditBox, _hSearchPrev, _hSearchNext, _hCheckCase, _hCheckHiLiteAll;
|
||||
|
||||
bool _doSearchFromBegin;
|
||||
virtual BOOL CALLBACK run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam);
|
||||
|
@ -79,17 +79,18 @@ BEGIN
|
||||
CONTROL "",IDC_PERCENTAGE_SLIDER,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | NOT WS_VISIBLE | WS_TABSTOP,240,161,53,10
|
||||
END
|
||||
|
||||
IDD_INCREMENT_FIND DIALOGEX 0, 0, 330, 20
|
||||
IDD_INCREMENT_FIND DIALOGEX 0, 0, 400, 20
|
||||
STYLE DS_SYSMODAL | DS_CONTROL | DS_FIXEDSYS | WS_CHILD | WS_CLIPCHILDREN
|
||||
//EXSTYLE WS_EX_TRANSPARENT
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
PUSHBUTTON "X",IDCANCEL,2,3,16,14
|
||||
LTEXT "Find :",IDC_INCSTATIC,20,5,25,12
|
||||
RTEXT "Find :",IDC_INCSTATIC,20,6,25,12
|
||||
EDITTEXT IDC_INCFINDTEXT,45,4,175,12,ES_AUTOHSCROLL | ES_WANTRETURN | NOT WS_BORDER,WS_EX_STATICEDGE
|
||||
PUSHBUTTON "<",IDC_INCFINDPREVOK,223,3,16,14
|
||||
DEFPUSHBUTTON ">",IDC_INCFINDNXTOK,243,3,16,14
|
||||
CONTROL "Match case", IDC_INCFINDMATCHCASE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,270,5,60,12
|
||||
CONTROL "Highlight all", IDC_INCFINDHILITEALL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,270,5,65,12
|
||||
CONTROL "Match case", IDC_INCFINDMATCHCASE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,335,5,60,12
|
||||
END
|
||||
|
||||
IDD_FINDRESULT DIALOGEX 26, 41, 223, 67
|
||||
|
@ -63,6 +63,7 @@
|
||||
#define IDC_INCFINDPREVOK 1683
|
||||
#define IDC_INCFINDNXTOK 1684
|
||||
#define IDC_INCFINDMATCHCASE 1685
|
||||
#define IDC_INCFINDHILITEALL 1686
|
||||
|
||||
#define IDC_TRANSPARENT_CHECK 1686
|
||||
#define IDC_TRANSPARENT_LOSSFOCUS_RADIO 1687
|
||||
|
@ -113,6 +113,7 @@ void ScintillaEditView::init(HINSTANCE hInst, HWND hPere)
|
||||
// smart hilighting
|
||||
execute(SCI_INDICSETSTYLE, SCE_UNIVERSAL_FOUND_STYLE_2, INDIC_ROUNDBOX);
|
||||
execute(SCI_INDICSETSTYLE, SCE_UNIVERSAL_FOUND_STYLE, INDIC_ROUNDBOX);
|
||||
execute(SCI_INDICSETSTYLE, SCE_UNIVERSAL_FOUND_STYLE_INC, INDIC_ROUNDBOX);
|
||||
|
||||
_pParameter = NppParameters::getInstance();
|
||||
|
||||
@ -653,6 +654,14 @@ void ScintillaEditView::defineDocType(LangType typeDoc)
|
||||
|
||||
iFind = stylers.getStylerIndexByID(SCE_UNIVERSAL_FOUND_STYLE_2);
|
||||
if (iFind != -1)
|
||||
{
|
||||
Style & styleFind = stylers.getStyler(iFind);
|
||||
//setSpecialStyle(styleFind);
|
||||
setSpecialIndicator(styleFind);
|
||||
}
|
||||
|
||||
iFind = stylers.getStylerIndexByID(SCE_UNIVERSAL_FOUND_STYLE_INC);
|
||||
if (iFind != -1)
|
||||
{
|
||||
Style & styleFind = stylers.getStyler(iFind);
|
||||
//setSpecialStyle(styleFind);
|
||||
|
@ -284,6 +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)
|
||||
|
||||
// See Notepad_plus_msgs.h
|
||||
//#define NOTEPADPLUS_USER (WM_USER + 1000)
|
||||
|
@ -110,6 +110,8 @@
|
||||
#define SCE_UNIVERSAL_SELECT_STYLE 30
|
||||
#define SCE_UNIVERSAL_FOUND_STYLE 31
|
||||
#define SCE_UNIVERSAL_FOUND_STYLE_2 29
|
||||
#define SCE_UNIVERSAL_FOUND_STYLE_INC 28
|
||||
|
||||
#define SCE_P_DEFAULT 0
|
||||
#define SCE_P_COMMENTLINE 1
|
||||
#define SCE_P_NUMBER 2
|
||||
|
Loading…
Reference in New Issue
Block a user