diff --git a/redo/unix/tab.c b/redo/unix/tab.c index 4c15ffdb..cd3990bc 100644 --- a/redo/unix/tab.c +++ b/redo/unix/tab.c @@ -7,6 +7,15 @@ struct tab { GtkWidget *widget; GtkContainer *container; GtkNotebook *notebook; + + GArray *pages; +}; + +struct tabPage { + uiControl *holder; + GtkWidget *holderWidget; + uiControl *c; + int margined; }; uiDefineControlType(uiTab, uiTypeTab, struct tab) @@ -22,14 +31,24 @@ static void tabAppend(uiTab *tt, const char *name, uiControl *child) { struct tab *t = (struct tab *) tt; - uiTabInsertAt(tt, name, PUT_CODE_HERE, child); + uiTabInsertAt(tt, name, t->pages->len, child); } static void tabInsertAt(uiTab *tt, const char *name, uintmax_t n, uiControl *child) { struct tab *t = (struct tab *) tt; + struct tabPage page; - PUT_CODE_HERE; + page.holder = newHolder(); + page.c = child; + holderSetChild(page.holder, page.c); + page.holderWidget = GTK_WIDGET(uiControlHandle(page.holder)); + + gtk_container_add(t->container, page.holderWidget); + gtk_notebook_set_tab_label(t->container, page.holderWidget, name); + gtk_notebook_reorder_child(t->container, page.holderWidget, n); + + g_array_insert_val(t->pages, n, page); } static void tabDelete(uiTab *tt, uintmax_t n) @@ -43,7 +62,7 @@ static uintmax_t tabNumPages(uiTab *tt) { struct tab *t = (struct tab *) tt; - return PUT_CODE_HERE; + return t->pages->len; } static int tabMargined(uiTab *tt, uintmax_t n) @@ -73,6 +92,8 @@ uiTab *uiNewTab(void) gtk_notebook_set_scrollable(t->notebook, TRUE); + t->pages = g_array_new(FALSE, TRUE, sizeof (struct tabPage)); + uiControl(t)->Handle = tabHandle; uiTab(t)->Append = tabAppend; diff --git a/unix/tab.c b/unix/tab.c index 8a555359..203e3d7f 100644 --- a/unix/tab.c +++ b/unix/tab.c @@ -44,38 +44,7 @@ static void tabShow(uiControl *c) gtk_widget_show(t->widget); } -#define tabCapGrow 32 -static void tabAppendPage(uiTab *tt, const char *name, uiControl *child) -{ - struct tab *t = (struct tab *) tt; - struct tabPage page; - - page.bin = newBin(); - uiBinSetMainControl(page.bin, child); - // and add it as a tab page - uiBinSetOSParent(page.bin, (uintptr_t) (t->container)); - page.binWidget = GTK_WIDGET(uiControlHandle(uiControl(page.bin))); - gtk_notebook_set_tab_label_text(t->notebook, page.binWidget, name); - - g_array_append_val(t->pages, page); -} - -static void tabInsertPageBefore(uiTab *tt, const char *name, uintmax_t n, uiControl *child) -{ - struct tab *t = (struct tab *) tt; - struct tabPage page; - - page.bin = newBin(); - uiBinSetMainControl(page.bin, child); - // and add it as a tab page - uiBinSetOSParent(page.bin, (uintptr_t) (t->container)); - page.binWidget = GTK_WIDGET(uiControlHandle(uiControl(page.bin))); - gtk_notebook_set_tab_label_text(t->notebook, page.binWidget, name); - - gtk_notebook_reorder_child(t->notebook, page.binWidget, n); - g_array_insert_val(t->pages, n, page); -} static void tabDeletePage(uiTab *tt, uintmax_t n) { @@ -99,13 +68,6 @@ static void tabDeletePage(uiTab *tt, uintmax_t n) g_array_remove_index(t->pages, n); } -static uintmax_t tabNumPages(uiTab *tt) -{ - struct tab *t = (struct tab *) tt; - - return t->pages->len; -} - static int tabMargined(uiTab *tt, uintmax_t n) { struct tab *t = (struct tab *) tt; @@ -135,8 +97,6 @@ uiTab *uiNewTab(void) t = uiNew(struct tab); - t->pages = g_array_new(FALSE, TRUE, sizeof (struct tabPage)); - uiControl(t)->Show = tabShow; uiTab(t)->AppendPage = tabAppendPage;