summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRupert Rutledge <eosis2 [at] gmail.com>2020-05-09 16:55:24 +0100
committerRupert Rutledge <eosis2 [at] gmail.com>2020-05-09 16:55:24 +0100
commitda17936d5c638f2d15004f475b64a417191c8f3c (patch)
tree1fc9cf01683b134f67cc3d3d4e5203ab30688704
parenta177280040ff6b93ed7660054f456f614d825a07 (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.rs47
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)
+ }
}