diff options
author | Rupert Rutledge <eosis2 [at] gmail.com> | 2020-05-09 15:48:11 +0100 |
---|---|---|
committer | Rupert Rutledge <eosis2 [at] gmail.com> | 2020-05-09 15:48:11 +0100 |
commit | a177280040ff6b93ed7660054f456f614d825a07 (patch) | |
tree | 004d3668f354506de6a2b93f3d50cd8ee641a19e /src | |
parent | 598239a3bcfee96545bc5364a4141f9131fada2a (diff) |
Split the header row into 3 columns
We now have the bandwidth data, paused status and duration in separate
columns.
Diffstat (limited to 'src')
-rw-r--r-- | src/display/components/layout.rs | 1 | ||||
-rw-r--r-- | src/display/components/total_bandwidth.rs | 45 |
2 files changed, 36 insertions, 10 deletions
diff --git a/src/display/components/layout.rs b/src/display/components/layout.rs index 6c9812d..d3edb81 100644 --- a/src/display/components/layout.rs +++ b/src/display/components/layout.rs @@ -99,6 +99,7 @@ impl<'a> Layout<'a> { self.build_three_children_layout(rect) } } + pub fn render(&self, frame: &mut Frame<impl Backend>, rect: Rect) { let (top, app, bottom) = top_app_and_bottom_split(rect); let layout_slots = self.build_layout(app); diff --git a/src/display/components/total_bandwidth.rs b/src/display/components/total_bandwidth.rs index dbc2e78..3da80cd 100644 --- a/src/display/components/total_bandwidth.rs +++ b/src/display/components/total_bandwidth.rs @@ -5,6 +5,7 @@ use ::tui::terminal::Frame; use ::tui::widgets::{Paragraph, Text, Widget}; use crate::display::{DisplayBandwidth, UIState}; +use tui::layout::{Constraint, Direction}; pub struct HeaderDetails<'a> { pub state: &'a UIState, @@ -14,23 +15,38 @@ pub struct HeaderDetails<'a> { impl<'a> HeaderDetails<'a> { pub fn render(&self, frame: &mut Frame<impl Backend>, rect: Rect) { + let parts = ::tui::layout::Layout::default() + .direction(Direction::Horizontal) + .margin(0) + .constraints( + [ + Constraint::Percentage(33), + Constraint::Percentage(33), + Constraint::Percentage(33), + ] + .as_ref(), + ) + .split(rect); + let color = if self.paused { Color::Yellow } else { Color::Green }; - if self.state.cumulative_mode { self.render_elapsed_time(frame, rect, &color) }; - self.render_bandwidth(frame, rect, &color); + + if self.state.cumulative_mode { + self.render_elapsed_time(frame, parts[2], &color) + }; + self.render_paused(frame, parts[1], &color); + self.render_bandwidth(frame, parts[0], &color); } fn render_bandwidth(&self, frame: &mut Frame<impl Backend>, rect: Rect, color: &Color) { let c_mode = self.state.cumulative_mode; let title_text = { - let paused_str = if self.paused { "[PAUSED]" } else { "" }; - [Text::styled( format!( - " Total Up / Down: {} / {} {}", + " Total Up / Down: {} / {}", DisplayBandwidth { bandwidth: self.state.total_bytes_uploaded as f64, as_rate: !c_mode, @@ -38,8 +54,7 @@ impl<'a> HeaderDetails<'a> { DisplayBandwidth { bandwidth: self.state.total_bytes_downloaded as f64, as_rate: !c_mode, - }, - paused_str + } ), Style::default().fg(*color).modifier(Modifier::BOLD), )] @@ -58,12 +73,22 @@ impl<'a> HeaderDetails<'a> { (self.elapsed_time.as_secs() % 3600) / 60, self.elapsed_time.as_secs() % 60 ), - Style::default() - .fg(*color) - .modifier(Modifier::BOLD), + Style::default().fg(*color).modifier(Modifier::BOLD), )]; Paragraph::new(elapsed_time_text.iter()) .alignment(Alignment::Right) .render(frame, rect); } + + fn render_paused(&self, frame: &mut Frame<impl Backend>, rect: Rect, color: &Color) { + if self.paused { + let paused_text = [Text::styled( + format!("PAUSED"), + Style::default().fg(*color).modifier(Modifier::BOLD), + )]; + Paragraph::new(paused_text.iter()) + .alignment(Alignment::Center) + .render(frame, rect); + } + } } |