mirror of
https://github.com/italicsjenga/muda.git
synced 2025-01-10 03:41:30 +11:00
feat: implement label and enabled in macOS TextMenuItem (#2)
* feat: implement label, enabled methods for macos TextMenuItem * fix: using lossy version of from_utf8 and change the way we convert UTF8String to String
This commit is contained in:
parent
a7b7b0cf34
commit
1ab9c9b9e8
|
@ -1,6 +1,6 @@
|
||||||
use cocoa::{
|
use cocoa::{
|
||||||
appkit::{NSButton, NSEventModifierFlags, NSMenuItem},
|
appkit::NSButton,
|
||||||
base::{id, nil, NO, YES},
|
base::{id, nil, BOOL, NO, YES},
|
||||||
foundation::NSString,
|
foundation::NSString,
|
||||||
};
|
};
|
||||||
use objc::{
|
use objc::{
|
||||||
|
@ -10,6 +10,7 @@ use objc::{
|
||||||
runtime::{Class, Object, Sel},
|
runtime::{Class, Object, Sel},
|
||||||
sel, sel_impl,
|
sel, sel_impl,
|
||||||
};
|
};
|
||||||
|
use std::slice;
|
||||||
use std::sync::Once;
|
use std::sync::Once;
|
||||||
use std::{
|
use std::{
|
||||||
collections::hash_map::DefaultHasher,
|
collections::hash_map::DefaultHasher,
|
||||||
|
@ -73,19 +74,37 @@ impl TextMenuItem {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn label(&self) -> String {
|
pub fn label(&self) -> String {
|
||||||
todo!()
|
unsafe {
|
||||||
|
let title: id = msg_send![self.ns_menu_item, title];
|
||||||
|
let data = title.UTF8String() as *const u8;
|
||||||
|
let len = title.len();
|
||||||
|
|
||||||
|
String::from_utf8_lossy(slice::from_raw_parts(data, len)).to_string()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_label(&mut self, label: impl AsRef<str>) {
|
pub fn set_label(&mut self, label: impl AsRef<str>) {
|
||||||
todo!()
|
unsafe {
|
||||||
|
let title = NSString::alloc(nil).init_str(label.as_ref());
|
||||||
|
self.ns_menu_item.setTitle_(title);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn enabled(&self) -> bool {
|
pub fn enabled(&self) -> bool {
|
||||||
todo!()
|
unsafe {
|
||||||
|
let enabled: BOOL = msg_send![self.ns_menu_item, enabled];
|
||||||
|
enabled
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_enabled(&mut self, enabled: bool) {
|
pub fn set_enabled(&mut self, enabled: bool) {
|
||||||
todo!()
|
unsafe {
|
||||||
|
let status = match enabled {
|
||||||
|
true => YES,
|
||||||
|
false => NO,
|
||||||
|
};
|
||||||
|
let () = msg_send![self.ns_menu_item, setEnabled: status];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn id(&self) -> u64 {
|
pub fn id(&self) -> u64 {
|
||||||
|
|
Loading…
Reference in a new issue