# HG changeset patch # User Olaf Wintermann # Date 1730016106 -3600 # Node ID baf9bcc98d87610c142753ec879872b44e3e88c8 # Parent ae999e3346a93f65c8fa461a67da864246fc7394 add expander container (GTK) diff -r ae999e3346a9 -r baf9bcc98d87 application/main.c --- a/application/main.c Sun Oct 27 08:53:32 2024 +0100 +++ b/application/main.c Sun Oct 27 09:01:46 2024 +0100 @@ -308,7 +308,17 @@ } ui_tab(obj, "Tab 6") { - ui_scrolledwindow(obj, .style_class = "ui_test", .fill = UI_ON) { + ui_scrolledwindow(obj, .fill = UI_ON) { + ui_expander(obj, .label = "Expander", .margin = 10, .spacing = 10) { + ui_label(obj, .label = "Test"); + ui_button(obj, .label = "Button"); + } + + ui_frame(obj, .label = "Frame", .margin = 10, .spacing = 10) { + ui_label(obj, .label = "Test"); + ui_button(obj, .label = "Button"); + } + for(int i=0;i<100;i++) { char labelstr[32]; snprintf(labelstr, 32, "button %d", i); diff -r ae999e3346a9 -r baf9bcc98d87 ui/gtk/container.c --- a/ui/gtk/container.c Sun Oct 27 08:53:32 2024 +0100 +++ b/ui/gtk/container.c Sun Oct 27 09:01:46 2024 +0100 @@ -253,6 +253,27 @@ FRAME_SET_CHILD(ct->widget, widget); } +UiContainer* ui_expander_container(UiObject *obj, GtkWidget *expander) { + UiContainer *ct = cxCalloc( + obj->ctx->allocator, + 1, + sizeof(UiContainer)); + ct->widget = expander; + ct->add = ui_expander_container_add; + return ct; +} + +void ui_expander_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill) { + EXPANDER_SET_CHILD(ct->widget, widget); +} + +void ui_scrolledwindow_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill) { + // TODO: check if the widget implements GtkScrollable + SCROLLEDWINDOW_SET_CHILD(ct->widget, widget); + ui_reset_layout(ct->layout); + ct->current = widget; +} + UiContainer* ui_scrolledwindow_container(UiObject *obj, GtkWidget *scrolledwindow) { UiContainer *ct = cxCalloc( obj->ctx->allocator, @@ -263,13 +284,6 @@ return ct; } -void ui_scrolledwindow_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill) { - // TODO: check if the widget implements GtkScrollable - SCROLLEDWINDOW_SET_CHILD(ct->widget, widget); - ui_reset_layout(ct->layout); - ct->current = widget; -} - UiContainer* ui_tabview_container(UiObject *obj, GtkWidget *tabview) { UiTabViewContainer *ct = cxCalloc( obj->ctx->allocator, @@ -383,10 +397,32 @@ newobj->widget = frame; newobj->container = ui_frame_container(obj, frame); } + current->container->add(current->container, frame, FALSE); + uic_obj_add(obj, newobj); return frame; } +UIEXPORT UIWIDGET ui_expander_create(UiObject *obj, UiFrameArgs args) { + UiObject* current = uic_current_obj(obj); + UI_APPLY_LAYOUT1(current, args); + + GtkWidget *expander = gtk_expander_new(args.label); + gtk_expander_set_expanded(GTK_EXPANDER(expander), args.isexpanded); + UiObject *newobj = uic_object_new(obj, expander); + GtkWidget *sub = ui_subcontainer_create(args.subcontainer, newobj, args.spacing, args.columnspacing, args.rowspacing, args.margin); + if(sub) { + EXPANDER_SET_CHILD(expander, sub); + } else { + newobj->widget = expander; + newobj->container = ui_expander_container(obj, expander); + } + current->container->add(current->container, expander, FALSE); + uic_obj_add(obj, newobj); + + return expander; +} + UIWIDGET ui_scrolledwindow_create(UiObject* obj, UiFrameArgs args) { UiObject* current = uic_current_obj(obj); diff -r ae999e3346a9 -r baf9bcc98d87 ui/gtk/container.h --- a/ui/gtk/container.h Sun Oct 27 08:53:32 2024 +0100 +++ b/ui/gtk/container.h Sun Oct 27 09:01:46 2024 +0100 @@ -158,6 +158,9 @@ UiContainer* ui_frame_container(UiObject *obj, GtkWidget *frame); void ui_frame_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill); +UiContainer* ui_expander_container(UiObject *obj, GtkWidget *expander); +void ui_expander_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill); + UiContainer* ui_scrolledwindow_container(UiObject *obj, GtkWidget *scrolledwindow); void ui_scrolledwindow_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill); diff -r ae999e3346a9 -r baf9bcc98d87 ui/gtk/toolkit.h --- a/ui/gtk/toolkit.h Sun Oct 27 08:53:32 2024 +0100 +++ b/ui/gtk/toolkit.h Sun Oct 27 09:01:46 2024 +0100 @@ -67,6 +67,7 @@ #define SCROLLEDWINDOW_SET_CHILD(sw, child) gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(sw), child) #define SCROLLEDWINDOW_GET_CHILD(sw) gtk_scrolled_window_get_child(GTK_SCROLLED_WINDOW(sw)) #define FRAME_SET_CHILD(frame, child) gtk_frame_set_child(GTK_FRAME(frame), child) +#define EXPANDER_SET_CHILD(expander, child) gtk_expander_set_child(GTK_EXPANDER(expander), child) #define WIDGET_ADD_CSS_CLASS(w, cssclass) gtk_widget_add_css_class(w, cssclass) #define WIDGET_REMOVE_CSS_CLASS(w, cssclass) gtk_widget_remove_css_class(w, cssclass) #else @@ -82,6 +83,7 @@ #define SCROLLEDWINDOW_SET_CHILD(sw, child) gtk_container_add(GTK_CONTAINER(sw), child) #define SCROLLEDWINDOW_GET_CHILD(sw) gtk_bin_get_child(GTK_BIN(sw)) #define FRAME_SET_CHILD(frame, child) gtk_container_add(GTK_CONTAINER(frame), child) +#define EXPANDER_SET_CHILD(expander, child) gtk_container_add(GTK_CONTAINER(expander), child) #define WIDGET_ADD_CSS_CLASS(w, cssclass) gtk_style_context_add_class(gtk_widget_get_style_context(w), cssclass) #define WIDGET_REMOVE_CSS_CLASS(w, cssclass) gtk_style_context_remove_class(gtk_widget_get_style_context(w), cssclass) #endif