widgeteventhandler.c 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463
  1. class WidgetEventHandler: ScriptedWidgetEventHandler
  2. {
  3. private ref static WidgetEventHandler s_instance;
  4. protected ref map<Widget, ref Param> m_OnMouseButtonDownRegister;
  5. protected ref map<Widget, ref Param> m_OnMouseButtonUpRegister;
  6. protected ref map<Widget, ref Param> m_OnMouseWheel;
  7. protected ref map<Widget, ref Param> m_OnDropReceived;
  8. protected ref map<Widget, ref Param> m_OnDrag;
  9. protected ref map<Widget, ref Param> m_OnDrop;
  10. protected ref map<Widget, ref Param> m_OnDraggingOver;
  11. protected ref map<Widget, ref Param> m_OnMouseEnter;
  12. protected ref map<Widget, ref Param> m_OnMouseButtonLeave;
  13. protected ref map<Widget, ref Param> m_OnClick;
  14. protected ref map<Widget, ref Param> m_OnDoubleClick;
  15. protected ref map<Widget, ref Param> m_OnFocus;
  16. protected ref map<Widget, ref Param> m_OnFocusLost;
  17. protected ref map<Widget, ref Param> m_OnController;
  18. protected ref map<Widget, ref Param> m_OnChildAdd;
  19. protected ref map<Widget, ref Param> m_OnChildRemove;
  20. static WidgetEventHandler GetInstance()
  21. {
  22. return s_instance;
  23. }
  24. void WidgetEventHandler()
  25. {
  26. s_instance = this;
  27. m_OnMouseButtonDownRegister = new map<Widget, ref Param>;
  28. m_OnMouseButtonUpRegister = new map<Widget, ref Param>;
  29. m_OnMouseWheel = new map<Widget, ref Param>;
  30. m_OnDropReceived = new map<Widget, ref Param>;
  31. m_OnDrag = new map<Widget, ref Param>;
  32. m_OnDrop = new map<Widget, ref Param>;
  33. m_OnDraggingOver = new map<Widget, ref Param>;
  34. m_OnMouseEnter = new map<Widget, ref Param>;
  35. m_OnMouseButtonLeave = new map<Widget, ref Param>;
  36. m_OnClick = new map<Widget, ref Param>;
  37. m_OnDoubleClick = new map<Widget, ref Param>;
  38. m_OnFocus = new map<Widget, ref Param>;
  39. m_OnFocusLost = new map<Widget, ref Param>;
  40. m_OnController = new map<Widget, ref Param>;
  41. m_OnChildAdd = new map<Widget, ref Param>;
  42. m_OnChildRemove = new map<Widget, ref Param>;
  43. }
  44. void UnregisterWidget( Widget w )
  45. {
  46. m_OnMouseButtonDownRegister.Remove( w );
  47. m_OnMouseButtonUpRegister.Remove( w );
  48. m_OnMouseWheel.Remove( w );
  49. m_OnDropReceived.Remove( w );
  50. m_OnDrag.Remove( w );
  51. m_OnDrop.Remove( w );
  52. m_OnDraggingOver.Remove( w );
  53. m_OnMouseEnter.Remove( w );
  54. m_OnMouseButtonLeave.Remove( w );
  55. m_OnClick.Remove( w );
  56. m_OnDoubleClick.Remove( w );
  57. m_OnDoubleClick.Remove( w );
  58. m_OnFocus.Remove( w );
  59. m_OnFocusLost.Remove( w );
  60. m_OnController.Remove( w );
  61. m_OnChildAdd.Remove( w );
  62. m_OnChildRemove.Remove( w );
  63. w.SetHandler( NULL );
  64. }
  65. void RegisterOnMouseButtonDown( Widget w, Managed eventHandler, string functionName )
  66. {
  67. w.SetHandler( this );
  68. Param param = new Param2<Managed, string>( eventHandler, functionName );
  69. m_OnMouseButtonDownRegister.Insert( w, param );
  70. }
  71. void RegisterOnMouseButtonUp( Widget w, Managed eventHandler, string functionName )
  72. {
  73. w.SetHandler( this );
  74. Param param = new Param2<Managed, string>( eventHandler, functionName );
  75. m_OnMouseButtonUpRegister.Insert( w, param );
  76. }
  77. void RegisterOnMouseWheel( Widget w, Managed eventHandler, string functionName )
  78. {
  79. w.SetHandler( this );
  80. Param param = new Param2<Managed, string>( eventHandler, functionName );
  81. m_OnMouseWheel.Insert( w, param );
  82. }
  83. void RegisterOnDropReceived( Widget w, Managed eventHandler, string functionName )
  84. {
  85. w.SetHandler( this );
  86. Param param = new Param2<Managed, string>( eventHandler, functionName );
  87. m_OnDropReceived.Insert( w, param );
  88. }
  89. void RegisterOnDrag( Widget w, Managed eventHandler, string functionName )
  90. {
  91. w.SetHandler( this );
  92. Param param = new Param2<Managed, string>( eventHandler, functionName );
  93. m_OnDrag.Insert( w, param );
  94. }
  95. void RegisterOnDrop( Widget w, Managed eventHandler, string functionName )
  96. {
  97. w.SetHandler( this );
  98. Param param = new Param2<Managed, string>( eventHandler, functionName );
  99. m_OnDrop.Insert( w, param );
  100. }
  101. void RegisterOnDraggingOver( Widget w, Managed eventHandler, string functionName )
  102. {
  103. w.SetHandler( this );
  104. Param param = new Param2<Managed, string>( eventHandler, functionName );
  105. m_OnDraggingOver.Insert( w, param );
  106. }
  107. void RegisterOnMouseEnter(Widget w, Managed eventHandler, string functionName )
  108. {
  109. w.SetHandler( this );
  110. Param param = new Param2<Managed, string>( eventHandler, functionName );
  111. m_OnMouseEnter.Insert( w, param );
  112. }
  113. void RegisterOnMouseLeave(Widget w, Managed eventHandler, string functionName )
  114. {
  115. w.SetHandler( this );
  116. Param param = new Param2<Managed, string>( eventHandler, functionName );
  117. m_OnMouseButtonLeave.Insert( w, param );
  118. }
  119. void RegisterOnClick(Widget w, Managed eventHandler, string functionName )
  120. {
  121. w.SetHandler( this );
  122. Param param = new Param2<Managed, string>( eventHandler, functionName );
  123. m_OnClick.Insert( w, param );
  124. }
  125. void RegisterOnDoubleClick(Widget w, Managed eventHandler, string functionName )
  126. {
  127. w.SetHandler( this );
  128. Param param = new Param2<Managed, string>( eventHandler, functionName );
  129. m_OnDoubleClick.Insert( w, param );
  130. }
  131. void RegisterOnFocus(Widget w, Managed eventHandler, string functionName )
  132. {
  133. w.SetHandler( this );
  134. Param param = new Param2<Managed, string>( eventHandler, functionName );
  135. m_OnFocus.Insert( w, param );
  136. }
  137. void RegisterOnFocusLost(Widget w, Managed eventHandler, string functionName )
  138. {
  139. w.SetHandler( this );
  140. Param param = new Param2<Managed, string>( eventHandler, functionName );
  141. m_OnFocusLost.Insert( w, param );
  142. }
  143. void RegisterOnChildAdd(Widget w, Managed eventHandler, string functionName )
  144. {
  145. w.SetHandler( this );
  146. Param param = new Param2<Managed, string>( eventHandler, functionName );
  147. m_OnChildAdd.Insert( w, param );
  148. }
  149. void RegisterOnChildRemove(Widget w, Managed eventHandler, string functionName )
  150. {
  151. w.SetHandler( this );
  152. Param param = new Param2<Managed, string>( eventHandler, functionName );
  153. m_OnChildRemove.Insert( w, param );
  154. }
  155. override bool OnClick(Widget w, int x, int y, int button)
  156. {
  157. Param2<Managed, string> param = Param2<Managed, string>.Cast( m_OnClick.Get( w ) );
  158. if( param == NULL )
  159. {
  160. return false;
  161. }
  162. if( !param.param1 )
  163. {
  164. m_OnClick.Remove( w );
  165. }
  166. Param param2 = new Param4<Widget, int, int, int>( w, x, y, button );
  167. GetGame().GameScript.CallFunctionParams( param.param1, param.param2, NULL, param2 );
  168. return true;
  169. }
  170. override bool OnDoubleClick(Widget w, int x, int y, int button)
  171. {
  172. Param2<Managed, string> param = Param2<Managed, string>.Cast( m_OnDoubleClick.Get( w ) );
  173. if( param == NULL )
  174. {
  175. return false;
  176. }
  177. if( !param.param1 )
  178. {
  179. m_OnDoubleClick.Remove( w );
  180. }
  181. Param param2 = new Param4<Widget, int, int, int>( w, x, y, button );
  182. GetGame().GameScript.CallFunctionParams( param.param1, param.param2, NULL, param2 );
  183. return true;
  184. }
  185. override bool OnMouseLeave(Widget w, Widget enterW, int x, int y)
  186. {
  187. Param2<Managed, string> param = Param2<Managed, string>.Cast( m_OnMouseButtonLeave.Get( w ) );
  188. if( param == NULL )
  189. {
  190. return false;
  191. }
  192. if( !param.param1 )
  193. {
  194. m_OnMouseButtonLeave.Remove( w );
  195. }
  196. Param param2 = new Param4<Widget, Widget, int, int>( w, enterW, x, y );
  197. GetGame().GameScript.CallFunctionParams( param.param1, param.param2, NULL, param2 );
  198. return true;
  199. }
  200. override bool OnMouseEnter( Widget w, int x, int y )
  201. {
  202. Param2<Managed, string> param = Param2<Managed, string>.Cast( m_OnMouseEnter.Get( w ) );
  203. if( param == NULL )
  204. {
  205. return false;
  206. }
  207. if( !param.param1 )
  208. {
  209. m_OnMouseEnter.Remove( w );
  210. }
  211. Param param2 = new Param3<Widget, int, int>( w, x, y );
  212. GetGame().GameScript.CallFunctionParams( param.param1, param.param2, NULL, param2 );
  213. return true;
  214. }
  215. override bool OnMouseButtonDown( Widget w, int x, int y, int button )
  216. {
  217. Param2<Managed, string> param = Param2<Managed, string>.Cast( m_OnMouseButtonDownRegister.Get( w ) );
  218. if( param == NULL )
  219. {
  220. return false;
  221. }
  222. if( !param.param1 )
  223. {
  224. m_OnMouseButtonDownRegister.Remove( w );
  225. }
  226. Param param2 = new Param4<Widget, int, int, int>( w, x, y, button );
  227. GetGame().GameScript.CallFunctionParams( param.param1, param.param2, NULL, param2 );
  228. return true;
  229. }
  230. override bool OnMouseButtonUp( Widget w, int x, int y, int button )
  231. {
  232. Param2<Managed, string> param = Param2<Managed, string>.Cast( m_OnMouseButtonUpRegister.Get( w ) );
  233. if( param == NULL )
  234. {
  235. return false;
  236. }
  237. if( !param.param1 )
  238. {
  239. m_OnMouseButtonUpRegister.Remove( w );
  240. }
  241. Param param2 = new Param4<Widget, int, int, int>( w, x, y, button );
  242. GetGame().GameScript.CallFunctionParams( param.param1, param.param2, NULL, param2 );
  243. return true;
  244. }
  245. override bool OnDrag(Widget w, int x, int y)
  246. {
  247. Param2<Managed, string> param = Param2<Managed, string>.Cast( m_OnDrag.Get( w ) );
  248. if( param == NULL )
  249. {
  250. return false;
  251. }
  252. if( !param.param1 )
  253. {
  254. m_OnDrag.Remove( w );
  255. }
  256. Param param2 = new Param3<Widget, int, int>( w, x, y );
  257. GetGame().GameScript.CallFunctionParams( param.param1, param.param2, NULL, param2 );
  258. return true;
  259. }
  260. override bool OnDrop(Widget w, int x, int y, Widget reciever)
  261. {
  262. Param2<Managed, string> param = Param2<Managed, string>.Cast( m_OnDrop.Get( w ) );
  263. if( param == NULL )
  264. {
  265. return false;
  266. }
  267. if( !param.param1 )
  268. {
  269. m_OnDrop.Remove( w );
  270. }
  271. Param param2 = new Param3<Widget, int, int>( w, x, y );
  272. GetGame().GameScript.CallFunctionParams( param.param1, param.param2, NULL, param2 );
  273. return true;
  274. }
  275. override bool OnDraggingOver(Widget w, int x, int y, Widget reciever)
  276. {
  277. Param2<Managed, string> param = Param2<Managed, string>.Cast( m_OnDraggingOver.Get( reciever ) );
  278. if( param == NULL )
  279. {
  280. return false;
  281. }
  282. if( !param.param1 )
  283. {
  284. m_OnDraggingOver.Remove( w );
  285. }
  286. Param param2 = new Param4<Widget, int, int, Widget>( w, x, y, reciever );
  287. GetGame().GameScript.CallFunctionParams( param.param1, param.param2, NULL, param2 );
  288. return true;
  289. }
  290. override bool OnDropReceived( Widget w, int x, int y, Widget reciever )
  291. {
  292. if( w.GetName() == "GridItem" )
  293. {
  294. return false;
  295. }
  296. Param p = m_OnDropReceived.Get( reciever );
  297. Param2<Managed, string> param = Param2<Managed, string>.Cast( p );
  298. if( param == NULL )
  299. {
  300. return false;
  301. }
  302. if( !param.param1 )
  303. {
  304. m_OnDropReceived.Remove( w );
  305. }
  306. Param param2 = new Param4<Widget, int, int, Widget>( w, x, y, reciever );
  307. GetGame().GameScript.CallFunctionParams( param.param1, param.param2, NULL, param2 );
  308. return true;
  309. }
  310. override bool OnFocus( Widget w, int x, int y )
  311. {
  312. Param2<Managed, string> param = Param2<Managed, string>.Cast( m_OnFocus.Get( w ) );
  313. if( param == NULL )
  314. {
  315. return false;
  316. }
  317. if( !param.param1 )
  318. {
  319. m_OnFocus.Remove( w );
  320. }
  321. Param param2 = new Param3<Widget, int, int>( w, x, y );
  322. GetGame().GameScript.CallFunctionParams( param.param1, param.param2, NULL, param2 );
  323. return true;
  324. }
  325. override bool OnFocusLost( Widget w, int x, int y )
  326. {
  327. Param2<Managed, string> param = Param2<Managed, string>.Cast( m_OnFocusLost.Get( w ) );
  328. if( param == NULL )
  329. {
  330. return false;
  331. }
  332. if( !param.param1 )
  333. {
  334. m_OnFocusLost.Remove( w );
  335. }
  336. Param param2 = new Param3<Widget, int, int>( w, x, y );
  337. GetGame().GameScript.CallFunctionParams( param.param1, param.param2, NULL, param2 );
  338. return true;
  339. }
  340. override bool OnMouseWheel(Widget w, int x, int y, int wheel)
  341. {
  342. Param2<Managed, string> param = Param2<Managed, string>.Cast( m_OnMouseWheel.Get( w ) );
  343. if( param == NULL )
  344. {
  345. return false;
  346. }
  347. if( !param.param1 )
  348. {
  349. m_OnMouseWheel.Remove( w );
  350. }
  351. Param param2 = new Param4<Widget, int, int, int>( w, x, y, wheel );
  352. GetGame().GameScript.CallFunctionParams( param.param1, param.param2, NULL, param2 );
  353. return true;
  354. }
  355. override bool OnChildAdd( Widget w, Widget child )
  356. {
  357. Param2<Managed, string> param = Param2<Managed, string>.Cast( m_OnChildAdd.Get( w ) );
  358. if( param == NULL )
  359. {
  360. return false;
  361. }
  362. if( !param.param1 )
  363. {
  364. m_OnChildAdd.Remove( w );
  365. }
  366. Param param2 = new Param2<Widget, Widget>( w, child );
  367. GetGame().GameScript.CallFunctionParams( param.param1, param.param2, NULL, param2 );
  368. return true;
  369. }
  370. override bool OnChildRemove( Widget w, Widget child )
  371. {
  372. Param2<Managed, string> param = Param2<Managed, string>.Cast( m_OnChildRemove.Get( w ) );
  373. if( param == NULL )
  374. {
  375. return false;
  376. }
  377. if( !param.param1 )
  378. {
  379. m_OnChildRemove.Remove( w );
  380. }
  381. Param param2 = new Param2<Widget, Widget>( w, child );
  382. GetGame().GameScript.CallFunctionParams( param.param1, param.param2, NULL, param2 );
  383. return true;
  384. }
  385. }