From f3ebed618525b9b129d830b8229b908a4ba5de91 Mon Sep 17 00:00:00 2001 From: ClementTsang Date: Tue, 3 Mar 2020 00:48:07 -0500 Subject: [PATCH] Add table indicator to basic. --- src/app.rs | 22 ++++++++++++++----- src/canvas.rs | 61 ++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 75 insertions(+), 8 deletions(-) diff --git a/src/app.rs b/src/app.rs index db255463..c3b84c98 100644 --- a/src/app.rs +++ b/src/app.rs @@ -38,6 +38,18 @@ impl WidgetPosition { _ => false, } } + + pub fn get_pretty_name(self) -> String { + match self { + WidgetPosition::Cpu | WidgetPosition::BasicCpu => "CPU", + WidgetPosition::Mem | WidgetPosition::BasicMem => "Memory", + WidgetPosition::Disk => "Disks", + WidgetPosition::Temp => "Temperature", + WidgetPosition::Network | WidgetPosition::BasicNet => "Network", + WidgetPosition::Process | WidgetPosition::ProcessSearch => "Processes", + } + .to_string() + } } #[derive(Debug)] @@ -259,7 +271,7 @@ pub struct App { pub update_process_gui: bool, pub app_scroll_positions: AppScrollState, pub current_widget_selected: WidgetPosition, - pub last_basic_table_widget_selected: WidgetPosition, + pub previous_basic_table_selected: WidgetPosition, awaiting_second_char: bool, second_char: Option, pub dd_err: Option, @@ -302,7 +314,7 @@ impl App { } else { current_widget_selected }, - last_basic_table_widget_selected: if current_widget_selected.is_widget_table() { + previous_basic_table_selected: if current_widget_selected.is_widget_table() { current_widget_selected } else { WidgetPosition::Process @@ -1139,7 +1151,7 @@ impl App { if !self.is_in_dialog() && !self.is_expanded { if self.app_config_fields.use_basic_mode { if self.current_widget_selected.is_widget_table() { - self.last_basic_table_widget_selected = self.current_widget_selected; + self.previous_basic_table_selected = self.current_widget_selected; } self.current_widget_selected = match self.current_widget_selected { WidgetPosition::BasicMem => WidgetPosition::BasicCpu, @@ -1175,8 +1187,8 @@ impl App { if !self.is_in_dialog() && !self.is_expanded { if self.app_config_fields.use_basic_mode { self.current_widget_selected = match self.current_widget_selected { - WidgetPosition::BasicMem => self.last_basic_table_widget_selected, - WidgetPosition::BasicNet => self.last_basic_table_widget_selected, + WidgetPosition::BasicMem => self.previous_basic_table_selected, + WidgetPosition::BasicNet => self.previous_basic_table_selected, WidgetPosition::BasicCpu => WidgetPosition::BasicMem, WidgetPosition::Process => { if self.is_searching() { diff --git a/src/canvas.rs b/src/canvas.rs index 7197a5ff..e17960b4 100644 --- a/src/canvas.rs +++ b/src/canvas.rs @@ -435,7 +435,8 @@ impl Painter { .direction(Direction::Vertical) .constraints([ Constraint::Length(cpu_height), - Constraint::Length(3), + Constraint::Length(2), + Constraint::Length(2), Constraint::Min(5), ].as_ref()) .split(f.size()); @@ -450,10 +451,11 @@ impl Painter { self.draw_basic_cpu(&mut f, app_state, vertical_chunks[0]); self.draw_basic_memory(&mut f, app_state, middle_chunks[0]); self.draw_basic_network(&mut f, app_state, middle_chunks[1]); + self.draw_basic_table_arrows(&mut f, app_state, vertical_chunks[2]); if app_state.current_widget_selected.is_widget_table() { - self.draw_specific_table(&mut f, app_state, vertical_chunks[2], false, app_state.current_widget_selected); + self.draw_specific_table(&mut f, app_state, vertical_chunks[3], false, app_state.current_widget_selected); } else { - self.draw_specific_table(&mut f, app_state, vertical_chunks[2], false, app_state.last_basic_table_widget_selected); + self.draw_specific_table(&mut f, app_state, vertical_chunks[3], false, app_state.previous_basic_table_selected); } } else { // TODO: [TUI] Change this back to a more even 33/33/34 when TUI releases @@ -1810,4 +1812,57 @@ impl Painter { .block(Block::default()) .render(f, total_loc[0]); } + + fn draw_basic_table_arrows( + &self, f: &mut Frame<'_, B>, app_state: &mut app::App, draw_loc: Rect, + ) { + // Effectively a paragraph with a ton of spacing + + // TODO: [MODULARITY] This is hard coded. Gross. + let (left_table, right_table) = if app_state.current_widget_selected.is_widget_table() { + match app_state.current_widget_selected { + WidgetPosition::Process | WidgetPosition::ProcessSearch => { + (WidgetPosition::Temp, WidgetPosition::Disk) + } + WidgetPosition::Disk => (WidgetPosition::Process, WidgetPosition::Temp), + WidgetPosition::Temp => (WidgetPosition::Disk, WidgetPosition::Process), + _ => (WidgetPosition::Disk, WidgetPosition::Temp), + } + } else { + match app_state.previous_basic_table_selected { + WidgetPosition::Process | WidgetPosition::ProcessSearch => { + (WidgetPosition::Temp, WidgetPosition::Disk) + } + WidgetPosition::Disk => (WidgetPosition::Process, WidgetPosition::Temp), + WidgetPosition::Temp => (WidgetPosition::Disk, WidgetPosition::Process), + _ => (WidgetPosition::Disk, WidgetPosition::Temp), + } + }; + + let left_name = left_table.get_pretty_name(); + let right_name = right_table.get_pretty_name(); + + let num_spaces = max( + 0, + draw_loc.width as i64 - 2 - 4 - (left_name.len() + right_name.len()) as i64, + ) as usize; + + let arrow_text = vec![ + Text::Styled( + format!("\n◄ {}", right_name).into(), + self.colours.text_style, + ), + Text::Raw(" ".repeat(num_spaces).into()), + Text::Styled(format!("{} ►", left_name).into(), self.colours.text_style), + ]; + + let margined_draw_loc = Layout::default() + .constraints([Constraint::Percentage(100)].as_ref()) + .horizontal_margin(1) + .split(draw_loc); + + Paragraph::new(arrow_text.iter()) + .block(Block::default()) + .render(f, margined_draw_loc[0]); + } }