ui/gtk/button.c

changeset 108
77254bd6dccb
parent 103
6606616eca9f
child 109
c3dfcb8f0be7
equal deleted inserted replaced
107:b34bd1557c6c 108:77254bd6dccb
71 event->obj = obj; 71 event->obj = obj;
72 event->userdata = userdata; 72 event->userdata = userdata;
73 event->callback = onclick; 73 event->callback = onclick;
74 event->value = event_value; 74 event->value = event_value;
75 event->customdata = NULL; 75 event->customdata = NULL;
76 event->customint = 0;
76 77
77 g_signal_connect( 78 g_signal_connect(
78 button, 79 button,
79 "clicked", 80 "clicked",
80 G_CALLBACK(ui_button_clicked), 81 G_CALLBACK(ui_button_clicked),
94 } 95 }
95 96
96 return button; 97 return button;
97 } 98 }
98 99
99 UIWIDGET ui_button_create(UiObject *obj, UiButtonArgs args) { 100 UIWIDGET ui_button_create(UiObject *obj, UiButtonArgs *args) {
100 UiObject* current = uic_current_obj(obj); 101 UiObject* current = uic_current_obj(obj);
101 GtkWidget *button = ui_create_button(obj, args.label, args.icon, args.onclick, args.onclickdata, 0, FALSE); 102 GtkWidget *button = ui_create_button(obj, args->label, args->icon, args->onclick, args->onclickdata, 0, FALSE);
102 ui_set_name_and_style(button, args.name, args.style_class); 103 ui_set_name_and_style(button, args->name, args->style_class);
103 ui_set_widget_groups(obj->ctx, button, args.groups); 104 ui_set_widget_groups(obj->ctx, button, args->groups);
104 UI_APPLY_LAYOUT1(current, args); 105 UI_APPLY_LAYOUT2(current, args);
105 current->container->add(current->container, button, FALSE); 106 current->container->add(current->container, button);
106 return button; 107 return button;
107 } 108 }
108 109
109 110
110 void ui_button_clicked(GtkWidget *widget, UiEventData *event) { 111 void ui_button_clicked(GtkWidget *widget, UiEventData *event) {
111 UiEvent e; 112 UiEvent e;
112 e.obj = event->obj; 113 e.obj = event->obj;
113 e.window = event->obj->window; 114 e.window = event->obj->window;
114 e.document = event->obj->ctx->document; 115 e.document = event->obj->ctx->document;
115 e.eventdata = NULL; 116 e.eventdata = NULL;
117 e.eventdatatype = 0;
116 e.intval = event->value; 118 e.intval = event->value;
117 e.set = ui_get_setop(); 119 e.set = ui_get_setop();
118 event->callback(&e, event->userdata); 120 event->callback(&e, event->userdata);
119 } 121 }
120 122
135 UiEvent e; 137 UiEvent e;
136 e.obj = event->obj; 138 e.obj = event->obj;
137 e.window = event->obj->window; 139 e.window = event->obj->window;
138 e.document = event->obj->ctx->document; 140 e.document = event->obj->ctx->document;
139 e.eventdata = event->var->value; 141 e.eventdata = event->var->value;
142 e.eventdatatype = UI_EVENT_DATA_INTEGER_VALUE;
140 e.intval = i->get(i); 143 e.intval = i->get(i);
141 e.set = ui_get_setop(); 144 e.set = ui_get_setop();
142 145
143 ui_notify_evt(i->observers, &e); 146 ui_notify_evt(i->observers, &e);
144 } 147 }
147 UiEvent e; 150 UiEvent e;
148 e.obj = event->obj; 151 e.obj = event->obj;
149 e.window = event->obj->window; 152 e.window = event->obj->window;
150 e.document = event->obj->ctx->document; 153 e.document = event->obj->ctx->document;
151 e.eventdata = NULL; 154 e.eventdata = NULL;
155 e.eventdatatype = 0;
152 e.intval = gtk_toggle_button_get_active(widget); 156 e.intval = gtk_toggle_button_get_active(widget);
153 e.set = ui_get_setop(); 157 e.set = ui_get_setop();
154 event->callback(&e, event->userdata); 158 event->callback(&e, event->userdata);
155 } 159 }
156 160
238 event->obj = obj; 242 event->obj = obj;
239 event->userdata = onchangedata; 243 event->userdata = onchangedata;
240 event->callback = onchange; 244 event->callback = onchange;
241 event->value = 0; 245 event->value = 0;
242 event->customdata = NULL; 246 event->customdata = NULL;
247 event->customint = 0;
243 248
244 g_signal_connect( 249 g_signal_connect(
245 widget, 250 widget,
246 "toggled", 251 "toggled",
247 G_CALLBACK(toggled_callback), 252 G_CALLBACK(toggled_callback),
258 event->obj = obj; 263 event->obj = obj;
259 event->userdata = NULL; 264 event->userdata = NULL;
260 event->callback = NULL; 265 event->callback = NULL;
261 event->value = enable_state; 266 event->value = enable_state;
262 event->customdata = NULL; 267 event->customdata = NULL;
268 event->customint = 0;
263 269
264 g_signal_connect( 270 g_signal_connect(
265 widget, 271 widget,
266 "toggled", 272 "toggled",
267 G_CALLBACK(enable_state_func), 273 G_CALLBACK(enable_state_func),
272 G_CALLBACK(ui_destroy_userdata), 278 G_CALLBACK(ui_destroy_userdata),
273 event); 279 event);
274 } 280 }
275 } 281 }
276 282
277 static UIWIDGET togglebutton_create(UiObject *obj, GtkWidget *widget, UiToggleArgs args) { 283 static UIWIDGET togglebutton_create(UiObject *obj, GtkWidget *widget, UiToggleArgs *args) {
278 UiObject* current = uic_current_obj(obj); 284 UiObject* current = uic_current_obj(obj);
279 285
280 ui_setup_togglebutton( 286 ui_setup_togglebutton(
281 obj, 287 obj,
282 widget, 288 widget,
283 args.label, 289 args->label,
284 args.icon, 290 args->icon,
285 args.varname, 291 args->varname,
286 args.value, 292 args->value,
287 args.onchange, 293 args->onchange,
288 args.onchangedata, 294 args->onchangedata,
289 args.enable_group); 295 args->enable_group);
290 ui_set_name_and_style(widget, args.name, args.style_class); 296 ui_set_name_and_style(widget, args->name, args->style_class);
291 ui_set_widget_groups(obj->ctx, widget, args.groups); 297 ui_set_widget_groups(obj->ctx, widget, args->groups);
292 298
293 UI_APPLY_LAYOUT1(current, args); 299 UI_APPLY_LAYOUT2(current, args);
294 current->container->add(current->container, widget, FALSE); 300 current->container->add(current->container, widget);
295 301
296 return widget; 302 return widget;
297 } 303 }
298 304
299 UIWIDGET ui_togglebutton_create(UiObject* obj, UiToggleArgs args) { 305 UIWIDGET ui_togglebutton_create(UiObject* obj, UiToggleArgs *args) {
300 return togglebutton_create(obj, gtk_toggle_button_new(), args); 306 return togglebutton_create(obj, gtk_toggle_button_new(), args);
301 } 307 }
302 308
303 #if GTK_MAJOR_VERSION >= 4 309 #if GTK_MAJOR_VERSION >= 4
304 310
318 UiEvent e; 324 UiEvent e;
319 e.obj = event->obj; 325 e.obj = event->obj;
320 e.window = event->obj->window; 326 e.window = event->obj->window;
321 e.document = event->obj->ctx->document; 327 e.document = event->obj->ctx->document;
322 e.eventdata = NULL; 328 e.eventdata = NULL;
329 e.eventdatatype = 0;
323 e.intval = gtk_check_button_get_active(widget); 330 e.intval = gtk_check_button_get_active(widget);
324 e.set = ui_get_setop(); 331 e.set = ui_get_setop();
325 event->callback(&e, event->userdata); 332 event->callback(&e, event->userdata);
326 } 333 }
327 334
331 } else { 338 } else {
332 ui_unset_group(event->obj->ctx, event->value); 339 ui_unset_group(event->obj->ctx, event->value);
333 } 340 }
334 } 341 }
335 342
336 UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs args) { 343 UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs *args) {
337 UiObject* current = uic_current_obj(obj); 344 UiObject* current = uic_current_obj(obj);
338 345
339 GtkWidget *widget = gtk_check_button_new_with_label(args.label); 346 GtkWidget *widget = gtk_check_button_new_with_label(args->label);
340 ui_bind_togglebutton( 347 ui_bind_togglebutton(
341 obj, 348 obj,
342 widget, 349 widget,
343 ui_check_button_get, 350 ui_check_button_get,
344 ui_check_button_set, 351 ui_check_button_set,
345 args.varname, 352 args->varname,
346 args.value, 353 args->value,
347 (ui_toggled_func)ui_checkbox_callback, 354 (ui_toggled_func)ui_checkbox_callback,
348 args.onchange, 355 args->onchange,
349 args.onchangedata, 356 args->onchangedata,
350 (ui_toggled_func)ui_checkbox_enable_state, 357 (ui_toggled_func)ui_checkbox_enable_state,
351 args.enable_group); 358 args->enable_group);
352 359
353 ui_set_name_and_style(widget, args.name, args.style_class); 360 ui_set_name_and_style(widget, args->name, args->style_class);
354 ui_set_widget_groups(obj->ctx, widget, args.groups); 361 ui_set_widget_groups(obj->ctx, widget, args->groups);
355 362
356 UI_APPLY_LAYOUT1(current, args); 363 UI_APPLY_LAYOUT2(current, args);
357 current->container->add(current->container, widget, FALSE); 364 current->container->add(current->container, widget);
358 365
359 return widget; 366 return widget;
360 } 367 }
361 368
362 #else 369 #else
363 UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs args) { 370 UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs *args) {
364 return togglebutton_create(obj, gtk_check_button_new(), args); 371 return togglebutton_create(obj, gtk_check_button_new(), args);
365 } 372 }
366 #endif 373 #endif
367 374
368 UIWIDGET ui_switch_create(UiObject* obj, UiToggleArgs args) { 375 UIWIDGET ui_switch_create(UiObject* obj, UiToggleArgs *args) {
369 #ifdef UI_GTK3 376 #ifdef UI_GTK3
370 return NULL; // TODO 377 return NULL; // TODO
371 #else 378 #else
372 return ui_checkbox_create(obj, args); 379 return ui_checkbox_create(obj, args);
373 #endif 380 #endif
389 UiEvent e; 396 UiEvent e;
390 e.obj = event->obj; 397 e.obj = event->obj;
391 e.window = event->obj->window; 398 e.window = event->obj->window;
392 e.document = event->obj->ctx->document; 399 e.document = event->obj->ctx->document;
393 e.eventdata = NULL; 400 e.eventdata = NULL;
401 e.eventdatatype = 0;
394 e.intval = RADIOBUTTON_GET_ACTIVE(widget); 402 e.intval = RADIOBUTTON_GET_ACTIVE(widget);
395 e.set = ui_get_setop(); 403 e.set = ui_get_setop();
396 event->callback(&e, event->userdata); 404 event->callback(&e, event->userdata);
397 } 405 }
398 406
413 free(data->eventdata); 421 free(data->eventdata);
414 } 422 }
415 free(data); 423 free(data);
416 } 424 }
417 425
418 UIWIDGET ui_radiobutton_create(UiObject *obj, UiToggleArgs args) { 426 UIWIDGET ui_radiobutton_create(UiObject *obj, UiToggleArgs *args) {
419 UiObject* current = uic_current_obj(obj); 427 UiObject* current = uic_current_obj(obj);
420 428
421 GSList *rg = NULL; 429 GSList *rg = NULL;
422 UiInteger *rgroup; 430 UiInteger *rgroup;
423 431
424 UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_INTEGER); 432 UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_INTEGER);
425 433
426 UiBool first = FALSE; 434 UiBool first = FALSE;
427 if(var) { 435 if(var) {
428 rgroup = var->value; 436 rgroup = var->value;
429 rg = rgroup->obj; 437 rg = rgroup->obj;
430 if(!rg) { 438 if(!rg) {
431 first = TRUE; 439 first = TRUE;
432 } 440 }
433 } 441 }
434 442
435 GtkWidget *rbutton = RADIOBUTTON_NEW(rg, args.label); 443 GtkWidget *rbutton = RADIOBUTTON_NEW(rg, args->label);
436 ui_set_name_and_style(rbutton, args.name, args.style_class); 444 ui_set_name_and_style(rbutton, args->name, args->style_class);
437 ui_set_widget_groups(obj->ctx, rbutton, args.groups); 445 ui_set_widget_groups(obj->ctx, rbutton, args->groups);
438 if(rgroup) { 446 if(rgroup) {
439 #if GTK_MAJOR_VERSION >= 4 447 #if GTK_MAJOR_VERSION >= 4
440 if(rg) { 448 if(rg) {
441 gtk_check_button_set_group(GTK_CHECK_BUTTON(rbutton), rg->data); 449 gtk_check_button_set_group(GTK_CHECK_BUTTON(rbutton), rg->data);
442 } 450 }
474 "destroy", 482 "destroy",
475 G_CALLBACK(destroy_radiobutton), 483 G_CALLBACK(destroy_radiobutton),
476 rbdata); 484 rbdata);
477 } 485 }
478 486
479 if(args.onchange) { 487 if(args->onchange) {
480 UiEventData *event = malloc(sizeof(UiEventData)); 488 UiEventData *event = malloc(sizeof(UiEventData));
481 event->obj = obj; 489 event->obj = obj;
482 event->userdata = args.onchangedata; 490 event->userdata = args->onchangedata;
483 event->callback = args.onchange; 491 event->callback = args->onchange;
484 event->value = 0; 492 event->value = 0;
485 event->customdata = NULL; 493 event->customdata = NULL;
494 event->customint = 0;
486 495
487 g_signal_connect( 496 g_signal_connect(
488 rbutton, 497 rbutton,
489 "toggled", 498 "toggled",
490 G_CALLBACK(radiobutton_toggled), 499 G_CALLBACK(radiobutton_toggled),
494 "destroy", 503 "destroy",
495 G_CALLBACK(ui_destroy_userdata), 504 G_CALLBACK(ui_destroy_userdata),
496 event); 505 event);
497 } 506 }
498 507
499 UI_APPLY_LAYOUT1(current, args); 508 UI_APPLY_LAYOUT2(current, args);
500 current->container->add(current->container, rbutton, FALSE); 509 current->container->add(current->container, rbutton);
501 510
502 return rbutton; 511 return rbutton;
503 } 512 }
504 513
505 void ui_radio_obs(GtkToggleButton *widget, UiVarEventData *event) { 514 void ui_radio_obs(GtkToggleButton *widget, UiVarEventData *event) {
508 UiEvent e; 517 UiEvent e;
509 e.obj = event->obj; 518 e.obj = event->obj;
510 e.window = event->obj->window; 519 e.window = event->obj->window;
511 e.document = event->obj->ctx->document; 520 e.document = event->obj->ctx->document;
512 e.eventdata = NULL; 521 e.eventdata = NULL;
522 e.eventdatatype = 0;
513 e.intval = i->get(i); 523 e.intval = i->get(i);
514 524
515 ui_notify_evt(i->observers, &e); 525 ui_notify_evt(i->observers, &e);
516 } 526 }
517 527

mercurial