kr580 2.0.0

Desktop KR580VM80 / Intel 8080 emulator.
Documentation
mod export;

use super::register_inline::RegisterMove;
use crate::i18n::Lang;
use crate::persistence::{ColorScheme, PrinterDialogMode, ShortcutAction, ShortcutBinding};
use iced::{Point, keyboard, widget::text_editor};
use k580_core::RegisterName;
use k580_ui::devices::printer::{
    PrinterConfiguration, PrinterInfo, PrinterOrientation, PrinterPropertyChange,
    PrinterPropertySheet, PrinterSettings,
};
use std::path::PathBuf;

#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub(crate) enum MenuId {
    File,
    Mp,
    View,
    Settings,
    Help,
}

#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub(crate) enum TopMenuFocus {
    Category(MenuId),
    Item { menu: MenuId, index: usize },
}

#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub(crate) enum TopMenuIndicator {
    Hidden,
    TabRing,
    ArrowFill,
}

#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub(crate) enum ToolWindowKind {
    Monitor,
    Floppy,
    Hdd,
    Network,
    Printer,
}

#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub(crate) enum SpeedTier {
    Slow,
    Medium,
    High,
    Max,
}

pub(crate) use super::help::{HelpNode, HelpSearchResponse};
pub(crate) use super::settings_modal::SettingsCategory;
pub(crate) use export::{ExportFlag, ExportMemoryColumn, ExportRegister, ExportTab};

#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub(crate) enum RegisterInlineTarget {
    Schematic(RegisterName),
    Mux(RegisterName),
}

impl RegisterInlineTarget {
    pub(crate) fn register(self) -> RegisterName {
        match self {
            Self::Schematic(register) | Self::Mux(register) => register,
        }
    }

    pub(crate) fn for_register(register: RegisterName) -> Self {
        match register {
            RegisterName::A => Self::Schematic(register),
            _ => Self::Mux(register),
        }
    }
}

