Initial
This commit is contained in:
146
statbar/STATMENU.CPP
Normal file
146
statbar/STATMENU.CPP
Normal file
@@ -0,0 +1,146 @@
|
||||
#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;
|
||||
}
|
||||
Reference in New Issue
Block a user