diff options
author | Rupert Rutledge <eosis2 [at] gmail.com> | 2020-05-09 16:55:24 +0100 |
---|---|---|
committer | Rupert Rutledge <eosis2 [at] gmail.com> | 2020-05-09 16:55:24 +0100 |
commit | da17936d5c638f2d15004f475b64a417191c8f3c (patch) | |
tree | 1fc9cf01683b134f67cc3d3d4e5203ab30688704 | |
parent | a177280040ff6b93ed7660054f456f614d825a07 (diff) |
Split the header into different parts based on size of terminal
1, 2, or 3 sections will be used based on differing widths.
-rw-r--r-- | src/display/components/total_bandwidth.rs | 47 |
1 files changed, 30 insertions, 17 deletions
diff --git a/src/display/components/total_bandwidth.rs b/src/display/components/total_bandwidth.rs index 3da80cd..7c4bf44 100644 --- a/src/display/components/total_bandwidth.rs +++ b/src/display/components/total_bandwidth.rs @@ -15,18 +15,7 @@ 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 parts = self.header_parts(rect); let color = if self.paused { Color::Yellow @@ -34,11 +23,15 @@ impl<'a> HeaderDetails<'a> { Color::Green }; - 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); + if parts.get(0).is_some() { + self.render_bandwidth(frame, parts[0], &color); + } + if parts.get(1).is_some() { + self.render_paused(frame, parts[1], &color); + } + if parts.get(2).is_some() && self.state.cumulative_mode { + self.render_elapsed_time(frame, parts[2], &color); + } } fn render_bandwidth(&self, frame: &mut Frame<impl Backend>, rect: Rect, color: &Color) { @@ -91,4 +84,24 @@ impl<'a> HeaderDetails<'a> { .render(frame, rect); } } + + fn header_parts(&self, rect: Rect) -> Vec<Rect> { + let number = { + match rect.width { + 0..=62 => 1, + 63..=93 => 2, + _ => 3, + } + }; + + let constraints: Vec<Constraint> = (0..number) + .map(|_| Constraint::Percentage(100 / number)) + .collect(); + + ::tui::layout::Layout::default() + .direction(Direction::Horizontal) + .margin(0) + .constraints(constraints.as_ref()) + .split(rect) + } } |