use crate::*; handle!(Arranger |self, e| { match self.modal.as_mut() { Some(modal) => { let result = modal.handle(e)?; if modal.exited() { self.modal = None; } Ok(result) }, None => handle_keymap(self, e, KEYMAP_ARRANGER) } }); /// Key bindings for arranger section. pub const KEYMAP_ARRANGER: &'static [KeyBinding] = keymap!(Arranger { [Char('`'), NONE, "mode_switch", "switch the display mode", |arranger: &mut Arranger| { arranger.mode.to_next(); Ok(true) }], [Up, NONE, "cursor_up", "move cursor up", |arranger: &mut Arranger| { match arranger.mode { ArrangerViewMode::Horizontal => arranger.track_prev(), _ => arranger.scene_prev(), }; arranger.show_phrase()?; Ok(true) }], [Down, NONE, "cursor_down", "move cursor down", |arranger: &mut Arranger| { match arranger.mode { ArrangerViewMode::Horizontal => arranger.track_next(), _ => arranger.scene_next(), }; arranger.show_phrase()?; Ok(true) }], [Left, NONE, "cursor_left", "move cursor left", |arranger: &mut Arranger| { match arranger.mode { ArrangerViewMode::Horizontal => arranger.scene_prev(), _ => arranger.track_prev(), }; arranger.show_phrase()?; Ok(true) }], [Right, NONE, "cursor_right", "move cursor right", |arranger: &mut Arranger| { match arranger.mode { ArrangerViewMode::Horizontal => arranger.scene_next(), _ => arranger.track_next(), }; arranger.show_phrase()?; Ok(true) }], [Char('.'), NONE, "increment", "set next clip at cursor", |arranger: &mut Arranger| { arranger.phrase_next(); Ok(true) }], [Char(','), NONE, "decrement", "set previous clip at cursor", |arranger: &mut Arranger| { arranger.phrase_prev(); Ok(true) }], [Enter, NONE, "activate", "activate item at cursor", |arranger: &mut Arranger| { arranger.activate(); Ok(true) }], [Char('a'), CONTROL, "scene_add", "add a new scene", |arranger: &mut Arranger| { arranger.scene_add(None)?; Ok(true) }], [Char('t'), CONTROL, "track_add", "add a new track", |arranger: &mut Arranger| { arranger.track_add(None)?; Ok(true) }], [Char('n'), NONE, "rename", "rename item at cursor", |arranger: &mut Arranger| { arranger.rename_selected(); Ok(true) }], [Char('l'), NONE, "length", "set length of item at cursor", |arranger: &mut Arranger| { todo!(); Ok(true) }], [Char('c'), NONE, "color", "set color of item at cursor", |arranger: &mut Arranger| { todo!(); Ok(true) }] });