diff --git a/config/config_arranger.edn b/config/config_arranger.edn index 3bc4b92a..8ff9c181 100644 --- a/config/config_arranger.edn +++ b/config/config_arranger.edn @@ -11,6 +11,7 @@ :arranger)))))) (keys + (layer-if :mode-message "./keys_message.edn") (layer-if :mode-device-add "./keys_device_add.edn") (layer-if :mode-pool-import "./keys_pool_file.edn") (layer-if :mode-pool-export "./keys_pool_file.edn") diff --git a/config/keys_message.edn b/config/keys_message.edn new file mode 100644 index 00000000..90ae7960 --- /dev/null +++ b/config/keys_message.edn @@ -0,0 +1,2 @@ +(@esc message dismiss) +(@enter message dismiss) diff --git a/crates/app/src/api.rs b/crates/app/src/api.rs index a45af91d..995e942d 100644 --- a/crates/app/src/api.rs +++ b/crates/app/src/api.rs @@ -20,6 +20,7 @@ handle!(TuiIn: |self: Tek, input|Ok(if let Some(command) = self.config.keys.comm expose!([self: Tek] ([bool] (":mode-editor" self.is_editing()) + (":mode-message" matches!(self.modal, Some(Modal::Message(..)))) (":mode-device-add" matches!(self.modal, Some(Modal::Device(..)))) (":mode-clip" !self.is_editing() && self.selected.is_clip()) (":mode-track" !self.is_editing() && self.selected.is_track()) @@ -130,13 +131,14 @@ impose!([app: Tek] ("enqueue" [c: Arc>] Some(Self::Enqueue(c))) ("launch" [] Some(Self::Launch)) ("select" [t: Selection] Some(t.map(Self::Select).expect("no selection"))) - ("clock" [,..a] ns!(ClockCommand, app.clock(), a, Self::Clock)) - ("scene" [,..a] ns!(SceneCommand, app, a, Self::Scene)) - ("track" [,..a] ns!(TrackCommand, app, a, Self::Track)) - ("input" [,..a] ns!(InputCommand, app, a, Self::Input)) - ("output" [,..a] ns!(OutputCommand, app, a, Self::Output)) - ("clip" [,..a] ns!(ClipCommand, app, a, Self::Clip)) - ("device" [,..a] ns!(DeviceCommand, app, a, Self::Device)) + ("clock" [,..a] ns!(ClockCommand, app.clock(), a, Self::Clock)) + ("scene" [,..a] ns!(SceneCommand, app, a, Self::Scene)) + ("track" [,..a] ns!(TrackCommand, app, a, Self::Track)) + ("input" [,..a] ns!(InputCommand, app, a, Self::Input)) + ("output" [,..a] ns!(OutputCommand, app, a, Self::Output)) + ("clip" [,..a] ns!(ClipCommand, app, a, Self::Clip)) + ("device" [,..a] ns!(DeviceCommand, app, a, Self::Device)) + ("message" [,..a] ns!(MessageCommand, app, a, Self::Message)) ("pool" [,..a] app.pool.as_ref().map(|p|ns!(PoolCommand, p, a, Self::Pool)).flatten()) ("editor" [,..a] app.editor().map(|e|ns!(MidiEditCommand, e, a, Self::Editor)).flatten()) ("sampler" [,..a] app.sampler().map(|s|ns!(SamplerCommand, s, a, Self::Sampler)).flatten()) @@ -166,6 +168,9 @@ impose!([app: Tek] ("pick" [index: usize] Some(Self::Pick(index.unwrap()))) ("add" [index: usize] Some(Self::Add(index.unwrap())))) + (MessageCommand: + ("dismiss" [] Some(Self::Dismiss))) + (SceneCommand: ("add" [] Some(Self::Add)) ("delete" [a: Option] Some(Self::Del(a.flatten().unwrap()))) @@ -198,6 +203,7 @@ defcom!([self, app: Tek] (Clip [cmd: ClipCommand] cmd.delegate(app, Self::Clip)?) (Clock [cmd: ClockCommand] cmd.delegate(app, Self::Clock)?) (Device [cmd: DeviceCommand] cmd.delegate(app, Self::Device)?) + (Message [cmd: MessageCommand] cmd.delegate(app, Self::Message)?) (Editor [cmd: MidiEditCommand] delegate_to_editor(app, cmd)?) (Pool [cmd: PoolCommand] delegate_to_pool(app, cmd)?) (ToggleHelp [] cmd!(app.toggle_modal(Some(Modal::Help)))) @@ -222,6 +228,9 @@ defcom!([self, app: Tek] (Pick [i: usize] cmd!(app.device_pick(i))) (Add [i: usize] cmd!(app.device_add(i)))) + (MessageCommand + (Dismiss [] cmd!(app.message_dismiss()))) + (TrackCommand (TogglePlay [] Some(Self::TogglePlay)) (ToggleSolo [] Some(Self::ToggleSolo)) diff --git a/crates/app/src/model.rs b/crates/app/src/model.rs index 46331446..639cc627 100644 --- a/crates/app/src/model.rs +++ b/crates/app/src/model.rs @@ -429,6 +429,10 @@ impl Tek { ] } + pub(crate) fn message_dismiss (&mut self) { + self.modal = None; + } + } has_size!(|self: Tek|&self.size); @@ -471,7 +475,7 @@ pub enum Message { } content!(TuiOut: |self: Message| match self { - Self::FailedToAddDevice => "Failed to add device" + Self::FailedToAddDevice => "Failed to add device." }); /// Represents the current user selection in the arranger diff --git a/crates/app/src/view.rs b/crates/app/src/view.rs index 3fdd6ffd..ed73ae06 100644 --- a/crates/app/src/view.rs +++ b/crates/app/src/view.rs @@ -122,7 +122,7 @@ impl Tek { } fn view_modal_message <'a> (&'a self, message: &'a Message) -> impl Content + use<'a> { - Bsp::s(message, "[ OK ]") + Bsp::s(message, Bsp::s("", "[ OK ]")) } /// Spacing between tracks.