Fix translation problem for "Sort By"

Make "Plugins" & "Window" menu static to simplify the code.
This commit is contained in:
Don Ho 2022-02-21 00:57:15 +01:00
parent 1c8b867395
commit 5917fdefb0
11 changed files with 57 additions and 100 deletions

View File

@ -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(); size_t nbPlugin = _pluginInfos.size();
if (!_hPluginsMenu) if (!_hPluginsMenu)
{ {
_hPluginsMenu = ::CreateMenu(); _hPluginsMenu = ::GetSubMenu(hMenu, 10);
::InsertMenu(hMenu, MENUINDEX_PLUGINS, MF_BYPOSITION | MF_POPUP, (UINT_PTR)_hPluginsMenu, nom_menu);
int i = 1; 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, IDM_SETTING_PLUGINADM, TEXT("Plugins Admin..."));
::InsertMenu(_hPluginsMenu, i++, MF_BYPOSITION | MF_SEPARATOR, 0, TEXT("")); ::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) for (size_t i = 0; i < nbPlugin; ++i)

View File

@ -78,9 +78,6 @@ public:
{ {
for (size_t i = 0, len = _pluginInfos.size(); i < len; ++i) for (size_t i = 0, len = _pluginInfos.size(); i < len; ++i)
delete _pluginInfos[i]; delete _pluginInfos[i];
if (_hPluginsMenu)
DestroyMenu(_hPluginsMenu);
} }
void init(const NppData & nppData) void init(const NppData & nppData)
@ -97,7 +94,7 @@ public:
void runPluginCommand(const TCHAR *pluginName, int commandID); void runPluginCommand(const TCHAR *pluginName, int commandID);
void addInMenuFromPMIndex(int i); 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 getShortcutByCmdID(int cmdID, ShortcutKey *sk);
bool removeShortcutByCmdID(int cmdID); bool removeShortcutByCmdID(int cmdID);

View File

@ -529,7 +529,7 @@ LRESULT Notepad_plus::init(HWND hwnd)
//Plugin menu //Plugin menu
bool enablePluginAdmin = _pluginsAdminDlg.isValide(); bool enablePluginAdmin = _pluginsAdminDlg.isValide();
_pluginsAdminDlg.setPluginsManager(&_pluginsManager); _pluginsAdminDlg.setPluginsManager(&_pluginsManager);
_pluginsManager.setMenu(_mainMenuHandle, NULL, enablePluginAdmin); _pluginsManager.initMenu(_mainMenuHandle, enablePluginAdmin);
//Search menu //Search menu
//disable "Search Results Window" under 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()); ::ModifyMenu(_mainMenuHandle, MENUINDEX_PLUGINS, MF_BYPOSITION, 0, pluginsTrans.c_str());
} }
//Windows menu //Windows menu
_windowsMenu.init(_pPublicInterface->getHinst(), _mainMenuHandle, windowTrans.c_str()); _windowsMenu.init(_mainMenuHandle, windowTrans.c_str());
// Update context menu strings (translated) // Update context menu strings (translated)
vector<MenuItemUnit> & tmp = nppParam.getContextMenuItems(); vector<MenuItemUnit> & tmp = nppParam.getContextMenuItems();

View File

@ -1163,6 +1163,29 @@ BEGIN
BEGIN BEGIN
MENUITEM "&Run...", IDM_EXECUTE MENUITEM "&Run...", IDM_EXECUTE
END 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 "&?" POPUP "&?"
BEGIN BEGIN

View File

@ -405,14 +405,14 @@ static const WinMenuKeyDefinition winKeyDefs[] =
{ VK_F5, IDM_EXECUTE, false, false, false, nullptr }, { 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_ASC, false, false, false, TEXT("Sort By Name A to Z") },
{ VK_NULL, IDM_WINDOW_SORT_FN_DSC, false, false, false, nullptr }, { 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, nullptr }, { 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, nullptr }, { 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, nullptr }, { 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, nullptr }, { 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, nullptr }, { 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, nullptr }, { 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_CMDLINEARGUMENTS, false, false, false, nullptr },
{ VK_NULL, IDM_HOMESWEETHOME, false, false, false, nullptr }, { VK_NULL, IDM_HOMESWEETHOME, false, false, false, nullptr },

View File

