From feefa627dc70dd5062eaca0e250952994ba296ec Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Thu, 9 Apr 2015 13:34:27 -0400 Subject: [PATCH] Implemented all of uiCheckbox on GTK+. --- new/checkbox_unix.c | 82 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 new/checkbox_unix.c diff --git a/new/checkbox_unix.c b/new/checkbox_unix.c new file mode 100644 index 0000000..ac0544d --- /dev/null +++ b/new/checkbox_unix.c @@ -0,0 +1,82 @@ +// 7 april 2015 +#include "uipriv_unix.h" + +struct checkbox { + uiControl *c; + void (*onToggled)(uiControl *, void *); + void *onToggledData; +}; + +#define C(x) ((struct checkbox *) (x)) + +static void onToggled(GtkToggleButton *b, gpointer data) +{ + (*(C(data)->onToggled))(C(data)->c, C(data)->onToggledData); +} + +static void defaultOnToggled(uiControl *c, void *data) +{ + // do nothing +} + +static void onDestroy(GtkWidget *widget, gpointer data) +{ + struct checkbox *c = (struct checkbox *) data; + + uiFree(c); +} + +uiControl *uiNewCheckbox(const char *text) +{ + struct checkbox *c; + GtkWidget *widget; + + c = uiNew(struct checkbox); + + c->c = uiUnixNewControl(GTK_TYPE_CHECK_BUTTON, + FALSE, FALSE, c, + "label", text, + NULL); + + widget = GTK_WIDGET(uiControlHandle(c->c)); + g_signal_connect(widget, "destroy", G_CALLBACK(onDestroy), c); + g_signal_connect(widget, "toggled", G_CALLBACK(onToggled), c); + + c->onToggled = defaultOnToggled; + + return c->c; +} + +char *uiCheckboxText(uiControl *c) +{ + return g_strdup(gtk_button_get_label(GTK_BUTTON(uiControlHandle(c)))); +} + +void uiCheckboxSetText(uiControl *c, const char *text) +{ + gtk_button_set_label(GTK_BUTTON(uiControlHandle(c)), text); +} + +void uiCheckboxOnToggled(uiControl *c, void (*f)(uiControl *, void *), void *data) +{ + struct checkbox *cc; + + cc = (struct checkbox *) uiUnixControlData(c); + cc->onToggled = f; + cc->onToggledData = data; +} + +int uiCheckboxChecked(uiControl *c) +{ + return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(uiControlHandle(c))) != FALSE; +} + +void uiCheckboxSetChecked(uiControl *c, int checked) +{ + gboolean active; + + active = FALSE; + if (checked) + active = TRUE; + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(uiControlHandle(c)), active); +}