refactor: rename TextMenuItem to just MeuItem

This commit is contained in:
amrbashir 2022-06-14 14:00:00 +02:00
parent ccf548d199
commit 00a0270b8f
No known key found for this signature in database
GPG key ID: BBD7A47A2003FF33
7 changed files with 60 additions and 64 deletions

View file

@ -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);

View file

@ -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);

View file

@ -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);

View file

@ -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>,

View file

@ -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,

View file

@ -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);
} }

View file

@ -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 {