Mercurial > MadButterfly
annotate nodejs/observer.cc @ 677:efa666d118e5
Use variable frame to maintain macros
author | Thinker K.F. Li <thinker@branda.to> |
---|---|
date | Fri, 06 Aug 2010 18:39:37 +0800 |
parents | f264b50c469c |
children | 799c852b9065 |
rev | line source |
---|---|
651
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
1 #include <v8.h> |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
2 #include "mbfly_njs.h" |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
3 |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
4 extern "C" { |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
5 #include <mb.h> |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
6 #include <string.h> |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
7 } |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
8 |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
9 #ifndef ASSERT |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
10 #define ASSERT(x) |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
11 #endif |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
12 |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
13 using namespace v8; |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
14 |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
15 struct xnjsmb_observer_data { |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
16 Persistent<Function> func; |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
17 }; |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
18 |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
19 static void |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
20 event_handler(event_t *evt, void *arg); |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
21 |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
22 static observer_t * |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
23 _subject_add_event_observer(subject_t *subject, int type, |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
24 Handle<Function> func) { |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
25 observer_t *observer; |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
26 xnjsmb_observer_data *data; |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
27 |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
28 data = new xnjsmb_observer_data; |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
29 if(data == NULL) |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
30 return NULL; |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
31 data->func = Persistent<Function>::New(func); |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
32 observer = subject_add_event_observer(subject, type, |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
33 event_handler, |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
34 data); |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
35 |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
36 return observer; |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
37 } |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
38 |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
39 static void |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
40 _subject_remove_observer(subject_t *subject, observer_t *observer) { |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
41 xnjsmb_observer_data *data; |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
42 |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
43 subject_remove_observer(subject, observer); |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
44 data = (xnjsmb_observer_data *)observer->arg; |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
45 delete data; |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
46 } |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
47 |
675
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
48 static Handle<Value> |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
49 xnjsmb_event_tgt_getter(Handle<Object> self, event_t *evt, const char **err) { |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
50 Persistent<Object> *hdl; |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
51 |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
52 hdl = (Persistent<Object> *) |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
53 mb_prop_get(&((mb_obj_t *)evt->tgt)->props, |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
54 PROP_JSOBJ); |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
55 return Local<Object>::New(*hdl); |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
56 } |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
57 |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
58 static void |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
59 xnjsmb_event_tgt_setter(Handle<Object> self, event_t *evt, |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
60 Handle<Value> value, const char **err) { |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
61 *err = "Not implemented"; |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
62 } |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
63 |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
64 static Handle<Value> |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
65 xnjsmb_event_cur_tgt_getter(Handle<Object> self, event_t *evt, |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
66 const char **err) { |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
67 Persistent<Object> *hdl; |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
68 |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
69 hdl = (Persistent<Object> *) |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
70 mb_prop_get(&((mb_obj_t *)evt->cur_tgt)->props, |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
71 PROP_JSOBJ); |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
72 return Local<Object>::New(*hdl); |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
73 } |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
74 |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
75 static void |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
76 xnjsmb_event_cur_tgt_setter(Handle<Object> self, event_t *evt, |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
77 Handle<Value> value, const char **err) { |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
78 *err = "Not implemented"; |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
79 } |
c643af2095c5
Keep and retrieve respective js object to/from property store
Thinker K.F. Li <thinker@branda.to>
parents:
671
diff
changeset
|
80 |
655 | 81 /* This is the part of the code generated by gen_v8_binding.m4 */ |
651
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
82 #include "observer-inc.h" |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
83 |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
84 static void |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
85 event_handler(event_t *evt, void *arg) { |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
86 xnjsmb_observer_data *data = (xnjsmb_observer_data *)arg; |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
87 Handle<Value> evt_obj; |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
88 Handle<Value> func_args[1]; |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
89 |
656
38c720272dd5
Change prefix for the code generated by generator
Thinker K.F. Li <thinker@branda.to>
parents:
655
diff
changeset
|
90 evt_obj = xnjsmb_auto_event_new(evt); |
651
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
91 ASSERT(!evt_obj.IsEmpty()); |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
92 func_args[0] = evt_obj; |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
93 data->func->Call(Context::GetCurrent()->Global(), 1, func_args); |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
94 } |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
95 |
676
f264b50c469c
Bind subject of mouse_event to JS object of coord
Thinker K.F. Li <thinker@branda.to>
parents:
675
diff
changeset
|
96 Handle<Value> |
f264b50c469c
Bind subject of mouse_event to JS object of coord
Thinker K.F. Li <thinker@branda.to>
parents:
675
diff
changeset
|
97 export_xnjsmb_auto_subject_new(subject_t *subject) { |
f264b50c469c
Bind subject of mouse_event to JS object of coord
Thinker K.F. Li <thinker@branda.to>
parents:
675
diff
changeset
|
98 Handle<Value> val; |
f264b50c469c
Bind subject of mouse_event to JS object of coord
Thinker K.F. Li <thinker@branda.to>
parents:
675
diff
changeset
|
99 |
f264b50c469c
Bind subject of mouse_event to JS object of coord
Thinker K.F. Li <thinker@branda.to>
parents:
675
diff
changeset
|
100 val = xnjsmb_auto_subject_new(subject); |
f264b50c469c
Bind subject of mouse_event to JS object of coord
Thinker K.F. Li <thinker@branda.to>
parents:
675
diff
changeset
|
101 return val; |
f264b50c469c
Bind subject of mouse_event to JS object of coord
Thinker K.F. Li <thinker@branda.to>
parents:
675
diff
changeset
|
102 } |
f264b50c469c
Bind subject of mouse_event to JS object of coord
Thinker K.F. Li <thinker@branda.to>
parents:
675
diff
changeset
|
103 |
658
62c2de99b03a
Remove get_object() method for subject for js
Thinker K.F. Li <thinker@branda.to>
parents:
656
diff
changeset
|
104 void |
62c2de99b03a
Remove get_object() method for subject for js
Thinker K.F. Li <thinker@branda.to>
parents:
656
diff
changeset
|
105 xnjsmb_observer_init(void) { |
671
fc29a343ce7c
Track JS object with property store of objects
Thinker K.F. Li <thinker@branda.to>
parents:
658
diff
changeset
|
106 xnjsmb_auto_observer_init(); |
fc29a343ce7c
Track JS object with property store of objects
Thinker K.F. Li <thinker@branda.to>
parents:
658
diff
changeset
|
107 xnjsmb_auto_subject_init(); |
fc29a343ce7c
Track JS object with property store of objects
Thinker K.F. Li <thinker@branda.to>
parents:
658
diff
changeset
|
108 xnjsmb_auto_event_init(); |
658
62c2de99b03a
Remove get_object() method for subject for js
Thinker K.F. Li <thinker@branda.to>
parents:
656
diff
changeset
|
109 } |