From 5917fdefb0dd70252b0aeae8981d2b203d626bf2 Mon Sep 17 00:00:00 2001 From: Don Ho Date: Mon, 21 Feb 2022 00:57:15 +0100 Subject: [PATCH] Fix translation problem for "Sort By" Make "Plugins" & "Window" menu static to simplify the code. --- .../MISC/PluginsManager/PluginsManager.cpp | 8 ++--- .../src/MISC/PluginsManager/PluginsManager.h | 5 +-- PowerEditor/src/Notepad_plus.cpp | 4 +-- PowerEditor/src/Notepad_plus.rc | 23 ++++++++++++++ PowerEditor/src/Parameters.cpp | 16 +++++----- .../src/WinControls/WindowsDlg/WindowsDlg.cpp | 31 ++----------------- .../src/WinControls/WindowsDlg/WindowsDlg.h | 6 ++-- .../src/WinControls/WindowsDlg/WindowsDlg.rc | 24 -------------- .../src/WinControls/WindowsDlg/WindowsDlgRc.h | 16 ---------- PowerEditor/src/localization.cpp | 9 +----- PowerEditor/src/menuCmdID.h | 15 +++++++++ 11 files changed, 57 insertions(+), 100 deletions(-) diff --git a/PowerEditor/src/MISC/PluginsManager/PluginsManager.cpp b/PowerEditor/src/MISC/PluginsManager/PluginsManager.cpp index 8cc61b497..bb7469812 100644 --- a/PowerEditor/src/MISC/PluginsManager/PluginsManager.cpp +++ b/PowerEditor/src/MISC/PluginsManager/PluginsManager.cpp @@ -476,15 +476,13 @@ void PluginsManager::addInMenuFromPMIndex(int i) } } -HMENU PluginsManager::setMenu(HMENU hMenu, const TCHAR *menuName, bool enablePluginAdmin) +HMENU PluginsManager::initMenu(HMENU hMenu, bool enablePluginAdmin) { - const TCHAR *nom_menu = (menuName && menuName[0])?menuName:TEXT("&Plugins"); size_t nbPlugin = _pluginInfos.size(); if (!_hPluginsMenu) { - _hPluginsMenu = ::CreateMenu(); - ::InsertMenu(hMenu, MENUINDEX_PLUGINS, MF_BYPOSITION | MF_POPUP, (UINT_PTR)_hPluginsMenu, nom_menu); + _hPluginsMenu = ::GetSubMenu(hMenu, 10); int i = 1; @@ -496,8 +494,6 @@ HMENU PluginsManager::setMenu(HMENU hMenu, const TCHAR *menuName, bool enablePlu ::InsertMenu(_hPluginsMenu, i++, MF_BYPOSITION, IDM_SETTING_PLUGINADM, TEXT("Plugins Admin...")); ::InsertMenu(_hPluginsMenu, i++, MF_BYPOSITION | MF_SEPARATOR, 0, TEXT("")); } - - ::InsertMenu(_hPluginsMenu, i, MF_BYPOSITION, IDM_SETTING_OPENPLUGINSDIR, TEXT("Open Plugins Folder...")); } for (size_t i = 0; i < nbPlugin; ++i) diff --git a/PowerEditor/src/MISC/PluginsManager/PluginsManager.h b/PowerEditor/src/MISC/PluginsManager/PluginsManager.h index d33ac96ac..2badc5d18 100644 --- a/PowerEditor/src/MISC/PluginsManager/PluginsManager.h +++ b/PowerEditor/src/MISC/PluginsManager/PluginsManager.h @@ -78,9 +78,6 @@ public: { for (size_t i = 0, len = _pluginInfos.size(); i < len; ++i) delete _pluginInfos[i]; - - if (_hPluginsMenu) - DestroyMenu(_hPluginsMenu); } void init(const NppData & nppData) @@ -97,7 +94,7 @@ public: void runPluginCommand(const TCHAR *pluginName, int commandID); void addInMenuFromPMIndex(int i); - HMENU setMenu(HMENU hMenu, const TCHAR *menuName, bool enablePluginAdmin = false); + HMENU initMenu(HMENU hMenu, bool enablePluginAdmin = false); bool getShortcutByCmdID(int cmdID, ShortcutKey *sk); bool removeShortcutByCmdID(int cmdID); diff --git a/PowerEditor/src/Notepad_plus.cpp b/PowerEditor/src/Notepad_plus.cpp index d0c1ef60e..132c2d9ee 100644 --- a/PowerEditor/src/Notepad_plus.cpp +++ b/PowerEditor/src/Notepad_plus.cpp @@ -529,7 +529,7 @@ LRESULT Notepad_plus::init(HWND hwnd) //Plugin menu bool enablePluginAdmin = _pluginsAdminDlg.isValide(); _pluginsAdminDlg.setPluginsManager(&_pluginsManager); - _pluginsManager.setMenu(_mainMenuHandle, NULL, enablePluginAdmin); + _pluginsManager.initMenu(_mainMenuHandle, enablePluginAdmin); //Search menu //disable "Search Results Window" under Search Menu @@ -554,7 +554,7 @@ LRESULT Notepad_plus::init(HWND hwnd) ::ModifyMenu(_mainMenuHandle, MENUINDEX_PLUGINS, MF_BYPOSITION, 0, pluginsTrans.c_str()); } //Windows menu - _windowsMenu.init(_pPublicInterface->getHinst(), _mainMenuHandle, windowTrans.c_str()); + _windowsMenu.init(_mainMenuHandle, windowTrans.c_str()); // Update context menu strings (translated) vector & tmp = nppParam.getContextMenuItems(); diff --git a/PowerEditor/src/Notepad_plus.rc b/PowerEditor/src/Notepad_plus.rc index 2aa872417..b9981e739 100644 --- a/PowerEditor/src/Notepad_plus.rc +++ b/PowerEditor/src/Notepad_plus.rc @@ -1163,6 +1163,29 @@ BEGIN BEGIN MENUITEM "&Run...", IDM_EXECUTE END + + POPUP "&Plugins" + BEGIN + MENUITEM "Open Plugins Folder...", IDM_SETTING_OPENPLUGINSDIR + END + + POPUP "&Window" + BEGIN + POPUP "Sort By" + BEGIN + MENUITEM "Name A to Z", IDM_WINDOW_SORT_FN_ASC + MENUITEM "Name Z to A", IDM_WINDOW_SORT_FN_DSC + MENUITEM "Path A to Z", IDM_WINDOW_SORT_FP_ASC + MENUITEM "Path Z to A", IDM_WINDOW_SORT_FP_DSC + MENUITEM "Type A to Z", IDM_WINDOW_SORT_FT_ASC + MENUITEM "Type Z to A", IDM_WINDOW_SORT_FT_DSC + MENUITEM "Size Smaller to Larger", IDM_WINDOW_SORT_FS_ASC + MENUITEM "Size Larger to Smaller", IDM_WINDOW_SORT_FS_DSC + END + MENUITEM SEPARATOR + MENUITEM "Recent Window", IDM_WINDOW_MRU_FIRST, GRAYED + MENUITEM "&Windows...", IDM_WINDOW_WINDOWS + END POPUP "&?" BEGIN diff --git a/PowerEditor/src/Parameters.cpp b/PowerEditor/src/Parameters.cpp index cff734bae..ad6af2621 100644 --- a/PowerEditor/src/Parameters.cpp +++ b/PowerEditor/src/Parameters.cpp @@ -405,14 +405,14 @@ static const WinMenuKeyDefinition winKeyDefs[] = { VK_F5, IDM_EXECUTE, false, false, false, nullptr }, - { VK_NULL, IDM_WINDOW_SORT_FN_ASC, false, false, false, nullptr }, - { VK_NULL, IDM_WINDOW_SORT_FN_DSC, false, false, false, nullptr }, - { VK_NULL, IDM_WINDOW_SORT_FP_ASC, false, false, false, nullptr }, - { VK_NULL, IDM_WINDOW_SORT_FP_DSC, false, false, false, nullptr }, - { VK_NULL, IDM_WINDOW_SORT_FT_ASC, false, false, false, nullptr }, - { VK_NULL, IDM_WINDOW_SORT_FT_DSC, false, false, false, nullptr }, - { VK_NULL, IDM_WINDOW_SORT_FS_ASC, false, false, false, nullptr }, - { VK_NULL, IDM_WINDOW_SORT_FS_DSC, false, false, false, nullptr }, + { VK_NULL, IDM_WINDOW_SORT_FN_ASC, false, false, false, TEXT("Sort By Name A to Z") }, + { VK_NULL, IDM_WINDOW_SORT_FN_DSC, false, false, false, TEXT("Sort By Name Z to A") }, + { VK_NULL, IDM_WINDOW_SORT_FP_ASC, false, false, false, TEXT("Sort By Path A to Z") }, + { VK_NULL, IDM_WINDOW_SORT_FP_DSC, false, false, false, TEXT("Sort By Path Z to A") }, + { VK_NULL, IDM_WINDOW_SORT_FT_ASC, false, false, false, TEXT("Sort By Type A to Z") }, + { VK_NULL, IDM_WINDOW_SORT_FT_DSC, false, false, false, TEXT("Sort By Type Z to A") }, + { VK_NULL, IDM_WINDOW_SORT_FS_ASC, false, false, false, TEXT("Sort By Size Smaller to Larger") }, + { VK_NULL, IDM_WINDOW_SORT_FS_DSC, false, false, false, TEXT("Sort By Size Larger to Smaller") }, { VK_NULL, IDM_CMDLINEARGUMENTS, false, false, false, nullptr }, { VK_NULL, IDM_HOMESWEETHOME, false, false, false, nullptr }, diff --git a/PowerEditor/src/WinControls/WindowsDlg/WindowsDlg.cpp b/PowerEditor/src/WinControls/WindowsDlg/WindowsDlg.cpp index 32798a3ed..c592491f8 100644 --- a/PowerEditor/src/WinControls/WindowsDlg/WindowsDlg.cpp +++ b/PowerEditor/src/WinControls/WindowsDlg/WindowsDlg.cpp @@ -1148,18 +1148,10 @@ LRESULT CALLBACK WindowsDlg::listViewProc(HWND hwnd, UINT Message, WPARAM wParam return CallWindowProc(reinterpret_cast(originalListViewProc), hwnd, Message, wParam, lParam); } -WindowsMenu::WindowsMenu() -{} -WindowsMenu::~WindowsMenu() +void WindowsMenu::init(HMENU hMainMenu, const TCHAR *translation) { - if (_hMenu) - DestroyMenu(_hMenu); -} - -void WindowsMenu::init(HINSTANCE hInst, HMENU hMainMenu, const TCHAR *translation) -{ - _hMenu = ::LoadMenu(hInst, MAKEINTRESOURCE(IDR_WINDOWS_MENU)); + _hMenu = ::GetSubMenu(hMainMenu, 11); if (translation && translation[0]) { @@ -1167,25 +1159,6 @@ void WindowsMenu::init(HINSTANCE hInst, HMENU hMainMenu, const TCHAR *translatio windowStr += TEXT("..."); ::ModifyMenu(_hMenu, IDM_WINDOW_WINDOWS, MF_BYCOMMAND, IDM_WINDOW_WINDOWS, windowStr.c_str()); } - - int32_t pos = 0; - for (pos = GetMenuItemCount(hMainMenu) - 1; pos > 0; --pos) - { - if ((GetMenuState(hMainMenu, pos, MF_BYPOSITION) & MF_POPUP) != MF_POPUP) - continue; - break; - } - - MENUITEMINFO mii; - memset(&mii, 0, sizeof(mii)); - mii.cbSize = sizeof(mii); - mii.fMask = MIIM_STRING|MIIM_SUBMENU; - - TCHAR buffer[32]; - LoadString(hInst, IDR_WINDOWS_MENU, buffer, 32); - mii.dwTypeData = (TCHAR *)((translation && translation[0])?translation:buffer); - mii.hSubMenu = _hMenu; - InsertMenuItem(hMainMenu, pos, TRUE, &mii); } void WindowsMenu::initPopupMenu(HMENU hMenu, DocTabView *pTab) diff --git a/PowerEditor/src/WinControls/WindowsDlg/WindowsDlg.h b/PowerEditor/src/WinControls/WindowsDlg/WindowsDlg.h index d7088e8d4..95de37673 100644 --- a/PowerEditor/src/WinControls/WindowsDlg/WindowsDlg.h +++ b/PowerEditor/src/WinControls/WindowsDlg/WindowsDlg.h @@ -109,9 +109,9 @@ private: class WindowsMenu { public: - WindowsMenu(); - ~WindowsMenu(); - void init(HINSTANCE hInst, HMENU hMainMenu, const TCHAR *translation); + WindowsMenu() {}; + ~WindowsMenu() {}; + void init(HMENU hMainMenu, const TCHAR *translation); void initPopupMenu(HMENU hMenu, DocTabView *pTab); private: diff --git a/PowerEditor/src/WinControls/WindowsDlg/WindowsDlg.rc b/PowerEditor/src/WinControls/WindowsDlg/WindowsDlg.rc index a3056ce76..428b623ec 100644 --- a/PowerEditor/src/WinControls/WindowsDlg/WindowsDlg.rc +++ b/PowerEditor/src/WinControls/WindowsDlg/WindowsDlg.rc @@ -30,27 +30,3 @@ BEGIN PUSHBUTTON "Sort &tabs",IDC_WINDOWS_SORT,219,60,60,14 PUSHBUTTON "&OK",IDCANCEL,219,169,60,14 END - -IDR_WINDOWS_MENU MENU -BEGIN - POPUP "Sort By" - BEGIN - MENUITEM "Name A to Z", IDM_WINDOW_SORT_FN_ASC - MENUITEM "Name Z to A", IDM_WINDOW_SORT_FN_DSC - MENUITEM "Path A to Z", IDM_WINDOW_SORT_FP_ASC - MENUITEM "Path Z to A", IDM_WINDOW_SORT_FP_DSC - MENUITEM "Type A to Z", IDM_WINDOW_SORT_FT_ASC - MENUITEM "Type Z to A", IDM_WINDOW_SORT_FT_DSC - MENUITEM "Size Smaller to Larger", IDM_WINDOW_SORT_FS_ASC - MENUITEM "Size Larger to Smaller", IDM_WINDOW_SORT_FS_DSC - END - MENUITEM SEPARATOR - MENUITEM "Recent Window", IDM_WINDOW_MRU_FIRST, GRAYED - MENUITEM "&Windows...", IDM_WINDOW_WINDOWS -END - - -STRINGTABLE -BEGIN - IDR_WINDOWS_MENU "&Window" -END diff --git a/PowerEditor/src/WinControls/WindowsDlg/WindowsDlgRc.h b/PowerEditor/src/WinControls/WindowsDlg/WindowsDlgRc.h index 47246b4ad..a42abc251 100644 --- a/PowerEditor/src/WinControls/WindowsDlg/WindowsDlgRc.h +++ b/PowerEditor/src/WinControls/WindowsDlg/WindowsDlgRc.h @@ -33,19 +33,3 @@ #define IDC_WINDOWS_SAVE (IDD_WINDOWS + 2) #define IDC_WINDOWS_CLOSE (IDD_WINDOWS + 3) #define IDC_WINDOWS_SORT (IDD_WINDOWS + 4) - -#define IDR_WINDOWS_MENU 11000 - #define IDM_WINDOW_WINDOWS (IDR_WINDOWS_MENU + 1) - #define IDM_WINDOW_SORT_FN_ASC (IDR_WINDOWS_MENU + 2) - #define IDM_WINDOW_SORT_FN_DSC (IDR_WINDOWS_MENU + 3) - #define IDM_WINDOW_SORT_FP_ASC (IDR_WINDOWS_MENU + 4) - #define IDM_WINDOW_SORT_FP_DSC (IDR_WINDOWS_MENU + 5) - #define IDM_WINDOW_SORT_FT_ASC (IDR_WINDOWS_MENU + 6) - #define IDM_WINDOW_SORT_FT_DSC (IDR_WINDOWS_MENU + 7) - #define IDM_WINDOW_SORT_FS_ASC (IDR_WINDOWS_MENU + 8) - #define IDM_WINDOW_SORT_FS_DSC (IDR_WINDOWS_MENU + 9) - #define IDM_WINDOW_MRU_FIRST (IDR_WINDOWS_MENU + 20) - #define IDM_WINDOW_MRU_LIMIT (IDR_WINDOWS_MENU + 29) - #define IDM_WINDOW_COPY_NAME (IDM_WINDOW_MRU_LIMIT + 1) - #define IDM_WINDOW_COPY_PATH (IDM_WINDOW_MRU_LIMIT + 2) - diff --git a/PowerEditor/src/localization.cpp b/PowerEditor/src/localization.cpp index 7de6da0f6..39dd992c9 100644 --- a/PowerEditor/src/localization.cpp +++ b/PowerEditor/src/localization.cpp @@ -99,6 +99,7 @@ MenuPosition menuPos[] = { { 7, 1, -1, "tools-sha256" }, { 11, 0, -1, "window-sortby"}, + { -1, -1, -1, "" } // End of array }; @@ -363,14 +364,6 @@ void NativeLangSpeaker::changeMenuLang(HMENU menuHandle, generic_string & plugin if (nullptr == subMenuIdStr or nullptr == name) continue; - if (!strcmp(subMenuIdStr, "window-sortby")) - { - generic_string sortTrans; - const wchar_t *nameW = wmc.char2wchar(name, _nativeLangEncoding); - sortTrans = nameW; - ::ModifyMenu(menuHandle, 0, MF_BYPOSITION, 0, sortTrans.c_str()); - } - MenuPosition& menuPos = getMenuPosition(subMenuIdStr); int x = menuPos._x; int y = menuPos._y; diff --git a/PowerEditor/src/menuCmdID.h b/PowerEditor/src/menuCmdID.h index 86b192cf9..b5618f140 100644 --- a/PowerEditor/src/menuCmdID.h +++ b/PowerEditor/src/menuCmdID.h @@ -585,3 +585,18 @@ #define IDM_SYSTRAYPOPUP_NEW_AND_PASTE (IDM_SYSTRAYPOPUP + 3) #define IDM_SYSTRAYPOPUP_OPENFILE (IDM_SYSTRAYPOPUP + 4) #define IDM_SYSTRAYPOPUP_CLOSE (IDM_SYSTRAYPOPUP + 5) + +#define IDR_WINDOWS_MENU 11000 + #define IDM_WINDOW_WINDOWS (IDR_WINDOWS_MENU + 1) + #define IDM_WINDOW_SORT_FN_ASC (IDR_WINDOWS_MENU + 2) + #define IDM_WINDOW_SORT_FN_DSC (IDR_WINDOWS_MENU + 3) + #define IDM_WINDOW_SORT_FP_ASC (IDR_WINDOWS_MENU + 4) + #define IDM_WINDOW_SORT_FP_DSC (IDR_WINDOWS_MENU + 5) + #define IDM_WINDOW_SORT_FT_ASC (IDR_WINDOWS_MENU + 6) + #define IDM_WINDOW_SORT_FT_DSC (IDR_WINDOWS_MENU + 7) + #define IDM_WINDOW_SORT_FS_ASC (IDR_WINDOWS_MENU + 8) + #define IDM_WINDOW_SORT_FS_DSC (IDR_WINDOWS_MENU + 9) + #define IDM_WINDOW_MRU_FIRST (IDR_WINDOWS_MENU + 20) + #define IDM_WINDOW_MRU_LIMIT (IDR_WINDOWS_MENU + 29) + #define IDM_WINDOW_COPY_NAME (IDM_WINDOW_MRU_LIMIT + 1) + #define IDM_WINDOW_COPY_PATH (IDM_WINDOW_MRU_LIMIT + 2)