From 26406cfa2db798781346615e8c6372a5257936d5 Mon Sep 17 00:00:00 2001 From: Olaf Wintermann Date: Sat, 22 Aug 2026 23:21:36 +0200 Subject: [PATCH] container creation functions should return a Widget object --- application/note/src/main.rs | 1 + application/note/src/window.rs | 3 ++ ui-rs/src/ui/container.rs | 54 ++++++++++++++++++++++------------ 3 files changed, 39 insertions(+), 19 deletions(-) diff --git a/application/note/src/main.rs b/application/note/src/main.rs index af0652e..fc01db4 100644 --- a/application/note/src/main.rs +++ b/application/note/src/main.rs @@ -196,6 +196,7 @@ pub enum AppStates { NoteMaximized, NoteTitleInput, NoteEditable, + NoteHasAttachments, } impl From for i32 { diff --git a/application/note/src/window.rs b/application/note/src/window.rs index 5642e06..5cc9087 100644 --- a/application/note/src/window.rs +++ b/application/note/src/window.rs @@ -284,6 +284,9 @@ pub fn create_window(app: &App, ctx: &AppContext) -> UiObject *mut c_void { + self.ptr + } +} pub enum SubContainer { @@ -223,7 +233,7 @@ pub enum TabViewType { /* -------------------------------- Box/Grid Container -------------------------------- */ -pub type ContainerCreate = fn(*mut UiObject, *const UiContainerArgs); +pub type ContainerCreate = fn(*mut UiObject, *const UiContainerArgs) -> *mut c_void; pub type CreateContainerUI = fn(obj: &toolkit::UiObject); pub struct ContainerBuilder<'a, T> { @@ -232,21 +242,21 @@ pub struct ContainerBuilder<'a, T> { create: ContainerCreate } -fn vbox_create(obj: *mut UiObject, args: *const UiContainerArgs) { +fn vbox_create(obj: *mut UiObject, args: *const UiContainerArgs) -> *mut c_void { unsafe { - ui_vbox_create(obj, args); + ui_vbox_create(obj, args) } } -fn hbox_create(obj: *mut UiObject, args: *const UiContainerArgs) { +fn hbox_create(obj: *mut UiObject, args: *const UiContainerArgs) -> *mut c_void { unsafe { - ui_hbox_create(obj, args); + ui_hbox_create(obj, args) } } -fn grid_create(obj: *mut UiObject, args: *const UiContainerArgs) { +fn grid_create(obj: *mut UiObject, args: *const UiContainerArgs) -> *mut c_void { unsafe { - ui_grid_create(obj, args); + ui_grid_create(obj, args) } } @@ -297,14 +307,17 @@ impl toolkit::UiObject { } impl<'a, T> ContainerBuilder<'a, T> { - pub fn create(&mut self, create_ui: F) + pub fn create(&mut self, create_ui: F) -> Container where F: FnOnce(&mut toolkit::UiObject) { - (self.create)(self.obj.ptr, self.args); + let widget_ptr = (self.create)(self.obj.ptr, self.args); create_ui(self.obj); unsafe { ui_container_begin_close(self.obj.ptr); ui_container_finish(self.obj.ptr); } + Container { + ptr: widget_ptr, + } } pub fn fill(&mut self, fill: bool) -> &mut Self { @@ -482,7 +495,7 @@ impl<'a, T> Drop for ContainerBuilder<'a, T> { /* -------------------------------- Frame Container -------------------------------- */ -pub type FrameCreate = fn(*mut UiObject, *const UiFrameArgs); +pub type FrameCreate = fn(*mut UiObject, *const UiFrameArgs) -> *mut c_void; pub struct FrameBuilder<'a, T> { args: *mut UiFrameArgs, @@ -490,21 +503,21 @@ pub struct FrameBuilder<'a, T> { create: FrameCreate } -fn frame_create(obj: *mut UiObject, args: *const UiFrameArgs) { +fn frame_create(obj: *mut UiObject, args: *const UiFrameArgs) -> *mut c_void { unsafe { - ui_frame_create(obj, args); + ui_frame_create(obj, args) } } -fn expander_create(obj: *mut UiObject, args: *const UiFrameArgs) { +fn expander_create(obj: *mut UiObject, args: *const UiFrameArgs) -> *mut c_void { unsafe { - ui_expander_create(obj, args); + ui_expander_create(obj, args) } } -fn scrolledwindow_create(obj: *mut UiObject, args: *const UiFrameArgs) { +fn scrolledwindow_create(obj: *mut UiObject, args: *const UiFrameArgs) -> *mut c_void { unsafe { - ui_scrolledwindow_create(obj, args); + ui_scrolledwindow_create(obj, args) } } @@ -547,14 +560,17 @@ impl toolkit::UiObject { } impl<'a, T> FrameBuilder<'a, T> { - pub fn create(&mut self, create_ui: F) + pub fn create(&mut self, create_ui: F) -> Container where F: FnOnce(&mut toolkit::UiObject) { - (self.create)(self.obj.ptr, self.args); + let widget_ptr = (self.create)(self.obj.ptr, self.args); create_ui(self.obj); unsafe { ui_container_begin_close(self.obj.ptr); ui_container_finish(self.obj.ptr); } + Container { + ptr: widget_ptr, + } } pub fn fill(&mut self, fill: bool) -> &mut Self { -- 2.52.0