Hook.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /*
  2. GWEN
  3. Copyright (c) 2010 Facepunch Studios
  4. See license in Gwen.h
  5. */
  6. #pragma once
  7. #ifndef GWEN_HOOK_H
  8. #define GWEN_HOOK_H
  9. #include "Gwen/Gwen.h"
  10. #include <list>
  11. #ifdef GWEN_HOOKSYSTEM
  12. namespace Gwen
  13. {
  14. namespace Hook
  15. {
  16. class GWEN_EXPORT BaseHook
  17. {
  18. public:
  19. virtual bool OnControlClicked( Gwen::Controls::Base*, int /*iMouseX*/, int /*iMouseY*/ ){ return false; };
  20. };
  21. typedef std::list<BaseHook*> HookList;
  22. GWEN_EXPORT HookList& GetHookList();
  23. GWEN_EXPORT void AddHook( BaseHook* pHook );
  24. GWEN_EXPORT void RemoveHook( BaseHook* pHook );
  25. template< typename fnc >
  26. bool CallHook( fnc f )
  27. {
  28. for ( HookList::iterator it = GetHookList().begin(); it != GetHookList().end(); ++it )
  29. {
  30. if ( ((*it)->*f)() ) return true;
  31. }
  32. return false;
  33. }
  34. template< typename fnc, typename AA >
  35. bool CallHook( fnc f, AA a )
  36. {
  37. for ( HookList::iterator it = GetHookList().begin(); it != GetHookList().end(); ++it )
  38. {
  39. if ( ((*it)->*f)( a ) ) return true;
  40. }
  41. return false;
  42. }
  43. template< typename fnc, typename AA, typename AB >
  44. bool CallHook( fnc f, AA a, AB b )
  45. {
  46. for ( HookList::iterator it = GetHookList().begin(); it != GetHookList().end(); ++it )
  47. {
  48. if ( ((*it)->*f)( a, b ) ) return true;
  49. }
  50. return false;
  51. }
  52. template< typename fnc, typename AA, typename AB, typename AC >
  53. bool CallHook( fnc f, AA a, AB b, AC c )
  54. {
  55. for ( HookList::iterator it = GetHookList().begin(); it != GetHookList().end(); ++it )
  56. {
  57. if ( ((*it)->*f)( a, b, c ) ) return true;
  58. }
  59. return false;
  60. }
  61. }
  62. }
  63. #endif
  64. #endif