mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-03-26 15:49:30 +00:00
Modified files for SDL2.
This commit is contained in:
parent
33a0579735
commit
475f218bcd
33 changed files with 436 additions and 136 deletions
|
|
@ -30,6 +30,7 @@
|
|||
#include "gfx/gfxDrawUtil.h"
|
||||
#include "gui/core/guiTypes.h"
|
||||
#include "gui/core/guiControl.h"
|
||||
#include "gui/editor/guiMenuBar.h"
|
||||
#include "console/consoleTypes.h"
|
||||
#include "gfx/screenshot.h"
|
||||
#include "gfx/video/videoCapture.h"
|
||||
|
|
@ -283,6 +284,8 @@ bool GuiCanvas::onAdd()
|
|||
mLastPurchaseHideTime = 0;
|
||||
#endif
|
||||
|
||||
Sim::findObject("PlatformGenericMenubar", mMenuBarCtrl);
|
||||
|
||||
return parentRet;
|
||||
}
|
||||
|
||||
|
|
@ -302,6 +305,34 @@ void GuiCanvas::onRemove()
|
|||
Parent::onRemove();
|
||||
}
|
||||
|
||||
void GuiCanvas::setMenuBar(SimObject *obj)
|
||||
{
|
||||
GuiControl *oldMenuBar = mMenuBarCtrl;
|
||||
mMenuBarCtrl = dynamic_cast<GuiControl*>(obj);
|
||||
|
||||
//remove old menubar
|
||||
if( oldMenuBar )
|
||||
Parent::removeObject( oldMenuBar );
|
||||
|
||||
// set new menubar
|
||||
if( mMenuBarCtrl )
|
||||
Parent::addObject(mMenuBarCtrl);
|
||||
|
||||
// update window accelerator keys
|
||||
if( oldMenuBar != mMenuBarCtrl )
|
||||
{
|
||||
StringTableEntry ste = StringTable->insert("menubar");
|
||||
GuiMenuBar* menu = NULL;
|
||||
menu = !oldMenuBar ? NULL : dynamic_cast<GuiMenuBar*>(oldMenuBar->findObjectByInternalName( ste, true));
|
||||
if( menu )
|
||||
menu->removeWindowAcceleratorMap( *getPlatformWindow()->getInputGenerator() );
|
||||
|
||||
menu = !mMenuBarCtrl ? NULL : dynamic_cast<GuiMenuBar*>(mMenuBarCtrl->findObjectByInternalName( ste, true));
|
||||
if( menu )
|
||||
menu->buildWindowAcceleratorMap( *getPlatformWindow()->getInputGenerator() );
|
||||
}
|
||||
}
|
||||
|
||||
void GuiCanvas::setWindowTitle(const char *newTitle)
|
||||
{
|
||||
if (mPlatformWindow)
|
||||
|
|
@ -1023,7 +1054,7 @@ void GuiCanvas::rootMouseDown(const GuiEvent &event)
|
|||
{
|
||||
i--;
|
||||
GuiControl *ctrl = static_cast<GuiControl *>(*i);
|
||||
GuiControl *controlHit = ctrl->findHitControl(event.mousePoint);
|
||||
GuiControl *controlHit = ctrl->findHitControl( event.mousePoint - ctrl->getPosition() );
|
||||
|
||||
//see if the controlHit is a modeless dialog...
|
||||
if( !controlHit->getControlProfile()->mModal )
|
||||
|
|
@ -1293,6 +1324,9 @@ void GuiCanvas::setContentControl(GuiControl *gui)
|
|||
Sim::getGuiGroup()->addObject( ctrl );
|
||||
}
|
||||
|
||||
// set current menu bar
|
||||
setMenuBar( mMenuBarCtrl );
|
||||
|
||||
// lose the first responder from the old GUI
|
||||
GuiControl* responder = gui->findFirstTabable();
|
||||
if(responder)
|
||||
|
|
@ -1556,10 +1590,27 @@ void GuiCanvas::maintainSizing()
|
|||
GuiControl *ctrl = static_cast<GuiControl*>(*i);
|
||||
Point2I ext = ctrl->getExtent();
|
||||
Point2I pos = ctrl->getPosition();
|
||||
Point2I newExt = screenRect.extent;
|
||||
Point2I newPos = screenRect.point;
|
||||
|
||||
if(pos != screenRect.point || ext != screenRect.extent)
|
||||
// if menubar is active displace content gui control
|
||||
if( mMenuBarCtrl && (ctrl == getContentControl()) )
|
||||
{
|
||||
const SimObject *menu = mMenuBarCtrl->findObjectByInternalName( StringTable->insert("menubar"), true);
|
||||
|
||||
if( !menu )
|
||||
continue;
|
||||
|
||||
AssertFatal( dynamic_cast<const GuiControl*>(menu), "");
|
||||
|
||||
const U32 yOffset = static_cast<const GuiControl*>(menu)->getExtent().y;
|
||||
newPos.y += yOffset;
|
||||
newExt.y -= yOffset;
|
||||
}
|
||||
|
||||
if(pos != newPos || ext != newExt)
|
||||
{
|
||||
ctrl->resize(screenRect.point, screenRect.extent);
|
||||
ctrl->resize(newPos, newExt);
|
||||
resetUpdateRegions();
|
||||
}
|
||||
}
|
||||
|
|
@ -2273,7 +2324,7 @@ DefineEngineFunction(excludeOtherInstance, bool, (const char* appIdentifer),,
|
|||
"@ingroup GuiCore")
|
||||
{
|
||||
// mac/360 can only run one instance in general.
|
||||
#if !defined(TORQUE_OS_MAC) && !defined(TORQUE_OS_XENON) && !defined(TORQUE_DEBUG)
|
||||
#if !defined(TORQUE_OS_MAC) && !defined(TORQUE_OS_XENON) && !defined(TORQUE_DEBUG) && !defined(TORQUE_OS_LINUX)
|
||||
return Platform::excludeOtherInstances(appIdentifer);
|
||||
#else
|
||||
// We can just return true if we get here.
|
||||
|
|
@ -2580,6 +2631,14 @@ DefineConsoleMethod( GuiCanvas, setFocus, void, (), , "() - Claim OS input focus
|
|||
window->setFocus();
|
||||
}
|
||||
|
||||
DefineEngineMethod( GuiCanvas, setMenuBar, void, ( GuiControl* menu ),,
|
||||
"Translate a coordinate from canvas window-space to screen-space.\n"
|
||||
"@param coordinate The coordinate in window-space.\n"
|
||||
"@return The given coordinate translated to screen-space." )
|
||||
{
|
||||
return object->setMenuBar( menu );
|
||||
}
|
||||
|
||||
DefineConsoleMethod( GuiCanvas, setVideoMode, void,
|
||||
(U32 width, U32 height, bool fullscreen, U32 bitDepth, U32 refreshRate, U32 antialiasLevel),
|
||||
( false, 0, 0, 0),
|
||||
|
|
|
|||
|
|
@ -190,6 +190,8 @@ protected:
|
|||
|
||||
void checkLockMouseMove( const GuiEvent& event );
|
||||
|
||||
GuiControl *mMenuBarCtrl;
|
||||
|
||||
public:
|
||||
DECLARE_CONOBJECT(GuiCanvas);
|
||||
DECLARE_CATEGORY( "Gui Core" );
|
||||
|
|
@ -200,6 +202,8 @@ public:
|
|||
virtual bool onAdd();
|
||||
virtual void onRemove();
|
||||
|
||||
void setMenuBar(SimObject *obj);
|
||||
|
||||
static void initPersistFields();
|
||||
|
||||
/// @name Rendering methods
|
||||
|
|
|
|||
|
|
@ -215,8 +215,8 @@ DefineEngineMethod(GuiMenuBar, addMenu, void, (const char* menuText, S32 menuId)
|
|||
object->addMenu(menuText, menuId);
|
||||
}
|
||||
|
||||
DefineEngineMethod(GuiMenuBar, addMenuItem, void, (const char* targetMenu, const char* menuItemText, S32 menuItemId, const char* accelerator, int checkGroup),
|
||||
("","",0,"",-1),
|
||||
DefineEngineMethod(GuiMenuBar, addMenuItem, void, (const char* targetMenu, const char* menuItemText, S32 menuItemId, const char* accelerator, int checkGroup, const char *cmd),
|
||||
("","",0,NULL,-1,""),
|
||||
"@brief Adds a menu item to the specified menu. The menu argument can be either the text of a menu or its id.\n\n"
|
||||
"@param menu Menu name or menu Id to add the new item to.\n"
|
||||
"@param menuItemText Text for the new menu item.\n"
|
||||
|
|
@ -250,7 +250,7 @@ DefineEngineMethod(GuiMenuBar, addMenuItem, void, (const char* targetMenu, const
|
|||
Con::errorf("Cannot find menu %s for addMenuItem.", targetMenu);
|
||||
return;
|
||||
}
|
||||
object->addMenuItem(menu, menuItemText, menuItemId, accelerator != NULL ? accelerator : "", checkGroup == -1 ? -1 : checkGroup);
|
||||
object->addMenuItem(menu, menuItemText, menuItemId, accelerator != NULL ? accelerator : "", checkGroup == -1 ? -1 : checkGroup, cmd);
|
||||
}
|
||||
|
||||
DefineEngineMethod(GuiMenuBar, setMenuItemEnable, void, (const char* menuTarget, const char* menuItemTarget, bool enabled),,
|
||||
|
|
@ -767,7 +767,7 @@ DefineEngineMethod(GuiMenuBar, setSubmenuItemChecked, void, (const char* menuTar
|
|||
if(checked && submenuItem->checkGroup != -1)
|
||||
{
|
||||
// first, uncheck everything in the group:
|
||||
for(GuiMenuBar::MenuItem *itemWalk = menuItem->firstSubmenuItem; itemWalk; itemWalk = itemWalk->nextMenuItem)
|
||||
for(GuiMenuBar::MenuItem *itemWalk = menuItem->submenu->firstMenuItem; itemWalk; itemWalk = itemWalk->nextMenuItem)
|
||||
if(itemWalk->checkGroup == submenuItem->checkGroup && itemWalk->bitmapIndex == object->mCheckmarkBitmapIndex)
|
||||
itemWalk->bitmapIndex = -1;
|
||||
}
|
||||
|
|
@ -777,8 +777,7 @@ DefineEngineMethod(GuiMenuBar, setSubmenuItemChecked, void, (const char* menuTar
|
|||
//------------------------------------------------------------------------------
|
||||
// menu management methods
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
void GuiMenuBar::addMenu(const char *menuText, U32 menuId)
|
||||
GuiMenuBar::Menu* GuiMenuBar::sCreateMenu(const char *menuText, U32 menuId)
|
||||
{
|
||||
// allocate the menu
|
||||
Menu *newMenu = new Menu;
|
||||
|
|
@ -792,7 +791,12 @@ void GuiMenuBar::addMenu(const char *menuText, U32 menuId)
|
|||
newMenu->bitmapIndex = -1;
|
||||
newMenu->drawBitmapOnly = false;
|
||||
newMenu->drawBorder = true;
|
||||
|
||||
|
||||
return newMenu;
|
||||
}
|
||||
|
||||
void GuiMenuBar::addMenu(GuiMenuBar::Menu *newMenu)
|
||||
{
|
||||
// add it to the menu list
|
||||
menuBarDirty = true;
|
||||
Menu **walk;
|
||||
|
|
@ -801,6 +805,13 @@ void GuiMenuBar::addMenu(const char *menuText, U32 menuId)
|
|||
*walk = newMenu;
|
||||
}
|
||||
|
||||
void GuiMenuBar::addMenu(const char *menuText, U32 menuId)
|
||||
{
|
||||
Menu *newMenu = sCreateMenu(menuText, menuId);
|
||||
|
||||
addMenu(newMenu);
|
||||
}
|
||||
|
||||
GuiMenuBar::Menu *GuiMenuBar::findMenu(const char *menu)
|
||||
{
|
||||
if(dIsdigit(menu[0]))
|
||||
|
|
@ -877,7 +888,7 @@ void GuiMenuBar::removeMenuItem(Menu *menu, MenuItem *menuItem)
|
|||
delete menuItem;
|
||||
}
|
||||
|
||||
void GuiMenuBar::addMenuItem(Menu *menu, const char *text, U32 id, const char *accelerator, S32 checkGroup)
|
||||
GuiMenuBar::MenuItem* GuiMenuBar::addMenuItem(Menu *menu, const char *text, U32 id, const char *accelerator, S32 checkGroup, const char *cmd )
|
||||
{
|
||||
// allocate the new menu item
|
||||
MenuItem *newMenuItem = new MenuItem;
|
||||
|
|
@ -886,6 +897,7 @@ void GuiMenuBar::addMenuItem(Menu *menu, const char *text, U32 id, const char *a
|
|||
newMenuItem->accelerator = dStrdup(accelerator);
|
||||
else
|
||||
newMenuItem->accelerator = NULL;
|
||||
newMenuItem->cmd = cmd;
|
||||
newMenuItem->id = id;
|
||||
newMenuItem->checkGroup = checkGroup;
|
||||
newMenuItem->nextMenuItem = NULL;
|
||||
|
|
@ -896,15 +908,33 @@ void GuiMenuBar::addMenuItem(Menu *menu, const char *text, U32 id, const char *a
|
|||
|
||||
// Default to not having a submenu
|
||||
newMenuItem->isSubmenu = false;
|
||||
newMenuItem->firstSubmenuItem = NULL;
|
||||
newMenuItem->submenu = NULL;
|
||||
newMenuItem->submenuParentMenu = NULL;
|
||||
|
||||
// link it into the menu's menu item list
|
||||
MenuItem **walk = &menu->firstMenuItem;
|
||||
while(*walk)
|
||||
walk = &(*walk)->nextMenuItem;
|
||||
*walk = newMenuItem;
|
||||
if(menu)
|
||||
{
|
||||
MenuItem **walk = &menu->firstMenuItem;
|
||||
while(*walk)
|
||||
walk = &(*walk)->nextMenuItem;
|
||||
*walk = newMenuItem;
|
||||
}
|
||||
|
||||
return newMenuItem;
|
||||
}
|
||||
|
||||
GuiMenuBar::MenuItem* GuiMenuBar::addMenuItem(Menu *menu, MenuItem* newMenuItem)
|
||||
{
|
||||
// link it into the menu's menu item list
|
||||
if(menu)
|
||||
{
|
||||
MenuItem **walk = &menu->firstMenuItem;
|
||||
while(*walk)
|
||||
walk = &(*walk)->nextMenuItem;
|
||||
*walk = newMenuItem;
|
||||
}
|
||||
|
||||
return newMenuItem;
|
||||
}
|
||||
|
||||
void GuiMenuBar::clearMenuItems(Menu *menu)
|
||||
|
|
@ -935,16 +965,9 @@ GuiMenuBar::MenuItem *GuiMenuBar::findSubmenuItem(Menu *menu, const char *menuIt
|
|||
for(MenuItem *walk = menu->firstMenuItem; walk; walk = walk->nextMenuItem)
|
||||
if(id == walk->id)
|
||||
{
|
||||
if(walk->isSubmenu)
|
||||
if(walk->isSubmenu && walk->submenu)
|
||||
{
|
||||
U32 subid = dAtoi(submenuItem);
|
||||
for(MenuItem *subwalk = walk->firstSubmenuItem; subwalk; subwalk = subwalk->nextMenuItem)
|
||||
{
|
||||
if(subid == walk->id)
|
||||
{
|
||||
return subwalk;
|
||||
}
|
||||
}
|
||||
return GuiMenuBar::findMenuItem(walk->submenu, submenuItem);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -956,13 +979,9 @@ GuiMenuBar::MenuItem *GuiMenuBar::findSubmenuItem(Menu *menu, const char *menuIt
|
|||
for(MenuItem *walk = menu->firstMenuItem; walk; walk = walk->nextMenuItem)
|
||||
if(!dStricmp(menuItem, walk->text))
|
||||
{
|
||||
if(walk->isSubmenu)
|
||||
if(walk->isSubmenu && walk->submenu)
|
||||
{
|
||||
for(MenuItem *subwalk = walk->firstSubmenuItem; subwalk; subwalk = subwalk->nextMenuItem)
|
||||
{
|
||||
if(!dStricmp(submenuItem, subwalk->text))
|
||||
return subwalk;
|
||||
}
|
||||
return GuiMenuBar::findMenuItem(walk->submenu, submenuItem);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -970,6 +989,14 @@ GuiMenuBar::MenuItem *GuiMenuBar::findSubmenuItem(Menu *menu, const char *menuIt
|
|||
}
|
||||
}
|
||||
|
||||
GuiMenuBar::MenuItem* GuiMenuBar::findSubmenuItem(MenuItem *menuItem, const char *submenuItem)
|
||||
{
|
||||
if( !menuItem->isSubmenu )
|
||||
return NULL;
|
||||
|
||||
return GuiMenuBar::findMenuItem( menuItem->submenu, submenuItem );
|
||||
}
|
||||
|
||||
// Add a menuitem to the given submenu
|
||||
void GuiMenuBar::addSubmenuItem(Menu *menu, MenuItem *submenu, const char *text, U32 id, const char *accelerator, S32 checkGroup)
|
||||
{
|
||||
|
|
@ -997,17 +1024,30 @@ void GuiMenuBar::addSubmenuItem(Menu *menu, MenuItem *submenu, const char *text,
|
|||
|
||||
// Default to not having a submenu
|
||||
newMenuItem->isSubmenu = false;
|
||||
newMenuItem->firstSubmenuItem = NULL;
|
||||
newMenuItem->submenu = NULL;
|
||||
|
||||
// Point back to the submenu's menu
|
||||
newMenuItem->submenuParentMenu = menu;
|
||||
|
||||
// link it into the menu's menu item list
|
||||
MenuItem **walk = &submenu->firstSubmenuItem;
|
||||
MenuItem **walk = &submenu->submenu->firstMenuItem;
|
||||
while(*walk)
|
||||
walk = &(*walk)->nextMenuItem;
|
||||
*walk = newMenuItem;
|
||||
}
|
||||
|
||||
void GuiMenuBar::addSubmenuItem(Menu *menu, MenuItem *submenu, MenuItem *newMenuItem )
|
||||
{
|
||||
AssertFatal( submenu && newMenuItem, "");
|
||||
|
||||
// Point back to the submenu's menu
|
||||
newMenuItem->submenuParentMenu = menu;
|
||||
|
||||
// link it into the menu's menu item list
|
||||
MenuItem **walk = &submenu->submenu->firstMenuItem;
|
||||
while(*walk)
|
||||
walk = &(*walk)->nextMenuItem;
|
||||
*walk = newMenuItem;
|
||||
}
|
||||
|
||||
// Remove a submenu item
|
||||
|
|
@ -1020,17 +1060,7 @@ void GuiMenuBar::removeSubmenuItem(MenuItem *menuItem, MenuItem *submenuItem)
|
|||
return;
|
||||
}
|
||||
|
||||
for(MenuItem **subwalk = &menuItem->firstSubmenuItem; *subwalk; subwalk = &(*subwalk)->nextMenuItem)
|
||||
{
|
||||
if(*subwalk == submenuItem)
|
||||
{
|
||||
*subwalk = submenuItem->nextMenuItem;
|
||||
break;
|
||||
}
|
||||
}
|
||||
dFree(submenuItem->text);
|
||||
dFree(submenuItem->accelerator);
|
||||
delete submenuItem;
|
||||
GuiMenuBar::removeMenuItem(menuItem->submenu, submenuItem);
|
||||
}
|
||||
|
||||
// Clear all menuitems from a submenu
|
||||
|
|
@ -1043,8 +1073,8 @@ void GuiMenuBar::clearSubmenuItems(MenuItem *menuitem)
|
|||
return;
|
||||
}
|
||||
|
||||
while(menuitem->firstSubmenuItem)
|
||||
removeSubmenuItem(menuitem, menuitem->firstSubmenuItem);
|
||||
while(menuitem->submenu->firstMenuItem)
|
||||
removeSubmenuItem(menuitem, menuitem->submenu->firstMenuItem);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
|
@ -1317,9 +1347,8 @@ void GuiMenuBar::onRender(Point2I offset, const RectI &updateRect)
|
|||
renderChildControls( offset, updateRect );
|
||||
}
|
||||
|
||||
void GuiMenuBar::buildAcceleratorMap()
|
||||
void GuiMenuBar::buildWindowAcceleratorMap( WindowInputGenerator &inputGenerator )
|
||||
{
|
||||
Parent::buildAcceleratorMap();
|
||||
// ok, accelerator map is cleared...
|
||||
// add all our keys:
|
||||
mCurAcceleratorIndex = 1;
|
||||
|
|
@ -1334,18 +1363,22 @@ void GuiMenuBar::buildAcceleratorMap()
|
|||
continue;
|
||||
}
|
||||
EventDescriptor accelEvent;
|
||||
ActionMap::createEventDescriptor(item->accelerator, &accelEvent);
|
||||
ActionMap::createEventDescriptor(item->accelerator, &accelEvent);
|
||||
|
||||
//now we have a modifier, and a key, add them to the canvas
|
||||
GuiCanvas *root = getRoot();
|
||||
if (root)
|
||||
root->addAcceleratorKey(this, mCurAcceleratorIndex, accelEvent.eventCode, accelEvent.flags);
|
||||
inputGenerator.addAcceleratorKey( this, item->cmd, accelEvent.eventCode, accelEvent.flags);
|
||||
|
||||
item->acceleratorIndex = mCurAcceleratorIndex;
|
||||
mCurAcceleratorIndex++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GuiMenuBar::removeWindowAcceleratorMap( WindowInputGenerator &inputGenerator )
|
||||
{
|
||||
inputGenerator.removeAcceleratorKeys( this );
|
||||
}
|
||||
|
||||
void GuiMenuBar::acceleratorKeyPress(U32 index)
|
||||
{
|
||||
// loop through all the menus
|
||||
|
|
@ -1617,7 +1650,7 @@ void GuiMenuBar::highlightedMenuItem(S32 selectionIndex, RectI bounds, Point2I c
|
|||
if(list->isSubmenu)
|
||||
{
|
||||
// If there are submenu items, then open the submenu
|
||||
if(list->firstSubmenuItem)
|
||||
if(list->submenu->firstMenuItem)
|
||||
{
|
||||
mouseOverSubmenu = list;
|
||||
onSubmenuAction(selstore, bounds, cellSize);
|
||||
|
|
@ -1752,7 +1785,7 @@ void GuiMenuBar::onSubmenuAction(S32 selectionIndex, RectI bounds, Point2I cellS
|
|||
// first, call the script callback for menu selection:
|
||||
onSubmenuSelect_callback(Con::getIntArg(mouseOverSubmenu->id), mouseOverSubmenu->text);
|
||||
|
||||
MenuItem *visWalk = mouseOverSubmenu->firstSubmenuItem;
|
||||
MenuItem *visWalk = mouseOverSubmenu->submenu->firstMenuItem;
|
||||
while(visWalk)
|
||||
{
|
||||
if(visWalk->visible)
|
||||
|
|
@ -1780,7 +1813,7 @@ void GuiMenuBar::onSubmenuAction(S32 selectionIndex, RectI bounds, Point2I cellS
|
|||
|
||||
GFont *font = mProfile->mFont;
|
||||
|
||||
for(MenuItem *walk = mouseOverSubmenu->firstSubmenuItem; walk; walk = walk->nextMenuItem)
|
||||
for(MenuItem *walk = mouseOverSubmenu->submenu->firstMenuItem; walk; walk = walk->nextMenuItem)
|
||||
{
|
||||
if(!walk->visible)
|
||||
continue;
|
||||
|
|
@ -1803,7 +1836,7 @@ void GuiMenuBar::onSubmenuAction(S32 selectionIndex, RectI bounds, Point2I cellS
|
|||
|
||||
U32 entryCount = 0;
|
||||
|
||||
for(MenuItem *walk = mouseOverSubmenu->firstSubmenuItem; walk; walk = walk->nextMenuItem)
|
||||
for(MenuItem *walk = mouseOverSubmenu->submenu->firstMenuItem; walk; walk = walk->nextMenuItem)
|
||||
{
|
||||
if(!walk->visible)
|
||||
continue;
|
||||
|
|
@ -1885,7 +1918,7 @@ void GuiMenuBar::closeSubmenu()
|
|||
MenuItem *list = NULL;
|
||||
if(mouseOverSubmenu)
|
||||
{
|
||||
list = mouseOverSubmenu->firstSubmenuItem;
|
||||
list = mouseOverSubmenu->submenu->firstMenuItem;
|
||||
|
||||
while(selectionIndex && list)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@
|
|||
|
||||
class GuiMenuBar;
|
||||
class GuiMenuTextListCtrl;
|
||||
class WindowInputGenerator;
|
||||
|
||||
class GuiMenuBackgroundCtrl : public GuiControl
|
||||
{
|
||||
|
|
@ -105,9 +106,10 @@ public:
|
|||
MenuItem *nextMenuItem; // next menu item in the linked list
|
||||
|
||||
bool isSubmenu; // This menu item has a submenu that will be displayed
|
||||
MenuItem *firstSubmenuItem; // The first menu item in the submenu
|
||||
|
||||
Menu* submenuParentMenu; // For a submenu, this is the parent menu
|
||||
Menu* submenu;
|
||||
String cmd;
|
||||
};
|
||||
|
||||
struct Menu
|
||||
|
|
@ -161,21 +163,25 @@ public:
|
|||
|
||||
// internal menu handling functions
|
||||
// these are used by the script manipulation functions to add/remove/change menu items
|
||||
|
||||
static Menu* sCreateMenu(const char *menuText, U32 menuId);
|
||||
void addMenu(Menu *menu);
|
||||
void addMenu(const char *menuText, U32 menuId);
|
||||
Menu *findMenu(const char *menu); // takes either a menu text or a string id
|
||||
MenuItem *findMenuItem(Menu *menu, const char *menuItem); // takes either a menu text or a string id
|
||||
static MenuItem *findMenuItem(Menu *menu, const char *menuItem); // takes either a menu text or a string id
|
||||
void removeMenu(Menu *menu);
|
||||
void removeMenuItem(Menu *menu, MenuItem *menuItem);
|
||||
void addMenuItem(Menu *menu, const char *text, U32 id, const char *accelerator, S32 checkGroup);
|
||||
void clearMenuItems(Menu *menu);
|
||||
static void removeMenuItem(Menu *menu, MenuItem *menuItem);
|
||||
static MenuItem* addMenuItem(Menu *menu, const char *text, U32 id, const char *accelerator, S32 checkGroup, const char *cmd);
|
||||
static MenuItem* addMenuItem(Menu *menu, MenuItem *menuItem);
|
||||
static void clearMenuItems(Menu *menu);
|
||||
void clearMenus();
|
||||
|
||||
// Methods to deal with submenus
|
||||
MenuItem* findSubmenuItem(Menu *menu, const char *menuItem, const char *submenuItem);
|
||||
void addSubmenuItem(Menu *menu, MenuItem *submenu, const char *text, U32 id, const char *accelerator, S32 checkGroup);
|
||||
void removeSubmenuItem(MenuItem *menuItem, MenuItem *submenuItem);
|
||||
void clearSubmenuItems(MenuItem *menuitem);
|
||||
static MenuItem* findSubmenuItem(Menu *menu, const char *menuItem, const char *submenuItem);
|
||||
static MenuItem* findSubmenuItem(MenuItem *menuItem, const char *submenuItem);
|
||||
static void addSubmenuItem(Menu *menu, MenuItem *submenu, const char *text, U32 id, const char *accelerator, S32 checkGroup);
|
||||
static void addSubmenuItem(Menu *menu, MenuItem *submenu, MenuItem *newMenuItem );
|
||||
static void removeSubmenuItem(MenuItem *menuItem, MenuItem *submenuItem);
|
||||
static void clearSubmenuItems(MenuItem *menuitem);
|
||||
void onSubmenuAction(S32 selectionIndex, RectI bounds, Point2I cellSize);
|
||||
void closeSubmenu();
|
||||
void checkSubmenuMouseMove(const GuiEvent &event);
|
||||
|
|
@ -202,10 +208,11 @@ public:
|
|||
|
||||
void onAction();
|
||||
void closeMenu();
|
||||
void buildAcceleratorMap();
|
||||
void buildWindowAcceleratorMap( WindowInputGenerator &inputGenerator );
|
||||
void removeWindowAcceleratorMap( WindowInputGenerator &inputGenerator );
|
||||
void acceleratorKeyPress(U32 index);
|
||||
|
||||
void menuItemSelected(Menu *menu, MenuItem *item);
|
||||
virtual void menuItemSelected(Menu *menu, MenuItem *item);
|
||||
|
||||
// Added to support 'ticks'
|
||||
void processTick();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue