readd frame subcontainer arg (GTK)

Mon, 06 Oct 2025 11:11:30 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Mon, 06 Oct 2025 11:11:30 +0200
changeset 803
f0c4322741c8
parent 802
cc73993a3ff9
child 804
ce992dbfbc39

readd frame subcontainer arg (GTK)

application/main.c file | annotate | diff | comparison | revisions
ui/gtk/container.c file | annotate | diff | comparison | revisions
ui/ui/container.h file | annotate | diff | comparison | revisions
--- a/application/main.c	Sun Oct 05 19:06:34 2025 +0200
+++ b/application/main.c	Mon Oct 06 11:11:30 2025 +0200
@@ -716,14 +716,14 @@
                     ui_label(obj, .label = "Test");
                     ui_button(obj, .label = "Button");
                 }
-                
+
                 ui_frame(obj, .label = "Frame", .margin = 10, .spacing = 10) {
                     ui_label(obj, .label = "Title", .style = UI_LABEL_STYLE_TITLE);
                     ui_label(obj, .label = "Sub-Title", .style = UI_LABEL_STYLE_SUBTITLE);
                     ui_label(obj, .label = "Dim Label", .style = UI_LABEL_STYLE_DIM);
                     ui_label(obj, .label = "No Style");
                 }
-                
+
                 for(int i=0;i<100;i++) {
                     char labelstr[32];
                     snprintf(labelstr, 32, "button %d", i);
--- a/ui/gtk/container.c	Sun Oct 05 19:06:34 2025 +0200
+++ b/ui/gtk/container.c	Mon Oct 06 11:11:30 2025 +0200
@@ -398,6 +398,30 @@
     return widget;
 }
 
+static void frame_create_subcontainer(UiObject *obj, UiFrameArgs *args) {
+    switch(args->subcontainer) {
+        default:
+        case UI_CONTAINER_VBOX: {
+            UiContainerArgs sub_args = { .spacing = args->spacing, .margin = args->padding };
+            ui_vbox_create(obj, &sub_args);
+            break;
+        }
+        case UI_CONTAINER_HBOX: {
+            UiContainerArgs sub_args = { .spacing = args->spacing, .margin = args->padding };
+            ui_hbox_create(obj, &sub_args);
+            break;
+        }
+        case UI_CONTAINER_GRID: {
+            UiContainerArgs sub_args = { .columnspacing = args->columnspacing, .rowspacing = args->rowspacing, .margin = args->padding };
+            ui_grid_create(obj, &sub_args);
+            break;
+        }
+        case UI_CONTAINER_NO_SUB: {
+            break; // NOOP
+        }
+    }
+}
+
 UIWIDGET ui_frame_create(UiObject *obj, UiFrameArgs *args) {
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
@@ -405,8 +429,18 @@
     GtkWidget *frame = gtk_frame_new(args->label);
     ct->add(ct, frame, &layout);
     
-    UiContainerX *container = ui_frame_container(obj, frame);
-    uic_object_push_container(obj, container);
+    GtkWidget *sub = ui_subcontainer_create(
+            args->subcontainer,
+            obj, args->spacing,
+            args->columnspacing,
+            args->rowspacing,
+            args->padding);
+    if(sub) {
+        FRAME_SET_CHILD(frame, sub);
+    } else {
+        UiContainerX *container = ui_frame_container(obj, frame);
+        uic_object_push_container(obj, container);
+    }
     
     return frame;
 }
@@ -419,8 +453,18 @@
     gtk_expander_set_expanded(GTK_EXPANDER(expander), args->isexpanded);
     ct->add(ct, expander, &layout);
     
-    UiContainerX *container = ui_expander_container(obj, expander);
-    uic_object_push_container(obj, container);
+    GtkWidget *sub = ui_subcontainer_create(
+            args->subcontainer,
+            obj, args->spacing,
+            args->columnspacing,
+            args->rowspacing,
+            args->padding);
+    if(sub) {
+        EXPANDER_SET_CHILD(expander, sub);
+    } else {
+        UiContainerX *container = ui_expander_container(obj, expander);
+        uic_object_push_container(obj, container);
+    }
     
     return expander;
 }
@@ -434,8 +478,18 @@
     ui_set_name_and_style(sw, args->name, args->style_class);
     ct->add(ct, sw, &layout);
     
-    UiContainerX *container = ui_scrolledwindow_container(obj, sw);
-    uic_object_push_container(obj, container);
+    GtkWidget *sub = ui_subcontainer_create(
+            args->subcontainer,
+            obj, args->spacing,
+            args->columnspacing,
+            args->rowspacing,
+            args->padding);
+    if(sub) {
+        SCROLLEDWINDOW_SET_CHILD(sw, sub);
+    } else {
+        UiContainerX *container = ui_scrolledwindow_container(obj, sw);
+        uic_object_push_container(obj, container);
+    }
     
     return sw;
 }
--- a/ui/ui/container.h	Sun Oct 05 19:06:34 2025 +0200
+++ b/ui/ui/container.h	Mon Oct 06 11:11:30 2025 +0200
@@ -101,6 +101,9 @@
     const char *name;
     const char *style_class;
 
+    UiSubContainerType subcontainer;
+    
+    int padding;
     int spacing;
     int columnspacing;
     int rowspacing;

mercurial