Additional change for r909 and code cleanup.

This commit is contained in:
spx 2011-08-20 04:55:29 +00:00
parent c8694ccf16
commit 2c7c53553b
2 changed files with 38 additions and 29 deletions

View File

@ -70,7 +70,7 @@ END
IDR_CONTEXT_MENU MENU DISCARDABLE IDR_CONTEXT_MENU MENU DISCARDABLE
BEGIN BEGIN
POPUP "Context" POPUP "Rainmeter Menu"
BEGIN BEGIN
MENUITEM "About...", ID_CONTEXT_ABOUT MENUITEM "About...", ID_CONTEXT_ABOUT
MENUITEM "Downloads", ID_CONTEXT_DOWNLOADS MENUITEM "Downloads", ID_CONTEXT_DOWNLOADS
@ -78,6 +78,7 @@ BEGIN
MENUITEM SEPARATOR MENUITEM SEPARATOR
POPUP "Configs" POPUP "Configs"
BEGIN BEGIN
MENUITEM "No configs available", 0, GRAYED
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "Open Skins' Folder", ID_CONTEXT_OPENSKINSFOLDER MENUITEM "Open Skins' Folder", ID_CONTEXT_OPENSKINSFOLDER
MENUITEM "Disable Dragging", ID_CONTEXT_DISABLEDRAG MENUITEM "Disable Dragging", ID_CONTEXT_DISABLEDRAG
@ -114,7 +115,7 @@ BEGIN
MENUITEM SEPARATOR MENUITEM SEPARATOR
POPUP "Variants" POPUP "Variants"
BEGIN BEGIN
MENUITEM " ", 0, GRAYED // DUMMY MENUITEM SEPARATOR // DUMMY
END END
MENUITEM SEPARATOR MENUITEM SEPARATOR
POPUP "Settings" POPUP "Settings"

View File

