121 lines
2.9 KiB
C++
121 lines
2.9 KiB
C++
#include <statbar/statmenu.hpp>
|
|
#include <common/window.hpp>
|
|
#include <common/block.hpp>
|
|
|
|
StatusBarMenu::StatusBarMenu(void)
|
|
{
|
|
}
|
|
|
|
StatusBarMenu::StatusBarMenu(const Window &someWindow)
|
|
: mTopLevelMenu((HMENU)someWindow)
|
|
{
|
|
sizeMenuItems(mTopLevelMenu);
|
|
}
|
|
|
|
StatusBarMenu::~StatusBarMenu()
|
|
{
|
|
}
|
|
|
|
void StatusBarMenu::sizeMenuItems(HMENU hTopLevelMenu)
|
|
{
|
|
WORD menuItems(::GetMenuItemCount(mTopLevelMenu=hTopLevelMenu));
|
|
|
|
if(0xFFFF==menuItems||!menuItems)return;
|
|
mPopUpMenu.size(menuItems);
|
|
for(int i=0;i<menuItems;i++)
|
|
{
|
|
PureMenu subMenu(::GetSubMenu(hTopLevelMenu,i));
|
|
WORD subItemCount(::GetMenuItemCount(subMenu));
|
|
mPopUpMenu[i]=subMenu;
|
|
mPopUpMenu[i].size(subItemCount);
|
|
for(int j=0;j<subItemCount;j++)
|
|
{
|
|
UINT menuItemID(::GetMenuItemID(subMenu,j));
|
|
String menuItemString;
|
|
::GetMenuString(subMenu,menuItemID,menuItemString,String::MaxString,MF_BYCOMMAND);
|
|
if(menuItemString.isNull())menuItemString=" ";
|
|
MenuItem menuItem(menuItemString,menuItemID);
|
|
mPopUpMenu[i].operator[](j)=menuItem;
|
|
}
|
|
}
|
|
}
|
|
|
|
WORD StatusBarMenu::setMenuLabelDescriptors(Block<String> &menuLabels)
|
|
{
|
|
size_t labelItems((WORD)menuLabels.size());
|
|
size_t menuItems((WORD)mPopUpMenu.size());
|
|
|
|
for(int itemIndex=0;itemIndex<menuItems;itemIndex++)
|
|
{
|
|
if(itemIndex>=labelItems)return FALSE;
|
|
if(itemIndex>=menuItems)return FALSE;
|
|
String menuLabelString=menuLabels[itemIndex];
|
|
mPopUpMenu[itemIndex].menuLabel(menuLabelString);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
WORD StatusBarMenu::setMenuItemDescriptors(Block<MenuItem> &menuItems)
|
|
{
|
|
size_t size((WORD)menuItems.size());
|
|
WORD returnCode(0);
|
|
|
|
for(int i=0;i<size;i++)
|
|
returnCode+=setMenuItemDescriptor(menuItems[i]);
|
|
return returnCode;
|
|
}
|
|
|
|
WORD StatusBarMenu::setMenuItemDescriptor(const MenuItem &someMenuItem)
|
|
{
|
|
size_t menuItems((WORD)mPopUpMenu.size());
|
|
|
|
for(int i=0;i<menuItems;i++)
|
|
{
|
|
size_t subMenuItems((WORD)mPopUpMenu[i].size());
|
|
for(int j=0;j<subMenuItems;j++)
|
|
{
|
|
if(someMenuItem.itemID()==mPopUpMenu[i].operator[](j).itemID())
|
|
{
|
|
String menuItemString=someMenuItem.itemString();
|
|
mPopUpMenu[i].operator[](j).itemString(menuItemString);
|
|
return TRUE;
|
|
}
|
|
}
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
WORD StatusBarMenu::getMenuItemDescriptor(MenuItem &menuItem)
|
|
{
|
|
size_t menuItems((WORD)mPopUpMenu.size());
|
|
|
|
for(int i=0;i<menuItems;i++)
|
|
{
|
|
size_t subMenuItems((WORD)mPopUpMenu[i].size());
|
|
for(int j=0;j<subMenuItems;j++)
|
|
{
|
|
if(menuItem.itemID()==mPopUpMenu[i].operator[](j).itemID())
|
|
{
|
|
menuItem.itemString(mPopUpMenu[i].operator[](j).itemString());
|
|
return TRUE;
|
|
}
|
|
}
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
WORD StatusBarMenu::getMenuItemDescriptor(PureMenu &somePureMenu,MenuItem &menuItem)
|
|
{
|
|
size_t menuItems((WORD)mPopUpMenu.size());
|
|
|
|
for(int itemIndex=0;itemIndex<menuItems;itemIndex++)
|
|
{
|
|
if((HMENU)mPopUpMenu[itemIndex]==(HMENU)somePureMenu)
|
|
{
|
|
menuItem.itemString(mPopUpMenu[itemIndex].menuLabel());
|
|
return TRUE;
|
|
}
|
|
}
|
|
return FALSE;
|
|
}
|