diff options
Diffstat (limited to 'new/unix/button.c')
| -rw-r--r-- | new/unix/button.c | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/new/unix/button.c b/new/unix/button.c new file mode 100644 index 0000000..da09082 --- /dev/null +++ b/new/unix/button.c @@ -0,0 +1,67 @@ +// 7 april 2015 +#include "uipriv_unix.h" + +struct button { + void (*onClicked)(uiControl *, void *); + void *onClickedData; +}; + +static void onClicked(GtkButton *button, gpointer data) +{ + uiControl *c = (uiControl *) data; + struct button *b = (struct button *) (c->data); + + (*(b->onClicked))(c, b->onClickedData); +} + +static void defaultOnClicked(uiControl *c, void *data) +{ + // do nothing +} + +static void onDestroy(GtkWidget *widget, gpointer data) +{ + struct button *b = (struct button *) data; + + uiFree(b); +} + +uiControl *uiNewButton(const char *text) +{ + uiControl *c; + struct button *b; + GtkWidget *widget; + + c = uiUnixNewControl(GTK_TYPE_BUTTON, + FALSE, FALSE, + "label", text, + NULL); + + widget = GTK_WIDGET(uiControlHandle(c)); + g_signal_connect(widget, "clicked", G_CALLBACK(onClicked), c); + + b = uiNew(struct button); + g_signal_connect(widget, "destroy", G_CALLBACK(onDestroy), b); + b->onClicked = defaultOnClicked; + c->data = b; + + return c; +} + +char *uiButtonText(uiControl *c) +{ + return g_strdup(gtk_button_get_label(GTK_BUTTON(uiControlHandle(c)))); +} + +void uiButtonSetText(uiControl *c, const char *text) +{ + gtk_button_set_label(GTK_BUTTON(uiControlHandle(c)), text); +} + +void uiButtonOnClicked(uiControl *c, void (*f)(uiControl *, void *), void *data) +{ + struct button *b = (struct button *) (c->data); + + b->onClicked = f; + b->onClickedData = data; +} |
