Make it possible to use any widget in dialog button area
This commit is contained in:
parent
a593f866ef
commit
7c3145828e
1 changed files with 15 additions and 28 deletions
|
|
@ -10,9 +10,9 @@ pub struct Dialog<'a, Message> {
|
||||||
icon: Option<Element<'a, Message>>,
|
icon: Option<Element<'a, Message>>,
|
||||||
body: Option<Cow<'a, str>>,
|
body: Option<Cow<'a, str>>,
|
||||||
controls: Vec<Element<'a, Message>>,
|
controls: Vec<Element<'a, Message>>,
|
||||||
primary_action: Option<(Cow<'a, str>, Message, bool)>,
|
primary_action: Option<Element<'a, Message>>,
|
||||||
secondary_action: Option<(Cow<'a, str>, Message)>,
|
secondary_action: Option<Element<'a, Message>>,
|
||||||
tertiary_action: Option<(Cow<'a, str>, Message)>,
|
tertiary_action: Option<Element<'a, Message>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, Message> Dialog<'a, Message> {
|
impl<'a, Message> Dialog<'a, Message> {
|
||||||
|
|
@ -43,27 +43,18 @@ impl<'a, Message> Dialog<'a, Message> {
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn primary_action(mut self, name: impl Into<Cow<'a, str>>, message: Message) -> Self {
|
pub fn primary_action(mut self, button: impl Into<Element<'a, Message>>) -> Self {
|
||||||
self.primary_action = Some((name.into(), message, false));
|
self.primary_action = Some(button.into());
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn primary_action_destructive(
|
pub fn secondary_action(mut self, button: impl Into<Element<'a, Message>>) -> Self {
|
||||||
mut self,
|
self.secondary_action = Some(button.into());
|
||||||
name: impl Into<Cow<'a, str>>,
|
|
||||||
message: Message,
|
|
||||||
) -> Self {
|
|
||||||
self.primary_action = Some((name.into(), message, true));
|
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn secondary_action(mut self, name: impl Into<Cow<'a, str>>, message: Message) -> Self {
|
pub fn tertiary_action(mut self, button: impl Into<Element<'a, Message>>) -> Self {
|
||||||
self.secondary_action = Some((name.into(), message));
|
self.tertiary_action = Some(button.into());
|
||||||
self
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn tertiary_action(mut self, name: impl Into<Cow<'a, str>>, message: Message) -> Self {
|
|
||||||
self.tertiary_action = Some((name.into(), message));
|
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -100,19 +91,15 @@ impl<'a, Message: Clone + 'static> From<Dialog<'a, Message>> for Element<'a, Mes
|
||||||
content_row = content_row.push(content_col);
|
content_row = content_row.push(content_col);
|
||||||
|
|
||||||
let mut button_row = widget::row::with_capacity(4).spacing(space_xxs);
|
let mut button_row = widget::row::with_capacity(4).spacing(space_xxs);
|
||||||
if let Some((name, message)) = dialog.tertiary_action {
|
if let Some(button) = dialog.tertiary_action {
|
||||||
button_row = button_row.push(widget::button::text(name).on_press(message));
|
button_row = button_row.push(button);
|
||||||
}
|
}
|
||||||
button_row = button_row.push(widget::horizontal_space(Length::Fill));
|
button_row = button_row.push(widget::horizontal_space(Length::Fill));
|
||||||
if let Some((name, message)) = dialog.secondary_action {
|
if let Some(button) = dialog.secondary_action {
|
||||||
button_row = button_row.push(widget::button::standard(name).on_press(message));
|
button_row = button_row.push(button);
|
||||||
}
|
}
|
||||||
if let Some((name, message, destructive)) = dialog.primary_action {
|
if let Some(button) = dialog.primary_action {
|
||||||
if destructive {
|
button_row = button_row.push(button);
|
||||||
button_row = button_row.push(widget::button::destructive(name).on_press(message));
|
|
||||||
} else {
|
|
||||||
button_row = button_row.push(widget::button::suggested(name).on_press(message));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Element::from(
|
Element::from(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue