From be2d57580df26e659ccf0f189c7bcc328edde3a1 Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Fri, 9 Feb 2018 10:22:42 +0100 Subject: [PATCH 1/4] + fix: bug in calculating position for thousand separator --- src/Helpers.c | 41 +++++++++++++++++++++-------------------- src/Notepad3.c | 11 +++++++---- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/src/Helpers.c b/src/Helpers.c index 12448f840..126e6b698 100644 --- a/src/Helpers.c +++ b/src/Helpers.c @@ -1671,32 +1671,33 @@ DWORD_PTR SHGetFileInfo2(LPCWSTR pszPath,DWORD dwFileAttributes, // int FormatNumberStr(LPWSTR lpNumberStr) { - WCHAR *c; - WCHAR szSep[8]; - int i = 0; + static WCHAR szSep[8] = { L'\0' }; + const int iPlace = 3; - if (!lstrlen(lpNumberStr)) - return(0); + if (!lstrlen(lpNumberStr)) { return 0; } - if (!GetLocaleInfo(LOCALE_USER_DEFAULT, - LOCALE_STHOUSAND, - szSep, - COUNTOF(szSep))) - szSep[0] = L'\''; + StrTrim(lpNumberStr, L" \t"); - c = StrEnd(lpNumberStr); + if (lstrlen(lpNumberStr) > iPlace) { - while ((c = CharPrev(lpNumberStr,c)) != lpNumberStr) - { - if (++i == 3) - { - i = 0; - MoveMemory(c+1,c,sizeof(WCHAR)*(lstrlen(c)+1)); - *c = szSep[0]; + if (szSep[0] == L'\0') { + if (!GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_STHOUSAND, + szSep, COUNTOF(szSep))) { + szSep[0] = L'\''; + } + } + + WCHAR* ch = StrEnd(lpNumberStr); + + int i = 0; + while ((ch = CharPrev(lpNumberStr, ch)) != lpNumberStr) { + if (((++i) % iPlace) == 0) { + MoveMemory(ch + 1, ch, sizeof(WCHAR)*(lstrlen(ch) + 1)); + *ch = szSep[0]; + } } } - - return(lstrlen(lpNumberStr)); + return lstrlen(lpNumberStr); } diff --git a/src/Notepad3.c b/src/Notepad3.c index af45ab6b0..d478fc98b 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -6972,6 +6972,8 @@ void UpdateStatusbar() static WCHAR tch2ndDef[32] = { L'\0' }; static WCHAR tchLexerName[128] = { L'\0' }; static WCHAR tchLinesSelected[32] = { L'\0' }; + + static WCHAR tchTmp[32] = { L'\0' }; if (!bShowStatusbar) { return; } @@ -7005,7 +7007,6 @@ void UpdateStatusbar() const int iSel = (int)SendMessage(g_hwndEdit, SCI_COUNTCHARACTERS, iSelStart, iSelEnd); StringCchPrintf(tchSel, COUNTOF(tchSel), L"%i", iSel); FormatNumberStr(tchSel); - StrFormatByteSize((iSelEnd - iSelStart), tchSelB, COUNTOF(tchSelB)); } else { @@ -7018,15 +7019,17 @@ void UpdateStatusbar() { if ((iMarkOccurrencesMaxCount < 0) || (iMarkOccurrencesCount < iMarkOccurrencesMaxCount)) { - StringCchPrintf(tchOcc, COUNTOF(tchOcc), L"%i ", iMarkOccurrencesCount); + StringCchPrintf(tchOcc, COUNTOF(tchOcc), L"%i", iMarkOccurrencesCount); FormatNumberStr(tchOcc); } else { - StringCchPrintf(tchOcc, COUNTOF(tchOcc), L">= %i ", iMarkOccurrencesMaxCount); + StringCchPrintf(tchTmp, COUNTOF(tchTmp), L"%i", iMarkOccurrencesCount); + FormatNumberStr(tchTmp); + StringCchPrintf(tchOcc, COUNTOF(tchOcc), L">= %s", tchTmp); } } else { - StringCchCopy(tchOcc, COUNTOF(tchOcc), L"-- "); + StringCchCopy(tchOcc, COUNTOF(tchOcc), L"--"); } // Print number of selected lines in statusbar From 0136ce173922698edb650d7370b9a5c407785ed4 Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Fri, 9 Feb 2018 11:06:24 +0100 Subject: [PATCH 2/4] + opt: check for Alt-Key down/up to allow drawing rectangular selection in virtual space --- src/Notepad3.c | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/src/Notepad3.c b/src/Notepad3.c index d478fc98b..c84bffb20 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -945,13 +945,7 @@ HWND InitInstance(HINSTANCE hInstance,LPSTR pszCmdLine,int nCmdShow) // LRESULT CALLBACK MainWndProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam) { - if (!bDenyVirtualSpaceAccess) - { - if (GetAsyncKeyState(VK_MENU) & SHRT_MIN) // ALT-KEY DOWN - SendMessage(g_hwndEdit, SCI_SETVIRTUALSPACEOPTIONS, (WPARAM)(SCVS_RECTANGULARSELECTION | SCVS_NOWRAPLINESTART | SCVS_USERACCESSIBLE), 0); - else - SendMessage(g_hwndEdit, SCI_SETVIRTUALSPACEOPTIONS, (WPARAM)SCVS_RECTANGULARSELECTION, 0); - } + static BOOL bAltKeyIsDown = FALSE; switch(umsg) { @@ -970,6 +964,29 @@ LRESULT CALLBACK MainWndProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam) case WM_WINDOWPOSCHANGED: return DefWindowProc(hwnd,umsg,wParam,lParam); + case WM_SYSKEYDOWN: + if (GetAsyncKeyState(VK_MENU) & SHRT_MIN) // ALT-KEY DOWN + { + if (!bAltKeyIsDown) { + bAltKeyIsDown = TRUE; + if (!bDenyVirtualSpaceAccess) { + SendMessage(g_hwndEdit, SCI_SETVIRTUALSPACEOPTIONS, (WPARAM)(SCVS_RECTANGULARSELECTION | SCVS_NOWRAPLINESTART | SCVS_USERACCESSIBLE), 0); + } + } + } + return DefWindowProc(hwnd, umsg, wParam, lParam); + + case WM_SYSKEYUP: + if (!(GetAsyncKeyState(VK_MENU) & SHRT_MIN)) // NOT ALT-KEY DOWN + { + if (bAltKeyIsDown) { + bAltKeyIsDown = FALSE; + SendMessage(g_hwndEdit, SCI_SETVIRTUALSPACEOPTIONS, (WPARAM)SCVS_RECTANGULARSELECTION, 0); + } + } + return DefWindowProc(hwnd, umsg, wParam, lParam); + + case WM_CREATE: return MsgCreate(hwnd,wParam,lParam); From c21bc500aa1554bd01bdaf4ea20378b2db43650d Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Fri, 9 Feb 2018 11:19:54 +0100 Subject: [PATCH 3/4] + fix: handle case: virtual space user access not allowed + opt: use faster method (SCI direct call) to set/reset virtual space access option --- src/Notepad3.c | 4 ++-- src/SciCall.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Notepad3.c b/src/Notepad3.c index c84bffb20..b926f91cc 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -970,7 +970,7 @@ LRESULT CALLBACK MainWndProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam) if (!bAltKeyIsDown) { bAltKeyIsDown = TRUE; if (!bDenyVirtualSpaceAccess) { - SendMessage(g_hwndEdit, SCI_SETVIRTUALSPACEOPTIONS, (WPARAM)(SCVS_RECTANGULARSELECTION | SCVS_NOWRAPLINESTART | SCVS_USERACCESSIBLE), 0); + SciCall_SetVirtualSpaceOptions(SCVS_RECTANGULARSELECTION | SCVS_NOWRAPLINESTART | SCVS_USERACCESSIBLE); } } } @@ -981,7 +981,7 @@ LRESULT CALLBACK MainWndProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam) { if (bAltKeyIsDown) { bAltKeyIsDown = FALSE; - SendMessage(g_hwndEdit, SCI_SETVIRTUALSPACEOPTIONS, (WPARAM)SCVS_RECTANGULARSELECTION, 0); + SciCall_SetVirtualSpaceOptions(bDenyVirtualSpaceAccess ? SCVS_NONE : SCVS_RECTANGULARSELECTION); } } return DefWindowProc(hwnd, umsg, wParam, lParam); diff --git a/src/SciCall.h b/src/SciCall.h index 70fc0f5b8..7dd988ab9 100644 --- a/src/SciCall.h +++ b/src/SciCall.h @@ -136,7 +136,7 @@ DeclareSciCallR1(DocLineFromVisible, DOCLINEFROMVISIBLE, DocLn, DocLn, line); DeclareSciCallR2(GetRangePointer, GETRANGEPOINTER, LPCCH, DocPos, start, DocPos, length); DeclareSciCallR0(GetCharacterPointer, GETCHARACTERPOINTER, LPCCH); - +DeclareSciCallV1(SetVirtualSpaceOptions, SETVIRTUALSPACEOPTIONS, int, options); //============================================================================= // From fa35fe991888ff47d9a0d390b8bb6e2ec8e8845e Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Fri, 9 Feb 2018 11:44:16 +0100 Subject: [PATCH 4/4] + fix: selected default lexer has not been used as default startup lexer ... --- src/Styles.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Styles.c b/src/Styles.c index db503b328..c57272a65 100644 --- a/src/Styles.c +++ b/src/Styles.c @@ -2878,7 +2878,7 @@ static PEDITLEXER g_pLexArray[NUMLEXERS] = // Currently used lexer static int g_iDefaultLexer = 0; -static PEDITLEXER g_pLexCurrent = &lexStandard; // g_pLexArray[g_iDefaultLexer]; +static PEDITLEXER g_pLexCurrent = &lexStandard; static BOOL g_fStylesModified = FALSE; static BOOL g_fWarnedNoIniFile = FALSE; @@ -2920,6 +2920,11 @@ BOOL __fastcall IsStyleSchemeDefault(PEDITSTYLE pStyle) return (pStyle->rid == 63126); } +PEDITLEXER __fastcall GetDefaultLexer() +{ + return g_pLexArray[g_iDefaultLexer]; +} + //============================================================================= // @@ -3185,7 +3190,7 @@ void Style_SetLexer(HWND hwnd, PEDITLEXER pLexNew) { // Select standard if NULL is specified if (!pLexNew) { - pLexNew = GetCurrentStdLexer(); + pLexNew = GetDefaultLexer(); //GetCurrentStdLexer(); } else if (IsLexerStandard(pLexNew)) { pLexNew = Style_GetUse2ndDefault() ? &lexStandard2nd : &lexStandard;