app: wrap keys and view in Configuration

This commit is contained in:
🪞👃🪞 2025-05-02 18:56:49 +03:00
parent 0e5207a79d
commit 6ed0627056
4 changed files with 102 additions and 94 deletions

View file

@ -105,89 +105,6 @@ impl Cli {
jack: jack.clone(),
color: ItemTheme::random(),
clock: Clock::new(jack, self.bpm)?,
view: SourceIter(match mode {
LaunchMode::Clock =>
include_str!("../../config/view_transport.edn"),
LaunchMode::Sequencer =>
include_str!("../../config/view_sequencer.edn"),
LaunchMode::Groovebox =>
include_str!("../../config/view_groovebox.edn"),
LaunchMode::Arranger { .. } =>
include_str!("../../config/view_arranger.edn"),
LaunchMode::Sampler =>
include_str!("../../config/view_sampler.edn"),
_ => todo!("{mode:?}"),
}),
keys: match mode {
LaunchMode::Sampler => InputMap::default()
.layer(SourceIter(include_str!("../../config/keys_global.edn")).into())
.layer(SourceIter(include_str!("../../config/keys_sampler.edn")).into()),
LaunchMode::Clock => InputMap::default()
.layer(SourceIter(include_str!("../../config/keys_global.edn")).into())
.layer(SourceIter(include_str!("../../config/keys_clock.edn")).into()),
LaunchMode::Sequencer => InputMap::default()
.layer_if(|state: &Tek|matches!(
state.pool.as_ref().map(|p|p.mode.as_ref()).flatten(),
Some(PoolMode::Import(..))|Some(PoolMode::Export(..))
), SourceIter(include_str!("../../config/keys_pool_file.edn")).into())
.layer_if(|state: &Tek|matches!(
state.pool.as_ref().map(|p|p.mode.as_ref()).flatten(),
Some(PoolMode::Rename(..))
), SourceIter(include_str!("../../config/keys_clip_rename.edn")).into())
.layer_if(|state: &Tek|matches!(
state.pool.as_ref().map(|p|p.mode.as_ref()).flatten(),
Some(PoolMode::Length(..))
), SourceIter(include_str!("../../config/keys_clip_length.edn")).into())
.layer(SourceIter(include_str!("../../config/keys_global.edn")).into())
.layer(SourceIter(include_str!("../../config/keys_editor.edn")).into())
.layer(SourceIter(include_str!("../../config/keys_clock.edn")).into())
.layer(SourceIter(include_str!("../../config/keys_sequencer.edn")).into()),
LaunchMode::Groovebox => InputMap::default()
.layer_if(|state: &Tek|matches!(
state.pool.as_ref().map(|p|p.mode.as_ref()).flatten(),
Some(PoolMode::Import(..))|Some(PoolMode::Export(..))
), SourceIter(include_str!("../../config/keys_pool_file.edn")).into())
.layer_if(|state: &Tek|matches!(
state.pool.as_ref().map(|p|p.mode.as_ref()).flatten(),
Some(PoolMode::Rename(..))
), SourceIter(include_str!("../../config/keys_clip_rename.edn")).into())
.layer_if(|state: &Tek|matches!(
state.pool.as_ref().map(|p|p.mode.as_ref()).flatten(),
Some(PoolMode::Length(..))
), SourceIter(include_str!("../../config/keys_clip_length.edn")).into())
.layer(SourceIter(include_str!("../../config/keys_global.edn")).into())
.layer(SourceIter(include_str!("../../config/keys_editor.edn")).into())
.layer(SourceIter(include_str!("../../config/keys_clock.edn")).into())
.layer(SourceIter(include_str!("../../config/keys_sequencer.edn")).into())
.layer(SourceIter(include_str!("../../config/keys_groovebox.edn")).into()),
LaunchMode::Arranger {..} => InputMap::default()
.layer_if(|state: &Tek|matches!(
state.pool.as_ref().map(|p|p.mode.as_ref()).flatten(),
Some(PoolMode::Import(..))|Some(PoolMode::Export(..))
), SourceIter(include_str!("../../config/keys_pool_file.edn")).into())
.layer_if(|state: &Tek|matches!(
state.pool.as_ref().map(|p|p.mode.as_ref()).flatten(),
Some(PoolMode::Rename(..))
), SourceIter(include_str!("../../config/keys_clip_rename.edn")).into())
.layer_if(|state: &Tek|matches!(
state.pool.as_ref().map(|p|p.mode.as_ref()).flatten(),
Some(PoolMode::Length(..))
), SourceIter(include_str!("../../config/keys_clip_length.edn")).into())
.layer(SourceIter(include_str!("../../config/keys_global.edn")).into())
.layer_if(|state: &Tek|state.is_editing(),
SourceIter(include_str!("../../config/keys_editor.edn")).into())
.layer_if(|state: &Tek|state.selected.is_clip()&&!state.is_editing(),
SourceIter(include_str!("../../config/keys_clip.edn")).into())
.layer_if(|state: &Tek|state.selected.is_track()&&!state.is_editing(),
SourceIter(include_str!("../../config/keys_track.edn")).into())
.layer_if(|state: &Tek|state.selected.is_scene()&&!state.is_editing(),
SourceIter(include_str!("../../config/keys_scene.edn")).into())
.layer_if(|state: &Tek|state.selected.is_mix()&&!state.is_editing(),
SourceIter(include_str!("../../config/keys_mix.edn")).into())
.layer(SourceIter(include_str!("../../config/keys_clock.edn")).into())
.layer(SourceIter(include_str!("../../config/keys_arranger.edn")).into()),
_ => todo!("{mode:?}"),
},
pool: match mode {
LaunchMode::Sequencer | LaunchMode::Groovebox => clip.as_ref().map(Into::into),
LaunchMode::Arranger { .. } => Some(Default::default()),
@ -222,6 +139,91 @@ impl Cli {
},
scenes,
selected: Selection::TrackClip { track: 0, scene: 0 },
config: Configuration {
view: SourceIter(match mode {
LaunchMode::Clock =>
include_str!("../../config/view_transport.edn"),
LaunchMode::Sequencer =>
include_str!("../../config/view_sequencer.edn"),
LaunchMode::Groovebox =>
include_str!("../../config/view_groovebox.edn"),
LaunchMode::Arranger { .. } =>
include_str!("../../config/view_arranger.edn"),
LaunchMode::Sampler =>
include_str!("../../config/view_sampler.edn"),
_ => todo!("{mode:?}"),
}),
keys: match mode {
LaunchMode::Sampler => InputMap::default()
.layer(SourceIter(include_str!("../../config/keys_global.edn")).into())
.layer(SourceIter(include_str!("../../config/keys_sampler.edn")).into()),
LaunchMode::Clock => InputMap::default()
.layer(SourceIter(include_str!("../../config/keys_global.edn")).into())
.layer(SourceIter(include_str!("../../config/keys_clock.edn")).into()),
LaunchMode::Sequencer => InputMap::default()
.layer_if(|state: &Tek|matches!(
state.pool.as_ref().map(|p|p.mode.as_ref()).flatten(),
Some(PoolMode::Import(..))|Some(PoolMode::Export(..))
), SourceIter(include_str!("../../config/keys_pool_file.edn")).into())
.layer_if(|state: &Tek|matches!(
state.pool.as_ref().map(|p|p.mode.as_ref()).flatten(),
Some(PoolMode::Rename(..))
), SourceIter(include_str!("../../config/keys_clip_rename.edn")).into())
.layer_if(|state: &Tek|matches!(
state.pool.as_ref().map(|p|p.mode.as_ref()).flatten(),
Some(PoolMode::Length(..))
), SourceIter(include_str!("../../config/keys_clip_length.edn")).into())
.layer(SourceIter(include_str!("../../config/keys_global.edn")).into())
.layer(SourceIter(include_str!("../../config/keys_editor.edn")).into())
.layer(SourceIter(include_str!("../../config/keys_clock.edn")).into())
.layer(SourceIter(include_str!("../../config/keys_sequencer.edn")).into()),
LaunchMode::Groovebox => InputMap::default()
.layer_if(|state: &Tek|matches!(
state.pool.as_ref().map(|p|p.mode.as_ref()).flatten(),
Some(PoolMode::Import(..))|Some(PoolMode::Export(..))
), SourceIter(include_str!("../../config/keys_pool_file.edn")).into())
.layer_if(|state: &Tek|matches!(
state.pool.as_ref().map(|p|p.mode.as_ref()).flatten(),
Some(PoolMode::Rename(..))
), SourceIter(include_str!("../../config/keys_clip_rename.edn")).into())
.layer_if(|state: &Tek|matches!(
state.pool.as_ref().map(|p|p.mode.as_ref()).flatten(),
Some(PoolMode::Length(..))
), SourceIter(include_str!("../../config/keys_clip_length.edn")).into())
.layer(SourceIter(include_str!("../../config/keys_global.edn")).into())
.layer(SourceIter(include_str!("../../config/keys_editor.edn")).into())
.layer(SourceIter(include_str!("../../config/keys_clock.edn")).into())
.layer(SourceIter(include_str!("../../config/keys_sequencer.edn")).into())
.layer(SourceIter(include_str!("../../config/keys_groovebox.edn")).into()),
LaunchMode::Arranger {..} => InputMap::default()
.layer_if(|state: &Tek|matches!(
state.pool.as_ref().map(|p|p.mode.as_ref()).flatten(),
Some(PoolMode::Import(..))|Some(PoolMode::Export(..))
), SourceIter(include_str!("../../config/keys_pool_file.edn")).into())
.layer_if(|state: &Tek|matches!(
state.pool.as_ref().map(|p|p.mode.as_ref()).flatten(),
Some(PoolMode::Rename(..))
), SourceIter(include_str!("../../config/keys_clip_rename.edn")).into())
.layer_if(|state: &Tek|matches!(
state.pool.as_ref().map(|p|p.mode.as_ref()).flatten(),
Some(PoolMode::Length(..))
), SourceIter(include_str!("../../config/keys_clip_length.edn")).into())
.layer(SourceIter(include_str!("../../config/keys_global.edn")).into())
.layer_if(|state: &Tek|state.is_editing(),
SourceIter(include_str!("../../config/keys_editor.edn")).into())
.layer_if(|state: &Tek|state.selected.is_clip()&&!state.is_editing(),
SourceIter(include_str!("../../config/keys_clip.edn")).into())
.layer_if(|state: &Tek|state.selected.is_track()&&!state.is_editing(),
SourceIter(include_str!("../../config/keys_track.edn")).into())
.layer_if(|state: &Tek|state.selected.is_scene()&&!state.is_editing(),
SourceIter(include_str!("../../config/keys_scene.edn")).into())
.layer_if(|state: &Tek|state.selected.is_mix()&&!state.is_editing(),
SourceIter(include_str!("../../config/keys_mix.edn")).into())
.layer(SourceIter(include_str!("../../config/keys_clock.edn")).into())
.layer(SourceIter(include_str!("../../config/keys_arranger.edn")).into()),
_ => todo!("{mode:?}"),
},
},
..Default::default()
};
if let &LaunchMode::Arranger { scenes, tracks, track_width, .. } = mode {