From 2737b21d346c9034502c345dea735ca136b49cea Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Wed, 16 Feb 2022 17:16:34 +0700 Subject: Implement `pure` version of `pick_list` example :tada: --- examples/pure/pick_list/Cargo.toml | 9 +++ examples/pure/pick_list/README.md | 18 ++++++ examples/pure/pick_list/src/main.rs | 111 ++++++++++++++++++++++++++++++++++++ 3 files changed, 138 insertions(+) create mode 100644 examples/pure/pick_list/Cargo.toml create mode 100644 examples/pure/pick_list/README.md create mode 100644 examples/pure/pick_list/src/main.rs (limited to 'examples/pure') diff --git a/examples/pure/pick_list/Cargo.toml b/examples/pure/pick_list/Cargo.toml new file mode 100644 index 00000000..c0fcac3c --- /dev/null +++ b/examples/pure/pick_list/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "pure_pick_list" +version = "0.1.0" +authors = ["Héctor Ramón Jiménez "] +edition = "2021" +publish = false + +[dependencies] +iced = { path = "../../..", features = ["debug", "pure"] } diff --git a/examples/pure/pick_list/README.md b/examples/pure/pick_list/README.md new file mode 100644 index 00000000..6dc80bf4 --- /dev/null +++ b/examples/pure/pick_list/README.md @@ -0,0 +1,18 @@ +## Pick-list + +A dropdown list of selectable options. + +It displays and positions an overlay based on the window position of the widget. + +The __[`main`]__ file contains all the code of the example. + +
+ +
+ +You can run it with `cargo run`: +``` +cargo run --package pick_list +``` + +[`main`]: src/main.rs diff --git a/examples/pure/pick_list/src/main.rs b/examples/pure/pick_list/src/main.rs new file mode 100644 index 00000000..f9d55dd0 --- /dev/null +++ b/examples/pure/pick_list/src/main.rs @@ -0,0 +1,111 @@ +use iced::pure::widget::{ + column, container, pick_list, scrollable, vertical_space, +}; +use iced::pure::{Element, Sandbox}; +use iced::{Alignment, Length, Settings}; + +pub fn main() -> iced::Result { + Example::run(Settings::default()) +} + +#[derive(Default)] +struct Example { + selected_language: Option, +} + +#[derive(Debug, Clone, Copy)] +enum Message { + LanguageSelected(Language), +} + +impl Sandbox for Example { + type Message = Message; + + fn new() -> Self { + Self::default() + } + + fn title(&self) -> String { + String::from("Pick list - Iced") + } + + fn update(&mut self, message: Message) { + match message { + Message::LanguageSelected(language) => { + self.selected_language = Some(language); + } + } + } + + fn view(&self) -> Element { + let pick_list = pick_list( + &Language::ALL[..], + self.selected_language, + Message::LanguageSelected, + ) + .placeholder("Choose a language..."); + + let content = column() + .width(Length::Fill) + .align_items(Alignment::Center) + .spacing(10) + .push(vertical_space(Length::Units(600))) + .push("Which is your favorite language?") + .push(pick_list) + .push(vertical_space(Length::Units(600))); + + container(scrollable(content)) + .width(Length::Fill) + .height(Length::Fill) + .center_x() + .center_y() + .into() + } +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum Language { + Rust, + Elm, + Ruby, + Haskell, + C, + Javascript, + Other, +} + +impl Language { + const ALL: [Language; 7] = [ + Language::C, + Language::Elm, + Language::Ruby, + Language::Haskell, + Language::Rust, + Language::Javascript, + Language::Other, + ]; +} + +impl Default for Language { + fn default() -> Language { + Language::Rust + } +} + +impl std::fmt::Display for Language { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "{}", + match self { + Language::Rust => "Rust", + Language::Elm => "Elm", + Language::Ruby => "Ruby", + Language::Haskell => "Haskell", + Language::C => "C", + Language::Javascript => "Javascript", + Language::Other => "Some other language", + } + ) + } +} -- cgit