# HG changeset patch # User Olaf Wintermann # Date 1730015612 -3600 # Node ID ae999e3346a93f65c8fa461a67da864246fc7394 # Parent 1b4aae4e8432fad7b29f48c9e3f4bb163f587038 add frame container (GTK) diff -r 1b4aae4e8432 -r ae999e3346a9 ui/gtk/container.c --- a/ui/gtk/container.c Sun Oct 27 08:25:15 2024 +0100 +++ b/ui/gtk/container.c Sun Oct 27 08:53:32 2024 +0100 @@ -68,6 +68,44 @@ #endif } +GtkWidget* ui_subcontainer_create( + UiSubContainerType type, + UiObject *newobj, + int spacing, + int columnspacing, + int rowspacing, + int margin) +{ + GtkWidget *sub = NULL; + GtkWidget *add = NULL; + switch(type) { + default: { + sub = ui_gtk_vbox_new(spacing); + add = ui_box_set_margin(sub, margin); + newobj->container = ui_box_container(newobj, sub, type); + newobj->widget = sub; + break; + } + case UI_CONTAINER_HBOX: { + sub = ui_gtk_hbox_new(spacing); + add = ui_box_set_margin(sub, margin); + newobj->container = ui_box_container(newobj, sub, type); + newobj->widget = sub; + break; + } + case UI_CONTAINER_GRID: { + sub = ui_create_grid_widget(columnspacing, rowspacing); + add = ui_box_set_margin(sub, margin); + newobj->container = ui_grid_container(newobj, sub); + newobj->widget = sub; + break; + } + case UI_CONTAINER_NO_SUB: { + break; + } + } + return add; +} /* -------------------- Box Container -------------------- */ @@ -201,6 +239,20 @@ } #endif +UiContainer* ui_frame_container(UiObject *obj, GtkWidget *frame) { + UiContainer *ct = cxCalloc( + obj->ctx->allocator, + 1, + sizeof(UiContainer)); + ct->widget = frame; + ct->add = ui_frame_container_add; + return ct; +} + +void ui_frame_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill) { + FRAME_SET_CHILD(ct->widget, widget); +} + UiContainer* ui_scrolledwindow_container(UiObject *obj, GtkWidget *scrolledwindow) { UiContainer *ct = cxCalloc( obj->ctx->allocator, @@ -318,6 +370,23 @@ return widget; } +UIWIDGET ui_frame_create(UiObject *obj, UiFrameArgs args) { + UiObject* current = uic_current_obj(obj); + UI_APPLY_LAYOUT1(current, args); + + GtkWidget *frame = gtk_frame_new(args.label); + UiObject *newobj = uic_object_new(obj, frame); + GtkWidget *sub = ui_subcontainer_create(args.subcontainer, newobj, args.spacing, args.columnspacing, args.rowspacing, args.margin); + if(sub) { + FRAME_SET_CHILD(frame, sub); + } else { + newobj->widget = frame; + newobj->container = ui_frame_container(obj, frame); + } + + return frame; +} + UIWIDGET ui_scrolledwindow_create(UiObject* obj, UiFrameArgs args) { UiObject* current = uic_current_obj(obj); @@ -329,39 +398,13 @@ current->container->add(current->container, widget, TRUE); UiObject *newobj = uic_object_new(obj, sw); - GtkWidget *sub; - switch(args.subcontainer) { - default: { - sub = ui_gtk_vbox_new(args.spacing); - GtkWidget *widget = ui_box_set_margin(sub, args.margin); - SCROLLEDWINDOW_SET_CHILD(sw, widget); - - newobj->container = ui_box_container(newobj, sub, args.subcontainer); - break; - } - case UI_CONTAINER_HBOX: { - sub = ui_gtk_hbox_new(args.spacing); - GtkWidget *widget = ui_box_set_margin(sub, args.margin); - SCROLLEDWINDOW_SET_CHILD(sw, widget); - - newobj->container = ui_box_container(newobj, sub, args.subcontainer); - break; - } - case UI_CONTAINER_GRID: { - sub = ui_create_grid_widget(args.columnspacing, args.rowspacing); - GtkWidget *widget = ui_box_set_margin(sub, args.margin); - SCROLLEDWINDOW_SET_CHILD(sw, widget); - - newobj->container = ui_grid_container(newobj, sub); - break; - } - case UI_CONTAINER_NO_SUB: { - sub = sw; - newobj->container = ui_scrolledwindow_container(obj, sw); - } + GtkWidget *sub = ui_subcontainer_create(args.subcontainer, newobj, args.spacing, args.columnspacing, args.rowspacing, args.margin); + if(sub) { + SCROLLEDWINDOW_SET_CHILD(sw, sub); + } else { + newobj->widget = sw; + newobj->container = ui_scrolledwindow_container(obj, sw); } - newobj->widget = sub; - uic_obj_add(obj, newobj); diff -r 1b4aae4e8432 -r ae999e3346a9 ui/gtk/container.h --- a/ui/gtk/container.h Sun Oct 27 08:25:15 2024 +0100 +++ b/ui/gtk/container.h Sun Oct 27 08:53:32 2024 +0100 @@ -134,6 +134,14 @@ GtkWidget* ui_gtk_vbox_new(int spacing); GtkWidget* ui_gtk_hbox_new(int spacing); +GtkWidget* ui_subcontainer_create( + UiSubContainerType type, + UiObject *newobj, + int spacing, + int columnspacing, + int rowspacing, + int margin); + UiContainer* ui_frame_container(UiObject *obj, GtkWidget *frame); void ui_frame_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill); @@ -147,6 +155,9 @@ UiContainer* ui_grid_container(UiObject *obj, GtkWidget *grid); void ui_grid_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill); +UiContainer* ui_frame_container(UiObject *obj, GtkWidget *frame); +void ui_frame_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 1b4aae4e8432 -r ae999e3346a9 ui/gtk/toolkit.h --- a/ui/gtk/toolkit.h Sun Oct 27 08:25:15 2024 +0100 +++ b/ui/gtk/toolkit.h Sun Oct 27 08:53:32 2024 +0100 @@ -66,6 +66,7 @@ #define SCROLLEDWINDOW_NEW() gtk_scrolled_window_new() #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 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 @@ -80,6 +81,7 @@ #define SCROLLEDWINDOW_NEW() gtk_scrolled_window_new(NULL, NULL) #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 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