use std::path::PathBuf; use crate::model::{LaunchQuantization, PatternSpeed, SyncMode}; use crate::state::{ColorScheme, DeviceKind, Modal, PatternField, SettingKind}; pub enum AppCommand { // Playback TogglePlaying, TempoUp, TempoDown, // Navigation NextStep, PrevStep, StepUp, StepDown, // Pattern editing ToggleSteps, LengthIncrease, LengthDecrease, SpeedIncrease, SpeedDecrease, SetLength { bank: usize, pattern: usize, length: usize, }, SetSpeed { bank: usize, pattern: usize, speed: PatternSpeed, }, // Script editing SaveEditorToStep, CompileCurrentStep, DeleteStep { bank: usize, pattern: usize, step: usize, }, DeleteSteps { bank: usize, pattern: usize, steps: Vec, }, ResetPattern { bank: usize, pattern: usize, }, ResetBank { bank: usize, }, CopyPattern { bank: usize, pattern: usize, }, PastePattern { bank: usize, pattern: usize, }, CopyBank { bank: usize, }, PasteBank { bank: usize, }, // Clipboard HardenSteps, CopySteps, PasteSteps, LinkPasteSteps, DuplicateSteps, // Pattern playback (staging) ClearStagedChanges, // Project RenameBank { bank: usize, name: Option, }, RenamePattern { bank: usize, pattern: usize, name: Option, }, RenameStep { bank: usize, pattern: usize, step: usize, name: Option, }, Save(PathBuf), Load(PathBuf), // UI SetStatus(String), ClearStatus, OpenModal(Modal), CloseModal, OpenPatternModal(PatternField), OpenPatternPropsModal { bank: usize, pattern: usize, }, SetPatternProps { bank: usize, pattern: usize, name: Option, length: Option, speed: PatternSpeed, quantization: LaunchQuantization, sync_mode: SyncMode, }, // Page navigation PageLeft, PageRight, PageUp, PageDown, // Help navigation HelpToggleFocus, HelpNextTopic(usize), HelpPrevTopic(usize), HelpScrollDown(usize), HelpScrollUp(usize), HelpActivateSearch, HelpClearSearch, HelpSearchInput(char), HelpSearchBackspace, HelpSearchConfirm, // Dictionary navigation DictToggleFocus, DictNextCategory, DictPrevCategory, DictScrollDown(usize), DictScrollUp(usize), DictActivateSearch, DictClearSearch, DictSearchInput(char), DictSearchBackspace, DictSearchConfirm, // Patterns view PatternsCursorLeft, PatternsCursorRight, PatternsCursorUp, PatternsCursorDown, PatternsEnter, PatternsBack, PatternsTogglePlay, // Mute/Solo (staged) StageMute { bank: usize, pattern: usize }, StageSolo { bank: usize, pattern: usize }, ClearMutes, // Clears both staged and applied mutes ClearSolos, // Clears both staged and applied solos // UI state ClearMinimap, HideTitle, ToggleEditorStack, SetColorScheme(ColorScheme), SetHueRotation(f32), ToggleRuntimeHighlight, ToggleCompletion, // Live keys ToggleLiveKeysFill, // Panel ClosePanel, // Selection SetSelectionAnchor(usize), // Audio settings (engine page) AudioNextSection, AudioPrevSection, AudioOutputListUp, AudioOutputListDown(usize), AudioOutputPageUp, AudioOutputPageDown(usize), AudioInputListUp, AudioInputListDown(usize), AudioInputPageDown(usize), AudioSettingNext, AudioSettingPrev, SetOutputDevice(String), SetInputDevice(String), SetDeviceKind(DeviceKind), AdjustAudioSetting { setting: SettingKind, delta: i32, }, AudioTriggerRestart, RemoveLastSamplePath, AudioRefreshDevices, // Options page OptionsNextFocus, OptionsPrevFocus, ToggleRefreshRate, ToggleScope, ToggleSpectrum, // Metrics ResetPeakVoices, // Euclidean distribution ApplyEuclideanDistribution { bank: usize, pattern: usize, source_step: usize, pulses: usize, steps: usize, rotation: usize, }, }