added API for menus to re-display from a previous page
--HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401480
This commit is contained in:
parent
69c65a848b
commit
efbf57ac90
@ -366,7 +366,9 @@ IMenuPanel *MenuManager::RenderMenu(int client, menu_states_t &md, ItemOrder ord
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (order == ItemOrder_Ascending) {
|
}
|
||||||
|
else if (order == ItemOrder_Ascending)
|
||||||
|
{
|
||||||
lastItem = drawItems[0].position;
|
lastItem = drawItems[0].position;
|
||||||
if (lastItem == 0)
|
if (lastItem == 0)
|
||||||
{
|
{
|
||||||
|
@ -288,6 +288,8 @@ void BaseMenuStyle::ClientPressedKey(int client, unsigned int key_press)
|
|||||||
IMenuHandler *mh = states.mh;
|
IMenuHandler *mh = states.mh;
|
||||||
IBaseMenu *menu = states.menu;
|
IBaseMenu *menu = states.menu;
|
||||||
|
|
||||||
|
unsigned int item_on_page = states.firstItem;
|
||||||
|
|
||||||
assert(mh != NULL);
|
assert(mh != NULL);
|
||||||
|
|
||||||
if (menu == NULL)
|
if (menu == NULL)
|
||||||
@ -380,6 +382,10 @@ void BaseMenuStyle::ClientPressedKey(int client, unsigned int key_press)
|
|||||||
mh->OnMenuCancel(menu, client, reason);
|
mh->OnMenuCancel(menu, client, reason);
|
||||||
} else {
|
} else {
|
||||||
mh->OnMenuSelect(menu, client, item);
|
mh->OnMenuSelect(menu, client, item);
|
||||||
|
if (mh->GetMenuAPIVersion2() >= 13)
|
||||||
|
{
|
||||||
|
mh->OnMenuSelect2(menu, client, item, item_on_page);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Only fire end for valid menus */
|
/* Only fire end for valid menus */
|
||||||
@ -448,7 +454,11 @@ bool BaseMenuStyle::DoClientMenu(int client, IMenuPanel *menu, IMenuHandler *mh,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BaseMenuStyle::DoClientMenu(int client, CBaseMenu *menu, IMenuHandler *mh, unsigned int time)
|
bool BaseMenuStyle::DoClientMenu(int client,
|
||||||
|
CBaseMenu *menu,
|
||||||
|
unsigned int first_item,
|
||||||
|
IMenuHandler *mh,
|
||||||
|
unsigned int time)
|
||||||
{
|
{
|
||||||
#if defined MENU_DEBUG
|
#if defined MENU_DEBUG
|
||||||
g_Logger.LogMessage("[SM_MENU] DoClientMenu() (client %d) (menu %p) (mh %p) (time %d)",
|
g_Logger.LogMessage("[SM_MENU] DoClientMenu() (client %d) (menu %p) (mh %p) (time %d)",
|
||||||
@ -498,7 +508,7 @@ bool BaseMenuStyle::DoClientMenu(int client, CBaseMenu *menu, IMenuHandler *mh,
|
|||||||
_CancelClientMenu(client, MenuCancel_Interrupted, true);
|
_CancelClientMenu(client, MenuCancel_Interrupted, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
states.firstItem = 0;
|
states.firstItem = first_item;
|
||||||
states.lastItem = 0;
|
states.lastItem = 0;
|
||||||
states.menu = menu;
|
states.menu = menu;
|
||||||
states.mh = mh;
|
states.mh = mh;
|
||||||
|
@ -91,7 +91,11 @@ public: //what derived must implement
|
|||||||
virtual CBaseMenuPlayer *GetMenuPlayer(int client) =0;
|
virtual CBaseMenuPlayer *GetMenuPlayer(int client) =0;
|
||||||
virtual void SendDisplay(int client, IMenuPanel *display) =0;
|
virtual void SendDisplay(int client, IMenuPanel *display) =0;
|
||||||
public: //what derived may implement
|
public: //what derived may implement
|
||||||
virtual bool DoClientMenu(int client, CBaseMenu *menu, IMenuHandler *mh, unsigned int time);
|
virtual bool DoClientMenu(int client,
|
||||||
|
CBaseMenu *menu,
|
||||||
|
unsigned int first_item,
|
||||||
|
IMenuHandler *mh,
|
||||||
|
unsigned int time);
|
||||||
virtual bool DoClientMenu(int client, IMenuPanel *menu, IMenuHandler *mh, unsigned int time);
|
virtual bool DoClientMenu(int client, IMenuPanel *menu, IMenuHandler *mh, unsigned int time);
|
||||||
virtual void AddClientToWatch(int client);
|
virtual void AddClientToWatch(int client);
|
||||||
virtual void RemoveClientFromWatch(int client);
|
virtual void RemoveClientFromWatch(int client);
|
||||||
|
@ -398,6 +398,14 @@ IMenuPanel *CRadioMenu::CreatePanel()
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool CRadioMenu::Display(int client, unsigned int time, IMenuHandler *alt_handler)
|
bool CRadioMenu::Display(int client, unsigned int time, IMenuHandler *alt_handler)
|
||||||
|
{
|
||||||
|
return DisplayAtItem(client, time, 0, alt_handler);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CRadioMenu::DisplayAtItem(int client,
|
||||||
|
unsigned int time,
|
||||||
|
unsigned int start_item,
|
||||||
|
IMenuHandler *alt_handler)
|
||||||
{
|
{
|
||||||
#if defined MENU_DEBUG
|
#if defined MENU_DEBUG
|
||||||
g_Logger.LogMessage("[SM_MENU] CRadioMenu::Display(%p) (client %d) (time %d)",
|
g_Logger.LogMessage("[SM_MENU] CRadioMenu::Display(%p) (client %d) (time %d)",
|
||||||
@ -410,7 +418,11 @@ bool CRadioMenu::Display(int client, unsigned int time, IMenuHandler *alt_handle
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return g_RadioMenuStyle.DoClientMenu(client, this, alt_handler ? alt_handler : m_pHandler, time);
|
return g_RadioMenuStyle.DoClientMenu(client,
|
||||||
|
this,
|
||||||
|
start_item,
|
||||||
|
alt_handler ? alt_handler : m_pHandler,
|
||||||
|
time);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CRadioMenu::Cancel_Finally()
|
void CRadioMenu::Cancel_Finally()
|
||||||
|
@ -115,6 +115,10 @@ public:
|
|||||||
bool SetExtOption(MenuOption option, const void *valuePtr);
|
bool SetExtOption(MenuOption option, const void *valuePtr);
|
||||||
IMenuPanel *CreatePanel();
|
IMenuPanel *CreatePanel();
|
||||||
bool Display(int client, unsigned int time, IMenuHandler *alt_handler=NULL);
|
bool Display(int client, unsigned int time, IMenuHandler *alt_handler=NULL);
|
||||||
|
bool DisplayAtItem(int client,
|
||||||
|
unsigned int time,
|
||||||
|
unsigned int start_item,
|
||||||
|
IMenuHandler *alt_handler/* =NULL */);
|
||||||
void Cancel_Finally();
|
void Cancel_Finally();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -156,7 +156,7 @@ bool ValveMenuStyle::DoClientMenu(int client, IMenuPanel *menu, IMenuHandler *mh
|
|||||||
return BaseMenuStyle::DoClientMenu(client, menu, mh, time);
|
return BaseMenuStyle::DoClientMenu(client, menu, mh, time);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ValveMenuStyle::DoClientMenu(int client, CBaseMenu *menu, IMenuHandler *mh, unsigned int time)
|
bool ValveMenuStyle::DoClientMenu(int client, CBaseMenu *menu, unsigned int first_item, IMenuHandler *mh, unsigned int time)
|
||||||
{
|
{
|
||||||
if (!g_pVSPHandle)
|
if (!g_pVSPHandle)
|
||||||
{
|
{
|
||||||
@ -166,7 +166,7 @@ bool ValveMenuStyle::DoClientMenu(int client, CBaseMenu *menu, IMenuHandler *mh,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return BaseMenuStyle::DoClientMenu(client, menu, mh, time);
|
return BaseMenuStyle::DoClientMenu(client, menu, first_item, mh, time);
|
||||||
}
|
}
|
||||||
|
|
||||||
CValveMenuDisplay::CValveMenuDisplay()
|
CValveMenuDisplay::CValveMenuDisplay()
|
||||||
@ -387,13 +387,21 @@ bool CValveMenu::SetExtOption(MenuOption option, const void *valuePtr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool CValveMenu::Display(int client, unsigned int time, IMenuHandler *alt_handler)
|
bool CValveMenu::Display(int client, unsigned int time, IMenuHandler *alt_handler)
|
||||||
|
{
|
||||||
|
return DisplayAtItem(client, time, 0, alt_handler);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CValveMenu::DisplayAtItem(int client,
|
||||||
|
unsigned int time,
|
||||||
|
unsigned int start_item,
|
||||||
|
IMenuHandler *alt_handler/* =NULL */)
|
||||||
{
|
{
|
||||||
if (m_bCancelling)
|
if (m_bCancelling)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return g_ValveMenuStyle.DoClientMenu(client, this, alt_handler ? alt_handler : m_pHandler, time);
|
return g_ValveMenuStyle.DoClientMenu(client, this, start_item, alt_handler ? alt_handler : m_pHandler, time);
|
||||||
}
|
}
|
||||||
|
|
||||||
IMenuPanel *CValveMenu::CreatePanel()
|
IMenuPanel *CValveMenu::CreatePanel()
|
||||||
|
@ -63,7 +63,7 @@ public:
|
|||||||
public: //BaseMenuStyle
|
public: //BaseMenuStyle
|
||||||
CBaseMenuPlayer *GetMenuPlayer(int client);
|
CBaseMenuPlayer *GetMenuPlayer(int client);
|
||||||
void SendDisplay(int client, IMenuPanel *display);
|
void SendDisplay(int client, IMenuPanel *display);
|
||||||
bool DoClientMenu(int client, CBaseMenu *menu, IMenuHandler *mh, unsigned int time);
|
bool DoClientMenu(int client, CBaseMenu *menu, unsigned int first_item, IMenuHandler *mh, unsigned int time);
|
||||||
bool DoClientMenu(int client, IMenuPanel *menu, IMenuHandler *mh, unsigned int time);
|
bool DoClientMenu(int client, IMenuPanel *menu, IMenuHandler *mh, unsigned int time);
|
||||||
public: //SMGlobalClass
|
public: //SMGlobalClass
|
||||||
void OnSourceModAllInitialized();
|
void OnSourceModAllInitialized();
|
||||||
@ -121,6 +121,10 @@ public: //IBaseMenu
|
|||||||
bool SetExitButton(bool set);
|
bool SetExitButton(bool set);
|
||||||
bool SetPagination(unsigned int itemsPerPage);
|
bool SetPagination(unsigned int itemsPerPage);
|
||||||
bool Display(int client, unsigned int time, IMenuHandler *alt_handler=NULL);
|
bool Display(int client, unsigned int time, IMenuHandler *alt_handler=NULL);
|
||||||
|
bool DisplayAtItem(int client,
|
||||||
|
unsigned int time,
|
||||||
|
unsigned int start_item,
|
||||||
|
IMenuHandler *alt_handler/* =NULL */);
|
||||||
void SetMenuOptionFlags(unsigned int flags);
|
void SetMenuOptionFlags(unsigned int flags);
|
||||||
public: //CBaseMenu
|
public: //CBaseMenu
|
||||||
void Cancel_Finally();
|
void Cancel_Finally();
|
||||||
|
@ -365,6 +365,14 @@ void VoteMenuHandler::OnMenuSelect(IBaseMenu *menu, int client, unsigned int ite
|
|||||||
m_pHandler->OnMenuSelect(menu, client, item);
|
m_pHandler->OnMenuSelect(menu, client, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VoteMenuHandler::OnMenuSelect2(IBaseMenu *menu, int client, unsigned int item, unsigned int item_on_page)
|
||||||
|
{
|
||||||
|
if (m_pHandler->GetMenuAPIVersion2() >= 13)
|
||||||
|
{
|
||||||
|
m_pHandler->OnMenuSelect2(menu, client, item, item_on_page);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void VoteMenuHandler::InternalReset()
|
void VoteMenuHandler::InternalReset()
|
||||||
{
|
{
|
||||||
m_Clients = 0;
|
m_Clients = 0;
|
||||||
|
@ -56,6 +56,7 @@ public: //IMenuHandler
|
|||||||
void OnMenuStart(IBaseMenu *menu);
|
void OnMenuStart(IBaseMenu *menu);
|
||||||
void OnMenuDisplay(IBaseMenu *menu, int client, IMenuPanel *display);
|
void OnMenuDisplay(IBaseMenu *menu, int client, IMenuPanel *display);
|
||||||
void OnMenuSelect(IBaseMenu *menu, int client, unsigned int item);
|
void OnMenuSelect(IBaseMenu *menu, int client, unsigned int item);
|
||||||
|
void OnMenuSelect2(IBaseMenu *menu, int client, unsigned int item, unsigned int item_on_page);
|
||||||
void OnMenuCancel(IBaseMenu *menu, int client, MenuCancelReason reason);
|
void OnMenuCancel(IBaseMenu *menu, int client, MenuCancelReason reason);
|
||||||
void OnMenuEnd(IBaseMenu *menu, MenuEndReason reason);
|
void OnMenuEnd(IBaseMenu *menu, MenuEndReason reason);
|
||||||
void OnMenuDrawItem(IBaseMenu *menu, int client, unsigned int item, unsigned int &style);
|
void OnMenuDrawItem(IBaseMenu *menu, int client, unsigned int item, unsigned int &style);
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
#include <IHandleSys.h>
|
#include <IHandleSys.h>
|
||||||
|
|
||||||
#define SMINTERFACE_MENUMANAGER_NAME "IMenuManager"
|
#define SMINTERFACE_MENUMANAGER_NAME "IMenuManager"
|
||||||
#define SMINTERFACE_MENUMANAGER_VERSION 12
|
#define SMINTERFACE_MENUMANAGER_VERSION 13
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file IMenuManager.h
|
* @file IMenuManager.h
|
||||||
@ -572,6 +572,22 @@ namespace SourceMod
|
|||||||
* @return IMenuHandler of the menu.
|
* @return IMenuHandler of the menu.
|
||||||
*/
|
*/
|
||||||
virtual IMenuHandler *GetHandler() =0;
|
virtual IMenuHandler *GetHandler() =0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Sends the menu to a client, starting from the given item number.
|
||||||
|
*
|
||||||
|
* Note: this API call was added in v13.
|
||||||
|
*
|
||||||
|
* @param client Client index to display to.
|
||||||
|
* @param time Time to hold menu for.
|
||||||
|
* @param start_item Starting item to draw.
|
||||||
|
* @param alt_handler Alternate IMenuHandler.
|
||||||
|
* @return True on success, false otherwise.
|
||||||
|
*/
|
||||||
|
virtual bool DisplayAtItem(int client,
|
||||||
|
unsigned int time,
|
||||||
|
unsigned int start_item,
|
||||||
|
IMenuHandler *alt_handler=NULL) =0;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -731,6 +747,24 @@ namespace SourceMod
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Called when an item is selected.
|
||||||
|
*
|
||||||
|
* Note: This callback was added in v13. It is called after OnMenuSelect().
|
||||||
|
*
|
||||||
|
* @param menu Menu pointer.
|
||||||
|
* @param client Client that selected the item.
|
||||||
|
* @param item Item number.
|
||||||
|
* @param item_on_page The first item on the page the player was last
|
||||||
|
* viewing.
|
||||||
|
*/
|
||||||
|
virtual void OnMenuSelect2(IBaseMenu *menu,
|
||||||
|
int client,
|
||||||
|
unsigned int item,
|
||||||
|
unsigned int item_on_page)
|
||||||
|
{
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user