mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 03:36:41 +01:00
wip: add overlay for help/menu modals
This commit is contained in:
parent
fa2e08e81c
commit
38fb348d19
10 changed files with 323 additions and 234 deletions
|
|
@ -10,8 +10,10 @@ pub fn main () -> Usually<()> {
|
|||
#[derive(Debug, Parser)]
|
||||
#[command(version, about = Some(HEADER), long_about = Some(HEADER))]
|
||||
pub struct Cli {
|
||||
/// Which app to initialize
|
||||
#[command(subcommand)] mode: Mode,
|
||||
/// Pre-defined configuration modes.
|
||||
///
|
||||
/// TODO: Replace these with scripted configurations.
|
||||
#[command(subcommand)] mode: LaunchMode,
|
||||
/// Name of JACK client
|
||||
#[arg(short='n', long)] name: Option<String>,
|
||||
/// Whether to attempt to become transport master
|
||||
|
|
@ -42,7 +44,7 @@ pub struct Cli {
|
|||
|
||||
/// Application modes
|
||||
#[derive(Debug, Clone, Subcommand)]
|
||||
pub enum Mode {
|
||||
pub enum LaunchMode {
|
||||
/// ⏯️ A standalone transport clock.
|
||||
Clock,
|
||||
/// 🎼 A MIDI sequencer.
|
||||
|
|
@ -82,7 +84,7 @@ impl Cli {
|
|||
let audio_froms = &[left_froms.as_slice(), right_froms.as_slice()];
|
||||
let audio_tos = &[left_tos.as_slice(), right_tos.as_slice()];
|
||||
let clip = match mode {
|
||||
Mode::Sequencer | Mode::Groovebox => Some(Arc::new(RwLock::new(MidiClip::new(
|
||||
LaunchMode::Sequencer | LaunchMode::Groovebox => Some(Arc::new(RwLock::new(MidiClip::new(
|
||||
"Clip", true, 384usize, None, Some(ItemColor::random().into())),
|
||||
))),
|
||||
_ => None,
|
||||
|
|
@ -104,44 +106,44 @@ impl Cli {
|
|||
color: ItemPalette::random(),
|
||||
clock: Clock::new(jack, self.bpm)?,
|
||||
view: SourceIter(match mode {
|
||||
Mode::Clock => include_str!("./edn/transport.edn"),
|
||||
Mode::Sequencer => include_str!("./edn/sequencer.edn"),
|
||||
Mode::Groovebox => include_str!("./edn/groovebox.edn"),
|
||||
Mode::Arranger { .. } => include_str!("./edn/arranger.edn"),
|
||||
Mode::Sampler => include_str!("./edn/sampler.edn"),
|
||||
LaunchMode::Clock => include_str!("./edn/transport.edn"),
|
||||
LaunchMode::Sequencer => include_str!("./edn/sequencer.edn"),
|
||||
LaunchMode::Groovebox => include_str!("./edn/groovebox.edn"),
|
||||
LaunchMode::Arranger { .. } => include_str!("./edn/arranger.edn"),
|
||||
LaunchMode::Sampler => include_str!("./edn/sampler.edn"),
|
||||
_ => todo!("{mode:?}"),
|
||||
}),
|
||||
pool: match mode {
|
||||
Mode::Sequencer | Mode::Groovebox => clip.as_ref().map(Into::into),
|
||||
Mode::Arranger { .. } => Some(Default::default()),
|
||||
LaunchMode::Sequencer | LaunchMode::Groovebox => clip.as_ref().map(Into::into),
|
||||
LaunchMode::Arranger { .. } => Some(Default::default()),
|
||||
_ => None,
|
||||
},
|
||||
editor: match mode {
|
||||
Mode::Sequencer | Mode::Groovebox => clip.as_ref().map(Into::into),
|
||||
Mode::Arranger { .. } => Some(Default::default()),
|
||||
LaunchMode::Sequencer | LaunchMode::Groovebox => clip.as_ref().map(Into::into),
|
||||
LaunchMode::Arranger { .. } => Some(Default::default()),
|
||||
_ => None
|
||||
},
|
||||
midi_ins,
|
||||
midi_outs,
|
||||
midi_buf: match mode {
|
||||
Mode::Clock | Mode::Sampler => vec![],
|
||||
Mode::Sequencer | Mode::Groovebox | Mode::Arranger {..} => vec![vec![];65536],
|
||||
LaunchMode::Clock | LaunchMode::Sampler => vec![],
|
||||
LaunchMode::Sequencer | LaunchMode::Groovebox | LaunchMode::Arranger {..} => vec![vec![];65536],
|
||||
_ => todo!("{mode:?}"),
|
||||
},
|
||||
handler: Some(match mode {
|
||||
Mode::Sequencer => handle_sequencer,
|
||||
Mode::Groovebox => handle_groovebox,
|
||||
Mode::Sampler => handle_sampler,
|
||||
_ => handle_arranger,
|
||||
LaunchMode::Sequencer => handle_sequencer,
|
||||
LaunchMode::Groovebox => handle_groovebox,
|
||||
LaunchMode::Sampler => handle_sampler,
|
||||
_ => handle_arranger,
|
||||
}),
|
||||
tracks: match mode {
|
||||
Mode::Sequencer => vec![
|
||||
LaunchMode::Sequencer => vec![
|
||||
Track::new_sequencer()
|
||||
],
|
||||
Mode::Groovebox => vec![
|
||||
LaunchMode::Groovebox => vec![
|
||||
Track::new_groovebox(jack, midi_froms.as_slice(), audio_froms, audio_tos)?
|
||||
],
|
||||
Mode::Sampler => vec![
|
||||
LaunchMode::Sampler => vec![
|
||||
Track::new_sampler(jack, midi_froms.as_slice(), audio_froms, audio_tos)?
|
||||
],
|
||||
_ => vec![]
|
||||
|
|
@ -149,7 +151,7 @@ impl Cli {
|
|||
scenes,
|
||||
..Default::default()
|
||||
};
|
||||
if let &Mode::Arranger { scenes, tracks, track_width, .. } = mode {
|
||||
if let &LaunchMode::Arranger { scenes, tracks, track_width, .. } = mode {
|
||||
app.arranger = Default::default();
|
||||
app.selected = Selection::Clip(1, 1);
|
||||
app.scenes_add(scenes)?;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue