ui/win32/container.c

changeset 841
651cf2c59dd9
parent 818
8185cd761897
child 844
3106d9ca2f9c
--- a/ui/win32/container.c	Sun Oct 12 09:17:37 2025 +0200
+++ b/ui/win32/container.c	Sun Oct 12 12:01:03 2025 +0200
@@ -31,6 +31,16 @@
 
 #include "../common/context.h"
 #include "../common/container.h"
+#include "../motif/container.h"
+
+
+static W32WidgetClass grid_layout_widget_class = {
+    .eventproc = NULL,
+    .enable = NULL,
+    .show = w32_widget_default_show,
+    .get_preferred_size = ui_grid_layout_get_preferred_size,
+    .destroy  = w32_widget_default_destroy
+};
 
 UiContainerPrivate* ui_obj_container(UiObject *obj) {
     return (UiContainerPrivate*)obj->container_end;
@@ -52,6 +62,14 @@
     ctn->container.newline = FALSE;
 }
 
+W32Size ui_grid_layout_get_preferred_size(W32Widget *widget) {
+    UiGridLayout *grid = widget->layoutmanager;
+    W32Size size;
+    size.width = grid->preferred_width;
+    size.height = grid->preferred_height;
+    return size;
+}
+
 
 /* ---------------------------- Box Container ---------------------------- */
 
@@ -106,7 +124,35 @@
 /* ---------------------------- Grid Container ---------------------------- */
 
 UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs *args) {
-    return NULL;
+    HINSTANCE hInstance = GetModuleHandle(NULL);
+    UiContainerPrivate *container = ui_obj_container(obj);
+    HWND parent = ui_container_get_parent(container);
+    UiLayout layout = UI_ARGS2LAYOUT(args);
+
+    HWND hwnd = CreateWindowEx(
+            0,
+            TEXT("STATIC"),
+            NULL,
+            WS_CHILD | WS_VISIBLE | WS_BORDER,
+            0, 0, 100, 100,
+            parent,
+            NULL,
+            hInstance,
+            NULL);
+
+    W32Widget *widget = w32_widget_new(&grid_layout_widget_class, hwnd);
+    ui_container_add(container, widget, &layout);
+
+    UiContainerX *gridContainer = ui_grid_container_create(obj, hwnd, args->columnspacing, args->rowspacing, INSETS_ZERO);
+    uic_object_push_container(obj, gridContainer);
+
+    UiGridLayoutContainer *grid = (UiGridLayoutContainer*)gridContainer;
+    widget->layout = (W32LayoutFunc)ui_grid_layout;
+    widget->layoutmanager = grid->layout;
+    grid->layout->preferred_width = 200;
+    grid->layout->preferred_height = 200;
+
+    return widget;
 }
 
 UiContainerX* ui_grid_container_create(UiObject *obj, HWND hwnd, short columnspacing, short rowspacing, GridEdgeInsets padding) {
@@ -139,3 +185,20 @@
 
     grid->x++;
 }
+
+
+/* ---------------------------- Container Helper ---------------------------- */
+
+void ui_container_begin_close(UiObject *obj) {
+    UiContainerX *ct = obj->container_end;
+    ct->close = 1;
+}
+
+int ui_container_finish(UiObject *obj) {
+    UiContainerX *ct = obj->container_end;
+    if(ct->close) {
+        ui_end_new(obj);
+        return 0;
+    }
+    return 1;
+}
\ No newline at end of file

mercurial