Add a presets Menu to the game_of_life example
This commit is contained in:
parent
c8ac77e4e9
commit
b97954a1ee
3 changed files with 23 additions and 2 deletions
|
|
@ -41,7 +41,7 @@ impl<Message> Menu<Message> {
|
|||
///
|
||||
/// This is useful to compose menus and split them into different
|
||||
/// abstraction levels.
|
||||
pub fn map<B>(self, f: &impl Fn(Message) -> B) -> Menu<B> {
|
||||
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
|
||||
|
|
@ -100,7 +100,7 @@ impl<Message> Entry<Message> {
|
|||
Self::Dropdown { title, submenu }
|
||||
}
|
||||
|
||||
fn map<B>(self, f: &impl Fn(Message) -> B) -> Entry<B> {
|
||||
fn map<B>(self, f: impl Fn(Message) -> B + Copy) -> Entry<B> {
|
||||
match self {
|
||||
Self::Item {
|
||||
title,
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ mod style;
|
|||
use grid::Grid;
|
||||
use iced::button::{self, Button};
|
||||
use iced::executor;
|
||||
use iced::menu::{self, Menu};
|
||||
use iced::pick_list::{self, PickList};
|
||||
use iced::slider::{self, Slider};
|
||||
use iced::time;
|
||||
|
|
@ -128,6 +129,13 @@ impl Application for GameOfLife {
|
|||
}
|
||||
}
|
||||
|
||||
fn menu(&self) -> Menu<Message> {
|
||||
Menu::with_entries(vec![menu::Entry::dropdown(
|
||||
"Presets",
|
||||
Preset::menu().map(Message::PresetPicked),
|
||||
)])
|
||||
}
|
||||
|
||||
fn view(&mut self) -> Element<Message> {
|
||||
let version = self.version;
|
||||
let selected_speed = self.next_speed.unwrap_or(self.speed);
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
use iced::menu::{self, Menu};
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
pub enum Preset {
|
||||
Custom,
|
||||
|
|
@ -26,6 +28,17 @@ pub static ALL: &[Preset] = &[
|
|||
];
|
||||
|
||||
impl Preset {
|
||||
pub fn menu() -> Menu<Self> {
|
||||
Menu::with_entries(
|
||||
ALL.iter()
|
||||
.copied()
|
||||
.map(|preset| {
|
||||
menu::Entry::item(preset.to_string(), None, preset)
|
||||
})
|
||||
.collect(),
|
||||
)
|
||||
}
|
||||
|
||||
pub fn life(self) -> Vec<(isize, isize)> {
|
||||
#[rustfmt::skip]
|
||||
let cells = match self {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue