diff options
Diffstat (limited to 'src/dialogs.rs')
| -rw-r--r-- | src/dialogs.rs | 103 |
1 files changed, 0 insertions, 103 deletions
diff --git a/src/dialogs.rs b/src/dialogs.rs deleted file mode 100644 index 68bbd6e..0000000 --- a/src/dialogs.rs +++ /dev/null @@ -1,103 +0,0 @@ -use std::borrow::Cow; - -use iced::widget::text; -use iced_dialog::button; - -use crate::Message; -use crate::types::Element; - -pub const UNSAVED_CHANGES_TITLE: &str = "Hold on for a sec!"; -pub const WARNING_TITLE: &str = "Heads up!"; -pub const ERROR_TITLE: &str = "Oops! Something went wrong."; - -#[derive(Debug, Clone, Copy, Default)] -pub enum Action { - #[default] - None, - Close, - UnsavedChanges(UnsavedChanges), -} - -#[derive(Debug, Clone, Copy)] -pub enum UnsavedChanges { - New, - Open, - Exit, -} - -impl From<Action> for Vec<Element<'_, Message>> { - fn from(action: Action) -> Self { - match action { - Action::None => vec![], - Action::Close => vec![button("Close", Message::DialogYes).into()], - Action::UnsavedChanges(_) => vec![ - button("Don't Save", Message::DialogNo).into(), - button("Save", Message::DialogYes).into(), - button("Cancel", Message::DialogCancel).into(), - ], - } - } -} - -#[derive(Debug, Default)] -pub struct Dialog { - is_open: bool, - title: Cow<'static, str>, - content: Cow<'static, str>, - action: Action, -} - -impl Dialog { - pub fn new( - title: impl Into<Cow<'static, str>>, - content: impl Into<Cow<'static, str>>, - action: Action, - ) -> Self { - Self { - is_open: true, - title: title.into(), - content: content.into(), - action, - } - } - - pub fn error(content: impl Into<Cow<'static, str>>) -> Self { - Self::new(ERROR_TITLE, content, Action::Close) - } - - pub fn warning(content: impl Into<Cow<'static, str>>) -> Self { - Self::new(WARNING_TITLE, content, Action::Close) - } - - pub fn unsaved_changes( - content: impl Into<Cow<'static, str>>, - unsaved_changes: UnsavedChanges, - ) -> Self { - Self::new( - UNSAVED_CHANGES_TITLE, - content, - Action::UnsavedChanges(unsaved_changes), - ) - } - - pub fn close(&mut self) { - self.is_open = false; - } - - pub fn action(&self) -> Action { - self.action - } - - pub fn as_iced_dialog<'a>( - &'a self, - base: impl Into<Element<'a, Message>>, - ) -> iced_dialog::Dialog<'a, Message, material_theme::Theme> { - iced_dialog::Dialog::with_buttons( - self.is_open, - base, - text(&*self.content), - self.action.into(), - ) - .title(&*self.title) - } -} |
