feature: Add simple indicator for when data updating is frozen (#269)

This commit is contained in:
Clement Tsang 2020-10-17 23:26:03 -04:00 committed by GitHub
parent b8606c41b9
commit 05b39d29ae
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 35 additions and 27 deletions

View File

@ -19,6 +19,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- [#223](https://github.com/ClementTsang/bottom/pull/223): Add tree mode for processes.
- [#269](https://github.com/ClementTsang/bottom/pull/269): Add simple indicator for when data updating is frozen.
### Changes
- [#213](https://github.com/ClementTsang/bottom/pull/213), [#214](https://github.com/ClementTsang/bottom/pull/214): Updated help descriptions, added auto-complete generation.

View File

@ -1229,7 +1229,6 @@ impl App {
'k' => self.on_up_key(),
'j' => self.on_down_key(),
'f' => {
// FIXME: [FROZEN] Add an indicator if frozen!
self.is_frozen = !self.is_frozen;
if self.is_frozen {
self.data_collection.set_frozen_time();

View File

@ -6,6 +6,7 @@ use tui::{
backend::Backend,
layout::{Constraint, Direction, Layout, Rect},
text::{Span, Spans},
widgets::Paragraph,
Frame, Terminal,
};
@ -315,13 +316,33 @@ impl Painter {
// FIXME: [CONFIG] write this, should call painter init and any changed colour functions...
pub fn update_painter_colours(&mut self) {}
fn draw_frozen_indicator<B: Backend>(&self, f: &mut Frame<'_, B>, draw_loc: Rect) {
f.render_widget(
Paragraph::new(Span::styled(
"Frozen, press 'f' to unfreeze",
self.colours.currently_selected_text_style,
)),
Layout::default()
.horizontal_margin(1)
.constraints([Constraint::Length(1)])
.split(draw_loc)[0],
)
}
pub fn draw_data<B: Backend>(
&mut self, terminal: &mut Terminal<B>, app_state: &mut app::App,
) -> error::Result<()> {
use BottomWidgetType::*;
terminal.draw(|mut f| {
let terminal_size = f.size();
let (terminal_size, frozen_draw_loc) = if app_state.is_frozen {
let split_loc = Layout::default()
.constraints([Constraint::Min(0), Constraint::Length(1)])
.split(f.size());
(split_loc[0], Some(split_loc[1]))
} else {
(f.size(), None)
};
let terminal_height = terminal_size.height;
let terminal_width = terminal_size.width;
@ -455,6 +476,10 @@ impl Painter {
app_state.delete_dialog_state.is_showing_dd =
self.draw_dd_dialog(&mut f, dd_text, app_state, middle_dialog_chunk[1]);
} else if app_state.is_expanded {
if let Some(frozen_draw_loc) = frozen_draw_loc {
self.draw_frozen_indicator(&mut f, frozen_draw_loc);
}
let rect = Layout::default()
.margin(0)
.constraints([Constraint::Percentage(100)])
@ -528,6 +553,9 @@ impl Painter {
} else if app_state.app_config_fields.use_basic_mode {
// Basic mode. This basically removes all graphs but otherwise
// the same info.
if let Some(frozen_draw_loc) = frozen_draw_loc {
self.draw_frozen_indicator(&mut f, frozen_draw_loc);
}
let vertical_chunks = Layout::default()
.direction(Direction::Vertical)
@ -605,6 +633,10 @@ impl Painter {
}
} else {
// Draws using the passed in (or default) layout.
if let Some(frozen_draw_loc) = frozen_draw_loc {
self.draw_frozen_indicator(&mut f, frozen_draw_loc);
}
if self.derived_widget_draw_locs.is_empty() || app_state.is_force_redraw {
let row_draw_locs = Layout::default()
.margin(0)

View File

@ -29,30 +29,5 @@ impl ConfigScreen for Painter {
.border_style(self.colours.border_style);
f.render_widget(config_block, draw_loc);
// let margined_draw_locs = Layout::default()
// .margin(2)
// .direction(Direction::Horizontal)
// .constraints(
// [
// Constraint::Percentage(33),
// Constraint::Percentage(34),
// Constraint::Percentage(33),
// ]
// )
// .split(draw_loc)
// .into_iter()
// .map(|loc| {
// // Required to properly margin in *between* the rectangles.
// Layout::default()
// .horizontal_margin(1)
// .constraints([Constraint::Percentage(100)])
// .split(loc)[0]
// })
// .collect::<Vec<Rect>>();
// for dl in margined_draw_locs {
// f.render_widget(Block::default().borders(Borders::ALL), dl);
// }
}
}