diff --git a/config/keys_arranger.edn b/config/keys_arranger.edn index 2ab14fb8..4f52a767 100644 --- a/config/keys_arranger.edn +++ b/config/keys_arranger.edn @@ -6,7 +6,7 @@ (@shift-O output add) (@shift-S scene add) (@shift-T track add) -(@shift-Z device picker) +(@shift-D device picker) (@up select :select-scene-prev) (@down select :select-scene-next) diff --git a/config/keys_device_add.edn b/config/keys_device_add.edn index 0b3e1f7d..139cf84e 100644 --- a/config/keys_device_add.edn +++ b/config/keys_device_add.edn @@ -1,4 +1,4 @@ -(@esc device select-cancel) +(@esc device cancel) (@up device pick :device-kind-prev) (@down device pick :device-kind-next) (@enter device add :device-kind) diff --git a/config/keys_global.edn b/config/keys_global.edn index bcb16252..8a1e746c 100644 --- a/config/keys_global.edn +++ b/config/keys_global.edn @@ -1,5 +1,9 @@ -(@esc toggle-menu) -(@f1 toggle-help) +(@esc toggle-dialog :dialog-menu) +(@f1 toggle-dialog :dialog-help) +(@f6 toggle-dialog :dialog-save) +(@f8 toggle-dialog :dialog-options) +(@f9 toggle-dialog :dialog-load) +(@f10 toggle-dialog :dialog-quit) (@u undo 1) (@shift-u redo 1) diff --git a/config/keys_groovebox.edn b/config/keys_groovebox.edn index 62608d87..4aa17d4a 100644 --- a/config/keys_groovebox.edn +++ b/config/keys_groovebox.edn @@ -1 +1,3 @@ -(@r sampler record/toggle :sample) +(@r sampler record/toggle :sample) +(@tab focus-next) +(@shift-tab focus-prev) diff --git a/crates/app/src/api.rs b/crates/app/src/api.rs index 3b2acbb6..8e2e26fb 100644 --- a/crates/app/src/api.rs +++ b/crates/app/src/api.rs @@ -57,6 +57,21 @@ handle!(TuiIn: |self: App, input|Ok(if let Some(command) = self.config.keys.comm fn focus_pool_length (&self) -> bool { matches!(self.pool.as_ref().map(|p|p.mode.as_ref()).flatten(), Some(PoolMode::Length(..))) } + fn dialog_help (&self) -> Dialog { + Dialog::Help + } + fn dialog_menu (&self) -> Dialog { + Dialog::Menu + } + fn dialog_save (&self) -> Dialog { + Dialog::Save + } + fn dialog_load (&self) -> Dialog { + Dialog::Load + } + fn dialog_options (&self) -> Dialog { + Dialog::Options + } fn editor_pitch (&self) -> Option { Some((self.editor().map(|e|e.get_note_pos()).unwrap() as u8).into()) } @@ -203,15 +218,11 @@ handle!(TuiIn: |self: App, input|Ok(if let Some(command) = self.config.keys.comm } #[tengri_proc::command(App)] impl AppCommand { - fn toggle_help (app: &mut App) -> Perhaps { - app.toggle_dialog(Some(Dialog::Help)); + fn toggle_dialog (app: &mut App, dialog: Dialog) -> Perhaps { + app.toggle_dialog(Some(dialog)); Ok(None) } - fn toggle_menu (app: &mut App) -> Perhaps { - app.toggle_dialog(Some(Dialog::Menu)); - Ok(None) - } - fn toggle_edit (app: &mut App, value: bool) -> Perhaps { + fn toggle_editor (app: &mut App, value: bool) -> Perhaps { app.toggle_editor(Some(value)); Ok(None) } @@ -346,6 +357,10 @@ impl<'state> Context<'state, SamplerCommand> for App { } #[tengri_proc::command(App)] impl DeviceCommand { + fn cancel (app: &mut App) -> Perhaps { + app.dialog = None; + Ok(None) + } fn picker (app: &mut App) -> Perhaps { app.device_picker_show(); Ok(None) diff --git a/crates/app/src/model/dialog.rs b/crates/app/src/model/dialog.rs index 5b0313dd..c2149659 100644 --- a/crates/app/src/model/dialog.rs +++ b/crates/app/src/model/dialog.rs @@ -19,7 +19,10 @@ pub enum Dialog { Help, Menu, Device(usize), - Message(Message) + Message(Message), + Save, + Load, + Options, } /// Various possible messages diff --git a/crates/app/src/view.rs b/crates/app/src/view.rs index c6b55c84..43cacb7b 100644 --- a/crates/app/src/view.rs +++ b/crates/app/src/view.rs @@ -59,6 +59,9 @@ impl App { .enclose(self.dialog.as_ref().map(|dialog|match dialog { Dialog::Menu => self.view_dialog_menu().boxed(), Dialog::Help => self.view_dialog_help().boxed(), + Dialog::Save => self.view_dialog_save().boxed(), + Dialog::Load => self.view_dialog_load().boxed(), + Dialog::Options => self.view_dialog_options().boxed(), Dialog::Device(index) => self.view_dialog_device(*index).boxed(), Dialog::Message(message) => self.view_dialog_message(message).boxed(), })) @@ -115,6 +118,18 @@ impl App { Bsp::s(message, Bsp::s("", "[ OK ]")) } + fn view_dialog_save <'a> (&'a self) -> impl Content + use<'a> { + "WIP: SAVE" + } + + fn view_dialog_load <'a> (&'a self) -> impl Content + use<'a> { + "WIP: LOAD" + } + + fn view_dialog_options <'a> (&'a self) -> impl Content + use<'a> { + "WIP: OPTIONS" + } + /// Spacing between tracks. pub(crate) const TRACK_SPACING: usize = 0; @@ -289,8 +304,8 @@ impl<'a> ArrangerView<'a> { pub(crate) fn devices (&'a self) -> impl Content + 'a { let Self { width_side, width_mid, track_count, track_selected, is_editing, .. } = self; Tryptich::top(1) - .left(*width_side, button_3("z", "devices", format!("{}", 0), *is_editing)) - .right(*width_side, button_2("Z", "add device", *is_editing)) + .left(*width_side, button_3("d", "devices", format!("{}", 0), *is_editing)) + .right(*width_side, button_2("D", "add device", *is_editing)) .middle(*width_mid, per_track_top(*width_mid, ||self.tracks_with_sizes_scrolled(), move|index, track|{ let bg = if *track_selected == Some(index) {