diff options
author | 2021-09-15 15:50:25 +0700 | |
---|---|---|
committer | 2021-09-15 15:50:25 +0700 | |
commit | 099981cfc2f61a1f37e84100592d65babb94fb82 (patch) | |
tree | 1b063e251d92f8bc63f0f27a20e78d178f6bd532 /core | |
parent | 5870cbb312ec5de1219b6983e09e460419d95912 (diff) | |
parent | c0ab9888426b7d1f2606afafc9dba06eed7f9419 (diff) | |
download | iced-099981cfc2f61a1f37e84100592d65babb94fb82.tar.gz iced-099981cfc2f61a1f37e84100592d65babb94fb82.tar.bz2 iced-099981cfc2f61a1f37e84100592d65babb94fb82.zip |
Merge pull request #1047 from iced-rs/revert-menus
Revert system menus support
Diffstat (limited to 'core')
-rw-r--r-- | core/src/keyboard.rs | 2 | ||||
-rw-r--r-- | core/src/keyboard/hotkey.rs | 18 | ||||
-rw-r--r-- | core/src/lib.rs | 2 | ||||
-rw-r--r-- | core/src/menu.rs | 145 |
4 files changed, 0 insertions, 167 deletions
diff --git a/core/src/keyboard.rs b/core/src/keyboard.rs index 6827a4db..4c6ca08d 100644 --- a/core/src/keyboard.rs +++ b/core/src/keyboard.rs @@ -1,10 +1,8 @@ //! Listen to keyboard events. mod event; -mod hotkey; mod key_code; mod modifiers; pub use event::Event; -pub use hotkey::Hotkey; pub use key_code::KeyCode; pub use modifiers::Modifiers; diff --git a/core/src/keyboard/hotkey.rs b/core/src/keyboard/hotkey.rs deleted file mode 100644 index 310ef286..00000000 --- a/core/src/keyboard/hotkey.rs +++ /dev/null @@ -1,18 +0,0 @@ -use crate::keyboard::{KeyCode, Modifiers}; - -/// Representation of a hotkey, consists on the combination of a [`KeyCode`] and [`Modifiers`]. -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub struct Hotkey { - /// The key that represents this hotkey. - pub key: KeyCode, - - /// The list of modifiers that represents this hotkey. - pub modifiers: Modifiers, -} - -impl Hotkey { - /// Creates a new [`Hotkey`] with the given [`Modifiers`] and [`KeyCode`]. - pub fn new(modifiers: Modifiers, key: KeyCode) -> Self { - Self { modifiers, key } - } -} diff --git a/core/src/lib.rs b/core/src/lib.rs index a0decdab..e937264d 100644 --- a/core/src/lib.rs +++ b/core/src/lib.rs @@ -15,7 +15,6 @@ #![forbid(unsafe_code)] #![forbid(rust_2018_idioms)] pub mod keyboard; -pub mod menu; pub mod mouse; pub mod text; @@ -35,7 +34,6 @@ pub use background::Background; pub use color::Color; pub use font::Font; pub use length::Length; -pub use menu::Menu; pub use padding::Padding; pub use point::Point; pub use rectangle::Rectangle; diff --git a/core/src/menu.rs b/core/src/menu.rs deleted file mode 100644 index 8a679085..00000000 --- a/core/src/menu.rs +++ /dev/null @@ -1,145 +0,0 @@ -//! Build menus for your application. -use crate::keyboard::Hotkey; - -/// Menu representation. -/// -/// This can be used by `shell` implementations to create a menu. -#[derive(Debug, Clone)] -pub struct Menu<Message> { - entries: Vec<Entry<Message>>, -} - -impl<Message> PartialEq for Menu<Message> { - fn eq(&self, other: &Self) -> bool { - self.entries == other.entries - } -} - -impl<Message> Menu<Message> { - /// Creates an empty [`Menu`]. - pub fn new() -> Self { - Self::with_entries(Vec::new()) - } - - /// Creates a new [`Menu`] with the given entries. - pub fn with_entries(entries: Vec<Entry<Message>>) -> Self { - Self { entries } - } - - /// Returns a [`MenuEntry`] iterator. - pub fn iter(&self) -> impl Iterator<Item = &Entry<Message>> { - self.entries.iter() - } - - /// Adds an [`Entry`] to the [`Menu`]. - pub fn push(mut self, entry: Entry<Message>) -> Self { - self.entries.push(entry); - self - } - - /// Maps the `Message` of the [`Menu`] using the provided function. - /// - /// This is useful to compose menus and split them into different - /// abstraction levels. - pub fn map<B>(self, f: impl Fn(Message) -> B + Copy) -> Menu<B> { - // TODO: Use a boxed trait to avoid reallocation of entries - Menu { - entries: self - .entries - .into_iter() - .map(|entry| entry.map(f)) - .collect(), - } - } -} - -/// Represents one of the possible entries used to build a [`Menu`]. -#[derive(Debug, Clone)] -pub enum Entry<Message> { - /// Item for a [`Menu`] - Item { - /// The title of the item - title: String, - /// The [`Hotkey`] to activate the item, if any - hotkey: Option<Hotkey>, - /// The message generated when the item is activated - on_activation: Message, - }, - /// Dropdown for a [`Menu`] - Dropdown { - /// Title of the dropdown - title: String, - /// The submenu of the dropdown - submenu: Menu<Message>, - }, - /// Separator for a [`Menu`] - Separator, -} - -impl<Message> Entry<Message> { - /// Creates an [`Entry::Item`]. - pub fn item<S: Into<String>>( - title: S, - hotkey: impl Into<Option<Hotkey>>, - on_activation: Message, - ) -> Self { - let title = title.into(); - let hotkey = hotkey.into(); - - Self::Item { - title, - hotkey, - on_activation, - } - } - - /// Creates an [`Entry::Dropdown`]. - pub fn dropdown<S: Into<String>>(title: S, submenu: Menu<Message>) -> Self { - let title = title.into(); - - Self::Dropdown { title, submenu } - } - - fn map<B>(self, f: impl Fn(Message) -> B + Copy) -> Entry<B> { - match self { - Self::Item { - title, - hotkey, - on_activation, - } => Entry::Item { - title, - hotkey, - on_activation: f(on_activation), - }, - Self::Dropdown { title, submenu } => Entry::Dropdown { - title, - submenu: submenu.map(f), - }, - Self::Separator => Entry::Separator, - } - } -} - -impl<Message> PartialEq for Entry<Message> { - fn eq(&self, other: &Self) -> bool { - match (self, other) { - ( - Entry::Item { title, hotkey, .. }, - Entry::Item { - title: other_title, - hotkey: other_hotkey, - .. - }, - ) => title == other_title && hotkey == other_hotkey, - ( - Entry::Dropdown { title, submenu }, - Entry::Dropdown { - title: other_title, - submenu: other_submenu, - }, - ) => title == other_title && submenu == other_submenu, - (Entry::Separator, Entry::Separator) => true, - _ => false, - } - } -} |