summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClement Tsang <34804052+ClementTsang@users.noreply.github.com>2020-10-17 23:26:03 -0400
committerGitHub <noreply@github.com>2020-10-17 23:26:03 -0400
commit05b39d29ae4f3a3dd3f88c69ba3e29a1f9035c37 (patch)
tree73a2f401f68a8fbc714eddf63f5dfb1e3c62844d
parentb8606c41b9343173b9265c157726f15c3aaa9bbb (diff)
feature: Add simple indicator for when data updating is frozen (#269)
-rw-r--r--CHANGELOG.md2
-rw-r--r--src/app.rs1
-rw-r--r--src/canvas.rs34
-rw-r--r--src/canvas/screens/config_screen.rs25
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.
diff --git a/src/app.rs b/src/app.rs
index 01899c00..2f63853f 100644
--- a/src/app.rs
+++ b/src/app.rs
@@ -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);
- // }
}
}