diff options
author | ClementTsang <cjhtsang@uwaterloo.ca> | 2020-08-12 00:27:02 -0400 |
---|---|---|
committer | ClementTsang <cjhtsang@uwaterloo.ca> | 2020-08-12 00:27:02 -0400 |
commit | 6e38d7311606c9212dd21dddb1878f93221bff7d (patch) | |
tree | d7746a8f3159cbb5e01c6cd28ce7169c4c15e740 /src/canvas | |
parent | 60f47594942f0f99c6cfa515a91e8137d261ddff (diff) |
change: Refactor dd drawing code
This also slightly improves how we generate the widths/heights to be
less... terrible.
Note this is not done, unfortunately. This requires tui-rs' wrapped
paragraph height PR to land and release so I can properly calculate the
height offsets.
See https://github.com/fdehau/tui-rs/pull/349 for details.
Diffstat (limited to 'src/canvas')
-rw-r--r-- | src/canvas/dialogs/dd_dialog.rs | 111 | ||||
-rw-r--r-- | src/canvas/widgets/process_table.rs | 2 |
2 files changed, 55 insertions, 58 deletions
diff --git a/src/canvas/dialogs/dd_dialog.rs b/src/canvas/dialogs/dd_dialog.rs index 8a63a6e6..17c3371a 100644 --- a/src/canvas/dialogs/dd_dialog.rs +++ b/src/canvas/dialogs/dd_dialog.rs @@ -12,20 +12,23 @@ const DD_BASE: &str = " Confirm Kill Process ── Esc to close "; const DD_ERROR_BASE: &str = " Error ── Esc to close "; pub trait KillDialog { + fn get_dd_spans(&self, app_state: &App) -> Option<Text<'_>>; + fn draw_dd_dialog<B: Backend>( - &self, f: &mut Frame<'_, B>, app_state: &mut App, draw_loc: Rect, + &self, f: &mut Frame<'_, B>, dd_text: Option<Text<'_>>, app_state: &App, draw_loc: Rect, ) -> bool; - - fn draw_dd_error_dialog<B: Backend>(&self, f: &mut Frame<'_, B>, dd_err: &str, draw_loc: Rect); } impl KillDialog for Painter { - fn draw_dd_dialog<B: Backend>( - &self, f: &mut Frame<'_, B>, app_state: &mut App, draw_loc: Rect, - ) -> bool { - if let Some(to_kill_processes) = app_state.get_to_delete_processes() { + fn get_dd_spans(&self, app_state: &App) -> Option<Text<'_>> { + if let Some(dd_err) = &app_state.dd_err { + return Some(Text::from(Spans::from(format!( + "\nFailure to properly kill the process - {}", + dd_err + )))); + } else if let Some(to_kill_processes) = app_state.get_to_delete_processes() { if let Some(first_pid) = to_kill_processes.1.first() { - let dd_text = Text::from(vec![ + return Some(Text::from(vec![ Spans::from(vec![]), Spans::from(vec![ if app_state.is_grouped(app_state.current_widget.widget_id) { @@ -62,9 +65,31 @@ impl KillDialog for Painter { Span::styled("No", self.colours.currently_selected_text_style) }, ]), - ]); + Spans::from(vec![]), + ])); + } + } - let dd_title = Span::styled( + None + } + + fn draw_dd_dialog<B: Backend>( + &self, f: &mut Frame<'_, B>, dd_text: Option<Text<'_>>, app_state: &App, draw_loc: Rect, + ) -> bool { + if let Some(dd_text) = dd_text { + let dd_title = if app_state.dd_err.is_some() { + Span::styled( + format!( + " Error ─{}─ Esc to close ", + "─".repeat( + usize::from(draw_loc.width) + .saturating_sub(DD_ERROR_BASE.chars().count() + 2) + ) + ), + self.colours.border_style, + ) + } else { + Span::styled( format!( " Confirm Kill Process ─{}─ Esc to close ", "─".repeat( @@ -72,23 +97,27 @@ impl KillDialog for Painter { ) ), self.colours.border_style, - ); + ) + }; - f.render_widget( - Paragraph::new(dd_text) - .block( - Block::default() - .title(dd_title) - .style(self.colours.border_style) - .borders(Borders::ALL) - .border_style(self.colours.border_style), - ) - .style(self.colours.text_style) - .alignment(Alignment::Center) - .wrap(Wrap { trim: true }), - draw_loc, - ); + f.render_widget( + Paragraph::new(dd_text) + .block( + Block::default() + .title(dd_title) + .style(self.colours.border_style) + .borders(Borders::ALL) + .border_style(self.colours.border_style), + ) + .style(self.colours.text_style) + .alignment(Alignment::Center) + .wrap(Wrap { trim: true }), + draw_loc, + ); + if app_state.dd_err.is_some() { + return app_state.delete_dialog_state.is_showing_dd; + } else { return true; } } @@ -98,36 +127,4 @@ impl KillDialog for Painter { // I don't really like this, and I find it ugly, but it works for now. false } - - fn draw_dd_error_dialog<B: Backend>(&self, f: &mut Frame<'_, B>, dd_err: &str, draw_loc: Rect) { - let dd_text = Span::from(format!( - "\nFailure to properly kill the process - {}", - dd_err - )); - - let error_title = Span::styled( - format!( - " Error ─{}─ Esc to close ", - "─".repeat( - usize::from(draw_loc.width).saturating_sub(DD_ERROR_BASE.chars().count() + 2) - ) - ), - self.colours.border_style, - ); - - f.render_widget( - Paragraph::new(dd_text) - .block( - Block::default() - .title(error_title) - .style(self.colours.border_style) - .borders(Borders::ALL) - .border_style(self.colours.border_style), - ) - .style(self.colours.text_style) - .alignment(Alignment::Center) - .wrap(Wrap { trim: true }), - draw_loc, - ); - } } diff --git a/src/canvas/widgets/process_table.rs b/src/canvas/widgets/process_table.rs index 3faab2ba..2f041a16 100644 --- a/src/canvas/widgets/process_table.rs +++ b/src/canvas/widgets/process_table.rs @@ -151,7 +151,7 @@ impl ProcessTableWidget for Painter { let wps = "W/s".to_string(); let total_read = "Read".to_string(); let total_write = "Write".to_string(); - let process_state = "State".to_string(); + let process_state = "State ".to_string(); let direction_val = if proc_widget_state.process_sorting_reverse { "▼".to_string() |