Add nested picklist to modal example
This commit is contained in:
parent
0a56ffb5d6
commit
f608056c50
1 changed files with 55 additions and 2 deletions
|
|
@ -3,11 +3,13 @@ use iced::keyboard;
|
||||||
use iced::subscription::{self, Subscription};
|
use iced::subscription::{self, Subscription};
|
||||||
use iced::theme;
|
use iced::theme;
|
||||||
use iced::widget::{
|
use iced::widget::{
|
||||||
self, button, column, container, horizontal_space, row, text, text_input,
|
self, button, column, container, horizontal_space, pick_list, row, text,
|
||||||
|
text_input,
|
||||||
};
|
};
|
||||||
use iced::{Alignment, Application, Command, Element, Event, Length, Settings};
|
use iced::{Alignment, Application, Command, Element, Event, Length, Settings};
|
||||||
|
|
||||||
use self::modal::Modal;
|
use modal::Modal;
|
||||||
|
use std::fmt;
|
||||||
|
|
||||||
pub fn main() -> iced::Result {
|
pub fn main() -> iced::Result {
|
||||||
App::run(Settings::default())
|
App::run(Settings::default())
|
||||||
|
|
@ -18,6 +20,7 @@ struct App {
|
||||||
show_modal: bool,
|
show_modal: bool,
|
||||||
email: String,
|
email: String,
|
||||||
password: String,
|
password: String,
|
||||||
|
plan: Plan,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
|
|
@ -26,6 +29,7 @@ enum Message {
|
||||||
HideModal,
|
HideModal,
|
||||||
Email(String),
|
Email(String),
|
||||||
Password(String),
|
Password(String),
|
||||||
|
Plan(Plan),
|
||||||
Submit,
|
Submit,
|
||||||
Event(Event),
|
Event(Event),
|
||||||
}
|
}
|
||||||
|
|
@ -66,6 +70,10 @@ impl Application for App {
|
||||||
self.password = password;
|
self.password = password;
|
||||||
Command::none()
|
Command::none()
|
||||||
}
|
}
|
||||||
|
Message::Plan(plan) => {
|
||||||
|
self.plan = plan;
|
||||||
|
Command::none()
|
||||||
|
}
|
||||||
Message::Submit => {
|
Message::Submit => {
|
||||||
if !self.email.is_empty() && !self.password.is_empty() {
|
if !self.email.is_empty() && !self.password.is_empty() {
|
||||||
self.hide_modal();
|
self.hide_modal();
|
||||||
|
|
@ -149,6 +157,16 @@ impl Application for App {
|
||||||
.padding(5),
|
.padding(5),
|
||||||
]
|
]
|
||||||
.spacing(5),
|
.spacing(5),
|
||||||
|
column![
|
||||||
|
text("Plan").size(12),
|
||||||
|
pick_list(
|
||||||
|
Plan::ALL,
|
||||||
|
Some(self.plan),
|
||||||
|
Message::Plan
|
||||||
|
)
|
||||||
|
.padding(5),
|
||||||
|
]
|
||||||
|
.spacing(5),
|
||||||
button(text("Submit")).on_press(Message::HideModal),
|
button(text("Submit")).on_press(Message::HideModal),
|
||||||
]
|
]
|
||||||
.spacing(10)
|
.spacing(10)
|
||||||
|
|
@ -176,6 +194,29 @@ impl App {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
|
||||||
|
enum Plan {
|
||||||
|
#[default]
|
||||||
|
Basic,
|
||||||
|
Pro,
|
||||||
|
Enterprise,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Plan {
|
||||||
|
pub const ALL: &[Self] = &[Self::Basic, Self::Pro, Self::Enterprise];
|
||||||
|
}
|
||||||
|
|
||||||
|
impl fmt::Display for Plan {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
match self {
|
||||||
|
Plan::Basic => "Basic",
|
||||||
|
Plan::Pro => "Pro",
|
||||||
|
Plan::Enterprise => "Enterprise",
|
||||||
|
}
|
||||||
|
.fmt(f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
mod modal {
|
mod modal {
|
||||||
use iced::advanced::layout::{self, Layout};
|
use iced::advanced::layout::{self, Layout};
|
||||||
use iced::advanced::overlay;
|
use iced::advanced::overlay;
|
||||||
|
|
@ -469,6 +510,18 @@ mod modal {
|
||||||
renderer,
|
renderer,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn overlay<'c>(
|
||||||
|
&'c mut self,
|
||||||
|
layout: Layout<'_>,
|
||||||
|
renderer: &Renderer,
|
||||||
|
) -> Option<overlay::Element<'c, Message, Renderer>> {
|
||||||
|
self.content.as_widget_mut().overlay(
|
||||||
|
self.tree,
|
||||||
|
layout.children().next().unwrap(),
|
||||||
|
renderer,
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, Message, Renderer> From<Modal<'a, Message, Renderer>>
|
impl<'a, Message, Renderer> From<Modal<'a, Message, Renderer>>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue