kr580 1.0.0

Desktop KR580VM80 / Intel 8080 emulator.
Documentation
use iced::widget::{Space, button, column, container, mouse_area, opaque, row, stack};
use iced::{Element, Length};

use super::super::theme::{TOKYO_TEXT, ui_text};
use super::styles::{footer_button_style, modal_backdrop_style, modal_dialog_style};
use crate::app::{Message, ResetConfirmFocus};
use crate::i18n::{Key, Lang};

pub(super) fn reset_confirm_overlay(
    focus: ResetConfirmFocus,
    lang: Lang,
) -> Element<'static, Message> {
    let backdrop = mouse_area(
        container(Space::new())
            .width(Length::Fill)
            .height(Length::Fill)
            .style(modal_backdrop_style),
    )
    .on_press(Message::SettingsResetCancelled);

    let cancel =
        button(container(ui_text(lang.t(Key::DiscardCancel), 13, TOKYO_TEXT)).padding([6, 16]))
            .on_press(Message::SettingsResetCancelled)
            .padding(0)
            .style(move |_theme, status| {
                footer_button_style(status, focus == ResetConfirmFocus::Cancel)
            });

    let reset = button(
        container(ui_text(
            lang.t(Key::SettingsResetConfirmAction),
            13,
            TOKYO_TEXT,
        ))
        .padding([6, 16]),
    )
    .on_press(Message::SettingsResetConfirmed)
    .padding(0)
    .style(move |_theme, status| footer_button_style(status, focus == ResetConfirmFocus::Confirm));

    let buttons = row![
        Space::new().width(Length::Fill),
        cancel,
        Space::new().width(Length::Fixed(8.0)),
        reset,
    ]
    .width(Length::Fill);

    let card = container(
        column![
            ui_text(lang.t(Key::SettingsResetConfirmTitle), 16, TOKYO_TEXT),
            Space::new().height(Length::Fixed(8.0)),
            ui_text(lang.t(Key::SettingsResetConfirmBody), 13, TOKYO_TEXT),
            Space::new().height(Length::Fixed(16.0)),
            buttons,
        ]
        .width(Length::Fixed(360.0)),
    )
    .padding(16)
    .style(modal_dialog_style);

    let centred = column![
        Space::new().height(Length::Fill),
        row![
            Space::new().width(Length::Fill),
            opaque(card),
            Space::new().width(Length::Fill),
        ]
        .width(Length::Fill),
        Space::new().height(Length::Fill),
    ]
    .width(Length::Fill)
    .height(Length::Fill);

    stack![opaque(backdrop), centred]
        .width(Length::Fill)
        .height(Length::Fill)
        .into()
}