kr580 1.0.0

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

use super::super::icons;
use super::super::tooltips::shortcut_hint;
use super::chrome::{icon_button, window_controls};
use super::{FLOPPY_KEYS, storage_window, storage_window_overlay};
use crate::app::{Message, ToolWindowKind};
use crate::i18n::{Key, Lang};

pub(in crate::view) fn floppy_window_overlay<'a>(
    state: &'a StorageState,
    show_image_contents: bool,
    image_contents: &'a [u8],
    image_error: Option<&'a str>,
    lang: Lang,
) -> Element<'a, Message> {
    storage_window_overlay(
        state,
        show_image_contents,
        image_contents,
        image_error,
        lang,
        Message::CloseFloppy,
        |state, show, detached, always_on_top, lang| {
            floppy_header(state, show, detached, always_on_top, lang)
        },
        FLOPPY_KEYS,
    )
}

pub(in crate::view) fn floppy_window<'a>(
    state: &'a StorageState,
    show_image_contents: bool,
    image_contents: &'a [u8],
    image_error: Option<&'a str>,
    always_on_top: bool,
    lang: Lang,
) -> Element<'a, Message> {
    storage_window(
        state,
        show_image_contents,
        image_contents,
        image_error,
        always_on_top,
        lang,
        |state, show, detached, always_on_top, lang| {
            floppy_header(state, show, detached, always_on_top, lang)
        },
        FLOPPY_KEYS,
    )
}

fn floppy_header<'a>(
    state: &'a StorageState,
    show_image_contents: bool,
    detached: bool,
    always_on_top: bool,
    lang: Lang,
) -> Element<'a, Message> {
    row![
        window_controls(ToolWindowKind::Floppy, detached, always_on_top, lang),
        icon_button(
            icons::hard_drive_download(),
            Some(Message::OpenFloppyImage),
            lang.t(Key::FloppyOpenImage),
            false,
            None,
        ),
        Space::new().width(Length::Fixed(6.0)),
        icon_button(
            icons::hard_drive_upload(),
            Some(Message::SaveFloppyBuffer),
            lang.t(Key::FloppySaveBuffer),
            false,
            None,
        ),
        Space::new().width(Length::Fixed(6.0)),
        icon_button(
            icons::hard_drive_x(),
            Some(Message::DetachFloppyImage),
            lang.t(Key::FloppyDetachImage),
            false,
            None,
        ),
        Space::new().width(Length::Fixed(6.0)),
        icon_button(
            icons::binary(),
            Some(Message::ToggleFloppyImageContents),
            lang.t(Key::FloppyShowImageContents),
            show_image_contents,
            None,
        ),
        Space::new().width(Length::Fixed(6.0)),
        icon_button(
            icons::bug(),
            Some(Message::ToggleFloppyDebugBuffer),
            lang.t(Key::FloppyDebugBuffer),
            state.debug_buffer,
            None,
        ),
        Space::new().width(Length::Fixed(6.0)),
        icon_button(
            icons::brush_cleaning(),
            Some(Message::ClearFloppyBuffer),
            lang.t(Key::FloppyClearBuffer),
            false,
            None,
        ),
        Space::new().width(Length::Fixed(6.0)),
        icon_button(
            icons::window_close(),
            Some(Message::CloseFloppy),
            lang.t(Key::MonitorClose),
            false,
            shortcut_hint(&Message::CloseFloppy),
        ),
    ]
    .align_y(alignment::Vertical::Center)
    .into()
}