/src/ui/EventTools.hx

http://github.com/blackdog66/bdog-gtk · Haxe · 84 lines · 54 code · 8 blank · 22 comment · 6 complexity · 582fb219ea324cb74884c8fb9ff3763c MD5 · raw file

  1. package ui;
  2. import js.Node;
  3. import gtk.Model;
  4. import gtk.Server;
  5. import gtk.Gtk;
  6. import gtk.Glade;
  7. class EventTools {
  8. static var pending = new IntHash<{w:Widget,e:Event,fn:CallBack}>();
  9. static var widgetEvents = new Hash<Int>();
  10. public static function
  11. poll(win) {
  12. Gtk.widgetShowAll(win);
  13. Node.setInterval(function() {
  14. Gtk.serverCallback("UPDATE",function(event) {
  15. try {
  16. var
  17. id = Std.parseInt(event),
  18. obj = pending.get(id);
  19. if (obj != null) {
  20. try {
  21. obj.fn(obj.w,obj.e);
  22. } catch(exc:Dynamic) {
  23. trace("Err with "+obj);
  24. }
  25. }
  26. } catch (ex:Dynamic) { trace("poll:"+ex);
  27. }
  28. trace("got an event"+event);
  29. });
  30. },200,[]);
  31. }
  32. public static function
  33. event(w:Widget,e:Event,?f:CallBack) {
  34. var
  35. id = Std.int(Math.random()*1000000),
  36. sig = Type.enumConstructor(e);
  37. if (f != null)
  38. pending.set(id,{w:w,e:e,fn:f});
  39. widgetEvents.set(w+sig,id);
  40. }
  41. public static function
  42. removeEvent(w:Widget,e:Event) {
  43. var
  44. l = w + Type.enumConstructor(e),
  45. id = widgetEvents.get(l);
  46. if (id != null) {
  47. Gtk.serverDisconnect(function(s) {
  48. trace(s);
  49. });
  50. widgetEvents.remove(l);
  51. pending.remove(id);
  52. }
  53. }
  54. /*
  55. public static function
  56. poll(win) {
  57. Gtk.widgetShowAll(win);
  58. do {
  59. Gtk.serverCallback("WAIT",function(event) {
  60. try {
  61. var
  62. id = Std.parseInt(event),
  63. obj = pending.get(id);
  64. if (obj != null) {
  65. try {
  66. obj.fn(obj.w,obj.e);
  67. } catch(exc:Dynamic) {
  68. trace("Err with "+obj);
  69. }
  70. }
  71. } catch (ex:Dynamic) { trace("poll:"+ex);}
  72. });
  73. } while (true);
  74. }
  75. */
  76. }