#[derive(Clone, Debug)]
pub(crate) enum Message {
    Tick,
    StepInstruction,
    RestartProgram,
    StepTact,
    ToggleRun,
    ResetCpu,
    ResetRam,
    OpenSnapshot,
    LoadSnapshotFromPath(PathBuf),
    SaveSnapshot,
    SaveSnapshotAs,
    SubprogramStartChanged(String),
    SubprogramEndChanged(String),
    ConfirmSubprogram,
    CancelSubprogram,
    NewFile,
    Export,
    ExportTabSelected(ExportTab),
    ToggleExportMemoryColumn(ExportMemoryColumn),
    ToggleExportRegister(ExportRegister),
    ToggleExportFlag(ExportFlag),
    ExportMemoryStartChanged(String),
    ExportMemoryEndChanged(String),
    ExportTargetChanged(String),
    ExportTargetDropdownToggled,
    ExportTargetSelected(String),
    ExportTargetAdd,
    ExportTargetDelete,
    ConfirmExport,
    CancelExport,
    Import,
    ImportFileBrowse,
    ImportTargetDropdownToggled,
    ImportTargetSelected(String),
    ConfirmImport,
    CancelImport,
    RegisterNameChanged(String),
    RegisterPrevious,
    RegisterNext,
    RegisterValueChanged(String),
    ApplyRegister,
    RegisterSelected(RegisterInlineTarget),
    RegisterEnter(RegisterInlineTarget),
    RegisterReplace(RegisterInlineTarget),
    InlineRegisterValueChanged(RegisterInlineTarget, String),
    ApplyInlineRegisterValue(RegisterInlineTarget),
    RegisterHoverStarted(RegisterInlineTarget),
    RegisterHoverEnded(RegisterInlineTarget),
    MemorySelected(u16),
    MemoryEnter(u16),
    MemoryReplace(u16),
    /// Re-focus the inline value editor after the surrounding row was rebuilt.
    RefocusInline,
    MemoryAddressPrevious,
    MemoryAddressNext,
    MemoryAddressPageUp,
    MemoryAddressPageDown,
    /// `+1` for Up, `-1` for Down.
    ArrowKey(i32),
    HorizontalArrowKey(i32),
    RegisterArrowKey(RegisterMove),
    MemoryScrolled(f32, f32),
    MemoryScrollbarDragged(f32, f32),
    JumpMemoryAddress,
    JumpMemoryTo(u16),
    MemoryAddressChanged(String),
    MemoryValueChanged(String),
    InlineMemoryValueChanged(u16, String),
    ApplyInlineMemoryValue(u16),
    PasteMemoryBytesRequested,
    MemoryBytesPasted(Option<String>),
    OpcodeDropdownToggled(u16),
    OpcodeSearchChanged(String),
    OpcodeSelected(u16, u8),
    OpcodeScrolled,
    HideOpcodeDropdown,
    DismissErrorNotice,
    DismissHaltNotice,
    ClearHalt,
    ToggleHalt,
    EscPressed,
    EnterPressed,
    MemoryCellAction,
    MemoryCellReturn,
    OpenOpcodePicker,
    ApplyMemory,
    ModifiersChanged(keyboard::Modifiers),
    FocusCycle {
        backward: bool,
    },
    FocusResolved {
        focused: iced::widget::Id,
        backward: bool,
    },
    CursorMoved(Point),
    RuntimeEvent {
        event: iced::Event,
        status: iced::event::Status,
        window: iced::window::Id,
    },
    MousePressed,
    MousePressedIgnored,
    FocusReconciled {
        generation: u64,
        hit: Option<iced::widget::Id>,
    },
    ResolveFocusedTracker(Option<iced::widget::Id>),
    WindowOpened(iced::window::Id),
    WindowClosed(iced::window::Id),
    WindowResized {
        id: iced::window::Id,
        size: iced::Size,
    },
    FrameRendered,
    FileDragCursorPosition(Option<Point>),
    MenuCategoriesToggled,
    MenuToggled(MenuId),
    MenuHovered(MenuId),
    MenuClosed,
    /// Used by menu items to close the dropdown before dispatching their action.
    MenuBatch(Vec<Message>),
    SpeedTierChanged(SpeedTier),
    WindowDragStart,
    ToolWindowDragStart(ToolWindowKind),
    WindowMinimize,
    WindowToggleMaximize,
    WindowClose,
    WindowMaximizedChanged(bool),
    Undo,
    Redo,
    ConfirmDiscard,
    CancelDiscard,
    /// OS-side close (× / Alt+F4); routed through the dirty gate.
    WindowCloseRequested(iced::window::Id),
    OpenSettings,
    CloseSettings,
    SaveSettings,
    DismissSettingsSavedNotice,
    OpenAbout,
    CloseAbout,
    OpenChangelog,
    CloseChangelog,
    ChangelogReleaseSelected(usize),
    ChangelogTextAction(text_editor::Action),
    OpenHelp,
    CloseHelp,
    HelpNodeSelected(HelpNode),
    HelpNodeToggled(HelpNode),
    HelpSearchChanged(String),
    HelpSearchFinished(HelpSearchResponse),
    HelpTextAction(text_editor::Action),
    HelpToggleExpandAll,
    OpenUrl(&'static str),
    OpenMonitor,
    CloseMonitor,
    DetachToolWindow(ToolWindowKind),
    AttachToolWindow(ToolWindowKind),
    ToggleToolWindowAlwaysOnTop(ToolWindowKind),
    ToggleMonitorSplit,
    ToggleMonitorHexPopup,
    CycleMonitorHexFilter,
    MonitorHexScrolled,
    ClearMonitorBuffer,
    SaveMonitorImage,
    OpenFloppy,
    CloseFloppy,
    ToggleFloppyImageContents,
    OpenFloppyImage,
    DetachFloppyImage,
    SaveFloppyBuffer,
    ToggleFloppyDebugBuffer,
    ClearFloppyBuffer,
    OpenHdd,
    CloseHdd,
    ClearHddBuffer,
    ChooseHddDirectory,
    ToggleHddDebugBuffer,
    DeleteHddFile,
    CreateHddFile,
    ToggleHddImageContents,
    OpenNetwork,
    CloseNetwork,
    OpenNetworkSettings,
    CloseNetworkSettings,
    NetworkModeChanged(crate::backend::NetworkMode),
    NetworkHostChanged(String),
    NetworkPortChanged(String),
    ApplyNetworkSettings,
    ClearNetworkBuffers,
    ToggleNetworkBufferView,
    OpenPrinter,
    ClosePrinter,
    TogglePrinterBufferView,
    ClearPrinterBuffer,
    PrintPrinterNative,
    ConfigurePrinterSession,
    PrinterSessionSetupFinished(Result<Option<PrinterSettings>, String>),
    PrinterSetupWindowPositionLoaded(Option<Point>),
    PrinterSetupLoaded(Result<Vec<PrinterInfo>, String>),
    PrinterSetupSelected(String),
    PrinterSetupConfigurationLoaded {
        printer_name: String,
        result: Result<PrinterConfiguration, String>,
    },
    PrinterSetupDropdownToggled(super::printer::PrinterSetupDropdown),
    PrinterSetupDropdownDismissed(super::printer::PrinterSetupDropdown),
    PrinterSetupPaperSelected(i16),
    PrinterSetupSourceSelected(i16),
    PrinterSetupOrientationSelected(PrinterOrientation),
    PrinterSetupProperties,
    PrinterPropertiesAttentionRequested,
    PrinterPropertiesLoaded {
        printer_name: String,
        result: Result<PrinterPropertySheet, String>,
    },
    PrinterPropertiesTabSelected(super::printer::PrinterPropertiesTab),
    PrinterPropertiesFocusResolved {
        focused: Option<iced::widget::Id>,
        backward: bool,
    },
    PrinterPropertyDropdownToggled(super::printer::PrinterPropertyDropdown),
    PrinterPropertyDropdownDismissed(super::printer::PrinterPropertyDropdown),
    PrinterPropertyFeatureSelected(PrinterPropertyChange),
    PrinterPropertyApplied {
        printer_name: String,
        result: Result<PrinterPropertySheet, String>,
    },
    PrinterPropertyParameterChanged {
        name: String,
        value: String,
    },
    PrinterPropertyParameterApply(String),
    PrinterPropertyPaperSelected(i16),
    PrinterPropertySourceSelected(i16),
    PrinterPropertyOrientationSelected(PrinterOrientation),
    PrinterPropertyPresetSelected(String),
    PrinterPropertyPresetNameChanged(String),
    PrinterPropertyPresetSave,
    PrinterPropertyPresetDelete,
    PrinterPropertyConfirmed,
    ClosePrinterProperties,
    PrinterSetupConfirmed,
    ClosePrinterSetup,
    ToggleStackView,
    SettingsCategorySelected(SettingsCategory),
    SettingsSearchChanged(String),
    SettingsDraftLanguageChanged(Lang),
    SettingsDraftSpeedChanged(SpeedTier),
    SettingsDraftFollowPcSet(bool),
    SettingsDraftMemoryOperandHighlightingSet(bool),
    SettingsDraftColorSchemeChanged(ColorScheme),
    SettingsDraftPrinterDialogModeSet(PrinterDialogMode),
    SettingsFloppyImageBrowse,
    SettingsDraftFloppyImageSet(PathBuf),
    SettingsFloppyImageClear,
    SettingsHddDirectoryBrowse,
    SettingsDraftHddDirectorySet(PathBuf),
    SettingsPrinterSetup,
    SettingsPrinterSetupFinished(Result<Option<PrinterSettings>, String>),
    SettingsPrinterClear,
    SettingsNetworkClientHostChanged(String),
    SettingsNetworkClientPortChanged(String),
    SettingsNetworkServerHostChanged(String),
    SettingsNetworkServerPortChanged(String),
    SettingsLanguageDropdownToggled,
    SettingsShortcutCaptureStarted(ShortcutAction),
    SettingsShortcutCaptured(ShortcutBinding),
    SettingsShortcutCaptureCancelled,
    SettingsShortcutsReset,
    SettingsResetRequested,
    SettingsResetConfirmed,
    SettingsResetCancelled,
    SettingsSectionCycle {
        backward: bool,
    },
    SettingsFileAssociationRegister,
    SettingsFileAssociationUnregister,
}