0
|
1 #include <util/application.h>
|
|
2 #include <util/message.h>
|
|
3 #include <gui/button.h>
|
|
4 #include <gui/textview.h>
|
|
5 #include <gui/control.h>
|
|
6 #include <gui/checkbox.h>
|
|
7 #include <gui/dropdownmenu.h>
|
|
8 #include <atheos/threads.h>
|
|
9 #include <unistd.h>
|
|
10 #include <stdlib.h>
|
|
11 #include <string.h>
|
|
12 #include "syl_window.h"
|
|
13 #include "structs.h"
|
|
14 #include "debugmacros.h"
|
|
15 #include "syl_generic.h"
|
|
16
|
|
17 os::Application *app;
|
|
18
|
|
19 extern "C" {
|
|
20
|
|
21
|
|
22 void app_thread(void * param)
|
|
23 {
|
|
24 DEBUGPUTS("Before app->Run()\n");
|
|
25 app->Run();
|
|
26 DEBUGPUTS("After app->Run()\n");
|
|
27 }
|
|
28
|
|
29 //VIS_CRITICAL_SECTION_EXTERN(app_lock)
|
|
30 extern short app_lock;
|
|
31
|
|
32 void check_create_app()
|
|
33 {
|
|
34 VIS_EnterCriticalSection(app_lock);
|
|
35 if(!app)
|
|
36 {
|
|
37
|
|
38 app = new os::Application("mime type goes here");
|
|
39 resume_thread(spawn_thread("vis_app", (void *)app_thread, 1, 0, NULL));
|
|
40 DEBUGPUTS("Created application object\n");
|
|
41 }
|
|
42 VIS_LeaveCriticalSection(app_lock);
|
|
43 }
|
|
44
|
|
45 int vis_window_get_value(datum ** inputlist, queue_entry * worker_entry)
|
|
46 {
|
|
47 datum * output = NULL, *name;
|
|
48 os::String val;
|
|
49 os::Control * control = NULL;
|
|
50 os::DropdownMenu * drop;
|
|
51 vis_window_shown * window = (vis_window_shown *)(inputlist[0]->c.generic.data);
|
|
52 name = add_ref(inputlist[1]);
|
|
53 inputlist[2] = inputlist[1];
|
|
54
|
|
55 DEBUGPUTS("Entering window lock\n");
|
|
56 VIS_EnterCriticalSection(window->lock);
|
|
57 inputlist[1] = add_ref(window->widget_types);
|
|
58 vis_dict_index(inputlist+1, worker_entry);
|
|
59 if(inputlist[1])
|
|
60 {
|
|
61 switch(inputlist[1]->c.integers.num_a)
|
|
62 {
|
|
63 case BUILTIN_TYPE_INPUTBOX:
|
|
64 control = (os::Control *)(window->wind->FindView((char *)(name->c.generic.data)));
|
|
65 if(control)
|
|
66 {
|
|
67 DEBUGPUTS("Before GetValue\n");
|
|
68 val = control->GetValue().AsString();
|
|
69 output = make_string(val.c_str(), val.CountChars(), worker_entry->instance->def->prog);
|
|
70 }
|
|
71 break;
|
|
72 case BUILTIN_TYPE_CHECKBOX:
|
|
73 control = (os::Control *)(window->wind->FindView((char *)(name->c.generic.data)));
|
|
74 if(control)
|
|
75 {
|
|
76 output = new_datum(BUILTIN_TYPE_YESNO, 2, 0, worker_entry->instance->def->prog);
|
|
77 output->c.integers.num_a = control->GetValue().AsBool();
|
|
78 }
|
|
79 break;
|
|
80 case BUILTIN_TYPE_DROPDOWN:
|
|
81 drop = (os::DropdownMenu *)(window->wind->FindView((char *)(name->c.generic.data)));
|
|
82 if(drop)
|
|
83 {
|
|
84 val = drop->GetCurrentString();
|
|
85 output = make_string(val.c_str(), val.CountChars(), worker_entry->instance->def->prog);
|
|
86 }
|
|
87 break;
|
|
88 default:
|
|
89 printf("Unsupported widget type %d for Get Value\n", inputlist[1]->c.integers.num_a);
|
|
90 break;
|
|
91 }
|
|
92 }
|
|
93
|
|
94 VIS_LeaveCriticalSection(window->lock);
|
|
95 DEBUGPUTS("Leaving window lock\n");
|
|
96 DEBUGPRINTF("window->wind: %X\n", window->wind);
|
|
97 DEBUGPRINTF("window->title: %X\n", window->title);
|
|
98 release_ref(inputlist[0]);
|
|
99 release_ref(inputlist[1]);
|
|
100 release_ref(name);
|
|
101 inputlist[0] = output;
|
|
102 return 0;
|
|
103 }
|
|
104
|
|
105 int vis_window_set_value(datum ** inputlist, queue_entry * worker_entry)
|
|
106 {
|
|
107 datum *name, *value;
|
|
108 worker_def * converter;
|
|
109 os::String val;
|
|
110 os::Control * control = NULL;
|
|
111 os::DropdownMenu * drop;
|
|
112 vis_window_shown * window = (vis_window_shown *)(inputlist[0]->c.generic.data);
|
|
113 name = add_ref(inputlist[1]);
|
|
114 value = inputlist[2];
|
|
115 inputlist[2] = inputlist[1];
|
|
116
|
|
117 DEBUGPUTS("Entering window lock\n");
|
|
118 VIS_EnterCriticalSection(window->lock);
|
|
119 inputlist[1] = add_ref(window->widget_types);
|
|
120 vis_dict_index(inputlist+1, worker_entry);
|
|
121 if(inputlist[1])
|
|
122 {
|
|
123 switch(inputlist[1]->c.integers.num_a)
|
|
124 {
|
|
125 case BUILTIN_TYPE_INPUTBOX:
|
|
126 control = (os::Control *)(window->wind->FindView((char *)(name->c.generic.data)));
|
|
127 if(control)
|
|
128 {
|
|
129 if(value->company->type_id != BUILTIN_TYPE_STRING)
|
|
130 {
|
|
131 converter = find_converter_method(BUILTIN_TYPE_STRING, value->company->type_id, worker_entry->instance->def->prog);
|
|
132 if(!converter)
|
|
133 {
|
|
134 if(worker_entry->instance) {
|
|
135 ERRORPRINTF("Error: Needed conversion from %s to %s for input %d of %s in worker %s\n", value->company->name, worker_entry->instance->def->prog->companylist[BUILTIN_TYPE_STRING].name, 2, "Set Value@Screen Window", worker_entry->instance->def->name);
|
|
136 } else {
|
|
137 ERRORPRINTF("Error: Needed conversion from %s to %s for input %d of %s\n", value->company->name, worker_entry->instance->def->prog->companylist[BUILTIN_TYPE_STRING].name, 2, "Set Value@Screen Window");
|
|
138 }
|
|
139 execute_active = FALSE;
|
|
140 VIS_PROFILE_END(PROF_PROCESS_WORKER);
|
|
141 return -3;
|
|
142 }
|
|
143 ((worker_impl)(converter->implement_func))(&value, worker_entry);
|
|
144 }
|
|
145 control->SetValue(os::String((char *)(value->c.generic.data)), false);
|
|
146 }
|
|
147 break;
|
|
148 case BUILTIN_TYPE_CHECKBOX:
|
|
149 control = (os::Control *)(window->wind->FindView((char *)(name->c.generic.data)));
|
|
150 if(control)
|
|
151 {
|
|
152 if(value->company->type_id != BUILTIN_TYPE_YESNO)
|
|
153 {
|
|
154 converter = find_converter_method(BUILTIN_TYPE_YESNO, value->company->type_id, worker_entry->instance->def->prog);
|
|
155 if(!converter)
|
|
156 {
|
|
157 if(worker_entry->instance) {
|
|
158 ERRORPRINTF("Error: Needed conversion from %s to %s for input %d of %s in worker %s\n", value->company->name, worker_entry->instance->def->prog->companylist[BUILTIN_TYPE_YESNO].name, 2, "Set Value@Screen Window", worker_entry->instance->def->name);
|
|
159 } else {
|
|
160 ERRORPRINTF("Error: Needed conversion from %s to %s for input %d of %s\n", value->company->name, worker_entry->instance->def->prog->companylist[BUILTIN_TYPE_YESNO].name, 2, "Set Value@Screen Window");
|
|
161 }
|
|
162 execute_active = FALSE;
|
|
163 VIS_PROFILE_END(PROF_PROCESS_WORKER);
|
|
164 return -3;
|
|
165 }
|
|
166 ((worker_impl)(converter->implement_func))(&value, worker_entry);
|
|
167 }
|
|
168 control->SetValue((bool)(value->c.integers.num_a), false);
|
|
169 }
|
|
170 break;
|
|
171 case BUILTIN_TYPE_DROPDOWN:
|
|
172 drop = (os::DropdownMenu *)(window->wind->FindView((char *)(name->c.generic.data)));
|
|
173 if(drop)
|
|
174 {
|
|
175 if(value->company->type_id != BUILTIN_TYPE_STRING)
|
|
176 {
|
|
177 converter = find_converter_method(BUILTIN_TYPE_STRING, value->company->type_id, worker_entry->instance->def->prog);
|
|
178 if(!converter)
|
|
179 {
|
|
180 if(worker_entry->instance) {
|
|
181 ERRORPRINTF("Error: Needed conversion from %s to %s for input %d of %s in worker %s\n", value->company->name, worker_entry->instance->def->prog->companylist[BUILTIN_TYPE_STRING].name, 2, "Set Value@Screen Window", worker_entry->instance->def->name);
|
|
182 } else {
|
|
183 ERRORPRINTF("Error: Needed conversion from %s to %s for input %d of %s\n", value->company->name, worker_entry->instance->def->prog->companylist[BUILTIN_TYPE_STRING].name, 2, "Set Value@Screen Window");
|
|
184 }
|
|
185 execute_active = FALSE;
|
|
186 VIS_PROFILE_END(PROF_PROCESS_WORKER);
|
|
187 return -3;
|
|
188 }
|
|
189 ((worker_impl)(converter->implement_func))(&value, worker_entry);
|
|
190 }
|
|
191 drop->SetCurrentString(os::String((char *)(value->c.generic.data)));
|
|
192 }
|
|
193 break;
|
|
194 default:
|
|
195 printf("Unsupported widget type %d for Get Value\n", inputlist[1]->c.integers.num_a);
|
|
196 break;
|
|
197 }
|
|
198 }
|
|
199
|
|
200 VIS_LeaveCriticalSection(window->lock);
|
|
201
|
|
202 release_ref(inputlist[1]);
|
|
203 release_ref(value);
|
|
204 return 0;
|
|
205 }
|
|
206
|
|
207 os::Message * handler_widget_to_window(vis_widget * widget, vis_window_shown * window_show, char * handler_name, queue_entry * entry, bool make_message)
|
|
208 {
|
|
209 datum * params[3];
|
|
210 params[0] = add_ref(widget->handler_dict);
|
|
211 params[1] = make_string(handler_name, -1, entry->instance->def->prog);
|
|
212 DEBUGPUTS("Looking up click handler\n");
|
|
213 vis_dict_index(params, entry);
|
|
214 //if no handler is found, make sure to release output 2
|
|
215 if(params[1])
|
|
216 release_ref(params[1]);
|
|
217 if(params[0] || !make_message)
|
|
218 {
|
|
219 DEBUGPRINTF("Appending %X to handler list\n", params[0]);
|
|
220 params[1] = params[0];
|
|
221 params[0] = window_show->handler_list;
|
|
222 vis_list_append(params, NULL);
|
|
223 window_show->handler_list = params[0];
|
|
224 if(make_message)
|
|
225 return new os::Message(window_show->next_msg_code++);
|
|
226 }
|
|
227 return NULL;
|
|
228 }
|
|
229
|
|
230 void add_widget_shared(vis_window_shown * window_show, datum * widget_datum, char * name, double xpos, double ypos, queue_entry * worker_entry, os::View * parent_view = NULL)
|
|
231 {
|
|
232 datum * index;
|
|
233 os::View * widget_view;
|
|
234 os::TextView * text_view;
|
|
235 os::DropdownMenu * drop_view;
|
|
236 os::Message * msg;
|
|
237 vis_widget * widget;
|
|
238 datum * params[3];
|
|
239 params[0] = window_show->widget_types;
|
|
240 params[1] = make_string(name, -1, worker_entry->instance->def->prog);
|
|
241 params[2] = new_datum(BUILTIN_TYPE_WHOLE, 2, 0, worker_entry->instance->def->prog);
|
|
242 params[2]->c.integers.num_a = widget_datum->company->type_id;
|
|
243 vis_dict_set(params, worker_entry);
|
|
244 window_show->widget_types = params[0];
|
|
245 widget = (vis_widget *)(widget_datum->c.generic.data);
|
|
246 DEBUGPUTS("Instantiating OS native widget object\n");
|
|
247 switch(widget_datum->company->type_id)
|
|
248 {
|
|
249 case BUILTIN_TYPE_BUTTON:
|
|
250 DEBUGPUTS("new os::Button()\n");
|
|
251 widget_view = new os::Button(
|
|
252 os::Rect(
|
|
253 xpos, ypos,
|
|
254 xpos+widget->width, ypos+widget->height
|
|
255 ),
|
|
256 name,
|
|
257 (char *)(widget->label->c.generic.data),
|
|
258 new os::Message(window_show->next_msg_code++)
|
|
259 );
|
|
260 /*params[0] = add_ref(widget->handler_dict);
|
|
261 params[1] = new_datum(BUILTIN_TYPE_STRING, 1, 6, worker_entry->instance->def->prog);//click
|
|
262 strcpy((char *)(params[1]->c.generic.data), "click");
|
|
263 DEBUGPUTS("Looking up click handler\n");
|
|
264 vis_dict_index(params, worker_entry);
|
|
265 if(params[1])
|
|
266 release_ref(params[1]);
|
|
267 DEBUGPRINTF("Appending %X to handler list\n", params[0]);
|
|
268 params[1] = params[0];
|
|
269 params[0] = window_show->handler_list;
|
|
270 vis_list_append(params, worker_entry);
|
|
271 window_show->handler_list = params[0];*/
|
|
272 handler_widget_to_window(widget, window_show, "click", worker_entry, false);
|
|
273 break;
|
|
274 case BUILTIN_TYPE_INPUTBOX:
|
|
275 text_view = new os::TextView(
|
|
276 os::Rect(
|
|
277 xpos, ypos,
|
|
278 xpos+widget->width, ypos+widget->height
|
|
279 ),
|
|
280 name,
|
|
281 (char *)(widget->value->c.generic.data)
|
|
282 );
|
|
283 switch(widget->flags)
|
|
284 {
|
|
285 case 1:
|
|
286 text_view->SetMultiLine();
|
|
287 break;
|
|
288 case 2:
|
|
289 text_view->SetNumeric(true);
|
|
290 break;
|
|
291 case 3:
|
|
292 text_view->SetPasswordMode();
|
|
293 break;
|
|
294 case 4:
|
|
295 text_view->SetReadOnly();
|
|
296 break;
|
|
297 default:
|
|
298 break;
|
|
299 }
|
|
300 widget_view = text_view;
|
|
301 break;
|
|
302 case BUILTIN_TYPE_CUSTOM_WIDGET:
|
|
303 DEBUGPUTS("Creating custom widget\n");
|
|
304 widget_view = new GenericView(
|
|
305 os::Rect(
|
|
306 xpos, ypos,
|
|
307 xpos+widget->width, ypos+widget->height
|
|
308 ),
|
|
309 name,
|
|
310 add_ref(widget_datum),
|
|
311 &(window_show->instance));
|
|
312 DEBUGPRINTF("Widget view: %X\n", widget_view);
|
|
313 break;
|
|
314 case BUILTIN_TYPE_CHECKBOX:
|
|
315 widget_view = new os::CheckBox(
|
|
316 os::Rect(
|
|
317 xpos, ypos,
|
|
318 xpos+widget->width, ypos+widget->height
|
|
319 ),
|
|
320 name,
|
|
321 (char *)(widget->label->c.generic.data),
|
|
322 new os::Message(window_show->next_msg_code++)
|
|
323 );
|
|
324 handler_widget_to_window(widget, window_show, "click", worker_entry, false);
|
|
325 break;
|
|
326 case BUILTIN_TYPE_DROPDOWN:
|
|
327 drop_view = new os::DropdownMenu(
|
|
328 os::Rect(
|
|
329 xpos, ypos,
|
|
330 xpos+widget->width, ypos+widget->height
|
|
331 ),
|
|
332 name
|
|
333 );
|
|
334 params[0] = add_ref(widget->label);
|
|
335 vis_list_first(params, worker_entry);
|
|
336 index = params[0];
|
|
337 while(index)
|
|
338 {
|
|
339 params[1] = add_ref(index);
|
|
340 params[0] = add_ref(widget->label);
|
|
341 vis_list_index(params, worker_entry);
|
|
342 if(params[0] && params[0]->company->type_id == BUILTIN_TYPE_STRING)
|
|
343 drop_view->AppendItem((char *)(params[0]->c.generic.data));
|
|
344 params[1] = index;
|
|
345 params[0] = add_ref(widget->label);
|
|
346 vis_list_next(params, worker_entry);
|
|
347 index = params[0];
|
|
348 }
|
|
349 release_ref(params[1]);
|
|
350 if(widget->selected_index >= 0)
|
|
351 drop_view->SetSelection(widget->selected_index, false);
|
|
352 else if(widget->value && widget->value->company->type_id == BUILTIN_TYPE_STRING)
|
|
353 drop_view->SetCurrentString((char *)(widget->value->c.generic.data));
|
|
354 drop_view->SetSendIntermediateMsg(true);
|
|
355 msg = handler_widget_to_window(widget, window_show, "change", worker_entry, true);
|
|
356 if(msg)
|
|
357 drop_view->SetEditMessage(msg);
|
|
358 msg = handler_widget_to_window(widget, window_show, "select", worker_entry, true);
|
|
359 if(msg)
|
|
360 drop_view->SetSelectionMessage(msg);
|
|
361 drop_view->SetTarget(window_show->wind);
|
|
362 widget_view = drop_view;
|
|
363 break;
|
|
364 default:
|
|
365 //Do error crap here
|
|
366 break;
|
|
367 }
|
|
368 if(parent_view) {
|
|
369 //widget_view->SetFlags(widget_view->GetFlags() | os::WID_TRANSPARENT);
|
|
370 parent_view->AddChild(widget_view);
|
|
371 } else {
|
|
372 DEBUGPUTS("Adding OS native object to window\n");
|
|
373 window_show->wind->AddChild(widget_view);
|
|
374 }
|
|
375
|
|
376 }
|
|
377
|
|
378 int vis_window_shown_addwidget(datum ** inputlist, queue_entry * worker_entry)
|
|
379 {
|
|
380 vis_window_shown * window = (vis_window_shown *)(inputlist[0]->c.generic.data);
|
|
381 window->wind->Lock();
|
|
382 add_widget_shared(window, inputlist[2], (char *)(inputlist[1]->c.generic.data), inputlist[3]->c.real, inputlist[4]->c.real, worker_entry, NULL);
|
|
383 window->wind->Unlock();
|
|
384 release_ref(inputlist[1]);
|
|
385 release_ref(inputlist[2]);
|
|
386 release_ref(inputlist[3]);
|
|
387 release_ref(inputlist[4]);
|
|
388 return 0;
|
|
389 }
|
|
390
|
|
391 int vis_window_show(datum ** inputlist, queue_entry * worker_entry)
|
|
392 {
|
|
393 vis_window * window = (vis_window *)(inputlist[0]->c.generic.data);
|
|
394 vis_window_shown * window_show;
|
|
395 list_data * list;
|
|
396 int i;
|
|
397 datum * params[2];
|
|
398 double xpos, ypos;
|
|
399 datum * widget_datum;
|
|
400 vis_widget * widget;
|
|
401 datum * show_datum = new_datum(BUILTIN_TYPE_WINDOW_SHOWN, 1, sizeof(vis_window_shown), worker_entry->instance->def->prog);
|
|
402 window_show = (vis_window_shown *)(show_datum->c.generic.data);
|
|
403 window_show->title = add_ref(window->title);
|
|
404 window_show->width = window->width;
|
|
405 window_show->height = window->height;
|
|
406 window_show->xpos = inputlist[1]->c.real;
|
|
407 release_ref(inputlist[1]);
|
|
408 window_show->ypos = inputlist[2]->c.real;
|
|
409 release_ref(inputlist[2]);
|
|
410 window_show->is_open = TRUE;
|
|
411 window_show->wait_entry = NULL;
|
|
412 window_show->next_msg_code = 0;
|
|
413 window_show->instance.def = worker_entry->instance->def;
|
|
414 window_show->widget_types = create_dict(worker_entry->instance->def->prog);
|
|
415
|
|
416 check_create_app();
|
|
417 VIS_InitializeCriticalSection(window_show->lock);
|
|
418 window_show->wind = new os_window(add_ref(show_datum));
|
|
419
|
|
420 window_show->handler_list = create_list(worker_entry->instance->def->prog);
|
|
421 list = (list_data *)(window->id_list->c.generic.data);
|
|
422 for(i = 0; i < list->num_entries; ++i)
|
|
423 {
|
|
424 DEBUGPRINTF("Retrieving widget %d\n", i);
|
|
425 params[0] = add_ref(window->widget_dict);
|
|
426 params[1] = add_ref(list->entries[i]);
|
|
427 vis_dict_index(params, NULL);
|
|
428 widget_datum = params[0];
|
|
429 DEBUGPRINTF("Retrieving xpos for widget: %d\n", i);
|
|
430 params[0] = add_ref(window->widget_xpos);
|
|
431 params[1] = add_ref(list->entries[i]);
|
|
432 DEBUGPUTS("Calling vis_dict_index(params, NULL) for xpos\n");
|
|
433 vis_dict_index(params, NULL);
|
|
434 DEBUGPUTS("After vis_dict_index\n");
|
|
435 xpos = params[0]->c.real;
|
|
436 DEBUGPUTS("Releasing xpos datum\n");
|
|
437 release_ref(params[0]);
|
|
438 DEBUGPRINTF("Retrieving ypos for widget: %d\n", i);
|
|
439 params[0] = add_ref(window->widget_ypos);
|
|
440 params[1] = add_ref(list->entries[i]);
|
|
441 DEBUGPUTS("Calling vis_dict_index(params, NULL) for ypos\n");
|
|
442 vis_dict_index(params, NULL);
|
|
443 DEBUGPUTS("After vis_dict_index\n");
|
|
444 ypos = params[0]->c.real;
|
|
445 DEBUGPUTS("Releasing ypos datum\n");
|
|
446 release_ref(params[0]);
|
|
447 add_widget_shared(window_show, widget_datum, (char *)(list->entries[i]->c.generic.data), xpos, ypos, worker_entry, NULL);
|
|
448 }
|
|
449
|
|
450 DEBUGPUTS("Showing window\n");
|
|
451 window_show->wind->MakeFocus();
|
|
452 window_show->wind->Show();
|
|
453 //resume_thread(spawn_thread("vis_mem_check", (void *)vis_mem_check, 1, 0, (void *)window_show));
|
|
454 //sleep(5);
|
|
455 release_ref(inputlist[0]);
|
|
456 inputlist[0] = show_datum;
|
|
457 return 0;
|
|
458 }
|
|
459
|
|
460
|
|
461 }
|
|
462
|
|
463 os_window::os_window(datum * vis_wind) : os::Window(
|
|
464 os::Rect(
|
|
465 ((vis_window_shown *)(vis_wind->c.generic.data))->xpos,
|
|
466 ((vis_window_shown *)(vis_wind->c.generic.data))->ypos,
|
|
467 ((vis_window_shown *)(vis_wind->c.generic.data))->xpos+((vis_window_shown *)(vis_wind->c.generic.data))->width,
|
|
468 ((vis_window_shown *)(vis_wind->c.generic.data))->ypos+((vis_window_shown *)(vis_wind->c.generic.data))->height),
|
|
469 "vis_wnd",
|
|
470 (char *)(((vis_window_shown *)(vis_wind->c.generic.data))->title->c.generic.data))
|
|
471 {
|
|
472 //DEBUGPRINTF("vis_wind lock: %d\n", ((vis_window_shown *)(vis_wind->c.generic.data))->lock);
|
|
473 this->vis_wind = vis_wind;
|
|
474 // this->current_focus = NULL;
|
|
475 }
|
|
476 os_window::~os_window()
|
|
477 {
|
|
478 vis_window_closed(this->vis_wind);
|
|
479 }
|
|
480
|
|
481 void empty_callback(worker_instance * caller_instance, int caller_workernum, worker_instance * done_instance, void * data)
|
|
482 {
|
|
483 }
|
|
484
|
|
485 void os_window::HandleMessage(os::Message * msg)
|
|
486 {
|
|
487 int returnval;
|
|
488 queue_entry entry;
|
|
489 datum * params[32];
|
|
490 datum * io_list;
|
|
491 datum * worker;
|
|
492 worker_datum * work;
|
|
493 int code = msg->GetCode();
|
|
494 DEBUGPRINTF("Message Code: %d\n", code);
|
|
495 DEBUGPRINTF("window->wind: %X\n", ((vis_window_shown *)(this->vis_wind->c.generic.data))->wind);
|
|
496 DEBUGPRINTF("vis_wind->ref_count: %X\n", this->vis_wind->ref_count);
|
|
497 params[0] = add_ref(((vis_window_shown *)(this->vis_wind->c.generic.data))->handler_list);
|
|
498 params[1] = new_datum(BUILTIN_TYPE_WHOLE, 2, 0, ((vis_window_shown *)(this->vis_wind->c.generic.data))->instance.def->prog);
|
|
499 params[1]->c.integers.num_a = code;
|
|
500 entry.worker_num = 0;
|
|
501 entry.instance = &(((vis_window_shown *)(this->vis_wind->c.generic.data))->instance);
|
|
502 vis_list_index(params, &entry);
|
|
503 if(params[0] && params[0]->company->type_id == BUILTIN_TYPE_WORKER)
|
|
504 {
|
|
505 worker = params[0];
|
|
506 work = (worker_datum *)(worker->c.generic.data);
|
|
507 params[0] = create_list(entry.instance->def->prog);
|
|
508 params[1] = add_ref(this->vis_wind);
|
|
509 vis_list_append(params, &entry);
|
|
510 io_list = params[0];
|
|
511 returnval = worker_populate_inputs(worker, io_list, params);
|
|
512 if(!returnval)
|
|
513 execute_def(work->def, entry, params, empty_callback);
|
|
514 }
|
|
515 DEBUGPRINTF("window->wind: %X\n", ((vis_window_shown *)(this->vis_wind->c.generic.data))->wind);
|
|
516 DEBUGPUTS("End: HandleMessage\n");
|
|
517 }
|
|
518 /*
|
|
519 void os_window::DispatchMessage(os::Message * pcMsg, os::Handler * pcHandler)
|
|
520 {
|
|
521 os::View * view;
|
|
522 os::View * handler_view;
|
|
523 //int code = pcMsg->GetCode();
|
|
524 pcMsg->FindPointer("_widget", (void **)&view);
|
|
525 if(view) {
|
|
526 handler_view = _FindHandler(view->m_nToken);
|
|
527 if(handler_view != view)
|
|
528 printf("DispatchMessage, message view: %X, handler view: %X\n", view, handler_view);
|
|
529
|
|
530 }
|
|
531 os::Window::DispatchMessage(pcMsg, pcHandler);
|
|
532 }
|
|
533
|
|
534 os::View *os_window::SetFocusNoHandler(os::View * new_focus )
|
|
535 {
|
|
536 ifthis->current_focus)
|
|
537 this->current_focus->Activated(false);
|
|
538 if(new_focus)
|
|
539 new_focus->Activated(true);
|
|
540 this->current_focus = new_focus;
|
|
541 return new_focus;
|
|
542 }*/
|
|
543
|
|
544
|
|
545
|
|
546
|
|
547
|
|
548
|
|
549
|
|
550
|
|
551
|
|
552
|
|
553
|
|
554
|
|
555
|
|
556
|
|
557
|
|
558
|
|
559
|
|
560
|
|
561
|