core/smn_menus.cpp
changeset 1006 d8100bb2b07f
parent 1005 b15b5682d181
child 1011 b413072540fd
     1.1 --- a/core/smn_menus.cpp	Fri Jun 22 21:04:13 2007 +0000
     1.2 +++ b/core/smn_menus.cpp	Fri Jun 22 22:37:22 2007 +0000
     1.3 @@ -43,6 +43,7 @@
     1.4  	MenuAction_VoteEnd = (1<<5),	/**< (VOTE ONLY): A vote sequence has ended (param1=chosen item) */
     1.5  	MenuAction_VoteStart = (1<<6), 	/**< (VOTE ONLY): A vote sequence has started */
     1.6  	MenuAction_VoteCancel = (1<<7),	/**< (VOTE ONLY): A vote sequence has been cancelled (nothing passed) */
     1.7 +	MenuAction_DrawItem = (1<<8),	/**< A style is being drawn; return the new style (param1=client, param2=item) */
     1.8  };
     1.9  
    1.10  class CPanelHandler : public IMenuHandler
    1.11 @@ -77,12 +78,13 @@
    1.12  		unsigned int winningVotes,
    1.13  		unsigned int totalVotes);
    1.14  	void OnMenuVoteCancel(IBaseMenu *menu);
    1.15 +	void OnMenuDrawItem(IBaseMenu *menu, int client, unsigned int item, unsigned int &style);
    1.16  #if 0
    1.17  	void OnMenuDrawItem(IBaseMenu *menu, int client, unsigned int item, unsigned int &style);
    1.18  	void OnMenuDisplayItem(IBaseMenu *menu, int client, unsigned int item, const char **display);
    1.19  #endif
    1.20  private:
    1.21 -	void DoAction(IBaseMenu *menu, MenuAction action, cell_t param1, cell_t param2);
    1.22 +	cell_t DoAction(IBaseMenu *menu, MenuAction action, cell_t param1, cell_t param2, cell_t def_res=0);
    1.23  private:
    1.24  	IPluginFunction *m_pBasic;
    1.25  	int m_Flags;
    1.26 @@ -307,7 +309,16 @@
    1.27  	DoAction(menu, MenuAction_VoteCancel, 0, 0);
    1.28  }
    1.29  
    1.30 -void CMenuHandler::DoAction(IBaseMenu *menu, MenuAction action, cell_t param1, cell_t param2)
    1.31 +void CMenuHandler::OnMenuDrawItem(IBaseMenu *menu, int client, unsigned int item, unsigned int &style)
    1.32 +{
    1.33 +	if ((m_Flags & (int)MenuAction_DrawItem) == (int)MenuAction_DrawItem)
    1.34 +	{
    1.35 +		cell_t result = DoAction(menu, MenuAction_DrawItem, client, item, style);
    1.36 +		style = (unsigned int)result;
    1.37 +	}
    1.38 +}
    1.39 +
    1.40 +cell_t CMenuHandler::DoAction(IBaseMenu *menu, MenuAction action, cell_t param1, cell_t param2, cell_t def_res)
    1.41  {
    1.42  #if defined MENU_DEBUG
    1.43  	g_Logger.LogMessage("[SM_MENU] CMenuHandler::DoAction() (menu %p/%08x) (action %d) (param1 %d) (param2 %d)",
    1.44 @@ -317,11 +328,13 @@
    1.45  		param1,
    1.46  		param2);
    1.47  #endif
    1.48 +	cell_t res = def_res;
    1.49  	m_pBasic->PushCell(menu->GetHandle());
    1.50  	m_pBasic->PushCell((cell_t)action);
    1.51  	m_pBasic->PushCell(param1);
    1.52  	m_pBasic->PushCell(param2);
    1.53 -	m_pBasic->Execute(NULL);
    1.54 +	m_pBasic->Execute(&res);
    1.55 +	return res;
    1.56  }
    1.57  
    1.58  /**