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::{HDD_KEYS, storage_window, storage_window_overlay};
use crate::app::{Message, ToolWindowKind};
use crate::i18n::{Key, Lang};

pub(in crate::view) fn hdd_window_overlay<'a>(
    state: &'a StorageState,
    hdd_file_exists: bool,
    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::CloseHdd,
        move |state, show, detached, always_on_top, lang| {
            hdd_header(state, hdd_file_exists, show, detached, always_on_top, lang)
        },
        HDD_KEYS,
    )
}

pub(in crate::view) fn hdd_window<'a>(
    state: &'a StorageState,
    hdd_file_exists: bool,
    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,
        move |state, show, detached, always_on_top, lang| {
            hdd_header(state, hdd_file_exists, show, detached, always_on_top, lang)
        },
        HDD_KEYS,
    )
}

fn hdd_header<'a>(
    state: &'a StorageState,
    hdd_file_exists: bool,
    show_image_contents: bool,
    detached: bool,
    always_on_top: bool,
    lang: Lang,
) -> Element<'a, Message> {
    row![
        window_controls(ToolWindowKind::Hdd, detached, always_on_top, lang),
        icon_button(
            icons::folder_open(),
            Some(Message::ChooseHddDirectory),
            lang.t(Key::HddChooseDirectory),
            false,
            None,
        ),
        Space::new().width(Length::Fixed(6.0)),
        icon_button(
            icons::binary(),
            Some(Message::ToggleHddImageContents),
            lang.t(Key::HddShowImageContents),
            show_image_contents,
            None,
        ),
        Space::new().width(Length::Fixed(6.0)),
        icon_button(
            icons::bug(),
            Some(Message::ToggleHddDebugBuffer),
            lang.t(Key::HddDebugBuffer),
            state.debug_buffer,
            None,
        ),
        Space::new().width(Length::Fixed(6.0)),
        icon_button(
            icons::brush_cleaning(),
            Some(Message::ClearHddBuffer),
            lang.t(Key::HddClearBuffer),
            false,
            None,
        ),
        Space::new().width(Length::Fixed(6.0)),
        icon_button(
            icons::trash_2(),
            if hdd_file_exists {
                Some(Message::DeleteHddFile)
            } else {
                None
            },
            lang.t(Key::HddDeleteFile),
            false,
            None,
        ),
        Space::new().width(Length::Fixed(6.0)),
        icon_button(
            icons::file_plus_corner(),
            if hdd_file_exists {
                None
            } else {
                Some(Message::CreateHddFile)
            },
            lang.t(Key::HddCreateFile),
            false,
            None,
        ),
        Space::new().width(Length::Fixed(6.0)),
        icon_button(
            icons::window_close(),
            Some(Message::CloseHdd),
            lang.t(Key::HddClose),
            false,
            shortcut_hint(&Message::CloseHdd),
        ),
    ]
    .align_y(alignment::Vertical::Center)
    .into()
}