@ -3893,9 +3893,10 @@ void CRainmeter::ShowContextMenu(POINT pos, CMeterWindow* meterWindow)
HMENU configMenu = GetSubMenu(subMenu, 4); HMENU configMenu = GetSubMenu(subMenu, 4);
if (configMenu) if (configMenu)
{ {
if (!CreateConfigMenu(configMenu, m_ConfigMenu)) if (!m_ConfigMenu.empty())
{ {
InsertMenu(configMenu, 0, MF_BYPOSITION | MF_GRAYED, 0, L"No configs available"); DeleteMenu(configMenu, 0, MF_BYPOSITION);
CreateConfigMenu(configMenu, m_ConfigMenu);
} }
if (m_DisableDragging) if (m_DisableDragging)
@ -3914,10 +3915,13 @@ void CRainmeter::ShowContextMenu(POINT pos, CMeterWindow* meterWindow)
{ {
HMENU rainmeterMenu = subMenu; HMENU rainmeterMenu = subMenu;
subMenu = CreateSkinMenu(meterWindow, 0, configMenu); subMenu = CreateSkinMenu(meterWindow, 0, configMenu);
InsertMenu(subMenu, 9, MF_BYPOSITION | MF_SEPARATOR, 0, NULL);
InsertMenu(subMenu, 10, MF_BYPOSITION | MF_POPUP, (UINT_PTR)rainmeterMenu, L"Rainmeter Menu");
RemoveMenu(rainmeterMenu, ID_CONTEXT_DOWNLOADS, MF_BYCOMMAND); WCHAR buffer[256];
GetMenuString(menu, 0, buffer, 256, MF_BYPOSITION);
InsertMenu(subMenu, 10, MF_BYPOSITION | MF_POPUP, (UINT_PTR)rainmeterMenu, buffer);
InsertMenu(subMenu, 11, MF_BYPOSITION | MF_SEPARATOR, 0, NULL);
DeleteMenu(rainmeterMenu, ID_CONTEXT_DOWNLOADS, MF_BYCOMMAND);
} }
else else
{ {
@ -4001,22 +4005,21 @@ HMENU CRainmeter::CreateConfigMenu(HMENU configMenu, std::vector<CONFIGMENU>& co
configMenu = CreatePopupMenu(); configMenu = CreatePopupMenu();
} }
bool item = false; bool separator = false;
for (int i = 0, j = 0, isize = (int)configMenuData.size(); i < isize; ++i) for (int i = 0, j = 0, isize = (int)configMenuData.size(); i < isize; ++i)
{ {
if (configMenuData[i].index == -1) if (configMenuData[i].index == -1)
{ {
if (item) HMENU submenu = CreateConfigMenu(NULL, configMenuData[i].children);
if (submenu)
{
if (separator)
{ {
// Insert a separator // Insert a separator
InsertMenu(configMenu, i, MF_BYPOSITION | MF_SEPARATOR, 0, NULL); InsertMenu(configMenu, i, MF_BYPOSITION | MF_SEPARATOR, 0, NULL);
++j; ++j;
item = false; separator = false;
} }
HMENU submenu = CreateConfigMenu(NULL, configMenuData[i].children);
if (submenu)
{
InsertMenu(configMenu, i + j, MF_BYPOSITION | MF_POPUP, (UINT_PTR)submenu, configMenuData[i].name.c_str()); InsertMenu(configMenu, i + j, MF_BYPOSITION | MF_POPUP, (UINT_PTR)submenu, configMenuData[i].name.c_str());
} }
} }
@ -4024,7 +4027,7 @@ HMENU CRainmeter::CreateConfigMenu(HMENU configMenu, std::vector<CONFIGMENU>& co
{ {
CONFIG& config = m_ConfigStrings[configMenuData[i].index]; CONFIG& config = m_ConfigStrings[configMenuData[i].index];
InsertMenu(configMenu, i, MF_BYPOSITION | ((config.active == i + 1) ? MF_CHECKED : MF_UNCHECKED), config.commands[i], configMenuData[i].name.c_str()); InsertMenu(configMenu, i, MF_BYPOSITION | ((config.active == i + 1) ? MF_CHECKED : MF_UNCHECKED), config.commands[i], configMenuData[i].name.c_str());
item = true; separator = true;
} }
} }
@ -4123,32 +4126,37 @@ HMENU CRainmeter::CreateSkinMenu(CMeterWindow* meterWindow, int index, HMENU con
value = max(0, value); value = max(0, value);
CheckMenuItem(alphaMenu, value, MF_BYPOSITION | MF_CHECKED); CheckMenuItem(alphaMenu, value, MF_BYPOSITION | MF_CHECKED);
if (meterWindow->GetWindowHide() == HIDEMODE_FADEIN) switch (meterWindow->GetWindowHide())
{ {
case HIDEMODE_FADEIN:
CheckMenuItem(alphaMenu, ID_CONTEXT_SKINMENU_TRANSPARENCY_FADEIN, MF_BYCOMMAND | MF_CHECKED); CheckMenuItem(alphaMenu, ID_CONTEXT_SKINMENU_TRANSPARENCY_FADEIN, MF_BYCOMMAND | MF_CHECKED);
EnableMenuItem(alphaMenu, ID_CONTEXT_SKINMENU_TRANSPARENCY_FADEOUT, MF_BYCOMMAND | MF_GRAYED); EnableMenuItem(alphaMenu, ID_CONTEXT_SKINMENU_TRANSPARENCY_FADEOUT, MF_BYCOMMAND | MF_GRAYED);
} break;
else if (meterWindow->GetWindowHide() == HIDEMODE_FADEOUT)
{ case HIDEMODE_FADEOUT:
CheckMenuItem(alphaMenu, ID_CONTEXT_SKINMENU_TRANSPARENCY_FADEOUT, MF_BYCOMMAND | MF_CHECKED); CheckMenuItem(alphaMenu, ID_CONTEXT_SKINMENU_TRANSPARENCY_FADEOUT, MF_BYCOMMAND | MF_CHECKED);
EnableMenuItem(alphaMenu, ID_CONTEXT_SKINMENU_TRANSPARENCY_FADEIN, MF_BYCOMMAND | MF_GRAYED); EnableMenuItem(alphaMenu, ID_CONTEXT_SKINMENU_TRANSPARENCY_FADEIN, MF_BYCOMMAND | MF_GRAYED);
} break;
else if (meterWindow->GetWindowHide() == HIDEMODE_HIDE)
{ case HIDEMODE_HIDE:
EnableMenuItem(alphaMenu, ID_CONTEXT_SKINMENU_TRANSPARENCY_FADEIN, MF_BYCOMMAND | MF_GRAYED); EnableMenuItem(alphaMenu, ID_CONTEXT_SKINMENU_TRANSPARENCY_FADEIN, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(alphaMenu, ID_CONTEXT_SKINMENU_TRANSPARENCY_FADEOUT, MF_BYCOMMAND | MF_GRAYED); EnableMenuItem(alphaMenu, ID_CONTEXT_SKINMENU_TRANSPARENCY_FADEOUT, MF_BYCOMMAND | MF_GRAYED);
break;
} }
} }
} }
// Tick the configs // Tick the configs
if (meterWindow->GetWindowHide() == HIDEMODE_HIDE) switch (meterWindow->GetWindowHide())
{ {
case HIDEMODE_HIDE:
CheckMenuItem(settingsMenu, ID_CONTEXT_SKINMENU_HIDEONMOUSE, MF_BYCOMMAND | MF_CHECKED); CheckMenuItem(settingsMenu, ID_CONTEXT_SKINMENU_HIDEONMOUSE, MF_BYCOMMAND | MF_CHECKED);
} break;
else if (meterWindow->GetWindowHide() != HIDEMODE_NONE)
{ case HIDEMODE_FADEIN:
case HIDEMODE_FADEOUT:
EnableMenuItem(settingsMenu, ID_CONTEXT_SKINMENU_HIDEONMOUSE, MF_BYCOMMAND | MF_GRAYED); EnableMenuItem(settingsMenu, ID_CONTEXT_SKINMENU_HIDEONMOUSE, MF_BYCOMMAND | MF_GRAYED);
break;
} }
if (meterWindow->GetSnapEdges()) if (meterWindow->GetSnapEdges())
@ -4190,7 +4198,7 @@ HMENU CRainmeter::CreateSkinMenu(CMeterWindow* meterWindow, int index, HMENU con
HMENU variantsMenu = GetSubMenu(skinMenu, 2); HMENU variantsMenu = GetSubMenu(skinMenu, 2);
if (variantsMenu) if (variantsMenu)
{ {
RemoveMenu(variantsMenu, 0, MF_BYPOSITION); DeleteMenu(variantsMenu, 0, MF_BYPOSITION);
} }
// Give the menuitem the unique id that depends on the skin // Give the menuitem the unique id that depends on the skin