refactor: add back original behaviour for closing search/sort in proc

This commit is contained in:
ClementTsang 2021-09-08 22:48:06 -04:00
parent 955840b412
commit 587987a2a5

View File

@ -8,7 +8,7 @@ use unicode_segmentation::GraphemeCursor;
use tui::{ use tui::{
backend::Backend, backend::Backend,
layout::{Constraint, Direction, Layout, Rect}, layout::{Constraint, Direction, Layout, Rect},
widgets::{Block, Borders, TableState}, widgets::{Borders, TableState},
Frame, Frame,
}; };
@ -18,6 +18,7 @@ use crate::{
event::{MultiKey, MultiKeyResult, ReturnSignal, WidgetEventResult}, event::{MultiKey, MultiKeyResult, ReturnSignal, WidgetEventResult},
query::*, query::*,
text_table::DesiredColumnWidth, text_table::DesiredColumnWidth,
widgets::tui_stuff::BlockBuilder,
DataCollection, DataCollection,
}, },
canvas::Painter, canvas::Painter,
@ -961,6 +962,20 @@ impl ProcessManager {
WidgetEventResult::Signal(ReturnSignal::Update) WidgetEventResult::Signal(ReturnSignal::Update)
} }
fn hide_sort(&mut self) {
self.show_sort = false;
if let ProcessManagerSelection::Sort = self.selected {
self.selected = ProcessManagerSelection::Processes;
}
}
fn hide_search(&mut self) {
self.show_search = false;
if let ProcessManagerSelection::Search = self.selected {
self.selected = ProcessManagerSelection::Processes;
}
}
} }
impl Component for ProcessManager { impl Component for ProcessManager {
@ -974,19 +989,27 @@ impl Component for ProcessManager {
fn handle_key_event(&mut self, event: KeyEvent) -> WidgetEventResult { fn handle_key_event(&mut self, event: KeyEvent) -> WidgetEventResult {
// "Global" handling: // "Global" handling:
if let KeyCode::Esc = event.code { if let KeyCode::Esc = event.code {
if self.show_sort { match self.selected {
self.show_sort = false; ProcessManagerSelection::Processes => {
if let ProcessManagerSelection::Sort = self.selected { if self.show_sort {
self.selected = ProcessManagerSelection::Processes; self.hide_sort();
return WidgetEventResult::Redraw;
} else if self.show_search {
self.hide_search();
return WidgetEventResult::Redraw;
}
} }
return WidgetEventResult::Redraw; ProcessManagerSelection::Sort if self.show_sort => {
} else if self.show_search { self.hide_sort();
self.show_search = false; return WidgetEventResult::Redraw;
if let ProcessManagerSelection::Search = self.selected {
self.selected = ProcessManagerSelection::Processes;
} }
return WidgetEventResult::Redraw; ProcessManagerSelection::Search if self.show_search => {
self.hide_search();
return WidgetEventResult::Redraw;
}
_ => {}
} }
} }
@ -1159,28 +1182,30 @@ impl Widget for ProcessManager {
expanded: bool, expanded: bool,
) { ) {
let area = if self.show_search { let area = if self.show_search {
const SEARCH_CONSTRAINTS: [Constraint; 2] = [Constraint::Min(0), Constraint::Length(4)]; let search_constraints: [Constraint; 2] = [
Constraint::Min(0),
if self.block_border.contains(Borders::TOP) {
Constraint::Length(4)
} else {
Constraint::Length(2)
},
];
const INTERNAL_SEARCH_CONSTRAINTS: [Constraint; 2] = [Constraint::Length(1); 2]; const INTERNAL_SEARCH_CONSTRAINTS: [Constraint; 2] = [Constraint::Length(1); 2];
let vertical_split_area = Layout::default() let vertical_split_area = Layout::default()
.margin(0) .margin(0)
.direction(Direction::Vertical) .direction(Direction::Vertical)
.constraints(SEARCH_CONSTRAINTS) .constraints(search_constraints)
.split(area); .split(area);
let is_search_selected = if selected { let is_search_selected =
matches!(self.selected, ProcessManagerSelection::Search) selected && matches!(self.selected, ProcessManagerSelection::Search);
} else {
false
};
let search_block = Block::default() // TODO: [Redesign] this currently uses a separate box - maybe fold this into the main box?
.border_style(if is_search_selected { let search_block = BlockBuilder::new("")
painter.colours.highlighted_border_style .selected(is_search_selected)
} else { .hide_title(true)
painter.colours.border_style .build(painter, vertical_split_area[1]);
})
.borders(Borders::ALL);
self.search_block_bounds = vertical_split_area[1]; self.search_block_bounds = vertical_split_area[1];