mirror of
https://github.com/italicsjenga/muda.git
synced 2025-01-11 04:11:32 +11:00
refactor: rename TextMenuItem
to just MeuItem
This commit is contained in:
parent
ccf548d199
commit
00a0270b8f
|
@ -18,8 +18,8 @@ fn main() {
|
||||||
let mut menu_bar = Menu::new();
|
let mut menu_bar = Menu::new();
|
||||||
|
|
||||||
let mut file_menu = menu_bar.add_submenu("&File", true);
|
let mut file_menu = menu_bar.add_submenu("&File", true);
|
||||||
let mut open_item = file_menu.add_text_item("&Open", true, None);
|
let mut open_item = file_menu.add_item("&Open", true, None);
|
||||||
let mut save_item = file_menu.add_text_item("&Save", true, Some("CommandOrCtrl+S"));
|
let mut save_item = file_menu.add_item("&Save", true, Some("CommandOrCtrl+S"));
|
||||||
file_menu.add_native_item(NativeMenuItem::Minimize);
|
file_menu.add_native_item(NativeMenuItem::Minimize);
|
||||||
file_menu.add_native_item(NativeMenuItem::CloseWindow);
|
file_menu.add_native_item(NativeMenuItem::CloseWindow);
|
||||||
file_menu.add_native_item(NativeMenuItem::Quit);
|
file_menu.add_native_item(NativeMenuItem::Quit);
|
||||||
|
|
|
@ -36,8 +36,8 @@ fn main() {
|
||||||
let _window2 = WindowBuilder::new().build(&event_loop).unwrap();
|
let _window2 = WindowBuilder::new().build(&event_loop).unwrap();
|
||||||
|
|
||||||
let mut file_menu = menu_bar.add_submenu("&File", true);
|
let mut file_menu = menu_bar.add_submenu("&File", true);
|
||||||
let mut open_item = file_menu.add_text_item("&Open", true, None);
|
let mut open_item = file_menu.add_item("&Open", true, None);
|
||||||
let mut save_item = file_menu.add_text_item("&Save", true, Some("CommandOrCtrl+S"));
|
let mut save_item = file_menu.add_item("&Save", true, Some("CommandOrCtrl+S"));
|
||||||
file_menu.add_native_item(NativeMenuItem::Minimize);
|
file_menu.add_native_item(NativeMenuItem::Minimize);
|
||||||
file_menu.add_native_item(NativeMenuItem::CloseWindow);
|
file_menu.add_native_item(NativeMenuItem::CloseWindow);
|
||||||
file_menu.add_native_item(NativeMenuItem::Quit);
|
file_menu.add_native_item(NativeMenuItem::Quit);
|
||||||
|
|
25
src/lib.rs
25
src/lib.rs
|
@ -17,7 +17,7 @@
|
||||||
//!
|
//!
|
||||||
//! # Aadding menu items and submenus within another submenu
|
//! # Aadding menu items and submenus within another submenu
|
||||||
//!
|
//!
|
||||||
//! Once you have a [`Submenu`] you can star creating more [`Submenu`]s or [`TextMenuItem`]s.
|
//! Once you have a [`Submenu`] you can star creating more [`Submenu`]s or [`MenuItem`]s.
|
||||||
//! ```no_run
|
//! ```no_run
|
||||||
//! let mut menu = Menu::new();
|
//! let mut menu = Menu::new();
|
||||||
//!
|
//!
|
||||||
|
@ -67,12 +67,9 @@ mod platform_impl;
|
||||||
|
|
||||||
static MENU_CHANNEL: Lazy<(Sender<MenuEvent>, Receiver<MenuEvent>)> = Lazy::new(|| unbounded());
|
static MENU_CHANNEL: Lazy<(Sender<MenuEvent>, Receiver<MenuEvent>)> = Lazy::new(|| unbounded());
|
||||||
|
|
||||||
/// A type alias to the receiver of the menu events channel.
|
/// Gets a reference to the event channel's [Receiver<MenuEvent>]
|
||||||
pub type MenuEventReceiver = Receiver<MenuEvent>;
|
|
||||||
|
|
||||||
/// Gets a reference to the event channel's [MenuEventReceiver]
|
|
||||||
/// which can be used to listen for menu events.
|
/// which can be used to listen for menu events.
|
||||||
pub fn menu_event_receiver<'a>() -> &'a MenuEventReceiver {
|
pub fn menu_event_receiver<'a>() -> &'a Receiver<MenuEvent> {
|
||||||
&MENU_CHANNEL.1
|
&MENU_CHANNEL.1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -269,7 +266,7 @@ impl Submenu {
|
||||||
Submenu(self.0.add_submenu(label, enabled))
|
Submenu(self.0.add_submenu(label, enabled))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Creates a new [`TextMenuItem`] whithin this submenu.
|
/// Creates a new [`MenuItem`] whithin this submenu.
|
||||||
///
|
///
|
||||||
/// ## Platform-specific:
|
/// ## Platform-specific:
|
||||||
///
|
///
|
||||||
|
@ -277,13 +274,13 @@ impl Submenu {
|
||||||
/// For example, using `&Save` for the save menu item would result in the label gets an underline under the `S`,
|
/// For example, using `&Save` for the save menu item would result in the label gets an underline under the `S`,
|
||||||
/// and the `&` character is not displayed on menu item label.
|
/// and the `&` character is not displayed on menu item label.
|
||||||
/// Then the menu item can be activated by press `S` when its parent menu is active.
|
/// Then the menu item can be activated by press `S` when its parent menu is active.
|
||||||
pub fn add_text_item<S: AsRef<str>>(
|
pub fn add_item<S: AsRef<str>>(
|
||||||
&mut self,
|
&mut self,
|
||||||
label: S,
|
label: S,
|
||||||
enabled: bool,
|
enabled: bool,
|
||||||
accelerator: Option<&str>,
|
accelerator: Option<&str>,
|
||||||
) -> TextMenuItem {
|
) -> MenuItem {
|
||||||
TextMenuItem(self.0.add_text_item(label, enabled, accelerator))
|
MenuItem(self.0.add_item(label, enabled, accelerator))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Creates a new [`NativeMenuItem`] within this submenu.
|
/// Creates a new [`NativeMenuItem`] within this submenu.
|
||||||
|
@ -303,11 +300,11 @@ impl Submenu {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// This is a Text menu item within a [`Submenu`].
|
/// This is a normal menu item within a [`Submenu`].
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct TextMenuItem(platform_impl::TextMenuItem);
|
pub struct MenuItem(platform_impl::MenuItem);
|
||||||
|
|
||||||
impl TextMenuItem {
|
impl MenuItem {
|
||||||
/// Gets the menu item's current label.
|
/// Gets the menu item's current label.
|
||||||
pub fn label(&self) -> String {
|
pub fn label(&self) -> String {
|
||||||
self.0.label()
|
self.0.label()
|
||||||
|
@ -334,7 +331,7 @@ impl TextMenuItem {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// This is a Check menu item within a [`Submenu`].
|
/// This is a menu item with a checkmark icon within a [`Submenu`].
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct CheckMenuItem(platform_impl::CheckMenuItem);
|
pub struct CheckMenuItem(platform_impl::CheckMenuItem);
|
||||||
|
|
||||||
|
|
|
@ -26,14 +26,14 @@ enum MenuEntryType {
|
||||||
// keeps a vector of a [`gtk::MenuItem`] or a tuple of [`gtk::MenuItem`] and [`gtk::Menu`] if its a menu
|
// keeps a vector of a [`gtk::MenuItem`] or a tuple of [`gtk::MenuItem`] and [`gtk::Menu`] if its a menu
|
||||||
// and push to it every time [`Menu::init_for_gtk_window`] is called.
|
// and push to it every time [`Menu::init_for_gtk_window`] is called.
|
||||||
Submenu(Vec<(gtk::MenuItem, gtk::Menu)>),
|
Submenu(Vec<(gtk::MenuItem, gtk::Menu)>),
|
||||||
Text(Vec<gtk::MenuItem>),
|
MenuItem(Vec<gtk::MenuItem>),
|
||||||
Check(Vec<gtk::CheckMenuItem>),
|
CheckMenuItem(Vec<gtk::CheckMenuItem>),
|
||||||
Native(NativeMenuItem),
|
NativeMenuItem(NativeMenuItem),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for MenuEntryType {
|
impl Default for MenuEntryType {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self::Text(Default::default())
|
Self::MenuItem(Default::default())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -243,19 +243,19 @@ impl Submenu {
|
||||||
Submenu(entry, Rc::clone(&self.1))
|
Submenu(entry, Rc::clone(&self.1))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn add_text_item<S: AsRef<str>>(
|
pub fn add_item<S: AsRef<str>>(
|
||||||
&mut self,
|
&mut self,
|
||||||
label: S,
|
label: S,
|
||||||
enabled: bool,
|
enabled: bool,
|
||||||
accelerator: Option<&str>,
|
accelerator: Option<&str>,
|
||||||
) -> TextMenuItem {
|
) -> MenuItem {
|
||||||
let label = label.as_ref().to_string();
|
let label = label.as_ref().to_string();
|
||||||
let id = COUNTER.next();
|
let id = COUNTER.next();
|
||||||
|
|
||||||
let entry = Rc::new(RefCell::new(MenuEntry {
|
let entry = Rc::new(RefCell::new(MenuEntry {
|
||||||
label: label.clone(),
|
label: label.clone(),
|
||||||
enabled,
|
enabled,
|
||||||
r#type: MenuEntryType::Text(Vec::new()),
|
r#type: MenuEntryType::MenuItem(Vec::new()),
|
||||||
id,
|
id,
|
||||||
accelerator: accelerator.map(|s| s.to_string()),
|
accelerator: accelerator.map(|s| s.to_string()),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
|
@ -265,7 +265,7 @@ impl Submenu {
|
||||||
|
|
||||||
if let MenuEntryType::Submenu(native_menus) = &mut inner.r#type {
|
if let MenuEntryType::Submenu(native_menus) = &mut inner.r#type {
|
||||||
for (_, menu) in native_menus {
|
for (_, menu) in native_menus {
|
||||||
let item = create_gtk_text_menu_item(
|
let item = create_gtk_menu_item(
|
||||||
&label,
|
&label,
|
||||||
enabled,
|
enabled,
|
||||||
&accelerator.map(|s| s.to_string()),
|
&accelerator.map(|s| s.to_string()),
|
||||||
|
@ -273,14 +273,14 @@ impl Submenu {
|
||||||
&*self.1,
|
&*self.1,
|
||||||
);
|
);
|
||||||
menu.append(&item);
|
menu.append(&item);
|
||||||
if let MenuEntryType::Text(native_items) = &mut entry.borrow_mut().r#type {
|
if let MenuEntryType::MenuItem(native_items) = &mut entry.borrow_mut().r#type {
|
||||||
native_items.push(item);
|
native_items.push(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inner.entries.as_mut().unwrap().push(entry.clone());
|
inner.entries.as_mut().unwrap().push(entry.clone());
|
||||||
TextMenuItem(entry)
|
MenuItem(entry)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn add_native_item(&mut self, item: NativeMenuItem) {
|
pub fn add_native_item(&mut self, item: NativeMenuItem) {
|
||||||
|
@ -293,7 +293,7 @@ impl Submenu {
|
||||||
}
|
}
|
||||||
|
|
||||||
let entry = Rc::new(RefCell::new(MenuEntry {
|
let entry = Rc::new(RefCell::new(MenuEntry {
|
||||||
r#type: MenuEntryType::Native(item),
|
r#type: MenuEntryType::NativeMenuItem(item),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}));
|
}));
|
||||||
inner.entries.as_mut().unwrap().push(entry);
|
inner.entries.as_mut().unwrap().push(entry);
|
||||||
|
@ -313,7 +313,7 @@ impl Submenu {
|
||||||
label: label.clone(),
|
label: label.clone(),
|
||||||
enabled,
|
enabled,
|
||||||
checked,
|
checked,
|
||||||
r#type: MenuEntryType::Check(Vec::new()),
|
r#type: MenuEntryType::CheckMenuItem(Vec::new()),
|
||||||
id,
|
id,
|
||||||
accelerator: accelerator.map(|s| s.to_string()),
|
accelerator: accelerator.map(|s| s.to_string()),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
|
@ -332,7 +332,7 @@ impl Submenu {
|
||||||
&*self.1,
|
&*self.1,
|
||||||
);
|
);
|
||||||
menu.append(&item);
|
menu.append(&item);
|
||||||
if let MenuEntryType::Check(native_items) = &mut entry.borrow_mut().r#type {
|
if let MenuEntryType::CheckMenuItem(native_items) = &mut entry.borrow_mut().r#type {
|
||||||
native_items.push(item);
|
native_items.push(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -344,9 +344,9 @@ impl Submenu {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct TextMenuItem(Rc<RefCell<MenuEntry>>);
|
pub struct MenuItem(Rc<RefCell<MenuEntry>>);
|
||||||
|
|
||||||
impl TextMenuItem {
|
impl MenuItem {
|
||||||
pub fn label(&self) -> String {
|
pub fn label(&self) -> String {
|
||||||
self.0.borrow().label.clone()
|
self.0.borrow().label.clone()
|
||||||
}
|
}
|
||||||
|
@ -354,7 +354,7 @@ impl TextMenuItem {
|
||||||
pub fn set_label<S: AsRef<str>>(&mut self, label: S) {
|
pub fn set_label<S: AsRef<str>>(&mut self, label: S) {
|
||||||
let label = label.as_ref().to_string();
|
let label = label.as_ref().to_string();
|
||||||
let mut entry = self.0.borrow_mut();
|
let mut entry = self.0.borrow_mut();
|
||||||
if let MenuEntryType::Text(native_items) = &mut entry.r#type {
|
if let MenuEntryType::MenuItem(native_items) = &mut entry.r#type {
|
||||||
for item in native_items {
|
for item in native_items {
|
||||||
item.set_label(&to_gtk_menemenoic(&label));
|
item.set_label(&to_gtk_menemenoic(&label));
|
||||||
}
|
}
|
||||||
|
@ -368,7 +368,7 @@ impl TextMenuItem {
|
||||||
|
|
||||||
pub fn set_enabled(&mut self, enabled: bool) {
|
pub fn set_enabled(&mut self, enabled: bool) {
|
||||||
let mut entry = self.0.borrow_mut();
|
let mut entry = self.0.borrow_mut();
|
||||||
if let MenuEntryType::Text(native_items) = &mut entry.r#type {
|
if let MenuEntryType::MenuItem(native_items) = &mut entry.r#type {
|
||||||
for item in native_items {
|
for item in native_items {
|
||||||
item.set_sensitive(enabled);
|
item.set_sensitive(enabled);
|
||||||
}
|
}
|
||||||
|
@ -392,7 +392,7 @@ impl CheckMenuItem {
|
||||||
pub fn set_label<S: AsRef<str>>(&mut self, label: S) {
|
pub fn set_label<S: AsRef<str>>(&mut self, label: S) {
|
||||||
let label = label.as_ref().to_string();
|
let label = label.as_ref().to_string();
|
||||||
let mut entry = self.0.borrow_mut();
|
let mut entry = self.0.borrow_mut();
|
||||||
if let MenuEntryType::Text(native_items) = &mut entry.r#type {
|
if let MenuEntryType::CheckMenuItem(native_items) = &mut entry.r#type {
|
||||||
for item in native_items {
|
for item in native_items {
|
||||||
item.set_label(&to_gtk_menemenoic(&label));
|
item.set_label(&to_gtk_menemenoic(&label));
|
||||||
}
|
}
|
||||||
|
@ -406,7 +406,7 @@ impl CheckMenuItem {
|
||||||
|
|
||||||
pub fn set_enabled(&mut self, enabled: bool) {
|
pub fn set_enabled(&mut self, enabled: bool) {
|
||||||
let mut entry = self.0.borrow_mut();
|
let mut entry = self.0.borrow_mut();
|
||||||
if let MenuEntryType::Check(native_items) = &mut entry.r#type {
|
if let MenuEntryType::CheckMenuItem(native_items) = &mut entry.r#type {
|
||||||
for item in native_items {
|
for item in native_items {
|
||||||
item.set_sensitive(enabled);
|
item.set_sensitive(enabled);
|
||||||
}
|
}
|
||||||
|
@ -417,19 +417,18 @@ impl CheckMenuItem {
|
||||||
pub fn checked(&self) -> bool {
|
pub fn checked(&self) -> bool {
|
||||||
let entry = self.0.borrow();
|
let entry = self.0.borrow();
|
||||||
let mut checked = entry.checked;
|
let mut checked = entry.checked;
|
||||||
if let MenuEntryType::Check(native_items) = &entry.r#type {
|
if let MenuEntryType::CheckMenuItem(native_items) = &entry.r#type {
|
||||||
if let Some(item) = native_items.get(0) {
|
if let Some(item) = native_items.get(0) {
|
||||||
checked = item.is_active();
|
checked = item.is_active();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
checked
|
checked
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_checked(&mut self, checked: bool) {
|
pub fn set_checked(&mut self, checked: bool) {
|
||||||
let mut entry = self.0.borrow_mut();
|
let mut entry = self.0.borrow_mut();
|
||||||
if let MenuEntryType::Check(native_items) = &mut entry.r#type {
|
if let MenuEntryType::CheckMenuItem(native_items) = &mut entry.r#type {
|
||||||
for item in native_items {
|
for item in native_items {
|
||||||
item.set_active(checked);
|
item.set_active(checked);
|
||||||
}
|
}
|
||||||
|
@ -456,8 +455,8 @@ fn add_entries_to_menu<M: IsA<gtk::MenuShell>>(
|
||||||
add_entries_to_menu(&submenu, entry.entries.as_ref().unwrap(), accel_group);
|
add_entries_to_menu(&submenu, entry.entries.as_ref().unwrap(), accel_group);
|
||||||
(Some(item), Some(submenu))
|
(Some(item), Some(submenu))
|
||||||
}
|
}
|
||||||
MenuEntryType::Text(_) => {
|
MenuEntryType::MenuItem(_) => {
|
||||||
let item = create_gtk_text_menu_item(
|
let item = create_gtk_menu_item(
|
||||||
&entry.label,
|
&entry.label,
|
||||||
entry.enabled,
|
entry.enabled,
|
||||||
&entry.accelerator,
|
&entry.accelerator,
|
||||||
|
@ -467,7 +466,7 @@ fn add_entries_to_menu<M: IsA<gtk::MenuShell>>(
|
||||||
gtk_menu.append(&item);
|
gtk_menu.append(&item);
|
||||||
(Some(item), None)
|
(Some(item), None)
|
||||||
}
|
}
|
||||||
MenuEntryType::Check(_) => {
|
MenuEntryType::CheckMenuItem(_) => {
|
||||||
let item = create_gtk_check_menu_item(
|
let item = create_gtk_check_menu_item(
|
||||||
&entry.label,
|
&entry.label,
|
||||||
entry.enabled,
|
entry.enabled,
|
||||||
|
@ -479,7 +478,7 @@ fn add_entries_to_menu<M: IsA<gtk::MenuShell>>(
|
||||||
gtk_menu.append(&item);
|
gtk_menu.append(&item);
|
||||||
(Some(item.upcast::<gtk::MenuItem>()), None)
|
(Some(item.upcast::<gtk::MenuItem>()), None)
|
||||||
}
|
}
|
||||||
MenuEntryType::Native(native_menu_item) => {
|
MenuEntryType::NativeMenuItem(native_menu_item) => {
|
||||||
native_menu_item.add_to_gtk_menu(gtk_menu);
|
native_menu_item.add_to_gtk_menu(gtk_menu);
|
||||||
(None, None)
|
(None, None)
|
||||||
}
|
}
|
||||||
|
@ -489,13 +488,13 @@ fn add_entries_to_menu<M: IsA<gtk::MenuShell>>(
|
||||||
MenuEntryType::Submenu(native_menus) => {
|
MenuEntryType::Submenu(native_menus) => {
|
||||||
native_menus.push((item.unwrap(), submenu.unwrap()));
|
native_menus.push((item.unwrap(), submenu.unwrap()));
|
||||||
}
|
}
|
||||||
MenuEntryType::Text(native_items) => {
|
MenuEntryType::MenuItem(native_items) => {
|
||||||
native_items.push(item.unwrap());
|
native_items.push(item.unwrap());
|
||||||
}
|
}
|
||||||
MenuEntryType::Check(native_items) => {
|
MenuEntryType::CheckMenuItem(native_items) => {
|
||||||
native_items.push(item.unwrap().downcast().unwrap());
|
native_items.push(item.unwrap().downcast().unwrap());
|
||||||
}
|
}
|
||||||
MenuEntryType::Native(_) => {}
|
MenuEntryType::NativeMenuItem(_) => {}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -509,7 +508,7 @@ fn create_gtk_submenu(label: &str, enabled: bool) -> (gtk::MenuItem, gtk::Menu)
|
||||||
(item, menu)
|
(item, menu)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn create_gtk_text_menu_item(
|
fn create_gtk_menu_item(
|
||||||
label: &str,
|
label: &str,
|
||||||
enabled: bool,
|
enabled: bool,
|
||||||
accelerator: &Option<String>,
|
accelerator: &Option<String>,
|
||||||
|
|
|
@ -18,13 +18,13 @@ use std::sync::Once;
|
||||||
static COUNTER: Counter = Counter::new();
|
static COUNTER: Counter = Counter::new();
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct TextMenuItem {
|
pub struct MenuItem {
|
||||||
pub(crate) id: u64,
|
pub(crate) id: u64,
|
||||||
pub(crate) ns_menu_item: id,
|
pub(crate) ns_menu_item: id,
|
||||||
label: Rc<str>,
|
label: Rc<str>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TextMenuItem {
|
impl MenuItem {
|
||||||
pub fn new<S: AsRef<str>>(
|
pub fn new<S: AsRef<str>>(
|
||||||
label: S,
|
label: S,
|
||||||
enabled: bool,
|
enabled: bool,
|
||||||
|
|
|
@ -9,7 +9,7 @@ use cocoa::{
|
||||||
};
|
};
|
||||||
use objc::{msg_send, sel, sel_impl};
|
use objc::{msg_send, sel, sel_impl};
|
||||||
|
|
||||||
pub use menu_item::TextMenuItem;
|
pub use menu_item::MenuItem;
|
||||||
|
|
||||||
use self::accelerator::remove_mnemonic;
|
use self::accelerator::remove_mnemonic;
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ impl Menu {
|
||||||
|
|
||||||
pub fn add_submenu<S: AsRef<str>>(&mut self, label: S, enabled: bool) -> Submenu {
|
pub fn add_submenu<S: AsRef<str>>(&mut self, label: S, enabled: bool) -> Submenu {
|
||||||
let menu = Menu::new();
|
let menu = Menu::new();
|
||||||
let menu_item = TextMenuItem::new("", enabled, sel!(fireMenubarAction:), None);
|
let menu_item = MenuItem::new("", enabled, sel!(fireMenubarAction:), None);
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
menu_item.ns_menu_item.setSubmenu_(menu.0);
|
menu_item.ns_menu_item.setSubmenu_(menu.0);
|
||||||
|
@ -56,7 +56,7 @@ impl Menu {
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct Submenu {
|
pub struct Submenu {
|
||||||
pub(crate) menu: Menu,
|
pub(crate) menu: Menu,
|
||||||
pub(crate) menu_item: TextMenuItem,
|
pub(crate) menu_item: MenuItem,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Submenu {
|
impl Submenu {
|
||||||
|
@ -85,13 +85,13 @@ impl Submenu {
|
||||||
self.menu.add_submenu(label, enabled)
|
self.menu.add_submenu(label, enabled)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn add_text_item<S: AsRef<str>>(
|
pub fn add_item<S: AsRef<str>>(
|
||||||
&mut self,
|
&mut self,
|
||||||
label: S,
|
label: S,
|
||||||
enabled: bool,
|
enabled: bool,
|
||||||
accelerator: Option<&str>,
|
accelerator: Option<&str>,
|
||||||
) -> TextMenuItem {
|
) -> MenuItem {
|
||||||
let item = TextMenuItem::new(label, enabled, sel!(fireMenubarAction:), accelerator);
|
let item = MenuItem::new(label, enabled, sel!(fireMenubarAction:), accelerator);
|
||||||
unsafe {
|
unsafe {
|
||||||
self.menu.0.addItem_(item.ns_menu_item);
|
self.menu.0.addItem_(item.ns_menu_item);
|
||||||
}
|
}
|
||||||
|
|
|
@ -191,12 +191,12 @@ impl Submenu {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn add_text_item<S: AsRef<str>>(
|
pub fn add_item<S: AsRef<str>>(
|
||||||
&mut self,
|
&mut self,
|
||||||
label: S,
|
label: S,
|
||||||
enabled: bool,
|
enabled: bool,
|
||||||
accelerator: Option<&str>,
|
accelerator: Option<&str>,
|
||||||
) -> TextMenuItem {
|
) -> MenuItem {
|
||||||
let id = COUNTER.next();
|
let id = COUNTER.next();
|
||||||
let mut flags = MF_STRING;
|
let mut flags = MF_STRING;
|
||||||
if !enabled {
|
if !enabled {
|
||||||
|
@ -222,7 +222,7 @@ impl Submenu {
|
||||||
}
|
}
|
||||||
|
|
||||||
unsafe { AppendMenuW(self.hmenu, flags, id as _, encode_wide(label).as_ptr()) };
|
unsafe { AppendMenuW(self.hmenu, flags, id as _, encode_wide(label).as_ptr()) };
|
||||||
TextMenuItem {
|
MenuItem {
|
||||||
id,
|
id,
|
||||||
parent_hmenu: self.hmenu,
|
parent_hmenu: self.hmenu,
|
||||||
}
|
}
|
||||||
|
@ -270,7 +270,7 @@ impl Submenu {
|
||||||
checked: bool,
|
checked: bool,
|
||||||
accelerator: Option<&str>,
|
accelerator: Option<&str>,
|
||||||
) -> CheckMenuItem {
|
) -> CheckMenuItem {
|
||||||
let mut item = CheckMenuItem(self.add_text_item(label, enabled, accelerator));
|
let mut item = CheckMenuItem(self.add_item(label, enabled, accelerator));
|
||||||
item.set_checked(checked);
|
item.set_checked(checked);
|
||||||
unsafe { CHECK_MENU_ITEMS.push(item.clone()) };
|
unsafe { CHECK_MENU_ITEMS.push(item.clone()) };
|
||||||
item
|
item
|
||||||
|
@ -278,12 +278,12 @@ impl Submenu {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct TextMenuItem {
|
pub struct MenuItem {
|
||||||
id: u64,
|
id: u64,
|
||||||
parent_hmenu: HMENU,
|
parent_hmenu: HMENU,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TextMenuItem {
|
impl MenuItem {
|
||||||
pub fn label(&self) -> String {
|
pub fn label(&self) -> String {
|
||||||
self.label_with_accel()
|
self.label_with_accel()
|
||||||
.split("\t")
|
.split("\t")
|
||||||
|
@ -352,7 +352,7 @@ impl TextMenuItem {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct CheckMenuItem(TextMenuItem);
|
pub struct CheckMenuItem(MenuItem);
|
||||||
|
|
||||||
impl CheckMenuItem {
|
impl CheckMenuItem {
|
||||||
pub fn label(&self) -> String {
|
pub fn label(&self) -> String {
|
||||||
|
|
Loading…
Reference in a new issue