comparison window.c @ 0:76568becd6d6

Rhope Alpha 2a source import
author Mike Pavone <pavone@retrodev.com>
date Tue, 28 Apr 2009 23:06:07 +0000
parents
children 94c885692eb5
comparison
equal deleted inserted replaced
-1:000000000000 0:76568becd6d6
1 #include <stdlib.h>
2 #include <string.h>
3 #include "structs.h"
4 #include "datum.h"
5 #include "interp.h"
6 #include "vis_threading.h"
7 #include "debugmacros.h"
8
9 #ifdef SYLLABLE
10 #include "syl_window.h"
11 VIS_CRITICAL_SECTION(app_lock);
12 #else
13 #ifdef WIN32
14 #include "ms_window.h"
15 VIS_CRITICAL_SECTION(hwnd_lock);
16 #endif
17 #endif
18
19 /*
20 typedef struct
21 {
22 os::Window * wind;
23 int refcount;
24 VIS_CRITICAL_SECTION(lock)
25 } os_window;
26
27 typedef struct
28 {
29 os_window * os_wind;
30 datum * title;
31 double width;
32 double height;
33 double xpos;
34 double ypos;
35 } vis_window_shown;*/
36
37 void vis_window_init()
38 {
39 #ifdef SYLLABLE
40 DEBUGPUTS("Initializing app_lock");
41
42 VIS_InitializeCriticalSection(app_lock);
43 #else
44 #ifdef WIN32
45 VIS_InitializeCriticalSection(hwnd_lock);
46 #endif
47 #endif
48 }
49
50 int vis_window_new(datum ** inputlist, queue_entry * worker_entry)
51 {
52 vis_window * window;
53 datum * window_datum = new_datum(BUILTIN_TYPE_WINDOW, 1, sizeof(vis_window), worker_entry->instance->def->program);
54 window = (vis_window *)(window_datum->c.generic.data);
55 window->title = inputlist[0];
56 DEBUGPRINTF("Type: %d\n", window->title->company->type_id);
57 DEBUGPRINTF("Length: %d\n", window->title->c.generic.len);
58 window->width = inputlist[1]->c.real;
59 window->height = inputlist[2]->c.real;
60
61 window->widget_dict = create_dict(worker_entry->instance->def->program);
62 window->widget_xpos = create_dict(worker_entry->instance->def->program);
63 window->widget_ypos = create_dict(worker_entry->instance->def->program);
64 window->id_list = create_list(worker_entry->instance->def->program);
65 release_ref(inputlist[1]);
66 release_ref(inputlist[2]);
67 inputlist[0] = window_datum;
68 return 0;
69 }
70
71 int vis_window_add_widget(datum ** inputlist, queue_entry * worker_entry)
72 {
73 datum * params[3];
74 vis_window * window;
75 inputlist[0] = copy_datum(inputlist[0], 0);
76 window = (vis_window *)(inputlist[0]->c.generic.data);
77 DEBUGPRINTF("xpos nodes: %d\n", ((dict_data *)window->widget_xpos->c.generic.data)->num_nodes);
78 params[0] = window->widget_dict;
79 params[1] = add_ref(inputlist[1]);
80 params[2] = inputlist[2];
81 DEBUGPUTS("Adding widget to widget_dict\n");
82 DEBUGPRINTF("xpos nodes: %d\n", ((dict_data *)window->widget_xpos->c.generic.data)->num_nodes);
83 DEBUGPRINTF("widget_dict->datas: %X, xpos->datas: %X\n", window->widget_dict->c.generic.data, window->widget_xpos->c.generic.data);
84 DEBUGPRINTF("sizeof(dict_data): %d, sizeof(ternary_node), %d\n", sizeof(dict_data), sizeof(ternary_node));
85 vis_dict_set(params, NULL);
86 DEBUGPRINTF("xpos nodes: %d\n", ((dict_data *)window->widget_xpos->c.generic.data)->num_nodes);
87 window->widget_dict = params[0];
88 params[0] = window->widget_xpos;
89 params[1] = add_ref(inputlist[1]);
90 params[2] = inputlist[3];
91 DEBUGPUTS("Adding xpos to xpos_dict\n");
92 vis_dict_set(params, NULL);
93 window->widget_xpos = params[0];
94 params[0] = window->widget_ypos;
95 params[1] = add_ref(inputlist[1]);
96 params[2] = inputlist[4];
97 DEBUGPUTS("Adding ypos to ypos_dict\n");
98 vis_dict_set(params, NULL);
99 window->widget_ypos = params[0];
100 params[0] = window->id_list;
101 params[1] = inputlist[1];
102 DEBUGPUTS("Adding id to id list\n");
103 DEBUGPRINTF("xpos nodes: %d\n", ((dict_data *)window->widget_xpos->c.generic.data)->num_nodes);
104 vis_list_append(params, NULL);
105 window->id_list = params[0];
106 return 0;
107 }
108
109 int vis_window_wait_close(datum ** inputlist, queue_entry * worker_entry)
110 {
111 vis_window_shown * window = (vis_window_shown *)(inputlist[0]->c.generic.data);
112 VIS_EnterCriticalSection(window->lock);
113 if(window->is_open && !window->wait_entry)
114 {
115 window->wait_entry = (queue_entry *)malloc(sizeof(queue_entry));
116 memcpy(window->wait_entry, worker_entry, sizeof(queue_entry));
117 VIS_LeaveCriticalSection(window->lock);
118 release_ref(inputlist[0]);
119 return 1;
120 }
121 else
122 {
123 VIS_LeaveCriticalSection(window->lock);
124 release_ref(inputlist[0]);
125 inputlist[0] = new_datum(BUILTIN_TYPE_YESNO, 2, 0, worker_entry->instance->def->program);
126 datum_set_yesno(inputlist[0], DATUM_NO);
127 return 0;
128 }
129 }
130
131
132
133 void vis_window_closed(datum * window_datum)
134 {
135 datum * params[1];
136 queue_entry * temp;
137 vis_window_shown * window = (vis_window_shown *)(window_datum->c.generic.data);
138
139 VIS_EnterCriticalSection(window->lock);
140 window->is_open = FALSE;
141 //window->wind = NULL;
142 temp = window->wait_entry;
143 window->wait_entry = NULL;
144 VIS_LeaveCriticalSection(window->lock);
145 release_ref(window_datum);
146 if(temp)
147 {
148 //TODO send YESNO output
149 params[0] = new_datum(BUILTIN_TYPE_YESNO, 2, 0, temp->instance->def->program);
150 datum_set_yesno(params[0], DATUM_YES);
151 process_outputs(params, temp->worker_num, temp->instance);
152 //worker_complete(*temp);
153 cleanup_check(*temp);
154 free(temp);
155 }
156
157 }
158
159 void widget_new(datum ** inputlist, int type, program * prog)
160 {
161 vis_widget * widget;
162 datum * output = new_datum(type, 1, sizeof(vis_widget), prog);
163 widget = (vis_widget *)(output->c.generic.data);
164 widget->label = inputlist[0];
165 widget->width = inputlist[1]->c.real;
166 release_ref(inputlist[1]);
167 widget->height = inputlist[2]->c.real;
168 release_ref(inputlist[2]);
169 widget->handler_dict = create_dict(prog);
170 widget->value = NULL;
171 DEBUGPRINTF("widget_new: type = %d, handler_dict = %X\n", type, widget->handler_dict);
172 inputlist[0] = output;
173 }
174
175 int vis_button_new(datum ** inputlist, queue_entry * worker_entry)
176 {
177 widget_new(inputlist, BUILTIN_TYPE_BUTTON, worker_entry->instance->def->program);
178 return 0;
179 }
180
181 int vis_button_set_handler(datum ** inputlist, queue_entry * workere_entry)
182 {
183 vis_widget * widget;
184 datum * params[3];
185 inputlist[0] = copy_datum(inputlist[0], 0);
186 widget = (vis_widget *)(inputlist[0]->c.generic.data);
187 params[0] = widget->handler_dict;
188 params[1] = inputlist[1];
189 params[2] = inputlist[2];
190 //DEBUGPUTS("\n\nvis_button_set_handler vis_dict_set\n");
191 vis_dict_set(params, NULL);
192 DEBUGPUTS("after vis_dict_set\n\n\n");
193 widget->handler_dict = params[0];
194 return 0;
195 }
196
197 int vis_inputbox_new(datum ** inputlist, queue_entry * worker_entry)
198 {
199 vis_widget * widget;
200 datum * output = new_datum(BUILTIN_TYPE_INPUTBOX, 1, sizeof(vis_widget), worker_entry->instance->def->program);
201 widget = (vis_widget *)(output->c.generic.data);
202 widget->value = inputlist[0];
203 widget->width = inputlist[1]->c.real;
204 release_ref(inputlist[1]);
205 widget->height = inputlist[2]->c.real;
206 release_ref(inputlist[2]);
207 widget->label = NULL;
208 widget->handler_dict = NULL;
209 widget->flags = 0;
210 inputlist[0] = output;
211 return 0;
212 }
213
214 int vis_inputbox_settype(datum ** inputlist, queue_entry * worker_entry)
215 {
216 vis_widget * widget;
217 inputlist[0] = copy_datum(inputlist[0], 0);
218 widget = (vis_widget *)(inputlist[0]->c.generic.data);
219 if(!strcmp((char *)(inputlist[1]->c.generic.data), "multiline"))
220 widget->flags = 1;
221 else if(!strcmp((char *)(inputlist[1]->c.generic.data), "numeric"))
222 widget->flags = 2;
223 else if(!strcmp((char *)(inputlist[1]->c.generic.data), "password"))
224 widget->flags = 3;
225 else if(!strcmp((char *)(inputlist[1]->c.generic.data), "read only"))
226 widget->flags = 4;
227 else
228 widget->flags = 0;
229 return 0;
230 }
231
232 int vis_customwidget_new(datum ** inputlist, queue_entry * worker_entry)
233 {
234 widget_new(inputlist, BUILTIN_TYPE_CUSTOM_WIDGET, worker_entry->instance->def->program);
235 return 0;
236 }
237
238
239 int vis_checkbox_new(datum ** params, queue_entry * entry)
240 {
241 vis_widget * widget;
242 widget_new(params, BUILTIN_TYPE_CHECKBOX, entry->instance->def->program);
243 widget = params[0]->c.generic.data;
244 widget->value = params[3];
245 return 0;
246 }
247
248 int vis_dropdown_new(datum ** params, queue_entry * entry)
249 {
250 vis_widget * widget;
251 widget_new(params, BUILTIN_TYPE_DROPDOWN, entry->instance->def->program);
252 widget = params[0]->c.generic.data;
253 widget->selected_index = -1;
254 return 0;
255 }
256
257 int vis_dropdown_settext(datum ** params, queue_entry * entry)
258 {
259 vis_widget * widget;
260 params[0] = copy_datum(params[0], 0);
261 widget = params[0]->c.generic.data;
262 widget->selected_index = -1;
263 release_ref(widget->value);
264 widget->value = params[1];
265 return 0;
266 }
267
268 int vis_dropdown_select(datum ** params, queue_entry * entry)
269 {
270 vis_widget * widget;
271 params[0] = copy_datum(params[0], 0);
272 widget = params[0]->c.generic.data;
273 release_ref(widget->value);
274 widget->value = NULL;
275 widget->selected_index = params[1]->c.integers.num_a;
276 release_ref(params[1]);
277 return 0;
278 }
279
280
281
282
283
284
285
286
287
288
289
290
291