Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * This file is part of libdom.
  3.  * Licensed under the MIT License,
  4.  *                http://www.opensource.org/licenses/mit-license.php
  5.  * Copyright 2009 Bo Yang <struggleyb.nku@gmail.com>
  6.  */
  7.  
  8. #ifndef dom_events_event_target_h_
  9. #define dom_events_event_target_h_
  10.  
  11. #include <stdbool.h>
  12. #include <dom/core/exceptions.h>
  13. #include <dom/core/string.h>
  14.  
  15. struct dom_event_listener;
  16. struct dom_event;
  17.  
  18. /* Event target is a mixin interface, thus has no concrete implementation.
  19.  * Subclasses must provide implementations of the event target methods. */
  20. typedef struct dom_event_target {
  21.         void *vtable;
  22. } dom_event_target;
  23.  
  24. typedef struct dom_event_target_vtable {
  25.         dom_exception (*add_event_listener)(
  26.                         dom_event_target *et, dom_string *type,
  27.                         struct dom_event_listener *listener,
  28.                         bool capture);
  29.         dom_exception (*remove_event_listener)(
  30.                         dom_event_target *et, dom_string *type,
  31.                         struct dom_event_listener *listener,
  32.                         bool capture);
  33.         dom_exception (*dispatch_event)(
  34.                         dom_event_target *et,
  35.                         struct dom_event *evt, bool *success);
  36.         dom_exception (*add_event_listener_ns)(
  37.                         dom_event_target *et,
  38.                         dom_string *namespace, dom_string *type,
  39.                         struct dom_event_listener *listener,
  40.                         bool capture);
  41.         dom_exception (*remove_event_listener_ns)(
  42.                         dom_event_target *et,
  43.                         dom_string *namespace, dom_string *type,
  44.                         struct dom_event_listener *listener,
  45.                         bool capture);
  46. } dom_event_target_vtable;
  47.  
  48. static inline dom_exception dom_event_target_add_event_listener(
  49.                 dom_event_target *et, dom_string *type,
  50.                 struct dom_event_listener *listener, bool capture)
  51. {
  52.         return ((dom_event_target_vtable *) et->vtable)->add_event_listener(
  53.                         et, type, listener, capture);
  54. }
  55. #define dom_event_target_add_event_listener(et, t, l, c) \
  56.                 dom_event_target_add_event_listener((dom_event_target *) (et),\
  57.                 (dom_string *) (t), (struct dom_event_listener *) (l), \
  58.                 (bool) (c))
  59.  
  60. static inline dom_exception dom_event_target_remove_event_listener(
  61.                 dom_event_target *et, dom_string *type,
  62.                 struct dom_event_listener *listener, bool capture)
  63. {
  64.         return ((dom_event_target_vtable *) et->vtable)->remove_event_listener(
  65.                         et, type, listener, capture);
  66. }
  67. #define dom_event_target_remove_event_listener(et, t, l, c) \
  68.                 dom_event_target_remove_event_listener(\
  69.                 (dom_event_target *) (et), (dom_string *) (t),\
  70.                 (struct dom_event_listener *) (l), (bool) (c))
  71.  
  72. static inline dom_exception dom_event_target_dispatch_event(
  73.                 dom_event_target *et, struct dom_event *evt, bool *success)
  74. {
  75.         return ((dom_event_target_vtable *) et->vtable)->dispatch_event(
  76.                         et, evt, success);
  77. }
  78. #define dom_event_target_dispatch_event(et, e, s) \
  79.                 dom_event_target_dispatch_event((dom_event_target *) (et),\
  80.                 (struct dom_event *) (e), (bool *) (s))
  81.  
  82. static inline dom_exception dom_event_target_add_event_listener_ns(
  83.                 dom_event_target *et,
  84.                 dom_string *namespace, dom_string *type,
  85.                 struct dom_event_listener *listener, bool capture)
  86. {
  87.         return ((dom_event_target_vtable *) et->vtable)->add_event_listener_ns(
  88.                         et, namespace, type, listener, capture);
  89. }
  90. #define dom_event_target_add_event_listener_ns(et, n, t, l, c) \
  91.                 dom_event_target_add_event_listener_ns(\
  92.                 (dom_event_target *) (et), (dom_string *) (n),\
  93.                 (dom_string *) (t), (struct dom_event_listener *) (l),\
  94.                 (bool) (c))
  95.  
  96. static inline dom_exception dom_event_target_remove_event_listener_ns(
  97.                 dom_event_target *et,
  98.                 dom_string *namespace, dom_string *type,
  99.                 struct dom_event_listener *listener, bool capture)
  100. {
  101.         return ((dom_event_target_vtable *) et->vtable)->remove_event_listener_ns(
  102.                         et, namespace, type, listener, capture);
  103. }
  104. #define dom_event_target_remove_event_listener_ns(et, n, t, l, c) \
  105.                 dom_event_target_remove_event_listener_ns(\
  106.                 (dom_event_target *) (et), (dom_string *) (n),\
  107.                 (dom_string *) (t), (struct dom_event_listener *) (l),\
  108.                 (bool) (c))
  109.  
  110. #endif
  111.  
  112.