Files
Work/statbar/STATMENU.CPP
2024-08-07 09:16:27 -04:00

147 lines
3.5 KiB
C++

#include <statbar/statmenu.hpp>
#include <common/window.hpp>
#include <common/block.hpp>
StatusBarMenu::StatusBarMenu(void)
{
}
StatusBarMenu::StatusBarMenu(const StatusBarMenu &someStatusBarMenu)
{ // private implementation
*this=someStatusBarMenu;
}
StatusBarMenu::StatusBarMenu(const GUIWindow &someGUIWindow)
: mTopLevelMenu(someGUIWindow.getMenu())
{
sizeMenuItems(mTopLevelMenu);
}
StatusBarMenu::~StatusBarMenu()
{
}
StatusBarMenu &StatusBarMenu::operator=(const GUIWindow &someGUIWindow)
{
mTopLevelMenu=someGUIWindow.getMenu();
sizeMenuItems(mTopLevelMenu);
return *this;
}
StatusBarMenu &StatusBarMenu::operator=(const PureMenu &somePureMenu)
{
mTopLevelMenu=(HMENU)somePureMenu;
sizeMenuItems(mTopLevelMenu);
return *this;
}
StatusBarMenu &StatusBarMenu::operator=(const StatusBarMenu &/*someStatusBarMenu*/)
{
return *this;
}
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));
if(!subMenu.isOkay())continue;
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=" ";
menuItemString.removeTokens("&");
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;
}