summaryrefslogtreecommitdiffstats
path: root/src/canvas
diff options
context:
space:
mode:
authorClementTsang <cjhtsang@uwaterloo.ca>2020-08-12 00:27:02 -0400
committerClementTsang <cjhtsang@uwaterloo.ca>2020-08-12 00:27:02 -0400
commit6e38d7311606c9212dd21dddb1878f93221bff7d (patch)
treed7746a8f3159cbb5e01c6cd28ce7169c4c15e740 /src/canvas
parent60f47594942f0f99c6cfa515a91e8137d261ddff (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.rs111
-rw-r--r--src/canvas/widgets/process_table.rs2
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()