stub save/load/options

This commit is contained in:
🪞👃🪞 2025-05-12 20:58:38 +03:00
parent 6f6078e25a
commit 57102d7e6b
7 changed files with 54 additions and 15 deletions

View file

@ -6,7 +6,7 @@
(@shift-O output add) (@shift-O output add)
(@shift-S scene add) (@shift-S scene add)
(@shift-T track add) (@shift-T track add)
(@shift-Z device picker) (@shift-D device picker)
(@up select :select-scene-prev) (@up select :select-scene-prev)
(@down select :select-scene-next) (@down select :select-scene-next)

View file

@ -1,4 +1,4 @@
(@esc device select-cancel) (@esc device cancel)
(@up device pick :device-kind-prev) (@up device pick :device-kind-prev)
(@down device pick :device-kind-next) (@down device pick :device-kind-next)
(@enter device add :device-kind) (@enter device add :device-kind)

View file

@ -1,5 +1,9 @@
(@esc toggle-menu) (@esc toggle-dialog :dialog-menu)
(@f1 toggle-help) (@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) (@u undo 1)
(@shift-u redo 1) (@shift-u redo 1)

View file

@ -1 +1,3 @@
(@r sampler record/toggle :sample) (@r sampler record/toggle :sample)
(@tab focus-next)
(@shift-tab focus-prev)

View file

@ -57,6 +57,21 @@ handle!(TuiIn: |self: App, input|Ok(if let Some(command) = self.config.keys.comm
fn focus_pool_length (&self) -> bool { fn focus_pool_length (&self) -> bool {
matches!(self.pool.as_ref().map(|p|p.mode.as_ref()).flatten(), Some(PoolMode::Length(..))) 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<u7> { fn editor_pitch (&self) -> Option<u7> {
Some((self.editor().map(|e|e.get_note_pos()).unwrap() as u8).into()) 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 { #[tengri_proc::command(App)] impl AppCommand {
fn toggle_help (app: &mut App) -> Perhaps<Self> { fn toggle_dialog (app: &mut App, dialog: Dialog) -> Perhaps<Self> {
app.toggle_dialog(Some(Dialog::Help)); app.toggle_dialog(Some(dialog));
Ok(None) Ok(None)
} }
fn toggle_menu (app: &mut App) -> Perhaps<Self> { fn toggle_editor (app: &mut App, value: bool) -> Perhaps<Self> {
app.toggle_dialog(Some(Dialog::Menu));
Ok(None)
}
fn toggle_edit (app: &mut App, value: bool) -> Perhaps<Self> {
app.toggle_editor(Some(value)); app.toggle_editor(Some(value));
Ok(None) Ok(None)
} }
@ -346,6 +357,10 @@ impl<'state> Context<'state, SamplerCommand> for App {
} }
#[tengri_proc::command(App)] impl DeviceCommand { #[tengri_proc::command(App)] impl DeviceCommand {
fn cancel (app: &mut App) -> Perhaps<Self> {
app.dialog = None;
Ok(None)
}
fn picker (app: &mut App) -> Perhaps<Self> { fn picker (app: &mut App) -> Perhaps<Self> {
app.device_picker_show(); app.device_picker_show();
Ok(None) Ok(None)

View file

@ -19,7 +19,10 @@ pub enum Dialog {
Help, Help,
Menu, Menu,
Device(usize), Device(usize),
Message(Message) Message(Message),
Save,
Load,
Options,
} }
/// Various possible messages /// Various possible messages

View file

@ -59,6 +59,9 @@ impl App {
.enclose(self.dialog.as_ref().map(|dialog|match dialog { .enclose(self.dialog.as_ref().map(|dialog|match dialog {
Dialog::Menu => self.view_dialog_menu().boxed(), Dialog::Menu => self.view_dialog_menu().boxed(),
Dialog::Help => self.view_dialog_help().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::Device(index) => self.view_dialog_device(*index).boxed(),
Dialog::Message(message) => self.view_dialog_message(message).boxed(), Dialog::Message(message) => self.view_dialog_message(message).boxed(),
})) }))
@ -115,6 +118,18 @@ impl App {
Bsp::s(message, Bsp::s("", "[ OK ]")) Bsp::s(message, Bsp::s("", "[ OK ]"))
} }
fn view_dialog_save <'a> (&'a self) -> impl Content<TuiOut> + use<'a> {
"WIP: SAVE"
}
fn view_dialog_load <'a> (&'a self) -> impl Content<TuiOut> + use<'a> {
"WIP: LOAD"
}
fn view_dialog_options <'a> (&'a self) -> impl Content<TuiOut> + use<'a> {
"WIP: OPTIONS"
}
/// Spacing between tracks. /// Spacing between tracks.
pub(crate) const TRACK_SPACING: usize = 0; pub(crate) const TRACK_SPACING: usize = 0;
@ -289,8 +304,8 @@ impl<'a> ArrangerView<'a> {
pub(crate) fn devices (&'a self) -> impl Content<TuiOut> + 'a { pub(crate) fn devices (&'a self) -> impl Content<TuiOut> + 'a {
let Self { width_side, width_mid, track_count, track_selected, is_editing, .. } = self; let Self { width_side, width_mid, track_count, track_selected, is_editing, .. } = self;
Tryptich::top(1) Tryptich::top(1)
.left(*width_side, button_3("z", "devices", format!("{}", 0), *is_editing)) .left(*width_side, button_3("d", "devices", format!("{}", 0), *is_editing))
.right(*width_side, button_2("Z", "add device", *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(), .middle(*width_mid, per_track_top(*width_mid, ||self.tracks_with_sizes_scrolled(),
move|index, track|{ move|index, track|{
let bg = if *track_selected == Some(index) { let bg = if *track_selected == Some(index) {