2026-07-11 18:13:03 +03:00
|
|
|
//! Confirm dialog — save/discard/cancel confirmation.
|
|
|
|
|
|
|
|
|
|
use crate::app::Message;
|
2026-07-16 18:41:05 +03:00
|
|
|
use crate::theme::ThemeColors;
|
2026-07-19 01:53:51 +03:00
|
|
|
use crate::widgets::plain_slider::plain_slider;
|
|
|
|
|
use iced::widget::{column, horizontal_rule, row, text};
|
|
|
|
|
use iced::Element;
|
2026-07-11 18:13:03 +03:00
|
|
|
|
|
|
|
|
/// Build a confirmation dialog with save/discard/cancel.
|
2026-07-16 18:41:05 +03:00
|
|
|
pub fn close_confirm_view(doc_name: &str, colors: ThemeColors) -> Element<'static, Message> {
|
2026-07-11 18:13:03 +03:00
|
|
|
let msg = format!("\"{}\" has unsaved changes.", doc_name);
|
|
|
|
|
|
2026-07-19 01:53:51 +03:00
|
|
|
let save_btn = super::primary_btn("Save", Message::DialogCloseSave, colors);
|
|
|
|
|
let discard_btn = super::secondary_btn("Discard", Message::DialogCloseDiscard, colors);
|
|
|
|
|
let cancel_btn = super::secondary_btn("Cancel", Message::DialogClose, colors);
|
2026-07-11 18:13:03 +03:00
|
|
|
|
|
|
|
|
let dialog = column![
|
|
|
|
|
text("Unsaved Changes").size(16).font(iced::Font::MONOSPACE),
|
|
|
|
|
horizontal_rule(1),
|
|
|
|
|
text(msg).size(12),
|
|
|
|
|
horizontal_rule(1),
|
|
|
|
|
row![save_btn, discard_btn, cancel_btn].spacing(12),
|
|
|
|
|
]
|
|
|
|
|
.spacing(8)
|
|
|
|
|
.padding(16)
|
|
|
|
|
.width(400);
|
|
|
|
|
|
2026-07-16 18:41:05 +03:00
|
|
|
super::modal(dialog, colors)
|
2026-07-11 18:13:03 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// Build a selection operation dialog (grow/shrink/feather).
|
|
|
|
|
pub fn selection_op_view(
|
|
|
|
|
op_name: &str,
|
|
|
|
|
value: f32,
|
|
|
|
|
min: f32,
|
|
|
|
|
max: f32,
|
2026-07-16 18:41:05 +03:00
|
|
|
colors: ThemeColors,
|
2026-07-11 18:13:03 +03:00
|
|
|
) -> Element<'static, Message> {
|
|
|
|
|
let op_owned = op_name.to_string();
|
2026-07-19 01:53:51 +03:00
|
|
|
let value_slider = plain_slider("Value", value, min..=max, 1.0, "", 0, |v| {
|
|
|
|
|
Message::SelectionOpValue(v)
|
|
|
|
|
});
|
2026-07-11 18:13:03 +03:00
|
|
|
|
2026-07-19 01:53:51 +03:00
|
|
|
let apply_btn = super::primary_btn("Apply", Message::SelectionOpApply, colors);
|
|
|
|
|
let cancel_btn = super::secondary_btn("Cancel", Message::DialogClose, colors);
|
2026-07-11 18:13:03 +03:00
|
|
|
|
|
|
|
|
let dialog = column![
|
|
|
|
|
text(op_owned).size(14).font(iced::Font::MONOSPACE),
|
|
|
|
|
horizontal_rule(1),
|
|
|
|
|
value_slider,
|
|
|
|
|
horizontal_rule(1),
|
|
|
|
|
row![apply_btn, cancel_btn].spacing(12),
|
|
|
|
|
]
|
|
|
|
|
.spacing(8)
|
|
|
|
|
.padding(16)
|
|
|
|
|
.width(350);
|
|
|
|
|
|
2026-07-16 18:41:05 +03:00
|
|
|
super::modal(dialog, colors)
|
2026-07-11 18:13:03 +03:00
|
|
|
}
|