diff --git a/src/Edit.c b/src/Edit.c index b8f39dcdd..f18ea5a55 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -73,6 +73,7 @@ extern bool bFindReplCopySelOrClip; static EDITFINDREPLACE efrSave; static bool bSwitchedFindReplace = false; +static bool bHideNonMatchedLines = false; extern int xFindReplaceDlg; extern int yFindReplaceDlg; @@ -4715,12 +4716,24 @@ static RegExResult_t __fastcall _FindHasMatch(HWND hwnd, LPCEDITFINDREPLACE lpef DocPos end = iTextLength; const DocPos iPos = _FindInTarget(hwnd, szFind, slen, (int)(lpefr->fuFlags), &start, &end, false, FRMOD_IGNORE); + static DocLn lastScrollToLn = -1; + if (bFirstMatchOnly && !bReplaceInitialized) { - if (iPos >= 0) { - EditScrollTo(hwnd, SciCall_LineFromPosition(iPos), true); - } - else { - EditScrollTo(hwnd, SciCall_LineFromPosition(iStart), false); + if (!bHideNonMatchedLines) { + if (iPos >= 0) { + const DocLn scrollToLn = SciCall_LineFromPosition(iPos); + if (scrollToLn != lastScrollToLn) { + EditScrollTo(hwnd, scrollToLn, true); + lastScrollToLn = scrollToLn; + } + } + else { + const DocLn scrollToLn = SciCall_LineFromPosition(iStart); + if (scrollToLn != lastScrollToLn) { + EditScrollTo(hwnd, scrollToLn, false); + lastScrollToLn = scrollToLn; + } + } } } else // mark all matches @@ -4765,7 +4778,6 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA static RegExResult_t regexMatch = INVALID; static bool bFlagsChanged = true; - static bool bHideNonMatchedLines = false; static COLORREF rgbRed = RGB(255, 170, 170); static COLORREF rgbGreen = RGB(170, 255, 170); @@ -5163,10 +5175,14 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA EnableCmd(GetMenu(g_hwndMain), IDM_VIEW_HYPERLINKHOTSPOTS, bHyperlinkHotspot); bFlagsChanged = true; _SetTimerMarkAll(hwnd, 0); - if (bHideNonMatchedLines) + if (bHideNonMatchedLines) { EditScrollTo(g_hwndEdit, 0, false); - else + SendMessage(g_hwndEdit, SCI_SETREADONLY, true, 0); + } + else { EditScrollTo(g_hwndEdit, Sci_GetCurrentLine(), true); + SendMessage(g_hwndEdit, SCI_SETREADONLY, false, 0); + } } break; @@ -6408,12 +6424,10 @@ void EditUpdateUrlHotspots(HWND hwnd, DocPos startPos, DocPos endPos, bool bActi // void EditHideNotMarkedLineRange(HWND hwnd, DocPos iStartPos, DocPos iEndPos, bool bHide) { - static bool bLastState = true; - //UNUSED(hwnd); + UNUSED(hwnd); if (!bHide) { //SendMessage(hwnd, SCI_FOLDALL, (WPARAM)SC_FOLDACTION_EXPAND, 0); - bLastState = bHide; return; } @@ -6442,6 +6456,7 @@ void EditHideNotMarkedLineRange(HWND hwnd, DocPos iStartPos, DocPos iEndPos, boo const int baseLevel = SC_FOLDLEVELBASE; + const int headerLevel = SC_FOLDLEVELBASE | SC_FOLDLEVELHEADERFLAG; const int hiddenLevel = (SC_FOLDLEVELBASE + 1) | SC_FOLDLEVELWHITEFLAG; bool bHdrFlag = false; @@ -6456,7 +6471,7 @@ void EditHideNotMarkedLineRange(HWND hwnd, DocPos iStartPos, DocPos iEndPos, boo } if (bIsHidden) { if (!bHdrFlag) { - SendMessage(hwnd, SCI_SETFOLDLEVEL, (WPARAM)iLine, (LPARAM)(baseLevel | SC_FOLDLEVELHEADERFLAG)); + SendMessage(hwnd, SCI_SETFOLDLEVEL, (WPARAM)iLine, (LPARAM)headerLevel); bHdrFlag = true; } else diff --git a/src/Notepad3.c b/src/Notepad3.c index 6c7c20f62..c64974359 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -2594,11 +2594,6 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam) case IDM_FILE_READONLY: - //bReadOnly = (bReadOnly) ? false : true; - //SendMessage(g_hwndEdit,SCI_SETREADONLY,bReadOnly,0); - //UpdateToolbar(); - //UpdateStatusbar(); - if (StringCchLenW(g_wchCurFile,COUNTOF(g_wchCurFile))) { DWORD dwFileAttributes = GetFileAttributes(g_wchCurFile); diff --git a/src/Notepad3.rc b/src/Notepad3.rc index 7bf54c0f9..d4c800e7f 100644 --- a/src/Notepad3.rc +++ b/src/Notepad3.rc @@ -699,7 +699,7 @@ BEGIN CONTROL "(?)",IDC_BACKSLASHHELP,"SysLink",0x0,106,73,14,10 CONTROL "(?)",IDC_WILDCARDHELP,"SysLink",0x0,191,85,14,10 CONTROL "",IDS_FR_STATUS_TEXT,"Static",SS_LEFTNOWORDWRAP,7,117,259,9,WS_EX_STATICEDGE - PUSHBUTTON "Toggle Visibility",IDC_TOGGLE_VISIBILITY,211,65,55,14 + PUSHBUTTON "Toggle &Visibility",IDC_TOGGLE_VISIBILITY,211,65,55,14 END IDD_REPLACE DIALOGEX 0, 0, 273, 156 @@ -734,7 +734,7 @@ BEGIN CONTROL "(?)",IDC_REGEXPHELP,"SysLink",0x0,107,114,14,10 CONTROL "(?)",IDC_WILDCARDHELP,"SysLink",0x0,191,114,14,10 CONTROL "",IDS_FR_STATUS_TEXT,"Static",SS_LEFTNOWORDWRAP,7,144,259,9,WS_EX_STATICEDGE - PUSHBUTTON "Toggle Visibility",IDC_TOGGLE_VISIBILITY,211,94,55,14 + PUSHBUTTON "Toggle &Visibility",IDC_TOGGLE_VISIBILITY,211,94,55,14 END IDD_RUN DIALOGEX 0, 0, 229, 96 diff --git a/src/Styles.c b/src/Styles.c index 11791be3b..e40bd34eb 100644 --- a/src/Styles.c +++ b/src/Styles.c @@ -125,7 +125,8 @@ enum LexDefaultStyles { STY_BOOK_MARK = 12, STY_MARK_OCC = 13, STY_URL_HOTSPOT = 14, - STY_INVISIBLE = 15 + STY_INVISIBLE = 15, + STY_READONLY = 16 }; @@ -3933,6 +3934,26 @@ void Style_SetInvisible(HWND hwnd, bool bInvisible) +//============================================================================= +// +// Style_GetReadonlyStyleID() +// +int Style_GetReadonlyStyleID() +{ + return (STYLE_LASTPREDEFINED + STY_READONLY); +} + + +//============================================================================= +// +// Style_SetInvisible() +// +void Style_SetReadonly(HWND hwnd, bool bReadonly) +{ + SendMessage(hwnd, SCI_STYLESETCHANGEABLE, Style_GetReadonlyStyleID(), (LPARAM)!bReadonly); +} + + //============================================================================= // // Style_SetLongLineColors() diff --git a/src/Styles.h b/src/Styles.h index 95fee565f..774acd93e 100644 --- a/src/Styles.h +++ b/src/Styles.h @@ -72,6 +72,7 @@ bool Style_Export(HWND); void Style_SetLexer(HWND,PEDITLEXER); void Style_SetUrlHotSpot(HWND, bool); void Style_SetInvisible(HWND, bool); +void Style_SetReadonly(HWND, bool); void Style_SetLongLineColors(HWND); void Style_SetCurrentLineBackground(HWND, bool); void Style_SetFolding(HWND, bool); @@ -118,6 +119,7 @@ INT_PTR CALLBACK Style_SelectLexerDlgProc(HWND,UINT,WPARAM,LPARAM); void Style_SelectLexerDlg(HWND); int Style_GetHotspotStyleID(); int Style_GetInvisibleStyleID(); +int Style_GetReadonlyStyleID(); bool Style_StrGetWeightValue(LPCWSTR,int*); void Style_AppendWeightStr(LPWSTR, int, int);