From 273f117fad2fc37048dfea84ee9b211593b68cd9 Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Fri, 3 May 2019 10:53:34 +0200 Subject: [PATCH] + fix: minor bugfixes for "Focused View" --- Build/Changes.txt | 3 +- Versions/build.txt | 2 +- res/Notepad3.exe.manifest.conf | 2 +- src/Edit.c | 58 ++++++----------- src/Notepad3.c | 45 +++++++------ src/Styles.c | 114 +++++++++++++++++++++++++-------- src/Styles.h | 2 + src/TypeDefs.h | 22 +++++-- src/VersionEx.h | 4 +- 9 files changed, 155 insertions(+), 97 deletions(-) diff --git a/Build/Changes.txt b/Build/Changes.txt index fddaa722c..c0148d3f6 100644 --- a/Build/Changes.txt +++ b/Build/Changes.txt @@ -30,7 +30,7 @@ UCD - (UCD)ARDET is an Encoding Detector Library ================================================== -Current Version 5.19.502.build (2019-May 2) +Current Version 5.19.503.build (2019-May 3) ================================================== -------------------------------------------------- @@ -62,7 +62,6 @@ CHANGES: - Make "Add to Favorites" dialog resizable - Make Custom.Schemes and Find/Replace dialog resizable -- Allow Hyperlink Hotspots also in "Focused View" - BOOKMARK (margin flag) style changed to vertical flavor - Auto-Save after elevating user right - Support Compiler version 192027508 (VS2019 v16.0.(0-3) diff --git a/Versions/build.txt b/Versions/build.txt index 6aec59a6d..987568c77 100644 --- a/Versions/build.txt +++ b/Versions/build.txt @@ -1 +1 @@ -1687 +1688 diff --git a/res/Notepad3.exe.manifest.conf b/res/Notepad3.exe.manifest.conf index a9151db02..27e0e4fc0 100644 --- a/res/Notepad3.exe.manifest.conf +++ b/res/Notepad3.exe.manifest.conf @@ -3,7 +3,7 @@ Notepad3 RC diff --git a/src/Edit.c b/src/Edit.c index ff0ea67d6..7a6546476 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -316,7 +316,7 @@ void _ClearTextBuffer(HWND hwnd) if (SciCall_GetReadOnly()) { SciCall_SetReadOnly(false); } EditClearAllOccurrenceMarkers(); - if (Globals.bHideNonMatchedLines) { EditToggleView(hwnd); } + if (FocusedView.bHideNonMatchedLines) { EditToggleView(hwnd); } SendMessage(hwnd, SCI_CLEARALL, 0, 0); SendMessage(hwnd, SCI_MARKERDELETEALL, (WPARAM)MARKER_NP3_BOOKMARK, 0); @@ -5263,7 +5263,7 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara Globals.iReplacedOccurrences = 0; Globals.FindReplaceMatchFoundState = FND_NOP; - if (Globals.bHideNonMatchedLines) { EditToggleView(hwnd); } + if (FocusedView.bHideNonMatchedLines) { EditToggleView(hwnd); } MarkAllOccurrences(50, true); if (s_InitialTopLine >= 0) { @@ -5487,7 +5487,7 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara if (sg_pefrData->bMarkOccurences) { if (sg_pefrData->bStateChanged || (StringCchCompareXA(s_lastFind, sg_pefrData->szFind) != 0)) { _IGNORE_NOTIFY_CHANGE_; - if (Globals.bHideNonMatchedLines) { _DeleteLineStateAll(LINESTATE_OCCURRENCE_MARK); } + if (FocusedView.bHideNonMatchedLines) { _DeleteLineStateAll(LINESTATE_OCCURRENCE_MARK); } StringCchCopyA(s_lastFind, COUNTOF(s_lastFind), sg_pefrData->szFind); RegExResult_t match = _FindHasMatch(Globals.hwndEdit, sg_pefrData, 0, (sg_pefrData->bMarkOccurences), false); if (s_anyMatch != match) { s_anyMatch = match; } @@ -5510,7 +5510,7 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara EditSetSelectionEx(Globals.hwndEdit, s_InitialAnchorPos, s_InitialCaretPos, -1, -1); } } - if (Globals.bHideNonMatchedLines) { EditHideNotMarkedLineRange(Globals.hwndEdit, true); } + if (FocusedView.bHideNonMatchedLines) { EditHideNotMarkedLineRange(Globals.hwndEdit, true); } _OBSERVE_NOTIFY_CHANGE_; } } @@ -5543,7 +5543,7 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara Settings.MarkOccurrencesMatchVisible = bSaveOccVisible; //DialogEnableWindow(hwnd, IDC_TOGGLE_VISIBILITY, (Settings.MarkOccurrences > 0) && !Settings.MarkOccurrencesMatchVisible); DialogEnableWindow(hwnd, IDC_TOGGLE_VISIBILITY, false); - if (Globals.bHideNonMatchedLines) { + if (FocusedView.bHideNonMatchedLines) { PostMessage(hwnd, WM_COMMAND, MAKELONG(IDC_TOGGLE_VISIBILITY, 1), 0); } InvalidateRect(GetDlgItem(hwnd, IDC_FINDTEXT), NULL, true); @@ -5558,7 +5558,7 @@ static INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wPara case IDC_TOGGLE_VISIBILITY: - if (Globals.bHideNonMatchedLines) { + if (FocusedView.bHideNonMatchedLines) { EditToggleView(hwnd); sg_pefrData->bStateChanged = true; s_InitialTopLine = -1; // reset @@ -6179,7 +6179,7 @@ void EditApplyVisibleStyle(HWND hwnd) EditUpdateUrlHotspots(hwnd, SciCall_PositionFromLine(iStartLine), SciCall_GetLineEndPosition(iEndLine), true); _OBSERVE_NOTIFY_CHANGE_; } - else if (!Globals.bHideNonMatchedLines) { + else if (!FocusedView.bHideNonMatchedLines) { Sci_ApplyLexerStyle(SciCall_PositionFromLine(iStartLine), SciCall_GetLineEndPosition(iEndLine)); } } @@ -6483,26 +6483,14 @@ void EditClearAllOccurrenceMarkers() // void EditToggleView(HWND hwnd) { - static bool bSaveFoldingAvailable = false; - static bool bSaveShowFolding = false; - bool const bWaitCursor = ((Globals.iMarkOccurrencesCount > 1000) || (SciCall_GetLineCount() > 2000)) ? true : false; if (bWaitCursor) { BeginWaitCursor(NULL); } - if (!Globals.bHideNonMatchedLines) { - bSaveFoldingAvailable = Globals.bCodeFoldingAvailable; - bSaveShowFolding = Settings.ShowCodeFolding; - } - else { - Globals.bCodeFoldingAvailable = bSaveFoldingAvailable; - Settings.ShowCodeFolding = bSaveShowFolding; - } + FocusedView.bHideNonMatchedLines = !FocusedView.bHideNonMatchedLines; // toggle - Globals.bHideNonMatchedLines = !Globals.bHideNonMatchedLines; // toggle + EditHideNotMarkedLineRange(hwnd, FocusedView.bHideNonMatchedLines); - EditHideNotMarkedLineRange(hwnd, Globals.bHideNonMatchedLines); - - if (Globals.bHideNonMatchedLines) { + if (FocusedView.bHideNonMatchedLines) { EditScrollTo(hwnd, 0, false); SciCall_SetReadOnly(true); } @@ -6849,7 +6837,7 @@ bool EditAutoCompleteWord(HWND hwnd, bool autoInsert) // void EditUpdateUrlHotspots(HWND hwnd, DocPos startPos, DocPos endPos, bool bActiveHotspot) { - if (Globals.bHideNonMatchedLines) { return; } + if (FocusedView.bHideNonMatchedLines) { return; } if (endPos < 0) { endPos = Sci_GetDocEndPosition() - 1; @@ -6925,10 +6913,12 @@ void EditHideNotMarkedLineRange(HWND hwnd, bool bHideLines) DocPos const iEndPos = Sci_GetDocEndPosition(); if (!bHideLines) { + // reset + Style_SetFoldingAvailability(Style_GetCurrentLexerPtr()); + FocusedView.ShowCodeFolding = Settings.ShowCodeFolding; _DeleteLineStateAll(LINESTATE_OCCURRENCE_MARK); - if (!Globals.bCodeFoldingAvailable) { SciCall_SetProperty("fold", "0"); } - SciCall_SetFoldFlags(0); - Style_SetFolding(hwnd, Globals.bCodeFoldingAvailable && Settings.ShowCodeFolding); + Style_SetFoldingProperties(FocusedView.CodeFoldingAvailable); + Style_SetFolding(hwnd, FocusedView.CodeFoldingAvailable && FocusedView.ShowCodeFolding); SciCall_FoldAll(EXPAND); Sci_ApplyLexerStyle(0, -1); EditUpdateUrlHotspots(hwnd, 0, -1, Settings.HyperlinkHotspot); @@ -6936,20 +6926,14 @@ void EditHideNotMarkedLineRange(HWND hwnd, bool bHideLines) else // ===== hide lines without marker ===== { // prepare hidden (folding) settings - Globals.bCodeFoldingAvailable = true; // saved before - Settings.ShowCodeFolding = true; // saved before - SciCall_SetProperty("fold", "1"); - SciCall_SetProperty("fold.foldsyntaxbased", "1"); - SciCall_SetProperty("fold.comment", "1"); - SciCall_SetProperty("fold.preprocessor", "1"); - SciCall_SetProperty("fold.compact", "0"); + FocusedView.CodeFoldingAvailable = true; + FocusedView.ShowCodeFolding = true; + Style_SetFoldingProperties(FocusedView.CodeFoldingAvailable); + SciCall_SetProperty("fold.foldsyntaxbased", "0"); Style_SetFolding(hwnd, true); - SciCall_SetFoldFlags(0); - //SciCall_SetFoldFlags(SC_FOLDFLAG_LEVELNUMBERS | SC_FOLDFLAG_LINESTATE); // Debug Sci_ApplyLexerStyle(0, -1); EditMarkAllOccurrences(hwnd, false); // restore - Lexers destroy the LineState bitset - EditUpdateUrlHotspots(hwnd, 0, -1, Settings.HyperlinkHotspot); DocLn const iStartLine = SciCall_LineFromPosition(iStartPos); DocLn const iEndLine = SciCall_LineFromPosition(iEndPos); @@ -8355,7 +8339,7 @@ void EditFoldClick(DocLn ln, int mode) void EditFoldAltArrow(FOLD_MOVE move, FOLD_ACTION action) { - if (Globals.bCodeFoldingAvailable && Settings.ShowCodeFolding) + if (FocusedView.CodeFoldingAvailable && FocusedView.ShowCodeFolding) { DocLn ln = SciCall_LineFromPosition(SciCall_GetCurrentPos()); diff --git a/src/Notepad3.c b/src/Notepad3.c index 13d596650..3183464fd 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -61,6 +61,8 @@ SETTINGS_T Defaults; SETTINGS2_T Settings2; static SETTINGS2_T Defaults2; +FOCUSEDVIEW_T FocusedView; + // ------------------------------------ static WCHAR s_wchWndClass[16] = _W(SAPPNAME); @@ -470,7 +472,6 @@ static void _InitGlobals() Globals.CallTipType = CT_NONE; Globals.iAvailLngCount = 1; Globals.iWrapCol = 0; - Globals.bCodeFoldingAvailable = false; Globals.bForceReLoadAsUTF8 = false; Globals.DOSEncoding = CPI_NONE; Globals.bZeroBasedColumnIndex = false; @@ -483,7 +484,6 @@ static void _InitGlobals() Globals.bIniFileFromScratch = false; Globals.bFindReplCopySelOrClip = true; Globals.bReplaceInitialized = false; - Globals.bHideNonMatchedLines = false; Globals.FindReplaceMatchFoundState = FND_NOP; Flags.bDevDebugMode = DefaultFlags.bDevDebugMode = false; @@ -501,6 +501,10 @@ static void _InitGlobals() Flags.NoFileVariables = DefaultFlags.NoFileVariables = false; Flags.ShellUseSystemMRU = DefaultFlags.ShellUseSystemMRU = true; Flags.PrintFileAndLeave = DefaultFlags.PrintFileAndLeave = 0; + + FocusedView.bHideNonMatchedLines = false; + FocusedView.CodeFoldingAvailable = false; + FocusedView.ShowCodeFolding = true; } @@ -2343,7 +2347,7 @@ LRESULT MsgThemeChanged(HWND hwnd, WPARAM wParam ,LPARAM lParam) SendWMSize(hwnd, NULL); - if (Globals.bHideNonMatchedLines) { EditToggleView(Globals.hwndEdit); } + if (FocusedView.bHideNonMatchedLines) { EditToggleView(Globals.hwndEdit); } MarkAllOccurrences(0, true); EditUpdateUrlHotspots(Globals.hwndEdit, 0, -1, Settings.HyperlinkHotspot); UpdateUI(); @@ -2985,13 +2989,13 @@ LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam) EnableCmd(hmenu, IDM_VIEW_FONT, !IsWindow(Globals.hwndDlgCustomizeSchemes)); EnableCmd(hmenu, IDM_VIEW_CURRENTSCHEME, !IsWindow(Globals.hwndDlgCustomizeSchemes)); - EnableCmd(hmenu, IDM_VIEW_FOLDING, Globals.bCodeFoldingAvailable); - CheckCmd(hmenu, IDM_VIEW_FOLDING, (Globals.bCodeFoldingAvailable && Settings.ShowCodeFolding)); - EnableCmd(hmenu,IDM_VIEW_TOGGLEFOLDS,!e && (Globals.bCodeFoldingAvailable && Settings.ShowCodeFolding)); + EnableCmd(hmenu, IDM_VIEW_FOLDING, FocusedView.CodeFoldingAvailable && !FocusedView.bHideNonMatchedLines); + CheckCmd(hmenu, IDM_VIEW_FOLDING, (FocusedView.CodeFoldingAvailable && FocusedView.ShowCodeFolding)); + EnableCmd(hmenu,IDM_VIEW_TOGGLEFOLDS,!e && (FocusedView.CodeFoldingAvailable && FocusedView.ShowCodeFolding)); bool const bF = (SC_FOLDLEVELBASE < (SciCall_GetFoldLevel(iCurLine) & SC_FOLDLEVELNUMBERMASK)); bool const bH = (SciCall_GetFoldLevel(iCurLine) & SC_FOLDLEVELHEADERFLAG); - EnableCmd(hmenu,IDM_VIEW_TOGGLE_CURRENT_FOLD, !e && (Globals.bCodeFoldingAvailable && Settings.ShowCodeFolding) && (bF || bH)); + EnableCmd(hmenu,IDM_VIEW_TOGGLE_CURRENT_FOLD, !e && (FocusedView.CodeFoldingAvailable && FocusedView.ShowCodeFolding) && (bF || bH)); CheckCmd(hmenu,IDM_VIEW_USE2NDDEFAULT,Style_GetUse2ndDefault()); @@ -3015,7 +3019,7 @@ LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam) CheckCmd(hmenu, IDM_VIEW_MARKOCCUR_CASE, Settings.MarkOccurrencesMatchCase); EnableCmd(hmenu, IDM_VIEW_TOGGLE_VIEW, (Settings.MarkOccurrences > 0) && !Settings.MarkOccurrencesMatchVisible); - CheckCmd(hmenu, IDM_VIEW_TOGGLE_VIEW, Globals.bHideNonMatchedLines); + CheckCmd(hmenu, IDM_VIEW_TOGGLE_VIEW, FocusedView.bHideNonMatchedLines); if (Settings.MarkOccurrencesMatchWholeWords) { i = IDM_VIEW_MARKOCCUR_WORD; @@ -4933,14 +4937,14 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) break; case IDM_VIEW_TOGGLE_VIEW: - if (Globals.bHideNonMatchedLines) { + if (FocusedView.bHideNonMatchedLines) { EditToggleView(Globals.hwndEdit); MarkAllOccurrences(0, true); } else { EditToggleView(Globals.hwndEdit); } - CheckCmd(GetMenu(hwnd), IDM_VIEW_TOGGLE_VIEW, Globals.bHideNonMatchedLines); + CheckCmd(GetMenu(hwnd), IDM_VIEW_TOGGLE_VIEW, FocusedView.bHideNonMatchedLines); UpdateToolbar(); break; @@ -4969,8 +4973,9 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) case IDM_VIEW_FOLDING: Settings.ShowCodeFolding = !Settings.ShowCodeFolding; - Style_SetFolding(Globals.hwndEdit, Settings.ShowCodeFolding); - if (!Settings.ShowCodeFolding) { EditToggleFolds(EXPAND, true); } + FocusedView.ShowCodeFolding = Settings.ShowCodeFolding; + Style_SetFolding(Globals.hwndEdit, FocusedView.ShowCodeFolding); + if (!FocusedView.ShowCodeFolding) { EditToggleFolds(EXPAND, true); } UpdateToolbar(); break; @@ -6459,7 +6464,7 @@ LRESULT MsgNotify(HWND hwnd, WPARAM wParam, LPARAM lParam) _SetSaveNeededFlag(true); } else if (pnmh->code == SCN_MODIFYATTEMPTRO) { - if (Globals.bHideNonMatchedLines) { EditToggleView(Globals.hwndEdit); } + if (FocusedView.bHideNonMatchedLines) { EditToggleView(Globals.hwndEdit); } } } return TRUE; @@ -7152,7 +7157,7 @@ void LoadSettings() GET_INT_VALUE_FROM_INISECTION(LongLineMode, EDGE_LINE, EDGE_LINE, EDGE_BACKGROUND); GET_BOOL_VALUE_FROM_INISECTION(ShowSelectionMargin, true); GET_BOOL_VALUE_FROM_INISECTION(ShowLineNumbers, true); - GET_BOOL_VALUE_FROM_INISECTION(ShowCodeFolding, true); + GET_BOOL_VALUE_FROM_INISECTION(ShowCodeFolding, true); FocusedView.ShowCodeFolding = Settings.ShowCodeFolding; GET_INT_VALUE_FROM_INISECTION(MarkOccurrences, 1, 0, 3); GET_BOOL_VALUE_FROM_INISECTION(MarkOccurrencesMatchVisible, false); GET_BOOL_VALUE_FROM_INISECTION(MarkOccurrencesMatchCase, false); @@ -8435,7 +8440,7 @@ static void _UpdateToolbarDelayed() bool b1 = SciCall_IsSelectionEmpty(); bool b2 = (bool)(SciCall_GetTextLength() > 0); bool ro = SciCall_GetReadOnly(); - bool tv = Globals.bHideNonMatchedLines; + bool tv = FocusedView.bHideNonMatchedLines; EnableTool(IDT_EDIT_UNDO, SciCall_CanUndo() && !ro); EnableTool(IDT_EDIT_REDO, SciCall_CanRedo() && !ro); @@ -8453,7 +8458,7 @@ static void _UpdateToolbarDelayed() EnableTool(IDT_EDIT_COPY, !b1 && !ro); EnableTool(IDT_EDIT_CLEAR, !b1 && !ro); - EnableTool(IDT_VIEW_TOGGLEFOLDS, b2 && (Globals.bCodeFoldingAvailable && Settings.ShowCodeFolding)); + EnableTool(IDT_VIEW_TOGGLEFOLDS, b2 && (FocusedView.CodeFoldingAvailable && FocusedView.ShowCodeFolding)); EnableTool(IDT_VIEW_TOGGLE_VIEW, b2 && ((Settings.MarkOccurrences > 0) && !Settings.MarkOccurrencesMatchVisible)); CheckTool(IDT_VIEW_TOGGLE_VIEW, tv); @@ -9177,10 +9182,8 @@ void UpdateMarginWidth() SciCall_SetMarginWidthN(MARGIN_SCI_LINENUM, 0); } - if (!Globals.bHideNonMatchedLines) { - Style_SetBookmark(Globals.hwndEdit, Settings.ShowSelectionMargin); - Style_SetFolding(Globals.hwndEdit, (Globals.bCodeFoldingAvailable && Settings.ShowCodeFolding)); - } + Style_SetBookmark(Globals.hwndEdit, Settings.ShowSelectionMargin); + Style_SetFolding(Globals.hwndEdit, (FocusedView.CodeFoldingAvailable && FocusedView.ShowCodeFolding)); } @@ -9593,7 +9596,7 @@ bool FileLoad(bool bDontSave, bool bNew, bool bReload, fioStatus.iEncoding = CPI_ANSI_DEFAULT; if (bNew || bReload) { - if (Globals.bHideNonMatchedLines) { EditToggleView(Globals.hwndEdit); } + if (FocusedView.bHideNonMatchedLines) { EditToggleView(Globals.hwndEdit); } } if (!bDontSave) diff --git a/src/Styles.c b/src/Styles.c index 31e09fa7d..d1ca45561 100644 --- a/src/Styles.c +++ b/src/Styles.c @@ -774,6 +774,50 @@ DWORD Style_ExportToFile(const WCHAR* szFile, bool bForceAll) } +//============================================================================= +// +// Style_SetFoldingAvailability() +// +void Style_SetFoldingAvailability(PEDITLEXER pLexer) +{ + switch (pLexer->lexerID) + { + case SCLEX_NULL: + case SCLEX_CONTAINER: + case SCLEX_BATCH: + case SCLEX_CONF: + case SCLEX_MAKEFILE: + case SCLEX_MARKDOWN: + FocusedView.CodeFoldingAvailable = false; + break; + default: + FocusedView.CodeFoldingAvailable = true; + break; + } +} + + +//============================================================================= +// +// Style_SetFoldingProperties() +// +void Style_SetFoldingProperties(bool active) +{ + if (active) { + SciCall_SetProperty("fold", "1"); + SciCall_SetProperty("fold.foldsyntaxbased", "1"); + SciCall_SetProperty("fold.compact", "0"); + SciCall_SetProperty("fold.comment", "1"); + SciCall_SetProperty("fold.html", "1"); + SciCall_SetProperty("fold.preprocessor", "1"); + SciCall_SetProperty("fold.cpp.comment.explicit", "0"); + } + else { + SciCall_SetProperty("fold", "0"); + } +} + + //============================================================================= // // Style_SetLexer() @@ -832,30 +876,16 @@ void Style_SetLexer(HWND hwnd, PEDITLEXER pLexNew) SciCall_SetProperty("json.allow.comments", "1"); SciCall_SetProperty("json.escape.sequence", "1"); } - - // Code folding - switch (pLexNew->lexerID) - { - case SCLEX_NULL: - case SCLEX_CONTAINER: - case SCLEX_BATCH: - case SCLEX_CONF: - case SCLEX_MAKEFILE: - case SCLEX_MARKDOWN: - Globals.bCodeFoldingAvailable = false; - SciCall_SetProperty("fold", "0"); - break; - default: - Globals.bCodeFoldingAvailable = true; - SciCall_SetProperty("fold", "1"); - SciCall_SetProperty("fold.compact", "0"); - SciCall_SetProperty("fold.comment", "1"); - SciCall_SetProperty("fold.html", "1"); - SciCall_SetProperty("fold.preprocessor", "1"); - SciCall_SetProperty("fold.cpp.comment.explicit", "0"); - break; + else if (pLexNew->lexerID == SCLEX_PYTHON) { + SciCall_SetProperty("tab.timmy.whinge.level", "1"); } + + // Code folding + Style_SetFoldingAvailability(pLexNew); + Style_SetFoldingProperties(FocusedView.CodeFoldingAvailable); + + // Add KeyWord Lists for (int i = 0; i < (KEYWORDSET_MAX + 1); i++) { SciCall_SetKeywords(i, pLexNew->pKeyWords->pszKeyWords[i]); @@ -1009,7 +1039,10 @@ void Style_SetLexer(HWND hwnd, PEDITLEXER pLexNew) SendMessage(hwnd, SCI_INDICSETFORE, _SC_INDIC_IME_UNKNOWN, dColor); } - // More default values... + SendMessage(hwnd, SCI_INDICSETFORE, _SC_INDIC_IME_INPUT, dColor); + SendMessage(hwnd, SCI_INDICSETFORE, _SC_INDIC_IME_TARGET, dColor); + SendMessage(hwnd, SCI_INDICSETFORE, _SC_INDIC_IME_CONVERTED, dColor); + SendMessage(hwnd, SCI_INDICSETFORE, _SC_INDIC_IME_UNKNOWN, dColor); if (pLexNew != &lexANSI) { Style_SetStyles(hwnd, pCurrentStandard->Styles[STY_CTRL_CHR].iStyle, pCurrentStandard->Styles[STY_CTRL_CHR].szValue, false); // control char @@ -1307,6 +1340,29 @@ void Style_SetLexer(HWND hwnd, PEDITLEXER pLexNew) } } + // Lexer reserved indicator styles + switch (s_pLexCurrent->lexerID) + { + case SCLEX_PYTHON: + SendMessage(hwnd, SCI_INDICSETSTYLE, 1, INDIC_ROUNDBOX); + SendMessage(hwnd, SCI_INDICSETFORE, 1, (LPARAM)RGB(255, 0, 0)); // (light red) + //SendMessage(hwnd, SCI_INDICSETALPHA, 1, 40); + //SendMessage(hwnd, SCI_INDICSETOUTLINEALPHA, 1, 100); + break; + + default: + //SendMessage(hwnd, SCI_INDICSETSTYLE, 0, INDIC_SQUIGGLE); + //SendMessage(hwnd, SCI_INDICSETSTYLE, 1, INDIC_TT); + //SendMessage(hwnd, SCI_INDICSETSTYLE, 2, INDIC_PLAIN); + //SendMessage(hwnd, SCI_INDICSETFORE, 0, (LPARAM)RGB(0, 0x7f, 0)); // (dark green) + //SendMessage(hwnd, SCI_INDICSETFORE, 1, (LPARAM)RGB(0, 0, 0xff)); // (light blue) + //SendMessage(hwnd, SCI_INDICSETFORE, 2, (LPARAM)RGB(0xff, 0, 0)); // (light red) + //for (int sty = 3; sty < INDIC_CONTAINER; ++sty) { + // SendMessage(hwnd, SCI_INDICSETSTYLE, sty, INDIC_ROUNDBOX); + //} + break; + } + Style_SetInvisible(hwnd, false); // set fixed invisible style Style_SetUrlHotSpot(hwnd, Settings.HyperlinkHotspot); @@ -1602,22 +1658,26 @@ void Style_SetMargin(HWND hwnd, int iStyle, LPCWSTR lpszStyle) int fldStyleLn = 0; Style_StrGetCharSet(wchBookMarkStyleStrg, &fldStyleLn); + + int const _debug_flags = 0; + //int const _debug_flags = (SC_FOLDFLAG_LEVELNUMBERS | SC_FOLDFLAG_LINESTATE); // !extend margin width + switch (fldStyleLn) { case 1: - SciCall_SetFoldFlags(SC_FOLDFLAG_LINEBEFORE_CONTRACTED); + SciCall_SetFoldFlags(SC_FOLDFLAG_LINEBEFORE_CONTRACTED | _debug_flags); break; case 2: - SciCall_SetFoldFlags(SC_FOLDFLAG_LINEBEFORE_CONTRACTED | SC_FOLDFLAG_LINEAFTER_CONTRACTED); + SciCall_SetFoldFlags(SC_FOLDFLAG_LINEBEFORE_CONTRACTED | SC_FOLDFLAG_LINEAFTER_CONTRACTED | _debug_flags); break; default: - SciCall_SetFoldFlags(SC_FOLDFLAG_LINEAFTER_CONTRACTED); + SciCall_SetFoldFlags(SC_FOLDFLAG_LINEAFTER_CONTRACTED | _debug_flags); break; } // set width Style_SetBookmark(hwnd, Settings.ShowSelectionMargin); - Style_SetFolding(hwnd, (Globals.bCodeFoldingAvailable && Settings.ShowCodeFolding)); + Style_SetFolding(hwnd, (FocusedView.CodeFoldingAvailable && FocusedView.ShowCodeFolding)); } diff --git a/src/Styles.h b/src/Styles.h index 54efd6f3c..3579fa8b3 100644 --- a/src/Styles.h +++ b/src/Styles.h @@ -42,6 +42,8 @@ bool Style_InsertThemesMenu(HMENU hMenuBar); void Style_DynamicThemesMenuCmd(int cmd, bool bEnableSaveSettings); float Style_GetCurrentFontSize(); +void Style_SetFoldingAvailability(PEDITLEXER pLexer); +void Style_SetFoldingProperties(bool active); void Style_SetLexer(HWND hwnd,PEDITLEXER pLexNew); void Style_SetUrlHotSpot(HWND hwnd, bool); void Style_SetInvisible(HWND hwnd, bool); diff --git a/src/TypeDefs.h b/src/TypeDefs.h index 517f0d1bd..f13250521 100644 --- a/src/TypeDefs.h +++ b/src/TypeDefs.h @@ -247,11 +247,11 @@ typedef struct _cmq #define MARKER_NP3_BOOKMARK 1 -#define LINESTATE_OCCURRENCE_MARK (1 << 13) +#define LINESTATE_OCCURRENCE_MARK (1 << 17) -#define INDIC_NP3_MARK_OCCURANCE 1 -#define INDIC_NP3_MATCH_BRACE 2 -#define INDIC_NP3_BAD_BRACE 3 +#define INDIC_NP3_MARK_OCCURANCE (INDIC_CONTAINER + 1) +#define INDIC_NP3_MATCH_BRACE (INDIC_CONTAINER + 2) +#define INDIC_NP3_BAD_BRACE (INDIC_CONTAINER + 3) //============================================================================= @@ -297,7 +297,6 @@ typedef struct _globals_t FILEVARS fvCurFile; FILEVARS fvBackup; int iWrapCol; - bool bCodeFoldingAvailable; bool bForceReLoadAsUTF8; bool bZeroBasedColumnIndex; bool bZeroBasedCharacterCount; @@ -309,7 +308,6 @@ typedef struct _globals_t bool bIniFileFromScratch; bool bFindReplCopySelOrClip; bool bReplaceInitialized; - bool bHideNonMatchedLines; FR_STATES FindReplaceMatchFoundState; @@ -500,6 +498,18 @@ extern SETTINGS2_T Settings2; //============================================================================= +typedef struct _focusedview_t +{ + bool bHideNonMatchedLines; + bool CodeFoldingAvailable; // = true; // saved before + bool ShowCodeFolding; // = true; // saved before + +} FOCUSEDVIEW_T, * PFOCUSEDVIEW_T; + +extern FOCUSEDVIEW_T FocusedView; + +//============================================================================= + typedef enum { I_TAB_LN = 0, I_SPC_LN = 1, I_MIX_LN = 2, I_TAB_MOD_X = 3, I_SPC_MOD_X = 4 } INDENT_TYPE; typedef struct _editfileiostatus diff --git a/src/VersionEx.h b/src/VersionEx.h index 01a4d6fc7..7f8f35853 100644 --- a/src/VersionEx.h +++ b/src/VersionEx.h @@ -7,8 +7,8 @@ #define SAPPNAME "Notepad3" #define VERSION_MAJOR 5 #define VERSION_MINOR 19 -#define VERSION_REV 502 -#define VERSION_BUILD 1687 +#define VERSION_REV 503 +#define VERSION_BUILD 1688 #define SCINTILLA_VER 415 #define ONIGMO_REGEX_VER 6.2.0 #define VERSION_PATCH RC