From 9fc5ad23edca93553137100d167de7b69e88f785 Mon Sep 17 00:00:00 2001 From: Richard Date: Mon, 5 Jul 2021 16:23:44 -0300 Subject: Initial menu implementation --- examples/menu/Cargo.toml | 10 ++++ examples/menu/src/main.rs | 123 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 133 insertions(+) create mode 100644 examples/menu/Cargo.toml create mode 100644 examples/menu/src/main.rs (limited to 'examples/menu') diff --git a/examples/menu/Cargo.toml b/examples/menu/Cargo.toml new file mode 100644 index 00000000..44597734 --- /dev/null +++ b/examples/menu/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "menu" +version = "0.1.0" +authors = ["Héctor Ramón Jiménez "] +edition = "2018" +publish = false + +[dependencies] +iced = { path = "../.." } +iced_native = { path = "../../native" } \ No newline at end of file diff --git a/examples/menu/src/main.rs b/examples/menu/src/main.rs new file mode 100644 index 00000000..f8f70903 --- /dev/null +++ b/examples/menu/src/main.rs @@ -0,0 +1,123 @@ +use iced::{ + executor, Application, Clipboard, Command, Container, Element, Length, + Menu, Settings, Text, +}; +use iced_native::keyboard::{Hotkey, KeyCode, Modifiers}; + +pub fn main() -> iced::Result { + App::run(Settings::default()) +} + +#[derive(Debug, Default)] +struct App { + selected: Option, +} + +#[derive(Debug, Clone)] +enum Entry { + One, + Two, + Three, + A, + B, + C, +} + +#[derive(Debug, Clone)] +enum Message { + MenuActivated(Entry), +} + +impl Application for App { + type Executor = executor::Default; + type Message = Message; + type Flags = (); + + fn new(_flags: ()) -> (App, Command) { + (App::default(), Command::none()) + } + + fn title(&self) -> String { + String::from("Menu - Iced") + } + + fn menu(&self) -> Menu { + let alt = Modifiers { + alt: true, + control: false, + logo: false, + shift: false, + }; + let ctrl_shift = Modifiers { + control: true, + shift: true, + logo: false, + alt: false, + }; + + Menu::new() + .dropdown( + "First", + Menu::new() + .item( + "One", + Hotkey::new(alt, KeyCode::F1), + Message::MenuActivated(Entry::One), + ) + .item( + "Two", + Hotkey::new(alt, KeyCode::F2), + Message::MenuActivated(Entry::Two), + ) + .separator() + .item( + "Three", + Hotkey::new(alt, KeyCode::F3), + Message::MenuActivated(Entry::Three), + ), + ) + .dropdown( + "Second", + Menu::new() + .item( + "A", + Hotkey::new(ctrl_shift, KeyCode::A), + Message::MenuActivated(Entry::A), + ) + .item( + "B", + Hotkey::new(ctrl_shift, KeyCode::B), + Message::MenuActivated(Entry::B), + ) + .separator() + .item( + "C", + Hotkey::new(ctrl_shift, KeyCode::C), + Message::MenuActivated(Entry::C), + ), + ) + } + + fn update( + &mut self, + message: Message, + _clipboard: &mut Clipboard, + ) -> Command { + match message { + Message::MenuActivated(entry) => self.selected = Some(entry), + } + + Command::none() + } + + fn view(&mut self) -> Element { + Container::new( + Text::new(format!("Selected {:?}", self.selected)).size(48), + ) + .width(Length::Fill) + .height(Length::Fill) + .center_x() + .center_y() + .into() + } +} -- cgit From 1428e9180ae9f4edbf22514bb74c5c7e9df9c712 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Mon, 12 Jul 2021 21:38:54 +0200 Subject: Make `Menu` API a bit more functional --- examples/menu/src/main.rs | 44 ++++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) (limited to 'examples/menu') diff --git a/examples/menu/src/main.rs b/examples/menu/src/main.rs index f8f70903..9d4ed71b 100644 --- a/examples/menu/src/main.rs +++ b/examples/menu/src/main.rs @@ -1,6 +1,7 @@ +use iced::menu::{self, Menu}; use iced::{ executor, Application, Clipboard, Command, Container, Element, Length, - Menu, Settings, Text, + Settings, Text, }; use iced_native::keyboard::{Hotkey, KeyCode, Modifiers}; @@ -55,47 +56,50 @@ impl Application for App { alt: false, }; - Menu::new() - .dropdown( + Menu::with_entries(vec![ + menu::Entry::dropdown( "First", - Menu::new() - .item( + Menu::with_entries(vec![ + menu::Entry::item( "One", Hotkey::new(alt, KeyCode::F1), Message::MenuActivated(Entry::One), - ) - .item( + ), + menu::Entry::item( "Two", Hotkey::new(alt, KeyCode::F2), Message::MenuActivated(Entry::Two), - ) - .separator() - .item( + ), + menu::Entry::Separator, + menu::Entry::item( "Three", Hotkey::new(alt, KeyCode::F3), Message::MenuActivated(Entry::Three), ), - ) - .dropdown( + ]), + ), + menu::Entry::dropdown( "Second", - Menu::new() - .item( + Menu::with_entries(vec![ + menu::Entry::item( "A", Hotkey::new(ctrl_shift, KeyCode::A), Message::MenuActivated(Entry::A), - ) - .item( + ), + menu::Entry::item( "B", Hotkey::new(ctrl_shift, KeyCode::B), Message::MenuActivated(Entry::B), - ) - .separator() - .item( + ), + menu::Entry::Separator, + menu::Entry::item( "C", Hotkey::new(ctrl_shift, KeyCode::C), Message::MenuActivated(Entry::C), ), - ) + ]), + ), + ]) } fn update( -- cgit From b57d567981bb7ef5f9ff397c210778f211d2de5b Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Mon, 12 Jul 2021 22:01:57 +0200 Subject: Use `bitflags` for `keyboard::Modifiers` --- examples/menu/src/main.rs | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) (limited to 'examples/menu') diff --git a/examples/menu/src/main.rs b/examples/menu/src/main.rs index 9d4ed71b..7403713c 100644 --- a/examples/menu/src/main.rs +++ b/examples/menu/src/main.rs @@ -43,18 +43,8 @@ impl Application for App { } fn menu(&self) -> Menu { - let alt = Modifiers { - alt: true, - control: false, - logo: false, - shift: false, - }; - let ctrl_shift = Modifiers { - control: true, - shift: true, - logo: false, - alt: false, - }; + let alt = Modifiers::ALT; + let ctrl_shift = Modifiers::CTRL | Modifiers::SHIFT; Menu::with_entries(vec![ menu::Entry::dropdown( -- cgit