From: Olaf Wintermann Date: Thu, 11 Jun 2026 19:11:48 +0000 (+0200) Subject: implement toolbar item states arg X-Git-Url: https://uap-core.de/gitweb/?a=commitdiff_plain;h=refs%2Fheads%2Fmain;p=note.git implement toolbar item states arg --- diff --git a/application/src/main.rs b/application/src/main.rs index fa0a17d..4882d1d 100644 --- a/application/src/main.rs +++ b/application/src/main.rs @@ -116,7 +116,7 @@ impl Application for App { fn on_startup(&mut self, app: &AppContext) { create_menubar(app); create_toolbar(app); - + self.on_new_window(app); } @@ -149,7 +149,7 @@ fn create_toolbar(app: &AppContext) { 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) { } +#[repr(i32)] +pub enum AppStates { + Null = 0, + NoteEnableNew +} + fn username() -> String { env::var("USER") .or_else(|_| env::var("USERNAME")) diff --git a/application/src/window.rs b/application/src/window.rs index f8ef673..a524561 100644 --- a/application/src/window.rs +++ b/application/src/window.rs @@ -188,6 +188,8 @@ pub fn create_window(app: &App, ctx: &AppContext) -> UiObject ToolbarItemBuilder { } 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 Drop for ToolbarToggleItemBuilder { @@ -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; diff --git a/ui-rs/src/ui/toolkit.rs b/ui-rs/src/ui/toolkit.rs index 96aca74..35cbfef 100644 --- a/ui-rs/src/ui/toolkit.rs +++ b/ui-rs/src/ui/toolkit.rs @@ -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(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); diff --git a/ui/cocoa/menu.m b/ui/cocoa/menu.m index 971f342..9e7a39d 100644 --- a/ui/cocoa/menu.m +++ b/ui/cocoa/menu.m @@ -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];