view LightClone/Source/GuiEventMap.h @ 40:00d17d8f407d

Hookup game over dialog; Remove Code class
author koryspansel
date Thu, 22 Sep 2011 10:21:14 -0700
parents 3a63df04f3c0
children 8e7ebab350e7
line wrap: on
line source

/*
 * GuiEventMap
 */

#ifndef __GUIEVENTMAP_H__
#define __GUIEVENTMAP_H__

#include "Core.h"
#include "GuiEvent.h"
#include "HashMap.h"

/*
 * GuiEventMap
 */
class GuiEventMap
{
	/*
	 * kMap
	 */
	HashMap<FixedString<>, GuiEvent*, FixedString<>::Hash> kMap;

public:

	/* 
	 * GuiEventMap
	 */
	GuiEventMap();

	/*
	 * Subscribe
	 */
	ErrorCode Subscribe(const char* pName, void (*pFunction)(GuiEventArguments&))
	{
		GuiEvent* pEvent = GetEvent(pName, true);
		if(pEvent)
		{
			return pEvent->Subscribe(pFunction), Error_Success;
		}

		return Error_Fail;
	}

	/*
	 * Subscribe
	 */
	template<typename Type>
	ErrorCode Subscribe(const char* pName, void (Type::*pFunction)(GuiEventArguments&), Type* pInstance)
	{
		GuiEvent* pEvent = GetEvent(pName, true);
		if(pEvent)
		{
			return pEvent->Subscribe(pFunction, pInstance), Error_Success;
		}

		return Error_Fail;
	}

	/*
	 * Fire
	 */
	void Fire(const char* pEvent, GuiEventArguments& kArguments);

private:

	/*
	 * GetEvent
	 */
	GuiEvent* GetEvent(const char* pName, bool bAdd = false);
};

#endif //__GUIEVENTMAP_H__