From 97fa4a92116aff8841746a709d45403e04a6594f Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Sun, 12 Apr 2015 01:06:42 -0400 Subject: [PATCH] Added uiTab to the GTK+ backend. --- tab_unix.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 tab_unix.c diff --git a/tab_unix.c b/tab_unix.c new file mode 100644 index 00000000..c8d8de7e --- /dev/null +++ b/tab_unix.c @@ -0,0 +1,64 @@ +// 12 april 2015 +#include "uipriv_unix.h" + +struct tab { + struct tabPage *pages; + uintmax_t len; + uintmax_t cap; +}; + +struct tabPage { + GtkWidget *container; +}; + +static void onDestroy(GtkWidget *widget, gpointer data) +{ + struct tab *t = (struct tab *) data; + + uiFree(t->pages); + uiFree(t); +} + +uiControl *uiNewTab(void) +{ + uiControl *c; + struct tab *t; + GtkWidget *widget; + + c = uiUnixNewControl(GTK_TYPE_NOTEBOOK, + FALSE, FALSE, + NULL); + + widget = GTK_WIDGET(uiControlHandle(c)); + + t = uiNew(struct tab); + g_signal_connect(widget, "destroy", G_CALLBACK(onDestroy), t); + c->data = t; + + return c; +} + +#define tabCapGrow 32 + +void uiTabAddPage(uiControl *c, const char *name, uiControl *child) +{ + struct tab *t = (struct tab *) (c->data); + GtkWidget *notebook; + GtkWidget *container; + + if (t->len >= t->cap) { + t->cap += tabCapGrow; + t->pages = (struct tabPage *) uiRealloc(t->pages, t->cap * sizeof (struct tabPage), "struct tabPage[]"); + } + + container = newContainer(); + uiContainer(container)->child = child; + uiControlSetParent(uiContainer(container)->child, (uintptr_t) (container)); + notebook = GTK_WIDGET(uiControlHandle(c)); + gtk_container_add(GTK_CONTAINER(notebook), container); + gtk_notebook_set_tab_label_text(GTK_NOTEBOOK(notebook), container, name); + gtk_widget_show_all(container); + + t->pages[t->len].container = container; + t->len++; +}