So much better

This commit is contained in:
2026-01-26 02:24:04 +01:00
parent bde64e7dc5
commit 1b32a91b0d
16 changed files with 714 additions and 135 deletions

View File

@@ -12,6 +12,38 @@ pub enum PatternField {
Speed,
}
#[derive(Clone, Copy, PartialEq, Eq, Default)]
pub enum PatternPropsField {
#[default]
Name,
Length,
Speed,
Quantization,
SyncMode,
}
impl PatternPropsField {
pub fn next(&self) -> Self {
match self {
Self::Name => Self::Length,
Self::Length => Self::Speed,
Self::Speed => Self::Quantization,
Self::Quantization => Self::SyncMode,
Self::SyncMode => Self::SyncMode,
}
}
pub fn prev(&self) -> Self {
match self {
Self::Name => Self::Name,
Self::Length => Self::Name,
Self::Speed => Self::Length,
Self::Quantization => Self::Speed,
Self::SyncMode => Self::Quantization,
}
}
}
pub struct EditorContext {
pub bank: usize,
pub pattern: usize,

View File

@@ -13,12 +13,12 @@ pub mod ui;
pub use audio::{AudioSettings, DeviceKind, EngineSection, Metrics, SettingKind};
pub use options::{OptionsFocus, OptionsState};
pub use editor::{CopiedStep, EditorContext, Focus, PatternField};
pub use editor::{CopiedStep, EditorContext, Focus, PatternField, PatternPropsField};
pub use live_keys::LiveKeyState;
pub use modal::Modal;
pub use panel::{PanelFocus, PanelState, SidePanel};
pub use patterns_nav::{PatternsColumn, PatternsNav};
pub use playback::PlaybackState;
pub use playback::{PlaybackState, StagedChange};
pub use project::ProjectState;
pub use sample_browser::SampleBrowserState;
pub use ui::{DictFocus, FlashKind, UiState};

View File

@@ -1,4 +1,5 @@
use crate::state::editor::PatternField;
use crate::model::{LaunchQuantization, PatternSpeed, SyncMode};
use crate::state::editor::{PatternField, PatternPropsField};
use crate::state::file_browser::FileBrowserState;
#[derive(Clone, PartialEq, Eq)]
@@ -40,4 +41,14 @@ pub enum Modal {
AddSamplePath(FileBrowserState),
Editor,
Preview,
PatternProps {
bank: usize,
pattern: usize,
field: PatternPropsField,
name: String,
length: String,
speed: PatternSpeed,
quantization: LaunchQuantization,
sync_mode: SyncMode,
},
}

View File

@@ -1,3 +1,5 @@
use crate::model::{MAX_BANKS, MAX_PATTERNS};
#[derive(Clone, Copy, PartialEq, Eq, Default)]
pub enum PatternsColumn {
#[default]
@@ -24,10 +26,10 @@ impl PatternsNav {
pub fn move_up(&mut self) {
match self.column {
PatternsColumn::Banks => {
self.bank_cursor = (self.bank_cursor + 15) % 16;
self.bank_cursor = (self.bank_cursor + MAX_BANKS - 1) % MAX_BANKS;
}
PatternsColumn::Patterns => {
self.pattern_cursor = (self.pattern_cursor + 15) % 16;
self.pattern_cursor = (self.pattern_cursor + MAX_PATTERNS - 1) % MAX_PATTERNS;
}
}
}
@@ -35,10 +37,10 @@ impl PatternsNav {
pub fn move_down(&mut self) {
match self.column {
PatternsColumn::Banks => {
self.bank_cursor = (self.bank_cursor + 1) % 16;
self.bank_cursor = (self.bank_cursor + 1) % MAX_BANKS;
}
PatternsColumn::Patterns => {
self.pattern_cursor = (self.pattern_cursor + 1) % 16;
self.pattern_cursor = (self.pattern_cursor + 1) % MAX_PATTERNS;
}
}
}

View File

@@ -1,14 +1,24 @@
use crate::engine::PatternChange;
use crate::model::{LaunchQuantization, SyncMode};
#[derive(Clone)]
pub struct StagedChange {
pub change: PatternChange,
pub quantization: LaunchQuantization,
pub sync_mode: SyncMode,
}
pub struct PlaybackState {
pub playing: bool,
pub queued_changes: Vec<PatternChange>,
pub staged_changes: Vec<StagedChange>,
pub queued_changes: Vec<StagedChange>,
}
impl Default for PlaybackState {
fn default() -> Self {
Self {
playing: true,
staged_changes: Vec::new(),
queued_changes: Vec::new(),
}
}