From d0e05b960cc626b7406582d61cc9a7cae485b915 Mon Sep 17 00:00:00 2001 From: pml68 Date: Mon, 31 Mar 2025 00:57:02 +0200 Subject: feat: remove GTK3 dependency --- src/dialogs.rs | 68 ++++++++++++++++++++++++++++++++++------------------------ 1 file changed, 40 insertions(+), 28 deletions(-) (limited to 'src/dialogs.rs') diff --git a/src/dialogs.rs b/src/dialogs.rs index 5954ff5..08513fd 100644 --- a/src/dialogs.rs +++ b/src/dialogs.rs @@ -1,35 +1,47 @@ -use rfd::{ - AsyncMessageDialog, MessageButtons, MessageDialog, MessageDialogResult, - MessageLevel, -}; +use iced::{Element, Task}; +use iced_dialog::button; -pub async fn error_dialog(description: impl Into) { - let _ = AsyncMessageDialog::new() - .set_level(MessageLevel::Error) - .set_buttons(MessageButtons::Ok) - .set_title("Oops! Something went wrong.") - .set_description(description) - .show() - .await; +use crate::Message; +use crate::types::{DialogAction, DialogButtons}; + +pub const UNSAVED_CHANGES_TITLE: &str = "Unsaved changes"; +pub const WARNING_TITLE: &str = "Heads up!"; +pub const ERROR_TITLE: &str = "Oops! Something went wrong."; + +pub fn ok_button<'a>() -> Element<'a, Message> { + button("Ok").on_press(Message::DialogOk).into() } -pub async fn warning_dialog(description: impl Into) { - let _ = AsyncMessageDialog::new() - .set_level(MessageLevel::Warning) - .set_buttons(MessageButtons::Ok) - .set_title("Heads up!") - .set_description(description) - .show() - .await; +pub fn cancel_button<'a>() -> Element<'a, Message> { + button("Cancel").on_press(Message::DialogCancel).into() } -pub fn unsaved_changes_dialog(description: impl Into) -> bool { - let result = MessageDialog::new() - .set_level(MessageLevel::Warning) - .set_buttons(MessageButtons::OkCancel) - .set_title("Unsaved changes") - .set_description(description) - .show(); +pub fn error_dialog(description: impl Into) -> Task { + Task::done(Message::OpenDialog( + ERROR_TITLE, + description.into(), + DialogButtons::Ok, + DialogAction::None, + )) +} + +pub fn warning_dialog(description: impl Into) -> Task { + Task::done(Message::OpenDialog( + WARNING_TITLE, + description.into(), + DialogButtons::Ok, + DialogAction::None, + )) +} - matches!(result, MessageDialogResult::Ok) +pub fn unsaved_changes_dialog( + description: impl Into, + action: DialogAction, +) -> Task { + Task::done(Message::OpenDialog( + UNSAVED_CHANGES_TITLE, + description.into(), + DialogButtons::OkCancel, + action, + )) } -- cgit v1.2.3