]> uap-core.de Git - note.git/commitdiff
container creation functions should return a Widget object main
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Sat, 22 Aug 2026 21:21:36 +0000 (23:21 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Sat, 22 Aug 2026 21:21:36 +0000 (23:21 +0200)
application/note/src/main.rs
application/note/src/window.rs
ui-rs/src/ui/container.rs

index af0652eefb8c44b4f34d43158e80ff69056891b0..fc01db481a1c12b741c3d521adde165eb66f581e 100644 (file)
@@ -196,6 +196,7 @@ pub enum AppStates {
     NoteMaximized,
     NoteTitleInput,
     NoteEditable,
+    NoteHasAttachments,
 }
 
 impl From<AppStates> for i32 {
index 5642e06e5a63991e6cc348c323abd3674a5e5055..5cc9087fb556700402dbf2339fcf10f575f3a45c 100644 (file)
@@ -284,6 +284,9 @@ pub fn create_window(app: &App, ctx: &AppContext<MainWindow>) -> UiObject<MainWi
                         label!(obj, label = "Title:");
                         textfield!(obj, fill = true, varname = "note_title", onchange_action = "note_title_changed");
                         button!(obj, label = "Close", action = "note_title_close");
+                    });
+                    hbox!(obj, visibility_states = &[AppStates::NoteHasAttachments], margin = 10, spacing = 4, |obj|{
+                        
                     });
                     let textarea = textarea!(obj, fill = true, varname = "note_text", onchange_action = "note_text_change", ontextchanged_action = "note_text_changed");
                     obj.ctx.add_action_untyped("textarea_focus", move|_event|{
index c4b9ee889e330e8c73e371d0af5f3e509c101e1a..2ad6dcb7d06cf487d95ed05b7491576260cb86bf 100644 (file)
@@ -32,7 +32,8 @@
 use std::ffi::{c_char, c_int, c_void};
 use std::ffi::CString;
 use crate::ui::ffi::*;
-use crate::ui::{toolkit};
+use crate::ui::{toolkit, Button};
+use crate::ui::widget::Widget;
 
 #[macro_export]
 macro_rules! vbox {
@@ -202,6 +203,15 @@ macro_rules! tabview {
     }};
 }
 
+pub struct Container {
+    ptr: *mut c_void
+}
+
+impl Widget for Container {
+    fn get_widget(&self) -> *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<T> = fn(obj: &toolkit::UiObject<T>);
 
 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<T> toolkit::UiObject<T> {
 }
 
 impl<'a, T> ContainerBuilder<'a, T> {
-    pub fn create<F>(&mut self, create_ui: F)
+    pub fn create<F>(&mut self, create_ui: F) -> Container
     where F: FnOnce(&mut toolkit::UiObject<T>) {
-        (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<T> toolkit::UiObject<T> {
 }
 
 impl<'a, T> FrameBuilder<'a, T> {
-    pub fn create<F>(&mut self, create_ui: F)
+    pub fn create<F>(&mut self, create_ui: F) -> Container
     where F: FnOnce(&mut toolkit::UiObject<T>) {
-        (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 {