diff -r cdad8b7e83db -r 7e7c05af8f3a ui/gtk/container.c --- a/ui/gtk/container.c Tue Oct 08 22:53:27 2024 +0200 +++ b/ui/gtk/container.c Wed Oct 09 21:43:11 2024 +0200 @@ -361,24 +361,60 @@ } +static int stack_set_page(GtkWidget *stack, int index) { + GtkSelectionModel *pages = gtk_stack_get_pages(GTK_STACK(stack)); + GListModel *list = G_LIST_MODEL(pages); + GtkStackPage *page = g_list_model_get_item(list, index); + if(page) { + gtk_stack_set_visible_child(GTK_STACK(stack), gtk_stack_page_get_child(page)); + } else { + fprintf(stderr, "UI Error: ui_stack_set value out of bounds\n"); + return -1; + } + return index; +} + void ui_stack_tab_select(UIWIDGET tabview, int tab) { - + stack_set_page(tabview, tab); } void ui_stack_tab_remove(UIWIDGET tabview, int tab) { - + GtkStack *stack = GTK_STACK(tabview); + GtkWidget *current = gtk_stack_get_visible_child(stack); + GtkSelectionModel *pages = gtk_stack_get_pages(stack); + GListModel *list = G_LIST_MODEL(pages); + GtkStackPage *page = g_list_model_get_item(list, tab); + if(page) { + gtk_stack_remove(stack, gtk_stack_page_get_child(page)); + } } void ui_stack_tab_add(UIWIDGET widget, int index, const char *name, UIWIDGET child) { - GtkStackPage *page = gtk_stack_add_titled(GTK_STACK(widget), child, name, name); + (void)gtk_stack_add_titled(GTK_STACK(widget), child, name, name); } int64_t ui_stack_get(UiInteger *i) { - + GtkStack *stack = GTK_STACK(i->obj); + GtkWidget *current = gtk_stack_get_visible_child(stack); + GtkSelectionModel *pages = gtk_stack_get_pages(stack); + GListModel *list = G_LIST_MODEL(pages); + int nitems = g_list_model_get_n_items(list); + for(int p=0;pvalue = p; + break; + } + } + return i->value; } void ui_stack_set(UiInteger *i, int64_t value) { - + GtkWidget *widget = i->obj; + if(stack_set_page(widget, value) >= 0) { + i->value = value; + } } @@ -451,7 +487,7 @@ UiInteger *i = var->value; i->get = getfunc; i->set = setfunc; - i->obj = widget; + i->obj = data_widget; } g_object_set_data(G_OBJECT(widget), "ui_tabview", data);