mirror of
https://github.com/ClementTsang/bottom.git
synced 2025-07-23 13:45:12 +02:00
refactor: add back original behaviour for closing search/sort in proc
This commit is contained in:
parent
955840b412
commit
587987a2a5
@ -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];
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user