92 lines
5.0 KiB
Rust
92 lines
5.0 KiB
Rust
use crate::page::Page;
|
|
|
|
pub fn bindings_for(page: Page) -> Vec<(&'static str, &'static str, &'static str)> {
|
|
let mut bindings = Vec::new();
|
|
|
|
// Global bindings
|
|
bindings.push(("Ctrl+←→↑↓", "Navigate", "Switch between views"));
|
|
bindings.push(("q", "Quit", "Quit application"));
|
|
bindings.push(("?", "Keybindings", "Show this help"));
|
|
|
|
// Page-specific bindings
|
|
match page {
|
|
Page::Main => {
|
|
bindings.push(("Space", "Play/Stop", "Toggle playback"));
|
|
bindings.push(("←→↑↓", "Navigate", "Move cursor between steps"));
|
|
bindings.push(("Shift+←→↑↓", "Select", "Extend selection"));
|
|
bindings.push(("Esc", "Clear", "Clear selection"));
|
|
bindings.push(("Enter", "Edit", "Open step editor"));
|
|
bindings.push(("t", "Toggle", "Toggle selected steps"));
|
|
bindings.push(("p", "Preview", "Preview step script"));
|
|
bindings.push(("Tab", "Samples", "Toggle sample browser"));
|
|
bindings.push(("Ctrl+C", "Copy", "Copy selected steps"));
|
|
bindings.push(("Ctrl+V", "Paste", "Paste steps"));
|
|
bindings.push(("Ctrl+B", "Link", "Paste as linked steps"));
|
|
bindings.push(("Ctrl+D", "Duplicate", "Duplicate selection"));
|
|
bindings.push(("Ctrl+H", "Harden", "Convert links to copies"));
|
|
bindings.push(("Del", "Delete", "Delete step(s)"));
|
|
bindings.push(("< >", "Length", "Decrease/increase pattern length"));
|
|
bindings.push(("[ ]", "Speed", "Decrease/increase pattern speed"));
|
|
bindings.push(("+ -", "Tempo", "Increase/decrease tempo"));
|
|
bindings.push(("T", "Set tempo", "Open tempo input"));
|
|
bindings.push(("L", "Set length", "Open length input"));
|
|
bindings.push(("S", "Set speed", "Open speed input"));
|
|
bindings.push(("s", "Save", "Save project"));
|
|
bindings.push(("l", "Load", "Load project"));
|
|
bindings.push(("f", "Fill", "Toggle fill mode (hold)"));
|
|
}
|
|
Page::Patterns => {
|
|
bindings.push(("←→↑↓", "Navigate", "Move between banks/patterns"));
|
|
bindings.push(("Enter", "Select", "Select pattern for editing"));
|
|
bindings.push(("Space", "Play", "Toggle pattern playback"));
|
|
bindings.push(("Esc", "Back", "Clear staged or go back"));
|
|
bindings.push(("c", "Commit", "Commit staged changes"));
|
|
bindings.push(("r", "Rename", "Rename bank/pattern"));
|
|
bindings.push(("e", "Properties", "Edit pattern properties"));
|
|
bindings.push(("Ctrl+C", "Copy", "Copy bank/pattern"));
|
|
bindings.push(("Ctrl+V", "Paste", "Paste bank/pattern"));
|
|
bindings.push(("Del", "Reset", "Reset bank/pattern"));
|
|
}
|
|
Page::Engine => {
|
|
bindings.push(("Tab", "Section", "Next section"));
|
|
bindings.push(("Shift+Tab", "Section", "Previous section"));
|
|
bindings.push(("←→", "Switch", "Switch device type or adjust setting"));
|
|
bindings.push(("↑↓", "Navigate", "Navigate list items"));
|
|
bindings.push(("PgUp/Dn", "Page", "Page through device list"));
|
|
bindings.push(("Enter", "Select", "Select device"));
|
|
bindings.push(("R", "Restart", "Restart audio engine"));
|
|
bindings.push(("A", "Add path", "Add sample path"));
|
|
bindings.push(("D", "Refresh/Del", "Refresh devices or delete path"));
|
|
bindings.push(("h", "Hush", "Stop all sounds gracefully"));
|
|
bindings.push(("p", "Panic", "Stop all sounds immediately"));
|
|
bindings.push(("r", "Reset", "Reset peak voice counter"));
|
|
bindings.push(("t", "Test", "Play test tone"));
|
|
}
|
|
Page::Options => {
|
|
bindings.push(("Tab", "Next", "Move to next option"));
|
|
bindings.push(("Shift+Tab", "Previous", "Move to previous option"));
|
|
bindings.push(("↑↓", "Navigate", "Navigate options"));
|
|
bindings.push(("←→", "Toggle", "Toggle or adjust option"));
|
|
bindings.push(("Space", "Play/Stop", "Toggle playback"));
|
|
}
|
|
Page::Help => {
|
|
bindings.push(("↑↓ j/k", "Scroll", "Scroll content"));
|
|
bindings.push(("Tab", "Topic", "Next topic"));
|
|
bindings.push(("Shift+Tab", "Topic", "Previous topic"));
|
|
bindings.push(("PgUp/Dn", "Page", "Page scroll"));
|
|
bindings.push(("/", "Search", "Activate search"));
|
|
bindings.push(("Esc", "Clear", "Clear search"));
|
|
}
|
|
Page::Dict => {
|
|
bindings.push(("Tab", "Focus", "Toggle category/words focus"));
|
|
bindings.push(("↑↓ j/k", "Navigate", "Navigate items"));
|
|
bindings.push(("PgUp/Dn", "Page", "Page scroll"));
|
|
bindings.push(("/", "Search", "Activate search"));
|
|
bindings.push(("Ctrl+F", "Search", "Activate search"));
|
|
bindings.push(("Esc", "Clear", "Clear search"));
|
|
}
|
|
}
|
|
|
|
bindings
|
|
}
|