@ -1148,18 +1148,10 @@ LRESULT CALLBACK WindowsDlg::listViewProc(HWND hwnd, UINT Message, WPARAM wParam
return CallWindowProc(reinterpret_cast<WNDPROC>(originalListViewProc), hwnd, Message, wParam, lParam); return CallWindowProc(reinterpret_cast<WNDPROC>(originalListViewProc), hwnd, Message, wParam, lParam);
} }
WindowsMenu::WindowsMenu()
{}
WindowsMenu::~WindowsMenu() void WindowsMenu::init(HMENU hMainMenu, const TCHAR *translation)
{ {
if (_hMenu) _hMenu = ::GetSubMenu(hMainMenu, 11);
DestroyMenu(_hMenu);
}
void WindowsMenu::init(HINSTANCE hInst, HMENU hMainMenu, const TCHAR *translation)
{
_hMenu = ::LoadMenu(hInst, MAKEINTRESOURCE(IDR_WINDOWS_MENU));
if (translation && translation[0]) if (translation && translation[0])
{ {
@ -1167,25 +1159,6 @@ void WindowsMenu::init(HINSTANCE hInst, HMENU hMainMenu, const TCHAR *translatio
windowStr += TEXT("..."); windowStr += TEXT("...");
::ModifyMenu(_hMenu, IDM_WINDOW_WINDOWS, MF_BYCOMMAND, IDM_WINDOW_WINDOWS, windowStr.c_str()); ::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) void WindowsMenu::initPopupMenu(HMENU hMenu, DocTabView *pTab)

View File

@ -109,9 +109,9 @@ private:
class WindowsMenu class WindowsMenu
{ {
public: public:
WindowsMenu(); WindowsMenu() {};
~WindowsMenu(); ~WindowsMenu() {};
void init(HINSTANCE hInst, HMENU hMainMenu, const TCHAR *translation); void init(HMENU hMainMenu, const TCHAR *translation);
void initPopupMenu(HMENU hMenu, DocTabView *pTab); void initPopupMenu(HMENU hMenu, DocTabView *pTab);
private: private:

View File

@ -30,27 +30,3 @@ BEGIN
PUSHBUTTON "Sort &tabs",IDC_WINDOWS_SORT,219,60,60,14 PUSHBUTTON "Sort &tabs",IDC_WINDOWS_SORT,219,60,60,14
PUSHBUTTON "&OK",IDCANCEL,219,169,60,14 PUSHBUTTON "&OK",IDCANCEL,219,169,60,14
END 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

View File

@ -33,19 +33,3 @@
#define IDC_WINDOWS_SAVE (IDD_WINDOWS + 2) #define IDC_WINDOWS_SAVE (IDD_WINDOWS + 2)
#define IDC_WINDOWS_CLOSE (IDD_WINDOWS + 3) #define IDC_WINDOWS_CLOSE (IDD_WINDOWS + 3)
#define IDC_WINDOWS_SORT (IDD_WINDOWS + 4) #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)

View File

@ -99,6 +99,7 @@ MenuPosition menuPos[] = {
{ 7, 1, -1, "tools-sha256" }, { 7, 1, -1, "tools-sha256" },
{ 11, 0, -1, "window-sortby"}, { 11, 0, -1, "window-sortby"},
{ -1, -1, -1, "" } // End of array { -1, -1, -1, "" } // End of array
}; };
@ -363,14 +364,6 @@ void NativeLangSpeaker::changeMenuLang(HMENU menuHandle, generic_string & plugin
if (nullptr == subMenuIdStr or nullptr == name) if (nullptr == subMenuIdStr or nullptr == name)
continue; 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); MenuPosition& menuPos = getMenuPosition(subMenuIdStr);
int x = menuPos._x; int x = menuPos._x;
int y = menuPos._y; int y = menuPos._y;

View File

@ -585,3 +585,18 @@
#define IDM_SYSTRAYPOPUP_NEW_AND_PASTE (IDM_SYSTRAYPOPUP + 3) #define IDM_SYSTRAYPOPUP_NEW_AND_PASTE (IDM_SYSTRAYPOPUP + 3)
#define IDM_SYSTRAYPOPUP_OPENFILE (IDM_SYSTRAYPOPUP + 4) #define IDM_SYSTRAYPOPUP_OPENFILE (IDM_SYSTRAYPOPUP + 4)
#define IDM_SYSTRAYPOPUP_CLOSE (IDM_SYSTRAYPOPUP + 5) #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)