diff options
author | Clement Tsang <34804052+ClementTsang@users.noreply.github.com> | 2020-10-17 23:26:03 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-17 23:26:03 -0400 |
commit | 05b39d29ae4f3a3dd3f88c69ba3e29a1f9035c37 (patch) | |
tree | 73a2f401f68a8fbc714eddf63f5dfb1e3c62844d | |
parent | b8606c41b9343173b9265c157726f15c3aaa9bbb (diff) |
feature: Add simple indicator for when data updating is frozen (#269)
-rw-r--r-- | CHANGELOG.md | 2 | ||||
-rw-r--r-- | src/app.rs | 1 | ||||
-rw-r--r-- | src/canvas.rs | 34 | ||||
-rw-r--r-- | src/canvas/screens/config_screen.rs | 25 |
4 files changed, 35 insertions, 27 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index f1e6d803..7f34b299 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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. @@ -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(); diff --git a/src/canvas.rs b/src/canvas.rs index a2c98e80..d85f2444 100644 --- a/src/canvas.rs +++ b/src/canvas.rs @@ -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) diff --git a/src/canvas/screens/config_screen.rs b/src/canvas/screens/config_screen.rs index 0bf82bb4..741a9fa6 100644 --- a/src/canvas/screens/config_screen.rs +++ b/src/canvas/screens/config_screen.rs @@ -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); - // } } } |