use super::App;
impl App {
pub fn commit_count(&self) -> usize {
self.graph_log.commit_count()
}
pub fn line_count(&self) -> usize {
self.graph_log.lines.len()
}
pub fn selected_line_index(&self) -> Option<usize> {
self.graph_log.line_index_for_selection(self.selected)
}
pub fn selected_change_id(&self) -> Option<&str> {
self.graph_log.change_id_for_selection(self.selected)
}
pub fn ensure_selected_visible(&mut self, viewport_height: usize) {
if let Some(line_idx) = self.selected_line_index() {
if line_idx < self.scroll_offset {
self.scroll_offset = line_idx;
}
else if line_idx >= self.scroll_offset + viewport_height {
self.scroll_offset = line_idx.saturating_sub(viewport_height - 1);
}
}
}
pub fn select_next(&mut self) {
let count = self.commit_count();
if count > 0 && self.selected < count - 1 {
self.selected += 1;
}
}
pub fn select_previous(&mut self) {
if self.selected > 0 {
self.selected -= 1;
}
}
pub fn select_first(&mut self) {
self.selected = 0;
}
pub fn select_last(&mut self) {
let count = self.commit_count();
if count > 0 {
self.selected = count - 1;
}
}
pub fn page_down(&mut self, page_size: usize) {
let count = self.commit_count();
if count == 0 {
return;
}
let new_selected = self.selected.saturating_add(page_size);
self.selected = new_selected.min(count - 1);
}
pub fn page_up(&mut self, page_size: usize) {
self.selected = self.selected.saturating_sub(page_size);
}
}