WIP: clap

This commit is contained in:
2026-02-20 22:14:21 +01:00
parent 12752e0167
commit 00d6eb2f1f
76 changed files with 9103 additions and 143 deletions

View File

@@ -1,7 +1,7 @@
use crate::commands::AppCommand;
use crate::engine::{LinkState, SequencerSnapshot};
use crate::services::{dict_nav, euclidean, help_nav, pattern_editor};
use crate::state::{undo::UndoEntry, CyclicEnum, FlashKind, Modal, StagedPropChange};
use crate::state::{undo::UndoEntry, FlashKind, Modal, StagedPropChange};
use super::App;
@@ -344,8 +344,8 @@ impl App {
// Audio settings (engine page)
AppCommand::AudioSetSection(section) => self.audio.section = section,
AppCommand::AudioNextSection => self.audio.next_section(),
AppCommand::AudioPrevSection => self.audio.prev_section(),
AppCommand::AudioNextSection => self.audio.next_section(self.plugin_mode),
AppCommand::AudioPrevSection => self.audio.prev_section(self.plugin_mode),
AppCommand::AudioOutputListUp => self.audio.output_list.move_up(),
AppCommand::AudioOutputListDown(count) => self.audio.output_list.move_down(count),
AppCommand::AudioOutputPageUp => self.audio.output_list.page_up(),
@@ -353,8 +353,8 @@ impl App {
AppCommand::AudioInputListUp => self.audio.input_list.move_up(),
AppCommand::AudioInputListDown(count) => self.audio.input_list.move_down(count),
AppCommand::AudioInputPageDown(count) => self.audio.input_list.page_down(count),
AppCommand::AudioSettingNext => self.audio.setting_kind = self.audio.setting_kind.next(),
AppCommand::AudioSettingPrev => self.audio.setting_kind = self.audio.setting_kind.prev(),
AppCommand::AudioSettingNext => self.audio.next_setting(self.plugin_mode),
AppCommand::AudioSettingPrev => self.audio.prev_setting(self.plugin_mode),
AppCommand::SetOutputDevice(name) => self.audio.config.output_device = Some(name),
AppCommand::SetInputDevice(name) => self.audio.config.input_device = Some(name),
AppCommand::SetDeviceKind(kind) => self.audio.device_kind = kind,

View File

@@ -69,6 +69,7 @@ pub struct App {
pub options: OptionsState,
pub panel: PanelState,
pub midi: MidiState,
pub plugin_mode: bool,
}
impl Default for App {
@@ -82,6 +83,15 @@ impl App {
let variables = Arc::new(ArcSwap::from_pointee(HashMap::new()));
let dict = Arc::new(Mutex::new(HashMap::new()));
let rng = Arc::new(Mutex::new(StdRng::seed_from_u64(0)));
Self::build(variables, dict, rng)
}
#[allow(dead_code)]
pub fn with_shared(variables: Variables, dict: Dictionary, rng: Rng) -> Self {
Self::build(variables, dict, rng)
}
fn build(variables: Variables, dict: Dictionary, rng: Rng) -> Self {
let script_engine =
ScriptEngine::new(Arc::clone(&variables), Arc::clone(&dict), Arc::clone(&rng));
let live_keys = Arc::new(LiveKeyState::new());
@@ -113,6 +123,7 @@ impl App {
options: OptionsState::default(),
panel: PanelState::default(),
midi: MidiState::new(),
plugin_mode: false,
}
}

View File

@@ -32,11 +32,8 @@ impl App {
cc_access: None,
speed_key: "",
chain_key: "",
#[cfg(feature = "desktop")]
mouse_x: 0.5,
#[cfg(feature = "desktop")]
mouse_y: 0.5,
#[cfg(feature = "desktop")]
mouse_down: 0.0,
}
}

View File

@@ -34,8 +34,10 @@ impl App {
});
}
pub fn flush_dirty_patterns(&mut self, cmd_tx: &Sender<SeqCommand>) {
for (bank, pattern) in self.project_state.take_dirty() {
pub fn flush_dirty_patterns(&mut self, cmd_tx: &Sender<SeqCommand>) -> bool {
let dirty = self.project_state.take_dirty();
let had_dirty = !dirty.is_empty();
for (bank, pattern) in dirty {
let pat = self.project_state.project.pattern_at(bank, pattern);
let snapshot = PatternSnapshot {
speed: pat.speed,
@@ -59,5 +61,6 @@ impl App {
data: snapshot,
});
}
had_dirty
}
}