95 lines
2.8 KiB
Rust
95 lines
2.8 KiB
Rust
use crate::model::{LaunchQuantization, PatternSpeed, SyncMode};
|
|
use crate::state::editor::{EuclideanField, PatternField, PatternPropsField};
|
|
use crate::state::file_browser::FileBrowserState;
|
|
|
|
#[derive(Clone, PartialEq, Eq)]
|
|
pub enum ConfirmAction {
|
|
Quit,
|
|
DeleteStep { bank: usize, pattern: usize, step: usize },
|
|
DeleteSteps { bank: usize, pattern: usize, steps: Vec<usize> },
|
|
ResetPattern { bank: usize, pattern: usize },
|
|
ResetBank { bank: usize },
|
|
ResetPatterns { bank: usize, patterns: Vec<usize> },
|
|
ResetBanks { banks: Vec<usize> },
|
|
}
|
|
|
|
impl ConfirmAction {
|
|
pub fn message(&self) -> String {
|
|
match self {
|
|
Self::Quit => "Quit?".into(),
|
|
Self::DeleteStep { step, .. } => format!("Delete step {}?", step + 1),
|
|
Self::DeleteSteps { steps, .. } => {
|
|
let nums: Vec<String> = steps.iter().map(|s| format!("{:02}", s + 1)).collect();
|
|
format!("Delete steps {}?", nums.join(", "))
|
|
}
|
|
Self::ResetPattern { pattern, .. } => format!("Reset pattern {}?", pattern + 1),
|
|
Self::ResetBank { bank } => format!("Reset bank {}?", bank + 1),
|
|
Self::ResetPatterns { patterns, .. } => format!("Reset {} patterns?", patterns.len()),
|
|
Self::ResetBanks { banks } => format!("Reset {} banks?", banks.len()),
|
|
}
|
|
}
|
|
}
|
|
|
|
#[derive(Clone, PartialEq, Eq)]
|
|
pub enum RenameTarget {
|
|
Bank { bank: usize },
|
|
Pattern { bank: usize, pattern: usize },
|
|
Step { bank: usize, pattern: usize, step: usize },
|
|
}
|
|
|
|
impl RenameTarget {
|
|
pub fn title(&self) -> String {
|
|
match self {
|
|
Self::Bank { bank } => format!("Rename Bank {:02}", bank + 1),
|
|
Self::Pattern { bank, pattern } => format!("Rename B{:02}:P{:02}", bank + 1, pattern + 1),
|
|
Self::Step { step, .. } => format!("Name Step {:02}", step + 1),
|
|
}
|
|
}
|
|
}
|
|
|
|
#[derive(Clone, PartialEq, Eq)]
|
|
pub enum Modal {
|
|
None,
|
|
Confirm {
|
|
action: ConfirmAction,
|
|
selected: bool,
|
|
},
|
|
FileBrowser(Box<FileBrowserState>),
|
|
Rename {
|
|
target: RenameTarget,
|
|
name: String,
|
|
},
|
|
SetPattern {
|
|
field: PatternField,
|
|
input: String,
|
|
},
|
|
SetTempo(String),
|
|
JumpToStep(String),
|
|
AddSamplePath(Box<FileBrowserState>),
|
|
Editor,
|
|
Preview,
|
|
PatternProps {
|
|
bank: usize,
|
|
pattern: usize,
|
|
field: PatternPropsField,
|
|
name: String,
|
|
length: String,
|
|
speed: PatternSpeed,
|
|
quantization: LaunchQuantization,
|
|
sync_mode: SyncMode,
|
|
},
|
|
KeybindingsHelp {
|
|
scroll: usize,
|
|
},
|
|
EuclideanDistribution {
|
|
bank: usize,
|
|
pattern: usize,
|
|
source_step: usize,
|
|
field: EuclideanField,
|
|
pulses: String,
|
|
steps: String,
|
|
rotation: String,
|
|
},
|
|
Onboarding,
|
|
}
|