kr580 1.0.0

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

use super::super::theme::{TOKYO_TEXT, ui_text};
use super::consts::FOOTER_HEIGHT;
use super::styles::footer_button_style;
use crate::app::{FooterFocus, Message, SettingsDialog, SettingsSection};
use crate::i18n::{Key, Lang};

pub(super) fn settings_footer(dialog: &SettingsDialog, lang: Lang) -> Element<'static, Message> {
    let focus = dialog.footer_focus;
    let footer_active = dialog.section == SettingsSection::Footer;

    let reset = footer_button(
        lang.t(Key::SettingsReset),
        Message::SettingsResetRequested,
        footer_active && focus == FooterFocus::Reset,
    );
    let cancel = footer_button(
        lang.t(Key::DiscardCancel),
        Message::CloseSettings,
        footer_active && focus == FooterFocus::Cancel,
    );
    let save = footer_button(
        lang.t(Key::FileSave),
        Message::SaveSettings,
        footer_active && focus == FooterFocus::Save,
    );

    container(
        row![
            reset,
            Space::new().width(Length::Fill),
            cancel,
            Space::new().width(Length::Fixed(8.0)),
            save,
        ]
        .align_y(alignment::Vertical::Center),
    )
    .padding(iced::Padding {
        top: 0.0,
        right: 16.0,
        bottom: 0.0,
        left: 16.0,
    })
    .height(Length::Fixed(FOOTER_HEIGHT))
    .align_y(alignment::Vertical::Center)
    .into()
}

fn footer_button(label: &'static str, action: Message, focused: bool) -> Element<'static, Message> {
    button(container(ui_text(label, 13, TOKYO_TEXT)).padding([6, 16]))
        .on_press(action)
        .padding(0)
        .style(move |_theme, status| footer_button_style(status, focused))
        .into()
}