70 lines
1.7 KiB
Rust
70 lines
1.7 KiB
Rust
use crate::model::docs;
|
|
use crate::state::{HelpFocus, UiState};
|
|
|
|
pub fn toggle_focus(ui: &mut UiState) {
|
|
ui.help_focus = match ui.help_focus {
|
|
HelpFocus::Topics => HelpFocus::Content,
|
|
HelpFocus::Content => HelpFocus::Topics,
|
|
};
|
|
}
|
|
|
|
pub fn select_topic(ui: &mut UiState, index: usize) {
|
|
if index < docs::topic_count() {
|
|
ui.help_topic = index;
|
|
}
|
|
}
|
|
|
|
pub fn next_topic(ui: &mut UiState, n: usize) {
|
|
let count = docs::topic_count();
|
|
ui.help_topic = (ui.help_topic + n) % count;
|
|
ui.help_focused_block = None;
|
|
}
|
|
|
|
pub fn prev_topic(ui: &mut UiState, n: usize) {
|
|
let count = docs::topic_count();
|
|
ui.help_topic = (ui.help_topic + count - (n % count)) % count;
|
|
ui.help_focused_block = None;
|
|
}
|
|
|
|
pub fn scroll_down(ui: &mut UiState, n: usize) {
|
|
let s = ui.help_scroll_mut();
|
|
*s = s.saturating_add(n);
|
|
}
|
|
|
|
pub fn scroll_up(ui: &mut UiState, n: usize) {
|
|
let s = ui.help_scroll_mut();
|
|
*s = s.saturating_sub(n);
|
|
}
|
|
|
|
pub fn activate_search(ui: &mut UiState) {
|
|
ui.help_search_active = true;
|
|
}
|
|
|
|
pub fn clear_search(ui: &mut UiState) {
|
|
ui.help_search_query.clear();
|
|
ui.help_search_active = false;
|
|
}
|
|
|
|
pub fn search_input(ui: &mut UiState, c: char) {
|
|
ui.help_search_query.push(c);
|
|
if let Some((topic, line)) = docs::find_match(&ui.help_search_query) {
|
|
ui.help_topic = topic;
|
|
ui.help_scrolls[topic] = line;
|
|
}
|
|
}
|
|
|
|
pub fn search_backspace(ui: &mut UiState) {
|
|
ui.help_search_query.pop();
|
|
if ui.help_search_query.is_empty() {
|
|
return;
|
|
}
|
|
if let Some((topic, line)) = docs::find_match(&ui.help_search_query) {
|
|
ui.help_topic = topic;
|
|
ui.help_scrolls[topic] = line;
|
|
}
|
|
}
|
|
|
|
pub fn search_confirm(ui: &mut UiState) {
|
|
ui.help_search_active = false;
|
|
}
|