From 04e75bb6e071eaef0f196fa7769ec242e79bd964 Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Mon, 18 Mar 2019 16:01:34 +0100 Subject: [PATCH] + add: remember last used theme (if save settings is enabled) --- language/common_res.h | 2 +- src/Helpers.h | 14 ++++++-------- src/Notepad3.c | 1 + src/Styles.c | 45 ++++++++++++++++++++++++++++--------------- src/Styles.h | 1 - 5 files changed, 37 insertions(+), 26 deletions(-) diff --git a/language/common_res.h b/language/common_res.h index 8bd7fc730..b8be20fb0 100644 --- a/language/common_res.h +++ b/language/common_res.h @@ -411,7 +411,7 @@ #define IDS_MUI_LANG_ZH_CN 34516 #define IDS_MUI_MENU_THEMES 37000 -#define IDM_THEMES_DEFAULT 37001 +#define IDM_THEMES_DEFAULT 37001 #define IDM_THEMES_FILE_ITEM 37002 /// !!! dont use IDs until ...37100 diff --git a/src/Helpers.h b/src/Helpers.h index 10ab6ed33..b4554a209 100644 --- a/src/Helpers.h +++ b/src/Helpers.h @@ -286,13 +286,18 @@ bool GetKnownFolderPath(REFKNOWNFOLDERID, LPWSTR lpOutPath, size_t cchCount); void PathRelativeToApp(LPWSTR lpszSrc,LPWSTR lpszDest,int cchDest,bool,bool,bool); void PathAbsoluteFromApp(LPWSTR lpszSrc,LPWSTR lpszDest,int cchDest,bool); - bool PathIsLnkFile(LPCWSTR pszPath); bool PathGetLnkPath(LPCWSTR pszLnkFile,LPWSTR pszResPath,int cchResPath); bool PathIsLnkToDirectory(LPCWSTR pszPath,LPWSTR pszResPath,int cchResPath); bool PathCreateDeskLnk(LPCWSTR pszDocument); bool PathCreateFavLnk(LPCWSTR pszName,LPCWSTR pszTarget,LPCWSTR pszDir); +void ExpandEnvironmentStringsEx(LPWSTR lpSrc, DWORD dwSrc); +void PathCanonicalizeEx(LPWSTR lpszPath, DWORD cchBuffer); +DWORD GetLongPathNameEx(LPWSTR lpszPath, DWORD cchBuffer); +void PathGetDisplayName(LPWSTR lpszDestPath, DWORD cchDestBuffer, LPCWSTR lpszSourcePath); +DWORD NormalizePathEx(LPWSTR lpszPath, DWORD cchBuffer, bool bRealPath, bool bSearchPathIfRelative); + bool StrLTrim(LPWSTR pszSource,LPCWSTR pszTrimChars); @@ -322,13 +327,6 @@ void StrTab2Space(LPWSTR lpsz); void PathFixBackslashes(LPWSTR lpsz); -void ExpandEnvironmentStringsEx(LPWSTR lpSrc,DWORD dwSrc); -void PathCanonicalizeEx(LPWSTR lpszPath, DWORD cchBuffer); -DWORD GetLongPathNameEx(LPWSTR lpszPath, DWORD cchBuffer); -void PathGetDisplayName(LPWSTR lpszDestPath, DWORD cchDestBuffer, LPCWSTR lpszSourcePath); -DWORD NormalizePathEx(LPWSTR lpszPath, DWORD cchBuffer, bool bRealPath, bool bSearchPathIfRelative); - - size_t FormatNumberStr(LPWSTR lpNumberStr, size_t cch, int fixedWidth); bool SetDlgItemIntEx(HWND hwnd,int nIdItem,UINT uValue); diff --git a/src/Notepad3.c b/src/Notepad3.c index 9eb4a506d..383be4ee8 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -7571,6 +7571,7 @@ void SaveSettings(bool bSaveSettingsNow) Style_Save(); // Scintilla Styles + int ResX, ResY; GetCurrentMonitorResolution(Globals.hwndMain, &ResX, &ResY); diff --git a/src/Styles.c b/src/Styles.c index 9d6d68d68..ee27ce598 100644 --- a/src/Styles.c +++ b/src/Styles.c @@ -121,7 +121,7 @@ static int s_cyStyleSelectDlg = STYLESELECTDLG_Y; typedef struct _themeFiles { UINT rid; - WCHAR szFileName[80]; + WCHAR szName[80]; WCHAR szFilePath[MAX_PATH]; } THEMEFILES, * PTHEMEFILES; @@ -155,12 +155,10 @@ static THEMEFILES Theme_Files[] = { 0, L"", L"" }, { 0, L"", L"" } }; - unsigned ThemeItems_CountOf() { return COUNTOF(Theme_Files); } - - static unsigned s_idxSelectedTheme = 1; // Default(0), Standard(1) +const WCHAR* const STYLING_THEME_NAME = L"ThemeFileName"; static void _FillThemesMenuTable() { @@ -168,12 +166,12 @@ static void _FillThemesMenuTable() Theme_Files[0].rid = IDM_THEMES_DEFAULT; // factory default GetLngString(IDM_THEMES_DEFAULT, wchStdName, COUNTOF(wchStdName)); - StringCchCopy(Theme_Files[0].szFileName, COUNTOF(Theme_Files[0].szFileName), wchStdName); + StringCchCopy(Theme_Files[0].szName, COUNTOF(Theme_Files[0].szName), wchStdName); StringCchCopy(Theme_Files[0].szFilePath, COUNTOF(Theme_Files[0].szFilePath), L""); Theme_Files[1].rid = IDM_THEMES_FILE_ITEM; // NP3.ini settings GetLngString(IDM_THEMES_FILE_ITEM, wchStdName, COUNTOF(wchStdName)); - StringCchCopy(Theme_Files[1].szFileName, COUNTOF(Theme_Files[1].szFileName), wchStdName); + StringCchCopy(Theme_Files[1].szName, COUNTOF(Theme_Files[1].szName), wchStdName); StringCchCopy(Theme_Files[1].szFilePath, COUNTOF(Theme_Files[1].szFilePath), Globals.IniFile); unsigned iTheme = 1; // Standard @@ -209,7 +207,7 @@ static void _FillThemesMenuTable() StringCchCopy(tchThemePath, COUNTOF(tchThemePath), PathFindFileName(FindFileData.cFileName)); PathRemoveExtension(tchThemePath); - StringCchCopy(Theme_Files[iTheme].szFileName, COUNTOF(Theme_Files[iTheme].szFileName), tchThemePath); + StringCchCopy(Theme_Files[iTheme].szName, COUNTOF(Theme_Files[iTheme].szName), tchThemePath); StringCchCopy(tchThemePath, COUNTOF(tchThemePath), tchThemeDir); PathCchAppend(tchThemePath, COUNTOF(tchThemePath), FindFileData.cFileName); @@ -220,16 +218,17 @@ static void _FillThemesMenuTable() } FindClose(hFindFile); } - s_idxSelectedTheme = clampu(s_idxSelectedTheme, 0, iTheme); - for (++iTheme; iTheme < ThemeItems_CountOf(); ++iTheme) { + for (++iTheme; iTheme < ThemeItems_CountOf(); ++iTheme) + { Theme_Files[iTheme].rid = 0; // no themes available - Theme_Files[iTheme].szFileName[0] = L'\0'; + Theme_Files[iTheme].szName[0] = L'\0'; Theme_Files[iTheme].szFilePath[0] = L'\0'; } } + //============================================================================= // // Style_SetIniFile() @@ -250,9 +249,9 @@ bool Style_InsertThemesMenu(HMENU hMenuBar) HMENU hmenuThemes = CreatePopupMenu(); int const pos = GetMenuItemCount(hMenuBar) - 1; - AppendMenu(hmenuThemes, MF_ENABLED | MF_STRING, Theme_Files[0].rid, Theme_Files[0].szFileName); + AppendMenu(hmenuThemes, MF_ENABLED | MF_STRING, Theme_Files[0].rid, Theme_Files[0].szName); - AppendMenu(hmenuThemes, MF_ENABLED | MF_STRING, Theme_Files[1].rid, Theme_Files[1].szFileName); + AppendMenu(hmenuThemes, MF_ENABLED | MF_STRING, Theme_Files[1].rid, Theme_Files[1].szName); for (unsigned i = 2; i < ThemeItems_CountOf(); ++i) { @@ -260,7 +259,7 @@ bool Style_InsertThemesMenu(HMENU hMenuBar) AppendMenu(hmenuThemes, MF_SEPARATOR, 0, 0); } if (Theme_Files[i].rid > 0) { - AppendMenu(hmenuThemes, MF_ENABLED | MF_STRING, Theme_Files[i].rid, Theme_Files[i].szFileName); + AppendMenu(hmenuThemes, MF_ENABLED | MF_STRING, Theme_Files[i].rid, Theme_Files[i].szName); } else { break; // done @@ -479,12 +478,25 @@ void Style_Load() s_colorDefault[14] = RGB(0xB0, 0x00, 0xB0); s_colorDefault[15] = RGB(0xB2, 0x8B, 0x40); - Style_ImportFromFile(Theme_Files[s_idxSelectedTheme].szFilePath); - // 2nd Default Style has same filename extension list as (1st) Default Style StringCchCopyW(lexStandard2nd.szExtensions, COUNTOF(lexStandard2nd.szExtensions), lexStandard.szExtensions); _FillThemesMenuTable(); + + // get theme name from settings2 + WCHAR wchThemeName[80]; + IniGetString(L"Styles", STYLING_THEME_NAME, L"", wchThemeName, COUNTOF(wchThemeName)); + + unsigned iTheme = 1; + if (StrIsNotEmpty(wchThemeName)) { + for (; iTheme < ThemeItems_CountOf(); ++iTheme) + { + if (StringCchCompareXI(wchThemeName, Theme_Files[iTheme].szName) == 0) { break; } + } + } + s_idxSelectedTheme = (iTheme < ThemeItems_CountOf()) ? iTheme : 1; + + Style_ImportFromFile(Theme_Files[s_idxSelectedTheme].szFilePath); } @@ -615,7 +627,8 @@ bool Style_ImportFromFile(const WCHAR* szFile) // void Style_Save() { - Style_ExportToFile(Theme_Files[s_idxSelectedTheme].szFilePath, false); + Style_ExportToFile(Theme_Files[s_idxSelectedTheme].szFilePath, false); + IniSetString(L"Styles", STYLING_THEME_NAME, (s_idxSelectedTheme > 1) ? Theme_Files[s_idxSelectedTheme].szName : NULL); } diff --git a/src/Styles.h b/src/Styles.h index 361440bdc..54efd6f3c 100644 --- a/src/Styles.h +++ b/src/Styles.h @@ -29,7 +29,6 @@ #define NUMLEXERS 49 #define AVG_NUM_OF_STYLES_PER_LEXER 20 - void Style_Load(); bool Style_Import(HWND hwnd); bool Style_ImportFromFile(const WCHAR* szFile);