summaryrefslogtreecommitdiffstats
path: root/src/canvas
diff options
context:
space:
mode:
authorClement Tsang <34804052+ClementTsang@users.noreply.github.com>2020-09-22 18:12:36 -0400
committerGitHub <noreply@github.com>2020-09-22 18:12:36 -0400
commit6db76029e2419d53c81cb2111e487f83ee248a2f (patch)
tree356ff9a92b2d6024d581a6466f832080f2adccbd /src/canvas
parentb0b174eb9843e9af55f5c3f2d37cae96f1744a6b (diff)
feature: Beginnings of in-app config (#231)
Initial refactorings and additions to support in-app config. - Refactor our current options logic to support in-app configs. That is, we can write to a config file with our changes now. - The default action when creating a new config file is to leave it blank. (TBD and for now, not sure on this one) - Previously, we would set everything in a config file on startup; now we need to read from the config TOML struct whenever. - `C` keybind is now occupied for configs. - `no_write` option to never write to a config file.
Diffstat (limited to 'src/canvas')
-rw-r--r--src/canvas/dialogs/help_dialog.rs4
-rw-r--r--src/canvas/screens.rs3
-rw-r--r--src/canvas/screens/config_screen.rs57
-rw-r--r--src/canvas/widgets/battery_display.rs2
-rw-r--r--src/canvas/widgets/mem_graph.rs1
-rw-r--r--src/canvas/widgets/process_table.rs6
6 files changed, 69 insertions, 4 deletions
diff --git a/src/canvas/dialogs/help_dialog.rs b/src/canvas/dialogs/help_dialog.rs
index 2b148f16..fe0f1c52 100644
--- a/src/canvas/dialogs/help_dialog.rs
+++ b/src/canvas/dialogs/help_dialog.rs
@@ -1,5 +1,6 @@
use unicode_width::UnicodeWidthStr;
+use crate::{app::App, canvas::Painter, constants};
use tui::{
backend::Backend,
layout::{Alignment, Rect},
@@ -7,8 +8,6 @@ use tui::{
widgets::{Block, Borders, Paragraph},
};
-use crate::{app::App, canvas::Painter, constants};
-
const HELP_BASE: &str = " Help ── Esc to close ";
pub trait HelpDialog {
@@ -17,6 +16,7 @@ pub trait HelpDialog {
);
}
+// TODO: [REFACTOR] Make generic dialog boxes to build off of instead?
impl HelpDialog for Painter {
fn draw_help_dialog<B: Backend>(
&self, f: &mut Frame<'_, B>, app_state: &mut App, draw_loc: Rect,
diff --git a/src/canvas/screens.rs b/src/canvas/screens.rs
new file mode 100644
index 00000000..e17aa573
--- /dev/null
+++ b/src/canvas/screens.rs
@@ -0,0 +1,3 @@
+pub mod config_screen;
+
+pub use config_screen::*;
diff --git a/src/canvas/screens/config_screen.rs b/src/canvas/screens/config_screen.rs
new file mode 100644
index 00000000..6aa22493
--- /dev/null
+++ b/src/canvas/screens/config_screen.rs
@@ -0,0 +1,57 @@
+use crate::{app::App, canvas::Painter, constants};
+use tui::{
+ backend::Backend,
+ layout::Constraint,
+ layout::Direction,
+ layout::Layout,
+ layout::{Alignment, Rect},
+ terminal::Frame,
+ widgets::{Block, Borders, Paragraph},
+};
+
+pub trait ConfigScreen {
+ fn draw_config_screen<B: Backend>(
+ &self, f: &mut Frame<'_, B>, app_state: &mut App, draw_loc: Rect,
+ );
+}
+
+impl ConfigScreen for Painter {
+ fn draw_config_screen<B: Backend>(
+ &self, f: &mut Frame<'_, B>, app_state: &mut App, draw_loc: Rect,
+ ) {
+ let config_block = Block::default()
+ .title(&" Config ")
+ .title_style(self.colours.border_style)
+ .style(self.colours.border_style)
+ .borders(Borders::ALL)
+ .border_style(self.colours.border_style);
+
+ f.render_widget(config_block, draw_loc);
+
+ // let margined_draw_locs = Layout::default()
+ // .margin(2)
+ // .direction(Direction::Horizontal)
+ // .constraints(
+ // [
+ // Constraint::Percentage(33),
+ // Constraint::Percentage(34),
+ // Constraint::Percentage(33),
+ // ]
+ // .as_ref(),
+ // )
+ // .split(draw_loc)
+ // .into_iter()
+ // .map(|loc| {
+ // // Required to properly margin in *between* the rectangles.
+ // Layout::default()
+ // .horizontal_margin(1)
+ // .constraints([Constraint::Percentage(100)].as_ref())
+ // .split(loc)[0]
+ // })
+ // .collect::<Vec<Rect>>();
+
+ // for dl in margined_draw_locs {
+ // f.render_widget(Block::default().borders(Borders::ALL), dl);
+ // }
+ }
+}
diff --git a/src/canvas/widgets/battery_display.rs b/src/canvas/widgets/battery_display.rs
index 3e4ca3e9..e50ed515 100644
--- a/src/canvas/widgets/battery_display.rs
+++ b/src/canvas/widgets/battery_display.rs
@@ -223,7 +223,7 @@ impl BatteryDisplayWidget for Painter {
.block(Block::default())
.divider(tui::symbols::line::VERTICAL)
.style(self.colours.text_style)
- .highlight_style(self.colours.currently_selected_text_style)
+ .highlight_style(self.colours.currently_selected_text_style) //FIXME: [HIGHLIGHT] THIS IS BROKEN ON TUI's SIDE, override this with your own style...
.select(battery_widget_state.currently_selected_battery_index),
tab_draw_loc,
);
diff --git a/src/canvas/widgets/mem_graph.rs b/src/canvas/widgets/mem_graph.rs
index 7accfa55..bdc0b0b7 100644
--- a/src/canvas/widgets/mem_graph.rs
+++ b/src/canvas/widgets/mem_graph.rs
@@ -78,6 +78,7 @@ impl MemGraphWidget for Painter {
.graph_type(tui::widgets::GraphType::Line),
);
+ // FIXME: [SWAP] Hide this if denominator is 0...
let swap_label = format!(
"SWP:{}{}",
app_state.canvas_data.swap_label_percent, app_state.canvas_data.swap_label_frac
diff --git a/src/canvas/widgets/process_table.rs b/src/canvas/widgets/process_table.rs
index 9adb318a..89a27ba9 100644
--- a/src/canvas/widgets/process_table.rs
+++ b/src/canvas/widgets/process_table.rs
@@ -413,7 +413,7 @@ impl ProcessTableWidget for Painter {
}
});
- // TODO: gotop's "x out of y" thing is really nice to help keep track of the scroll position.
+ // TODO: gotop's "x out of y" thing is really nice to help keep track of the scroll position. Add to everything?
f.render_stateful_widget(
Table::new(process_headers.iter(), process_rows)
.block(process_block)
@@ -531,6 +531,8 @@ impl ProcessTableWidget for Painter {
let query = proc_widget_state.get_current_search_query().as_str();
let grapheme_indices = UnicodeSegmentation::grapheme_indices(query, true);
+ // TODO: [CURSOR] blank cursor if not selected
+ // TODO: [CURSOR] blinking cursor?
let query_with_cursor = build_query(
is_on_widget,
grapheme_indices,
@@ -579,6 +581,8 @@ impl ProcessTableWidget for Painter {
self.colours.text_style
};
+ // FIXME: [MOUSE] Mouse support for these in search
+ // FIXME: [MOVEMENT] Movement support for these in search
let option_text = vec![
Text::raw("\n"),
Text::styled(