diff -r 5223de7979e2 -r d51e334c1439 ui/gtk/button.c --- a/ui/gtk/button.c Thu Aug 20 17:14:27 2015 +0200 +++ b/ui/gtk/button.c Sat Oct 10 15:29:31 2015 +0200 @@ -86,3 +86,67 @@ e.intval = gtk_toggle_tool_button_get_active(widget); event->callback(&e, event->userdata); } + +int ui_toggle_button_get(UiInteger *integer) { + GtkToggleButton *button = integer->obj; + integer->value = (int)gtk_toggle_button_get_active(button); + return integer->value; +} + +void ui_toggle_button_set(UiInteger *integer, int value) { + GtkToggleButton *button = integer->obj; + integer->value = value; + gtk_toggle_button_set_active(button, value != 0 ? TRUE : FALSE); +} + + +UIWIDGET ui_checkbox(UiObject *obj, char *label, UiInteger *value) { + GtkWidget *button = gtk_check_button_new_with_label(label); + + // bind value + if(value) { + value->obj = GTK_TOGGLE_BUTTON(button); + value->get = ui_toggle_button_get; + value->set = ui_toggle_button_set; + if(value->value != 0) { + gtk_toggle_button_set_active(value->obj, TRUE); + } + } + + UiContainer *ct = uic_get_current_container(obj); + ct->add(ct, button, FALSE); + + return button; +} + +UIWIDGET ui_checkbox_cb(UiObject *obj, char *label, ui_callback f, void *data) { + GtkWidget *button = gtk_check_button_new_with_label(label); + + if(f) { + //UiEventData *event = ucx_mempool_malloc( + // obj->ctx->mempool, + // sizeof(UiEventData)); + UiEventData *event = malloc(sizeof(UiEventData)); + event->obj = obj; + event->userdata = data; + event->callback = f; + event->value = 0; + + g_signal_connect( + button, + "clicked", + G_CALLBACK(ui_button_toggled), + event); + g_signal_connect( + button, + "destroy", + G_CALLBACK(ui_destroy_userdata), + event); + } + + UiContainer *ct = uic_get_current_container(obj); + ct->add(ct, button, FALSE); + + return button; +} +