From 92b3868b160800bc5deb860fe233abab133aeefc Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Tue, 7 Aug 2018 12:10:40 +0200 Subject: [PATCH] + chg: make zero based character count for statusbar configurable + fix: TransformBS handling in Find/Replace dialog + fix: German menu strings + add: replaced pattern counter for statusbar + chg: naming of some global vars --- Build/Notepad3.ini | Bin 5758 -> 5990 bytes language/np3_de_de/menu_de_de.rc | Bin 43396 -> 43414 bytes .../App/DefaultData/settings/Notepad3.ini | Bin 5758 -> 5990 bytes src/Edit.c | 79 ++++---- src/Notepad3.c | 172 +++++++++++------- src/Styles.c | 8 +- src/TypeDefs.h | 2 +- 7 files changed, 146 insertions(+), 115 deletions(-) diff --git a/Build/Notepad3.ini b/Build/Notepad3.ini index 8a310861f0aeca6a52ad7aed63b1f40e0d669ffa..9f5180851fb22d7fbbd48cb9955f872610f9e89c 100644 GIT binary patch delta 247 zcmeyT^Gt8U4z9`DxK7j?F&HrLGH@|iGt@CeF{CmSG2}BiF(fh+1KBAIJ`9-*c|evY zkW2y66%4jO^$HBSKa@{LX#CHb4;E#sbcbjDiI+24_M4(N)?zs zHl+?kZ;qL2z&Ke!jBj#40oUYt(<&w>%;x|r(3oBaXV06)Gx^B$g2^AaL_`%Bk{D7M zG8u9i6d0U?1ZGN1KGUu-IU$H`vRH?RrUHW+Ll#g?2}2bSD=-u@ f6o7RnGh_hiBB0(Fptu`@`Q(q)ikk&ymIwd!#Gf*qiO98Zb_37n;0bI?v=u({d*NYXz}cCd*8(g0gG0gBcPT${11^ z6c~bmWC;*vGUPF&GZX_w{DCY523H0(h6jHK%99^V<(RBBQ(*F$b`89G)foI3 W@)^n*Vt^*PF_^>jZq}NaBLDzEtWqTa diff --git a/np3portableapp/Notepad3Portable/App/DefaultData/settings/Notepad3.ini b/np3portableapp/Notepad3Portable/App/DefaultData/settings/Notepad3.ini index 8a310861f0aeca6a52ad7aed63b1f40e0d669ffa..9f5180851fb22d7fbbd48cb9955f872610f9e89c 100644 GIT binary patch delta 247 zcmeyT^Gt8U4z9`DxK7j?F&HrLGH@|iGt@CeF{CmSG2}BiF(fh+1KBAIJ`9-*c|evY zkW2y66%4jO^$HBSK?@[\\]^`{|}~" // underscore counted as part of word - //WCHAR* W_DELIMITER = bAccelWordNavigation ? W_DelimCharsAccel : W_DelimChars; + //WCHAR* W_DELIMITER = g_bAccelWordNavigation ? W_DelimCharsAccel : W_DelimChars; //#define ISDELIMITER(wc) StrChr(W_DELIMITER,wc) - //WCHAR* W_WHITESPACE = bAccelWordNavigation ? W_WhiteSpaceCharsAccelerated : W_WhiteSpaceCharsDefault; + //WCHAR* W_WHITESPACE = g_bAccelWordNavigation ? W_WhiteSpaceCharsAccelerated : W_WhiteSpaceCharsDefault; //#define ISWHITE(wc) StrChr(W_WHITESPACE,wc) #define ISWHITE(wc) StrChr(L" \t\f",wc) @@ -5016,7 +5016,7 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA //sg_pefrData = (LPEDITFINDREPLACE)lParam; sg_pefrData = (LPEDITFINDREPLACE)GetWindowLongPtr(hwnd, DWLP_USER); - iReplacedOccurrences = 0; + g_iReplacedOccurrences = 0; g_FindReplaceMatchFoundState = FND_NOP; iSaveMarkOcc = bSwitchedFindReplace ? iSaveMarkOcc : g_iMarkOccurrences; @@ -5069,11 +5069,9 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA CheckDlgButton(hwnd, IDC_FINDSTART, BST_CHECKED); if (sg_pefrData->bTransformBS) { - bSaveTFBackSlashes = sg_pefrData->bTransformBS; CheckDlgButton(hwnd, IDC_FINDTRANSFORMBS, BST_CHECKED); } - else - bSaveTFBackSlashes = false; + bSaveTFBackSlashes = sg_pefrData->bTransformBS; if (sg_pefrData->fuFlags & SCFIND_REGEXP) { CheckDlgButton(hwnd, IDC_FINDREGEXP, BST_CHECKED); @@ -5192,7 +5190,7 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA EnableCmd(GetMenu(g_hwndMain), IDM_VIEW_MARKOCCUR_VISIBLE, true); EnableCmd(GetMenu(g_hwndMain), IDM_VIEW_TOGGLE_VIEW, true); - iReplacedOccurrences = 0; + g_iReplacedOccurrences = 0; g_FindReplaceMatchFoundState = FND_NOP; if (EditToggleView(g_hwndEdit, false)) { @@ -5458,13 +5456,14 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA { DialogEnableWindow(hwnd, IDC_DOT_MATCH_ALL, true); CheckDlgButton(hwnd, IDC_WILDCARDSEARCH, BST_UNCHECKED); // Can not use wildcard search together with regexp + CheckDlgButton(hwnd, IDC_FINDTRANSFORMBS, (bSaveTFBackSlashes) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwnd, IDC_FINDTRANSFORMBS, BST_CHECKED); // transform BS handled by regex DialogEnableWindow(hwnd, IDC_FINDTRANSFORMBS, false); } else { // unchecked DialogEnableWindow(hwnd, IDC_DOT_MATCH_ALL, false); DialogEnableWindow(hwnd, IDC_FINDTRANSFORMBS, true); - CheckDlgButton(hwnd, IDC_FINDTRANSFORMBS, (sg_pefrData->bTransformBS) ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(hwnd, IDC_FINDTRANSFORMBS, (bSaveTFBackSlashes) ? BST_CHECKED : BST_UNCHECKED); } _SetSearchFlags(hwnd, sg_pefrData); _DelayMarkAll(hwnd, 0, s_InitialSearchStart); @@ -5480,24 +5479,20 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA { CheckDlgButton(hwnd, IDC_FINDREGEXP, BST_UNCHECKED); DialogEnableWindow(hwnd, IDC_DOT_MATCH_ALL, false); + CheckDlgButton(hwnd, IDC_FINDTRANSFORMBS, (bSaveTFBackSlashes) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwnd, IDC_FINDTRANSFORMBS, BST_CHECKED); // transform BS handled by regex DialogEnableWindow(hwnd, IDC_FINDTRANSFORMBS, false); } else { // unchecked DialogEnableWindow(hwnd, IDC_FINDTRANSFORMBS, true); - CheckDlgButton(hwnd, IDC_FINDTRANSFORMBS, (sg_pefrData->bTransformBS) ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(hwnd, IDC_FINDTRANSFORMBS, (bSaveTFBackSlashes) ? BST_CHECKED : BST_UNCHECKED); } _SetSearchFlags(hwnd, sg_pefrData); _DelayMarkAll(hwnd, 0, s_InitialSearchStart); break; case IDC_FINDTRANSFORMBS: - if (IsDlgButtonChecked(hwnd, IDC_FINDTRANSFORMBS) == BST_CHECKED) { - bSaveTFBackSlashes = true; - } - else { - bSaveTFBackSlashes = false; - } + bSaveTFBackSlashes = (IsDlgButtonChecked(hwnd, IDC_FINDTRANSFORMBS) == BST_CHECKED); _SetSearchFlags(hwnd, sg_pefrData); _DelayMarkAll(hwnd, 0, s_InitialSearchStart); break; @@ -5521,7 +5516,7 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA case IDC_REPLACE: case IDC_REPLACEALL: case IDC_REPLACEINSEL: - iReplacedOccurrences = 0; + g_iReplacedOccurrences = 0; case IDOK: case IDC_FINDPREV: case IDACC_SELTONEXT: @@ -6024,10 +6019,10 @@ void EditMarkAllOccurrences(HWND hwnd, bool bForceClear) // !!! don't clear all marks, else this method is re-called // !!! on UpdateUI notification on drawing indicator mark - EditMarkAll(hwnd, NULL, bMarkOccurrencesCurrentWord, iPosStart, iPosEnd, bMarkOccurrencesMatchCase, bMarkOccurrencesMatchWords); + EditMarkAll(hwnd, NULL, g_bMarkOccurrencesCurrentWord, iPosStart, iPosEnd, g_bMarkOccurrencesMatchCase, g_bMarkOccurrencesMatchWords); } else { - EditMarkAll(hwnd, NULL, bMarkOccurrencesCurrentWord, 0, Sci_GetDocEndPosition(), bMarkOccurrencesMatchCase, bMarkOccurrencesMatchWords); + EditMarkAll(hwnd, NULL, g_bMarkOccurrencesCurrentWord, 0, Sci_GetDocEndPosition(), g_bMarkOccurrencesMatchCase, g_bMarkOccurrencesMatchWords); } _LEAVE_TARGET_TRANSACTION_; @@ -6106,7 +6101,7 @@ bool EditReplace(HWND hwnd, LPCEDITFINDREPLACE lpefr) { DocPos start = (SciCall_IsSelectionEmpty() ? SciCall_GetCurrentPos() : SciCall_GetSelectionStart()); DocPos end = SciCall_GetTextLength(); DocPos _start = start; - iReplacedOccurrences = 0; + g_iReplacedOccurrences = 0; const DocPos iPos = _FindInTarget(hwnd, lpefr->szFind, StringCchLenA(lpefr->szFind, FRMOD_NORM), (int)(lpefr->fuFlags), &start, &end, false, false); @@ -6125,7 +6120,7 @@ bool EditReplace(HWND hwnd, LPCEDITFINDREPLACE lpefr) { } } } - iReplacedOccurrences = 1; + g_iReplacedOccurrences = 1; _ENTER_TARGET_TRANSACTION_; @@ -6258,17 +6253,17 @@ bool EditReplaceAll(HWND hwnd, LPCEDITFINDREPLACE lpefr, bool bShowInfo) DocPos enlargement = 0; BeginWaitCursor(NULL); - iReplacedOccurrences = EditReplaceAllInRange(hwnd, lpefr, start, end, &enlargement); + g_iReplacedOccurrences = EditReplaceAllInRange(hwnd, lpefr, start, end, &enlargement); EndWaitCursor(); if (bShowInfo) { - if (iReplacedOccurrences > 0) - InfoBoxLng(0, L"MsgReplaceCount", IDS_MUI_REPLCOUNT, iReplacedOccurrences); + if (g_iReplacedOccurrences > 0) + InfoBoxLng(0, L"MsgReplaceCount", IDS_MUI_REPLCOUNT, g_iReplacedOccurrences); else InfoBoxLng(0, L"MsgNotFound", IDS_MUI_NOTFOUND); } - return (iReplacedOccurrences > 0) ? true : false; + return (g_iReplacedOccurrences > 0) ? true : false; } @@ -6293,10 +6288,10 @@ bool EditReplaceAllInSelection(HWND hwnd, LPCEDITFINDREPLACE lpefr, bool bShowIn bool const bWaitCursor = ((end - start) > (512 * 512)) ? true : false; if (bWaitCursor) { BeginWaitCursor(NULL); } - iReplacedOccurrences = EditReplaceAllInRange(hwnd, lpefr, start, end, &enlargement); + g_iReplacedOccurrences = EditReplaceAllInRange(hwnd, lpefr, start, end, &enlargement); if (bWaitCursor) { EndWaitCursor(); } - if (iReplacedOccurrences > 0) + if (g_iReplacedOccurrences > 0) { if (currPos < anchorPos) SciCall_SetSel(anchorPos + enlargement, currPos); @@ -6304,15 +6299,15 @@ bool EditReplaceAllInSelection(HWND hwnd, LPCEDITFINDREPLACE lpefr, bool bShowIn SciCall_SetSel(anchorPos, currPos + enlargement); if (bShowInfo) { - if (iReplacedOccurrences > 0) - InfoBoxLng(0, L"MsgReplaceCount", IDS_MUI_REPLCOUNT, iReplacedOccurrences); + if (g_iReplacedOccurrences > 0) + InfoBoxLng(0, L"MsgReplaceCount", IDS_MUI_REPLCOUNT, g_iReplacedOccurrences); else InfoBoxLng(0, L"MsgNotFound", IDS_MUI_NOTFOUND); } } _END_UNDO_ACTION_; - return (iReplacedOccurrences > 0) ? true : false; + return (g_iReplacedOccurrences > 0) ? true : false; } @@ -6442,7 +6437,7 @@ void EditMarkAll(HWND hwnd, char* pszFind, int flags, DocPos rangeStart, DocPos // exit if selection is not a word and Match whole words only is enabled if (bMatchWords) { DocPos iSelStart2 = 0; - const char* delims = (bAccelWordNavigation ? DelimCharsAccel : DelimChars); + const char* delims = (g_bAccelWordNavigation ? DelimCharsAccel : DelimChars); while ((iSelStart2 <= iSelCount) && pszText[iSelStart2]) { if (StrChrIA(delims, pszText[iSelStart2])) { return; @@ -6511,7 +6506,7 @@ void EditCompleteWord(HWND hwnd, bool autoInsert) char const * ALLOWED_WORD_CHARS = AutoCompleteWordASCII; if (ALLOWED_WORD_CHARS[0] == '\0') { - ALLOWED_WORD_CHARS = bAccelWordNavigation ? WordCharsAccelerated : WordCharsDefault; + ALLOWED_WORD_CHARS = g_bAccelWordNavigation ? WordCharsAccelerated : WordCharsDefault; } DocPos const iCurrentPos = SciCall_GetCurrentPos(); @@ -6800,7 +6795,7 @@ static bool __fastcall _HighlightIfBrace(HWND hwnd, DocPos iPos) // clear indicator SendMessage(hwnd, SCI_BRACEBADLIGHT, (WPARAM)INVALID_POSITION, 0); SendMessage(hwnd, SCI_SETHIGHLIGHTGUIDE, 0, 0); - if (!bUseOldStyleBraceMatching) + if (!g_bUseOldStyleBraceMatching) SendMessage(hwnd, SCI_BRACEBADLIGHTINDICATOR, 0, INDIC_NP3_BAD_BRACE); return true; } @@ -6814,14 +6809,14 @@ static bool __fastcall _HighlightIfBrace(HWND hwnd, DocPos iPos) DocPos col2 = SciCall_GetColumn(iBrace2); SendMessage(hwnd, SCI_BRACEHIGHLIGHT, iPos, iBrace2); SendMessage(hwnd, SCI_SETHIGHLIGHTGUIDE, min(col1, col2), 0); - if (!bUseOldStyleBraceMatching) { + if (!g_bUseOldStyleBraceMatching) { SendMessage(hwnd, SCI_BRACEHIGHLIGHTINDICATOR, 1, INDIC_NP3_MATCH_BRACE); } } else { SendMessage(hwnd, SCI_BRACEBADLIGHT, iPos, 0); SendMessage(hwnd, SCI_SETHIGHLIGHTGUIDE, 0, 0); - if (!bUseOldStyleBraceMatching) { + if (!g_bUseOldStyleBraceMatching) { SendMessage(hwnd, SCI_BRACEBADLIGHTINDICATOR, 1, INDIC_NP3_BAD_BRACE); } } @@ -7649,9 +7644,9 @@ bool EditSortDlg(HWND hwnd,int* piSortFlags) // void EditSetAccelWordNav(HWND hwnd,bool bAccelWordNav) { - bAccelWordNavigation = bAccelWordNav; + g_bAccelWordNavigation = bAccelWordNav; - if (bAccelWordNavigation) { + if (g_bAccelWordNavigation) { SendMessage(hwnd, SCI_SETWORDCHARS, 0, (LPARAM)WordCharsAccelerated); SendMessage(hwnd, SCI_SETWHITESPACECHARS, 0,(LPARAM)WhiteSpaceCharsAccelerated); SendMessage(hwnd, SCI_SETPUNCTUATIONCHARS,0,(LPARAM)PunctuationCharsAccelerated); diff --git a/src/Notepad3.c b/src/Notepad3.c index 43c2e48ff..c633fa21e 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -189,25 +189,27 @@ int g_iTabWidth; int iTabWidthG; int g_iIndentWidth; int iIndentWidthG; -bool bMarkLongLines; +bool g_bMarkLongLines; int g_iLongLinesLimit; int iLongLinesLimitG; int iLongLineMode; int iWrapCol = 0; bool g_bShowSelectionMargin; -bool bShowLineNumbers; -int iReplacedOccurrences; +bool g_bShowLineNumbers; +bool g_bZeroBasedColumnIndex; +bool g_bZeroBasedCharacterCount; +int g_iReplacedOccurrences; int g_iMarkOccurrences; int g_iMarkOccurrencesCount; int g_iMarkOccurrencesMaxCount; bool g_bMarkOccurrencesMatchVisible; -bool bMarkOccurrencesMatchCase; -bool bMarkOccurrencesMatchWords; -bool bMarkOccurrencesCurrentWord; -bool bUseOldStyleBraceMatching; -bool bAutoCompleteWords; -bool bAccelWordNavigation; -bool bDenyVirtualSpaceAccess; +bool g_bMarkOccurrencesMatchCase; +bool g_bMarkOccurrencesMatchWords; +bool g_bMarkOccurrencesCurrentWord; +bool g_bUseOldStyleBraceMatching; +bool g_bAutoCompleteWords; +bool g_bAccelWordNavigation; +bool g_bDenyVirtualSpaceAccess; bool g_bCodeFoldingAvailable; bool g_bShowCodeFolding; bool bViewWhiteSpace; @@ -1297,7 +1299,7 @@ HWND InitInstance(HINSTANCE hInstance,LPSTR pszCmdLine,int nCmdShow) if (g_flagStartAsTrayIcon) SetNotifyIconTitle(g_hwndMain); - iReplacedOccurrences = 0; + g_iReplacedOccurrences = 0; g_iMarkOccurrencesCount = (g_iMarkOccurrences > 0) ? 0 : -1; UpdateToolbar(); @@ -1369,7 +1371,7 @@ LRESULT CALLBACK MainWndProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam) { if (!bAltKeyIsDown) { bAltKeyIsDown = true; - if (!bDenyVirtualSpaceAccess) { + if (!g_bDenyVirtualSpaceAccess) { SciCall_SetVirtualSpaceOptions(SCVS_RECTANGULARSELECTION | SCVS_NOWRAPLINESTART | SCVS_USERACCESSIBLE); } } @@ -1381,7 +1383,7 @@ LRESULT CALLBACK MainWndProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam) { if (bAltKeyIsDown) { bAltKeyIsDown = false; - SciCall_SetVirtualSpaceOptions(bDenyVirtualSpaceAccess ? SCVS_NONE : SCVS_RECTANGULARSELECTION); + SciCall_SetVirtualSpaceOptions(g_bDenyVirtualSpaceAccess ? SCVS_NONE : SCVS_RECTANGULARSELECTION); } } return DefWindowProc(hwnd, umsg, wParam, lParam); @@ -1389,7 +1391,7 @@ LRESULT CALLBACK MainWndProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam) case WM_KILLFOCUS: if (bAltKeyIsDown) { bAltKeyIsDown = false; - SciCall_SetVirtualSpaceOptions(bDenyVirtualSpaceAccess ? SCVS_NONE : SCVS_RECTANGULARSELECTION); + SciCall_SetVirtualSpaceOptions(g_bDenyVirtualSpaceAccess ? SCVS_NONE : SCVS_RECTANGULARSELECTION); } return DefWindowProc(hwnd, umsg, wParam, lParam); @@ -1663,7 +1665,7 @@ static void __fastcall _InitializeSciEditCtrl(HWND hwndEditCtrl) else SendMessage(hwndEditCtrl, SCI_SETYCARETPOLICY, (WPARAM)(_CARET_SYMETRY), 0); - SendMessage(hwndEditCtrl, SCI_SETVIRTUALSPACEOPTIONS, (WPARAM)(bDenyVirtualSpaceAccess ? SCVS_NONE : SCVS_RECTANGULARSELECTION), 0); + SendMessage(hwndEditCtrl, SCI_SETVIRTUALSPACEOPTIONS, (WPARAM)(g_bDenyVirtualSpaceAccess ? SCVS_NONE : SCVS_RECTANGULARSELECTION), 0); SendMessage(hwndEditCtrl, SCI_SETENDATLASTLINE, (WPARAM)((bScrollPastEOF) ? 0 : 1), 0); // Tabs @@ -1680,7 +1682,7 @@ static void __fastcall _InitializeSciEditCtrl(HWND hwndEditCtrl) _SetWordWrapping(hwndEditCtrl); // Long Lines - if (bMarkLongLines) + if (g_bMarkLongLines) SendMessage(hwndEditCtrl, SCI_SETEDGEMODE, (iLongLineMode == EDGE_LINE) ? EDGE_LINE : EDGE_BACKGROUND, 0); else SendMessage(hwndEditCtrl, SCI_SETEDGEMODE, EDGE_NONE, 0); @@ -1696,7 +1698,7 @@ static void __fastcall _InitializeSciEditCtrl(HWND hwndEditCtrl) // word delimiter handling EditInitWordDelimiter(hwndEditCtrl); - EditSetAccelWordNav(hwndEditCtrl, bAccelWordNavigation); + EditSetAccelWordNav(hwndEditCtrl, g_bAccelWordNavigation); // Init default values for printing EditPrintInit(); @@ -2843,28 +2845,28 @@ void MsgInitMenu(HWND hwnd,WPARAM wParam,LPARAM lParam) CheckCmd(hmenu,IDM_VIEW_USE2NDDEFAULT,Style_GetUse2ndDefault()); CheckCmd(hmenu,IDM_VIEW_WORDWRAP,g_bWordWrap); - CheckCmd(hmenu,IDM_VIEW_LONGLINEMARKER,bMarkLongLines); + CheckCmd(hmenu,IDM_VIEW_LONGLINEMARKER,g_bMarkLongLines); CheckCmd(hmenu,IDM_VIEW_TABSASSPACES,g_bTabsAsSpaces); CheckCmd(hmenu,IDM_VIEW_SHOWINDENTGUIDES,bShowIndentGuides); CheckCmd(hmenu,IDM_VIEW_AUTOINDENTTEXT,bAutoIndent); - CheckCmd(hmenu,IDM_VIEW_LINENUMBERS,bShowLineNumbers); + CheckCmd(hmenu,IDM_VIEW_LINENUMBERS,g_bShowLineNumbers); CheckCmd(hmenu,IDM_VIEW_MARGIN,g_bShowSelectionMargin); CheckCmd(hmenu,IDM_VIEW_CHASING_DOCTAIL, g_bChasingDocTail); EnableCmd(hmenu,IDM_EDIT_COMPLETEWORD,!e && !ro); - CheckCmd(hmenu,IDM_VIEW_AUTOCOMPLETEWORDS,bAutoCompleteWords && !ro); - CheckCmd(hmenu,IDM_VIEW_ACCELWORDNAV,bAccelWordNavigation); + CheckCmd(hmenu,IDM_VIEW_AUTOCOMPLETEWORDS,g_bAutoCompleteWords && !ro); + CheckCmd(hmenu,IDM_VIEW_ACCELWORDNAV,g_bAccelWordNavigation); CheckCmd(hmenu, IDM_VIEW_MARKOCCUR_ONOFF, (g_iMarkOccurrences > 0)); CheckCmd(hmenu, IDM_VIEW_MARKOCCUR_VISIBLE, g_bMarkOccurrencesMatchVisible); - CheckCmd(hmenu, IDM_VIEW_MARKOCCUR_CASE, bMarkOccurrencesMatchCase); + CheckCmd(hmenu, IDM_VIEW_MARKOCCUR_CASE, g_bMarkOccurrencesMatchCase); EnableCmd(hmenu, IDM_VIEW_TOGGLE_VIEW, (g_iMarkOccurrences > 0) && !g_bMarkOccurrencesMatchVisible); CheckCmd(hmenu, IDM_VIEW_TOGGLE_VIEW, EditToggleView(g_hwndEdit, false)); - if (bMarkOccurrencesMatchWords) + if (g_bMarkOccurrencesMatchWords) i = IDM_VIEW_MARKOCCUR_WORD; - else if (bMarkOccurrencesCurrentWord) + else if (g_bMarkOccurrencesCurrentWord) i = IDM_VIEW_MARKOCCUR_CURRENT; else i = IDM_VIEW_MARKOCCUR_WNONE; @@ -4611,8 +4613,8 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam) case IDM_VIEW_LONGLINEMARKER: - bMarkLongLines = (bMarkLongLines) ? false: true; - if (bMarkLongLines) { + g_bMarkLongLines = (g_bMarkLongLines) ? false: true; + if (g_bMarkLongLines) { SendMessage(g_hwndEdit,SCI_SETEDGEMODE,(iLongLineMode == EDGE_LINE)?EDGE_LINE:EDGE_BACKGROUND,0); Style_SetLongLineColors(g_hwndEdit); } @@ -4626,7 +4628,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam) case IDM_VIEW_LONGLINESETTINGS: if (LongLineSettingsDlg(hwnd,IDD_MUI_LONGLINES,&g_iLongLinesLimit)) { - bMarkLongLines = true; + g_bMarkLongLines = true; SendMessage(g_hwndEdit, SCI_SETEDGEMODE, (iLongLineMode == EDGE_LINE) ? EDGE_LINE : EDGE_BACKGROUND, 0); Style_SetLongLineColors(g_hwndEdit); g_iLongLinesLimit = max(min(g_iLongLinesLimit,4096),0); @@ -4685,7 +4687,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam) case IDM_VIEW_LINENUMBERS: - bShowLineNumbers = (bShowLineNumbers) ? false : true; + g_bShowLineNumbers = (g_bShowLineNumbers) ? false : true; UpdateLineNumberWidth(); break; @@ -4697,14 +4699,14 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam) break; case IDM_VIEW_AUTOCOMPLETEWORDS: - bAutoCompleteWords = (bAutoCompleteWords) ? false : true; // toggle - if (!bAutoCompleteWords) + g_bAutoCompleteWords = (g_bAutoCompleteWords) ? false : true; // toggle + if (!g_bAutoCompleteWords) SendMessage(g_hwndEdit, SCI_AUTOCCANCEL, 0, 0); // close the auto completion list break; case IDM_VIEW_ACCELWORDNAV: - bAccelWordNavigation = (bAccelWordNavigation) ? false : true; // toggle - EditSetAccelWordNav(g_hwndEdit,bAccelWordNavigation); + g_bAccelWordNavigation = (g_bAccelWordNavigation) ? false : true; // toggle + EditSetAccelWordNav(g_hwndEdit,g_bAccelWordNavigation); MarkAllOccurrences(iUpdateDelayMarkAllCoccurrences, true); break; @@ -4733,25 +4735,25 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam) break; case IDM_VIEW_MARKOCCUR_CASE: - bMarkOccurrencesMatchCase = (bMarkOccurrencesMatchCase) ? false : true; + g_bMarkOccurrencesMatchCase = (g_bMarkOccurrencesMatchCase) ? false : true; MarkAllOccurrences(iUpdateDelayMarkAllCoccurrences, true); break; case IDM_VIEW_MARKOCCUR_WNONE: - bMarkOccurrencesMatchWords = false; - bMarkOccurrencesCurrentWord = false; + g_bMarkOccurrencesMatchWords = false; + g_bMarkOccurrencesCurrentWord = false; MarkAllOccurrences(iUpdateDelayMarkAllCoccurrences, true); break; case IDM_VIEW_MARKOCCUR_WORD: - bMarkOccurrencesMatchWords = true; - bMarkOccurrencesCurrentWord = false; + g_bMarkOccurrencesMatchWords = true; + g_bMarkOccurrencesCurrentWord = false; MarkAllOccurrences(iUpdateDelayMarkAllCoccurrences, true); break; case IDM_VIEW_MARKOCCUR_CURRENT: - bMarkOccurrencesMatchWords = false; - bMarkOccurrencesCurrentWord = true; + g_bMarkOccurrencesMatchWords = false; + g_bMarkOccurrencesCurrentWord = true; MarkAllOccurrences(iUpdateDelayMarkAllCoccurrences, true); break; @@ -5446,7 +5448,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam) case CMD_INCLINELIMIT: case CMD_DECLINELIMIT: - if (!bMarkLongLines) + if (!g_bMarkLongLines) SendMessage(hwnd,WM_COMMAND,MAKELONG(IDM_VIEW_LONGLINEMARKER,1),0); else { if (LOWORD(wParam) == CMD_INCLINELIMIT) @@ -6191,7 +6193,7 @@ LRESULT MsgNotify(HWND hwnd,WPARAM wParam,LPARAM lParam) } } } - else if (bAutoCompleteWords && !SendMessage(g_hwndEdit, SCI_AUTOCACTIVE, 0, 0)) { + else if (g_bAutoCompleteWords && !SendMessage(g_hwndEdit, SCI_AUTOCACTIVE, 0, 0)) { EditCompleteWord(g_hwndEdit, false); } } @@ -6507,9 +6509,9 @@ void LoadSettings() bAutoIndent = IniSectionGetBool(pIniSection,L"AutoIndent",true); - bAutoCompleteWords = IniSectionGetBool(pIniSection,L"AutoCompleteWords",false); + g_bAutoCompleteWords = IniSectionGetBool(pIniSection,L"AutoCompleteWords",false); - bAccelWordNavigation = IniSectionGetBool(pIniSection, L"AccelWordNavigation", false); + g_bAccelWordNavigation = IniSectionGetBool(pIniSection, L"AccelWordNavigation", false); bShowIndentGuides = IniSectionGetBool(pIniSection,L"ShowIndentGuides",false); @@ -6529,7 +6531,7 @@ void LoadSettings() g_iIndentWidth = max(min(g_iIndentWidth,256),0); iIndentWidthG = g_iIndentWidth; - bMarkLongLines = IniSectionGetBool(pIniSection,L"MarkLongLines",true); + g_bMarkLongLines = IniSectionGetBool(pIniSection,L"MarkLongLines",true); g_iLongLinesLimit = IniSectionGetInt(pIniSection,L"LongLinesLimit",80); g_iLongLinesLimit = max(min(g_iLongLinesLimit,4096),0); @@ -6540,17 +6542,17 @@ void LoadSettings() g_bShowSelectionMargin = IniSectionGetBool(pIniSection,L"ShowSelectionMargin",false); - bShowLineNumbers = IniSectionGetBool(pIniSection,L"ShowLineNumbers", true); + g_bShowLineNumbers = IniSectionGetBool(pIniSection,L"ShowLineNumbers", true); g_bShowCodeFolding = IniSectionGetBool(pIniSection,L"ShowCodeFolding", true); g_iMarkOccurrences = IniSectionGetInt(pIniSection,L"MarkOccurrences",1); g_iMarkOccurrences = max(min(g_iMarkOccurrences, 3), 0); g_bMarkOccurrencesMatchVisible = IniSectionGetBool(pIniSection, L"MarkOccurrencesMatchVisible", false); - bMarkOccurrencesMatchCase = IniSectionGetBool(pIniSection,L"MarkOccurrencesMatchCase",false); - bMarkOccurrencesMatchWords = IniSectionGetBool(pIniSection,L"MarkOccurrencesMatchWholeWords",true); - bMarkOccurrencesCurrentWord = IniSectionGetBool(pIniSection, L"MarkOccurrencesCurrentWord", !bMarkOccurrencesMatchWords); - bMarkOccurrencesCurrentWord = bMarkOccurrencesCurrentWord && !bMarkOccurrencesMatchWords; + g_bMarkOccurrencesMatchCase = IniSectionGetBool(pIniSection,L"MarkOccurrencesMatchCase",false); + g_bMarkOccurrencesMatchWords = IniSectionGetBool(pIniSection,L"MarkOccurrencesMatchWholeWords",true); + g_bMarkOccurrencesCurrentWord = IniSectionGetBool(pIniSection, L"MarkOccurrencesCurrentWord", !g_bMarkOccurrencesMatchWords); + g_bMarkOccurrencesCurrentWord = g_bMarkOccurrencesCurrentWord && !g_bMarkOccurrencesMatchWords; bViewWhiteSpace = IniSectionGetBool(pIniSection,L"ViewWhiteSpace", false); @@ -6704,8 +6706,8 @@ void LoadSettings() iUpdateDelayMarkAllCoccurrences = IniSectionGetInt(pIniSection, L"UpdateDelayMarkAllCoccurrences", 50); iUpdateDelayMarkAllCoccurrences = max(min(iUpdateDelayMarkAllCoccurrences, 10000), USER_TIMER_MINIMUM); - bDenyVirtualSpaceAccess = IniSectionGetBool(pIniSection, L"DenyVirtualSpaceAccess", false); - bUseOldStyleBraceMatching = IniSectionGetBool(pIniSection, L"UseOldStyleBraceMatching", false); + g_bDenyVirtualSpaceAccess = IniSectionGetBool(pIniSection, L"DenyVirtualSpaceAccess", false); + g_bUseOldStyleBraceMatching = IniSectionGetBool(pIniSection, L"UseOldStyleBraceMatching", false); iCurrentLineHorizontalSlop = IniSectionGetInt(pIniSection, L"CurrentLineHorizontalSlop", 40); iCurrentLineHorizontalSlop = max(min(iCurrentLineHorizontalSlop, 2000), 0); @@ -6715,6 +6717,7 @@ void LoadSettings() IniSectionGetString(pIniSection, L"AdministrationTool.exe", L"", g_tchAdministrationExe, COUNTOF(g_tchAdministrationExe)); + // -------------------------------------------------------------------------- LoadIniSection(L"Statusbar Settings", pIniSection, cchIniSection); // -------------------------------------------------------------------------- @@ -6745,7 +6748,10 @@ void LoadSettings() IniSectionGetString(pIniSection, L"SectionWidthSpecs", STATUSBAR_SECTION_WIDTH_SPECS, tchStatusBar, COUNTOF(tchStatusBar)); ReadVectorFromString(tchStatusBar, g_iStatusbarWidthSpec, STATUS_SECTOR_COUNT, -4096, 4096, 0); - + + g_bZeroBasedColumnIndex = IniSectionGetBool(pIniSection, L"ZeroBasedColumnIndex", false); + g_bZeroBasedCharacterCount = IniSectionGetBool(pIniSection, L"ZeroBasedCharacterCount", false); + // -------------------------------------------------------------------------- LoadIniSection(L"Toolbar Images",pIniSection,cchIniSection); @@ -6761,6 +6767,7 @@ void LoadSettings() int ResX = GetSystemMetrics(SM_CXSCREEN); int ResY = GetSystemMetrics(SM_CYSCREEN); + // -------------------------------------------------------------------------- LoadIniSection(L"Window", pIniSection, cchIniSection); // -------------------------------------------------------------------------- @@ -6905,25 +6912,25 @@ void SaveSettings(bool bSaveSettingsNow) { IniSectionSetBool(pIniSection, L"HyperlinkHotspot", g_bHyperlinkHotspot); IniSectionSetBool(pIniSection, L"ScrollPastEOF", bScrollPastEOF); IniSectionSetBool(pIniSection, L"AutoIndent", bAutoIndent); - IniSectionSetBool(pIniSection, L"AutoCompleteWords", bAutoCompleteWords); - IniSectionSetBool(pIniSection, L"AccelWordNavigation", bAccelWordNavigation); + IniSectionSetBool(pIniSection, L"AutoCompleteWords", g_bAutoCompleteWords); + IniSectionSetBool(pIniSection, L"AccelWordNavigation", g_bAccelWordNavigation); IniSectionSetBool(pIniSection, L"ShowIndentGuides", bShowIndentGuides); IniSectionSetBool(pIniSection, L"TabsAsSpaces", bTabsAsSpacesG); IniSectionSetBool(pIniSection, L"TabIndents", bTabIndentsG); IniSectionSetBool(pIniSection, L"BackspaceUnindents", bBackspaceUnindents); IniSectionSetInt(pIniSection, L"TabWidth", iTabWidthG); IniSectionSetInt(pIniSection, L"IndentWidth", iIndentWidthG); - IniSectionSetBool(pIniSection, L"MarkLongLines", bMarkLongLines); + IniSectionSetBool(pIniSection, L"MarkLongLines", g_bMarkLongLines); IniSectionSetPos(pIniSection, L"LongLinesLimit", iLongLinesLimitG); IniSectionSetInt(pIniSection, L"LongLineMode", iLongLineMode); IniSectionSetBool(pIniSection, L"ShowSelectionMargin", g_bShowSelectionMargin); - IniSectionSetBool(pIniSection, L"ShowLineNumbers", bShowLineNumbers); + IniSectionSetBool(pIniSection, L"ShowLineNumbers", g_bShowLineNumbers); IniSectionSetBool(pIniSection, L"ShowCodeFolding", g_bShowCodeFolding); IniSectionSetInt(pIniSection, L"MarkOccurrences", g_iMarkOccurrences); IniSectionSetBool(pIniSection, L"MarkOccurrencesMatchVisible", g_bMarkOccurrencesMatchVisible); - IniSectionSetBool(pIniSection, L"MarkOccurrencesMatchCase", bMarkOccurrencesMatchCase); - IniSectionSetBool(pIniSection, L"MarkOccurrencesMatchWholeWords", bMarkOccurrencesMatchWords); - IniSectionSetBool(pIniSection, L"MarkOccurrencesCurrentWord", bMarkOccurrencesCurrentWord); + IniSectionSetBool(pIniSection, L"MarkOccurrencesMatchCase", g_bMarkOccurrencesMatchCase); + IniSectionSetBool(pIniSection, L"MarkOccurrencesMatchWholeWords", g_bMarkOccurrencesMatchWords); + IniSectionSetBool(pIniSection, L"MarkOccurrencesCurrentWord", g_bMarkOccurrencesCurrentWord); IniSectionSetBool(pIniSection, L"ViewWhiteSpace", bViewWhiteSpace); IniSectionSetBool(pIniSection, L"ViewEOLs", bViewEOLs); IniSectionSetInt(pIniSection, L"DefaultEncoding", Encoding_MapIniSetting(false, g_iDefaultNewFileEncoding)); @@ -8006,10 +8013,12 @@ static void __fastcall _UpdateStatusbarDelayed(bool bForceRedraw) static WCHAR tchCol[32] = { L'\0' }; static WCHAR tchCols[32] = { L'\0' }; + DocPos const colOffset = g_bZeroBasedColumnIndex ? 0 : 1; + static DocPos s_iCol = -1; DocPos const iCol = SciCall_GetColumn(iPos) + SciCall_GetSelectionNCaretVirtualSpace(0); if (s_iCol != iCol) { - StringCchPrintf(tchCol, COUNTOF(tchCol), L"%td", iCol + 1); + StringCchPrintf(tchCol, COUNTOF(tchCol), L"%td", iCol + colOffset); FormatNumberStr(tchCol); } @@ -8017,7 +8026,7 @@ static void __fastcall _UpdateStatusbarDelayed(bool bForceRedraw) DocPos const iLineBack = SciCall_GetLineEndPosition(iLnFromPos); DocPos const iCols = SciCall_GetColumn(iLineBack); if (s_iCols != iCols) { - StringCchPrintf(tchCols, COUNTOF(tchCols), L"%td", iCols + 1); + StringCchPrintf(tchCols, COUNTOF(tchCols), L"%td", iCols + colOffset); FormatNumberStr(tchCols); } @@ -8036,18 +8045,20 @@ static void __fastcall _UpdateStatusbarDelayed(bool bForceRedraw) static WCHAR tchChr[32] = { L'\0' }; static WCHAR tchChrs[32] = { L'\0' }; + DocPos const chrOffset = g_bZeroBasedCharacterCount ? 0 : 1; + static DocPos s_iChr = -1; DocPos const iLineBegin = SciCall_PositionFromLine(iLnFromPos); DocPos const iChr = SciCall_CountCharacters(iLineBegin, iPos); if (s_iChr != iChr) { - StringCchPrintf(tchChr, COUNTOF(tchChr), L"%td", iChr); + StringCchPrintf(tchChr, COUNTOF(tchChr), L"%td", iChr + chrOffset); FormatNumberStr(tchChr); } static DocPos s_iChrs = -1; DocPos const iChrs = SciCall_CountCharacters(iLineBegin, iLineBack); if (s_iChrs != iChrs) { - StringCchPrintf(tchChrs, COUNTOF(tchChrs), L"%td", iChrs); + StringCchPrintf(tchChrs, COUNTOF(tchChrs), L"%td", iChrs + chrOffset); FormatNumberStr(tchChrs); } @@ -8170,6 +8181,31 @@ static void __fastcall _UpdateStatusbarDelayed(bool bForceRedraw) // ------------------------------------------------------ + // number of replaced pattern + static WCHAR tchRepl[32] = { L'\0' }; + + static int s_iReplacedOccurrences = -1; + + if (s_iReplacedOccurrences != g_iReplacedOccurrences) + { + if (g_iReplacedOccurrences > 0) + { + StringCchPrintf(tchRepl, COUNTOF(tchRepl), L"%i", g_iReplacedOccurrences); + FormatNumberStr(tchRepl); + } + else { + StringCchCopy(tchRepl, COUNTOF(tchRepl), L"--"); + } + + StringCchPrintf(tchStatusBar[STATUS_OCCREPLACE], txtWidth, L"%s%s%s", + g_mxSBPrefix[STATUS_OCCREPLACE], tchRepl, g_mxSBPostfix[STATUS_OCCREPLACE]); + + s_iReplacedOccurrences = g_iReplacedOccurrences; + bIsUpdateNeeded = true; + } + + // ------------------------------------------------------ + // get number of bytes in current encoding static WCHAR tchBytes[32] = { L'\0' }; static DocPos s_iTextLength = -1; @@ -8309,8 +8345,8 @@ static void __fastcall _UpdateStatusbarDelayed(bool bForceRedraw) // update Find/Replace dialog (if any) static WCHAR tchReplOccs[32] = { L'\0' }; if (g_hwndDlgFindReplace) { - if (iReplacedOccurrences > 0) - StringCchPrintf(tchReplOccs, COUNTOF(tchReplOccs), L"%i", iReplacedOccurrences); + if (g_iReplacedOccurrences > 0) + StringCchPrintf(tchReplOccs, COUNTOF(tchReplOccs), L"%i", g_iReplacedOccurrences); else StringCchCopy(tchReplOccs, COUNTOF(tchReplOccs), L"--"); @@ -8337,7 +8373,7 @@ static void __fastcall _UpdateStatusbarDelayed(bool bForceRedraw) // void UpdateLineNumberWidth() { - if (bShowLineNumbers) + if (g_bShowLineNumbers) { char chLines[32] = { '\0' }; StringCchPrintfA(chLines, COUNTOF(chLines), "_%td", (size_t)SciCall_GetLineCount()); @@ -8447,7 +8483,7 @@ static int __fastcall _SaveUndoSelection() case SC_SEL_THIN: sel.anchorPos_undo = (DocPos)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONANCHOR, 0, 0); sel.curPos_undo = (DocPos)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONCARET, 0, 0); - if (!bDenyVirtualSpaceAccess) { + if (!g_bDenyVirtualSpaceAccess) { sel.anchorVS_undo = (DocPos)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONANCHORVIRTUALSPACE, 0, 0); sel.curVS_undo = (DocPos)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONCARETVIRTUALSPACE, 0, 0); } @@ -8491,7 +8527,7 @@ static void __fastcall _SaveRedoSelection(int token) case SC_SEL_THIN: sel.anchorPos_redo = (DocPos)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONANCHOR, 0, 0); sel.curPos_redo = (DocPos)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONCARET, 0, 0); - if (!bDenyVirtualSpaceAccess) { + if (!g_bDenyVirtualSpaceAccess) { sel.anchorVS_redo = (DocPos)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONANCHORVIRTUALSPACE, 0, 0); } break; diff --git a/src/Styles.c b/src/Styles.c index f13fcf972..abe40e6a2 100644 --- a/src/Styles.c +++ b/src/Styles.c @@ -61,7 +61,7 @@ extern bool g_bShowSelectionMargin; extern bool g_bIniFileFromScratch; extern int g_iMarkOccurrences; -extern bool bUseOldStyleBraceMatching; +extern bool g_bUseOldStyleBraceMatching; extern int xCustomSchemesDlg; extern int yCustomSchemesDlg; @@ -3536,7 +3536,7 @@ void Style_SetLexer(HWND hwnd, PEDITLEXER pLexNew) Style_SetMargin(hwnd, pCurrentStandard->Styles[STY_MARGIN].iStyle, pCurrentStandard->Styles[STY_MARGIN].szValue); // margin (line number, bookmarks, folding) style - if (bUseOldStyleBraceMatching) { + if (g_bUseOldStyleBraceMatching) { Style_SetStyles(hwnd, pCurrentStandard->Styles[STY_BRACE_OK].iStyle, pCurrentStandard->Styles[STY_BRACE_OK].szValue, false); // brace light } @@ -3557,7 +3557,7 @@ void Style_SetLexer(HWND hwnd, PEDITLEXER pLexNew) } SendMessage(hwnd, SCI_INDICSETSTYLE, INDIC_NP3_MATCH_BRACE, iValue); } - if (bUseOldStyleBraceMatching) { + if (g_bUseOldStyleBraceMatching) { Style_SetStyles(hwnd, pCurrentStandard->Styles[STY_BRACE_BAD].iStyle, pCurrentStandard->Styles[STY_BRACE_BAD].szValue, false); // brace bad } @@ -3793,7 +3793,7 @@ void Style_SetLexer(HWND hwnd, PEDITLEXER pLexNew) Style_SetMargin(hwnd, g_pLexCurrent->Styles[STY_MARGIN].iStyle, g_pLexCurrent->Styles[STY_MARGIN].szValue); // margin (line number, bookmarks, folding) style - if (bUseOldStyleBraceMatching) { + if (g_bUseOldStyleBraceMatching) { Style_SetStyles(hwnd, pCurrentStandard->Styles[STY_BRACE_OK].iStyle, pCurrentStandard->Styles[STY_BRACE_OK].szValue, false); diff --git a/src/TypeDefs.h b/src/TypeDefs.h index 2c0cf9cc8..138ea08d3 100644 --- a/src/TypeDefs.h +++ b/src/TypeDefs.h @@ -100,7 +100,7 @@ typedef enum { #define STATUSBAR_SECTION_PREFIXES L"Ln ,Col ,Sel ,Sb ,SLn ,Occ ,,,,,,,Ch ,Repl ," #define STATUSBAR_SECTION_POSTFIXES L",,, [UTF-8],,, [UTF-8],,,,,,,," #define STATUSBAR_DEFAULT_IDS L"0 1 12 2 4 5 6 7 8 9 10 11" -#define STATUSBAR_SECTION_WIDTH_SPECS L"30 20 20 20 20 20 0 0 0 0 0 0 20 0" +#define STATUSBAR_SECTION_WIDTH_SPECS L"30 20 20 20 20 20 0 0 0 0 0 0 20 20" #define STAUSBAR_RIGHT_MARGIN 20 // --------------------------------------------------------------------------