]> uap-core.de Git - note.git/commitdiff
implement toolbar item states arg main
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Thu, 11 Jun 2026 19:11:48 +0000 (21:11 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Thu, 11 Jun 2026 19:11:48 +0000 (21:11 +0200)
application/src/main.rs
application/src/window.rs
ui-rs/src/ui/toolbar.rs
ui-rs/src/ui/toolkit.rs
ui/cocoa/menu.m

index fa0a17d59d8e976d74ff83006535123ef4dbb779..4882d1db1143c151efdd32f152e0668528877d8b 100644 (file)
@@ -116,7 +116,7 @@ impl Application<MainWindow> for App {
     fn on_startup(&mut self, app: &AppContext<MainWindow>) {
         create_menubar(app);
         create_toolbar(app);
-        
+
         self.on_new_window(app);
     }
 
@@ -149,7 +149,7 @@ fn create_toolbar(app: &AppContext<MainWindow>) {
     app.toolbar_item("new_notebook").icon(UiIconSet::NewFolder.as_str()).action("new_notebook").create();
     app.toolbar_item("go_back").icon(UiIconSet::GoBack.as_str()).action("go_back").create();
     app.toolbar_item("go_forward").icon(UiIconSet::GoForward.as_str()).action("go_forward").create();
-    app.toolbar_item("new_note").icon(UiIconSet::Add.as_str()).action("new_note").create();
+    app.toolbar_item("new_note").icon(UiIconSet::Add.as_str()).action("new_note").states(&[AppStates::NoteEnableNew as i32]).create();
 
     app.toolbar_add_default("new_notebook", ToolbarItemPosition::SidebarLeft);
     app.toolbar_add_default("go_back", ToolbarItemPosition::Left);
@@ -162,6 +162,12 @@ fn create_toolbar(app: &AppContext<MainWindow>) {
 }
 
 
+#[repr(i32)]
+pub enum AppStates {
+    Null = 0,
+    NoteEnableNew
+}
+
 fn username() -> String {
     env::var("USER")
         .or_else(|_| env::var("USERNAME"))
index f8ef6734d1a9d07c8b1c8ed576677ec4617ff05d..a52456140ea44d4f241573491b2a5890e800fae7 100644 (file)
@@ -188,6 +188,8 @@ pub fn create_window(app: &App, ctx: &AppContext<MainWindow>) -> UiObject<MainWi
     let window = ctx.splitview_window("note", true, windowdata, |obj, data| {
         init_window_data(data, app);
         data.obj = obj.obj_ref();
+        
+        
 
         obj.sidebar_builder().create(|obj|{
             obj.sourcelist(|b|{
index 57e8f97d008758884b8c50db5076448889b71cf1..e204ad01308416a3d69c366653dc833c47eba374 100644 (file)
@@ -181,6 +181,13 @@ impl<T: UiModel + UiActions> ToolbarItemBuilder<T> {
         }
         self
     }
+
+    pub fn states(&mut self, states: &[i32]) -> &mut Self {
+        unsafe {
+            ui_toolbar_item_args_set_states(self.args, states.as_ptr(), states.len() as c_int);
+        }
+        self
+    }
 }
 
 impl<T: UiModel + UiActions> Drop for ToolbarToggleItemBuilder<T> {
@@ -323,7 +330,7 @@ extern "C" {
     fn ui_toolbar_item_args_set_action(args: *mut UiToolbarItemArgs, action: *const c_char);
     fn ui_toolbar_item_args_set_onclick(args: *mut UiToolbarItemArgs, onclick: UiCallback);
     fn ui_toolbar_item_args_set_onclickdata(args: *mut UiToolbarItemArgs, data: *mut c_void);
-    fn ui_toolbar_item_args_set_states(args: *mut UiToolbarItemArgs, states: *mut c_int, numstates: c_int);
+    fn ui_toolbar_item_args_set_states(args: *mut UiToolbarItemArgs, states: *const c_int, numstates: c_int);
     fn ui_toolbar_item_args_free(args: *mut UiToolbarItemArgs);
 
     fn ui_toolbar_toggleitem_args_new() -> *mut UiToolbarToggleItemArgs;
index 96aca742184e6e2aee02e2db18519cdc727fad43..35cbfefe9dfad37ae413f203fc547e52cbf431d5 100644 (file)
@@ -142,6 +142,18 @@ impl UiContext {
             ui_call_action3(self.ptr, cstr.as_ptr(), param_ptr.cast(), RUST_TYPED_OBJECT_BOX_ANY);
         }
     }
+
+    pub fn set_state(&self, state: i32) {
+        unsafe {
+            ui_set_state(self.ptr, state);
+        }
+    }
+
+    pub fn unset_state(&self, state: i32) {
+        unsafe {
+            ui_unset_state(self.ptr, state);
+        }
+    }
 }
 
 pub extern "C" fn destroy_boxed<T>(data: *mut c_void) {
@@ -1276,6 +1288,9 @@ extern "C" {
     pub fn ui_object_ref(obj: *mut ffi::UiObject);
     pub fn ui_object_unref(obj: *mut ffi::UiObject);
 
+    pub fn ui_set_state(ctx: *mut ffi::UiContext, state: c_int);
+    pub fn ui_unset_state(ctx: *mut ffi::UiContext, state: c_int);
+
     fn ui_mainthread_object_unref(obj: *mut ffi::UiObject);
     fn ui_mainthread_document_unref(doc: *mut c_void);
 
index 971f342dd528d6825f84b0032c9d8df050c73d9b..9e7a39db562932574931494206e691f115f106c9 100644 (file)
@@ -109,7 +109,7 @@ void add_menuitem_widget(UiObject *obj, NSMenu *parent, int i, UiMenuItemI *item
     UiMenuItem *it = (UiMenuItem*)item;
     
     NSString *str = [[NSString alloc] initWithUTF8String:it->label];
-    NSMenuItem *menuItem = [parent addItemWithTitle:str action:@selector(menuItemAction) keyEquivalent:@""];
+    NSMenuItem *menuItem = [parent addItemWithTitle:str action:@selector(menuItemAction:) keyEquivalent:@""];
     
     if(it->callback) {
         EventData *event = [[EventData alloc] init:it->callback userdata:it->userdata action:it->action];