summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClement Tsang <34804052+ClementTsang@users.noreply.github.com>2024-01-02 06:24:13 +0000
committerGitHub <noreply@github.com>2024-01-02 01:24:13 -0500
commit77777ef5887c2e1bd1a10c55cbb329c0471d4388 (patch)
tree725723ae820d372b5c31870c0dbceefd82a7d703
parentc242b4aff31696e24ebbae49cfb5e761d0c6a9c0 (diff)
refactor: clean up some more drawing/component code (#1372)
* rename battery info widget file * add widget trait * move basic table arrows over * some renaming * more renaming and shuffling * cleanup * fmt
-rw-r--r--src/canvas.rs10
-rw-r--r--src/canvas/components.rs8
-rw-r--r--src/canvas/components/data_table.rs (renamed from src/canvas/tui_widgets/data_table.rs)0
-rw-r--r--src/canvas/components/data_table/column.rs (renamed from src/canvas/tui_widgets/data_table/column.rs)0
-rw-r--r--src/canvas/components/data_table/data_type.rs (renamed from src/canvas/tui_widgets/data_table/data_type.rs)0
-rw-r--r--src/canvas/components/data_table/draw.rs (renamed from src/canvas/tui_widgets/data_table/draw.rs)0
-rw-r--r--src/canvas/components/data_table/props.rs (renamed from src/canvas/tui_widgets/data_table/props.rs)0
-rw-r--r--src/canvas/components/data_table/sortable.rs (renamed from src/canvas/tui_widgets/data_table/sortable.rs)0
-rw-r--r--src/canvas/components/data_table/state.rs (renamed from src/canvas/tui_widgets/data_table/state.rs)0
-rw-r--r--src/canvas/components/data_table/styling.rs (renamed from src/canvas/tui_widgets/data_table/styling.rs)0
-rw-r--r--src/canvas/components/time_graph.rs (renamed from src/canvas/tui_widgets/time_graph.rs)2
-rw-r--r--src/canvas/components/tui.rs4
-rw-r--r--src/canvas/components/tui/pipe_gauge.rs (renamed from src/canvas/tui_widgets/pipe_gauge.rs)0
-rw-r--r--src/canvas/components/tui/time_chart.rs (renamed from src/canvas/tui_widgets/time_chart.rs)0
-rw-r--r--src/canvas/components/tui/time_chart/canvas.rs (renamed from src/canvas/tui_widgets/time_chart/canvas.rs)0
-rw-r--r--src/canvas/components/widget_carousel.rs (renamed from src/canvas/widgets/basic_table_arrows.rs)0
-rw-r--r--src/canvas/tui_widgets.rs6
-rw-r--r--src/canvas/widgets.rs1
-rw-r--r--src/canvas/widgets/cpu_basic.rs2
-rw-r--r--src/canvas/widgets/cpu_graph.rs4
-rw-r--r--src/canvas/widgets/disk_table.rs2
-rw-r--r--src/canvas/widgets/mem_basic.rs2
-rw-r--r--src/canvas/widgets/mem_graph.rs2
-rw-r--r--src/canvas/widgets/network_graph.rs4
-rw-r--r--src/canvas/widgets/process_table.rs2
-rw-r--r--src/canvas/widgets/temperature_table.rs2
-rw-r--r--src/data_conversion.rs2
-rw-r--r--src/widgets.rs11
-rw-r--r--src/widgets/battery_info.rs (renamed from src/widgets/battery_widget.rs)0
-rw-r--r--src/widgets/cpu_graph.rs4
-rw-r--r--src/widgets/disk_table.rs4
-rw-r--r--src/widgets/process_table.rs4
-rw-r--r--src/widgets/process_table/proc_widget_column.rs2
-rw-r--r--src/widgets/process_table/proc_widget_data.rs2
-rw-r--r--src/widgets/process_table/sort_table.rs2
-rw-r--r--src/widgets/temperature_table.rs4
36 files changed, 50 insertions, 36 deletions
diff --git a/src/canvas.rs b/src/canvas.rs
index 6b18f1c7..38194f04 100644
--- a/src/canvas.rs
+++ b/src/canvas.rs
@@ -1,7 +1,7 @@
+pub mod components;
mod dialogs;
mod drawing_utils;
pub mod styling;
-pub mod tui_widgets;
mod widgets;
use std::str::FromStr;
@@ -49,7 +49,7 @@ impl FromStr for ColourScheme {
"nord" => Ok(ColourScheme::Nord),
"nord-light" => Ok(ColourScheme::NordLight),
_ => Err(BottomError::ConfigError(format!(
- "\"{s}\" is an invalid built-in color scheme."
+ "`{s}` is an invalid built-in color scheme."
))),
}
}
@@ -71,8 +71,10 @@ pub struct Painter {
widget_layout: BottomLayout,
}
-// Part of a temporary fix for https://github.com/ClementTsang/bottom/issues/896
-enum LayoutConstraint {
+/// The constraints of a widget relative to its parent.
+///
+/// This is used over ratatui's internal representation due to https://github.com/ClementTsang/bottom/issues/896.
+pub enum LayoutConstraint {
CanvasHandled,
Grow,
Ratio(u32, u32),
diff --git a/src/canvas/components.rs b/src/canvas/components.rs
new file mode 100644
index 00000000..13a2d371
--- /dev/null
+++ b/src/canvas/components.rs
@@ -0,0 +1,8 @@
+//! Lower-level components used throughout bottom.
+
+pub mod data_table;
+pub mod time_graph;
+mod tui;
+pub mod widget_carousel;
+
+pub use tui::*;
diff --git a/src/canvas/tui_widgets/data_table.rs b/src/canvas/components/data_table.rs
index 5fb4a591..5fb4a591 100644
--- a/src/canvas/tui_widgets/data_table.rs
+++ b/src/canvas/components/data_table.rs
diff --git a/src/canvas/tui_widgets/data_table/column.rs b/src/canvas/components/data_table/column.rs
index e7b82b29..e7b82b29 100644
--- a/src/canvas/tui_widgets/data_table/column.rs
+++ b/src/canvas/components/data_table/column.rs
diff --git a/src/canvas/tui_widgets/data_table/data_type.rs b/src/canvas/components/data_table/data_type.rs
index bbfceb8c..bbfceb8c 100644
--- a/src/canvas/tui_widgets/data_table/data_type.rs
+++ b/src/canvas/components/data_table/data_type.rs
diff --git a/src/canvas/tui_widgets/data_table/draw.rs b/src/canvas/components/data_table/draw.rs
index 15faae22..15faae22 100644
--- a/src/canvas/tui_widgets/data_table/draw.rs
+++ b/src/canvas/components/data_table/draw.rs
diff --git a/src/canvas/tui_widgets/data_table/props.rs b/src/canvas/components/data_table/props.rs
index 66d3a4f0..66d3a4f0 100644
--- a/src/canvas/tui_widgets/data_table/props.rs
+++ b/src/canvas/components/data_table/props.rs
diff --git a/src/canvas/tui_widgets/data_table/sortable.rs b/src/canvas/components/data_table/sortable.rs
index f6c3b502..f6c3b502 100644
--- a/src/canvas/tui_widgets/data_table/sortable.rs
+++ b/src/canvas/components/data_table/sortable.rs
diff --git a/src/canvas/tui_widgets/data_table/state.rs b/src/canvas/components/data_table/state.rs
index 0e2ed450..0e2ed450 100644
--- a/src/canvas/tui_widgets/data_table/state.rs
+++ b/src/canvas/components/data_table/state.rs
diff --git a/src/canvas/tui_widgets/data_table/styling.rs b/src/canvas/components/data_table/styling.rs
index 80ce2b70..80ce2b70 100644
--- a/src/canvas/tui_widgets/data_table/styling.rs
+++ b/src/canvas/components/data_table/styling.rs
diff --git a/src/canvas/tui_widgets/time_graph.rs b/src/canvas/components/time_graph.rs
index 2bbcd652..bd19be74 100644
--- a/src/canvas/tui_widgets/time_graph.rs
+++ b/src/canvas/components/time_graph.rs
@@ -183,7 +183,7 @@ mod test {
};
use super::TimeGraph;
- use crate::canvas::tui_widgets::time_chart::Axis;
+ use crate::canvas::components::time_chart::Axis;
const Y_LABELS: [Cow<'static, str>; 3] = [
Cow::Borrowed("0%"),
diff --git a/src/canvas/components/tui.rs b/src/canvas/components/tui.rs
new file mode 100644
index 00000000..c9dc772f
--- /dev/null
+++ b/src/canvas/components/tui.rs
@@ -0,0 +1,4 @@
+//! Components derived from ratatui widgets.
+
+pub mod pipe_gauge;
+pub mod time_chart;
diff --git a/src/canvas/tui_widgets/pipe_gauge.rs b/src/canvas/components/tui/pipe_gauge.rs
index 08aa4ca2..08aa4ca2 100644
--- a/src/canvas/tui_widgets/pipe_gauge.rs
+++ b/src/canvas/components/tui/pipe_gauge.rs
diff --git a/src/canvas/tui_widgets/time_chart.rs b/src/canvas/components/tui/time_chart.rs
index 747c2ae3..747c2ae3 100644
--- a/src/canvas/tui_widgets/time_chart.rs
+++ b/src/canvas/components/tui/time_chart.rs
diff --git a/src/canvas/tui_widgets/time_chart/canvas.rs b/src/canvas/components/tui/time_chart/canvas.rs
index b6cc41c1..b6cc41c1 100644
--- a/src/canvas/tui_widgets/time_chart/canvas.rs
+++ b/src/canvas/components/tui/time_chart/canvas.rs
diff --git a/src/canvas/widgets/basic_table_arrows.rs b/src/canvas/components/widget_carousel.rs
index 9f7baba7..9f7baba7 100644
--- a/src/canvas/widgets/basic_table_arrows.rs
+++ b/src/canvas/components/widget_carousel.rs
diff --git a/src/canvas/tui_widgets.rs b/src/canvas/tui_widgets.rs
deleted file mode 100644
index 8355c7d1..00000000
--- a/src/canvas/tui_widgets.rs
+++ /dev/null
@@ -1,6 +0,0 @@
-//! Cstom ratatui widgets used by the rest of bottom.
-
-pub mod data_table;
-pub mod pipe_gauge;
-pub mod time_chart;
-pub mod time_graph;
diff --git a/src/canvas/widgets.rs b/src/canvas/widgets.rs
index 6b2fe78f..17651416 100644
--- a/src/canvas/widgets.rs
+++ b/src/canvas/widgets.rs
@@ -1,4 +1,3 @@
-pub mod basic_table_arrows;
pub mod battery_display;
pub mod cpu_basic;
pub mod cpu_graph;
diff --git a/src/canvas/widgets/cpu_basic.rs b/src/canvas/widgets/cpu_basic.rs
index a2a67c4d..d0fd539a 100644
--- a/src/canvas/widgets/cpu_basic.rs
+++ b/src/canvas/widgets/cpu_basic.rs
@@ -9,7 +9,7 @@ use tui::{
use crate::{
app::App,
canvas::{
- tui_widgets::pipe_gauge::{LabelLimit, PipeGauge},
+ components::pipe_gauge::{LabelLimit, PipeGauge},
Painter,
},
constants::*,
diff --git a/src/canvas/widgets/cpu_graph.rs b/src/canvas/widgets/cpu_graph.rs
index 7f4e757e..b5027bc6 100644
--- a/src/canvas/widgets/cpu_graph.rs
+++ b/src/canvas/widgets/cpu_graph.rs
@@ -9,11 +9,11 @@ use tui::{
use crate::{
app::{layout_manager::WidgetDirection, App},
canvas::{
- drawing_utils::should_hide_x_label,
- tui_widgets::{
+ components::{
data_table::{DrawInfo, SelectionState},
time_graph::{GraphData, TimeGraph},
},
+ drawing_utils::should_hide_x_label,
Painter,
},
data_conversion::CpuWidgetData,
diff --git a/src/canvas/widgets/disk_table.rs b/src/canvas/widgets/disk_table.rs
index fe241d14..04a626f8 100644
--- a/src/canvas/widgets/disk_table.rs
+++ b/src/canvas/widgets/disk_table.rs
@@ -3,7 +3,7 @@ use tui::{layout::Rect, terminal::Frame};
use crate::{
app,
canvas::{
- tui_widgets::data_table::{DrawInfo, SelectionState},
+ components::data_table::{DrawInfo, SelectionState},
Painter,
},
};
diff --git a/src/canvas/widgets/mem_basic.rs b/src/canvas/widgets/mem_basic.rs
index e8ae71b7..c950329f 100644
--- a/src/canvas/widgets/mem_basic.rs
+++ b/src/canvas/widgets/mem_basic.rs
@@ -6,7 +6,7 @@ use tui::{
use crate::{
app::App,
- canvas::{tui_widgets::pipe_gauge::PipeGauge, Painter},
+ canvas::{components::pipe_gauge::PipeGauge, Painter},
constants::*,
};
diff --git a/src/canvas/widgets/mem_graph.rs b/src/canvas/widgets/mem_graph.rs
index 819c2956..b9782e5a 100644
--- a/src/canvas/widgets/mem_graph.rs
+++ b/src/canvas/widgets/mem_graph.rs
@@ -9,8 +9,8 @@ use tui::{
use crate::{
app::App,
canvas::{
+ components::time_graph::{GraphData, TimeGraph},
drawing_utils::should_hide_x_label,
- tui_widgets::time_graph::{GraphData, TimeGraph},
Painter,
},
};
diff --git a/src/canvas/widgets/network_graph.rs b/src/canvas/widgets/network_graph.rs
index af1b6d73..1b0d4d3a 100644
--- a/src/canvas/widgets/network_graph.rs
+++ b/src/canvas/widgets/network_graph.rs
@@ -9,11 +9,11 @@ use tui::{
use crate::{
app::{App, AxisScaling},
canvas::{
- drawing_utils::should_hide_x_label,
- tui_widgets::{
+ components::{
time_chart::Point,
time_graph::{GraphData, TimeGraph},
},
+ drawing_utils::should_hide_x_label,
Painter,
},
utils::{data_prefixes::*, data_units::DataUnit, general::partial_ordering},
diff --git a/src/canvas/widgets/process_table.rs b/src/canvas/widgets/process_table.rs
index e15f3f09..6ccb2dce 100644
--- a/src/canvas/widgets/process_table.rs
+++ b/src/canvas/widgets/process_table.rs
@@ -10,7 +10,7 @@ use unicode_segmentation::UnicodeSegmentation;
use crate::{
app::{App, AppSearchState},
canvas::{
- tui_widgets::data_table::{DrawInfo, SelectionState},
+ components::data_table::{DrawInfo, SelectionState},
Painter,
},
constants::*,
diff --git a/src/canvas/widgets/temperature_table.rs b/src/canvas/widgets/temperature_table.rs
index 9be34ef1..4389ff24 100644
--- a/src/canvas/widgets/temperature_table.rs
+++ b/src/canvas/widgets/temperature_table.rs
@@ -3,7 +3,7 @@ use tui::{layout::Rect, terminal::Frame};
use crate::{
app,
canvas::{
- tui_widgets::data_table::{DrawInfo, SelectionState},
+ components::data_table::{DrawInfo, SelectionState},
Painter,
},
};
diff --git a/src/data_conversion.rs b/src/data_conversion.rs
index f4aee9d6..0d1c4604 100644
--- a/src/data_conversion.rs
+++ b/src/data_conversion.rs
@@ -7,7 +7,7 @@ use kstring::KString;
use crate::{
app::{data_farmer::DataCollection, AxisScaling},
- canvas::tui_widgets::time_chart::Point,
+ canvas::components::time_chart::Point,
data_collection::{cpu::CpuDataType, memory::MemHarvest, temperature::TemperatureType},
utils::{data_prefixes::*, data_units::DataUnit, general::*},
widgets::{DiskWidgetData, TempWidgetData},
diff --git a/src/widgets.rs b/src/widgets.rs
index 167a954e..9c0a69be 100644
--- a/src/widgets.rs
+++ b/src/widgets.rs
@@ -1,4 +1,4 @@
-pub mod battery_widget;
+pub mod battery_info;
pub mod cpu_graph;
pub mod disk_table;
pub mod mem_graph;
@@ -6,10 +6,17 @@ pub mod net_graph;
pub mod process_table;
pub mod temperature_table;
-pub use battery_widget::*;
+pub use battery_info::*;
pub use cpu_graph::*;
pub use disk_table::*;
pub use mem_graph::*;
pub use net_graph::*;
pub use process_table::*;
pub use temperature_table::*;
+use tui::{layout::Rect, Frame};
+
+/// A [`Widget`] converts raw data into something that a user can see and interact with.
+pub trait Widget<Data> {
+ /// How to actually draw the widget to the terminal.
+ fn draw(&self, f: &mut Frame<'_>, draw_location: Rect, widget_id: u64);
+}
diff --git a/src/widgets/battery_widget.rs b/src/widgets/battery_info.rs
index 68bbca79..68bbca79 100644
--- a/src/widgets/battery_widget.rs
+++ b/src/widgets/battery_info.rs
diff --git a/src/widgets/cpu_graph.rs b/src/widgets/cpu_graph.rs
index 38453f68..96873b27 100644
--- a/src/widgets/cpu_graph.rs
+++ b/src/widgets/cpu_graph.rs
@@ -6,11 +6,11 @@ use tui::{style::Style, text::Text, widgets::Row};
use crate::{
app::AppConfigFields,
canvas::{
- styling::CanvasStyling,
- tui_widgets::data_table::{
+ components::data_table::{
Column, ColumnHeader, DataTable, DataTableColumn, DataTableProps, DataTableStyling,
DataToCell,
},
+ styling::CanvasStyling,
Painter,
},
data_collection::cpu::CpuDataType,
diff --git a/src/widgets/disk_table.rs b/src/widgets/disk_table.rs
index 7ac2486e..30b3b132 100644
--- a/src/widgets/disk_table.rs
+++ b/src/widgets/disk_table.rs
@@ -6,11 +6,11 @@ use tui::text::Text;
use crate::{
app::AppConfigFields,
canvas::{
- styling::CanvasStyling,
- tui_widgets::data_table::{
+ components::data_table::{
ColumnHeader, DataTableColumn, DataTableProps, DataTableStyling, DataToCell,
SortColumn, SortDataTable, SortDataTableProps, SortOrder, SortsRow,
},
+ styling::CanvasStyling,
},
utils::general::{get_decimal_bytes, sort_partial_fn, truncate_to_text},
};
diff --git a/src/widgets/process_table.rs b/src/widgets/process_table.rs
index 172597ca..5db722bd 100644
--- a/src/widgets/process_table.rs
+++ b/src/widgets/process_table.rs
@@ -19,11 +19,11 @@ use crate::{
AppConfigFields, AppSearchState,
},
canvas::{
- styling::CanvasStyling,
- tui_widgets::data_table::{
+ components::data_table::{
Column, ColumnHeader, ColumnWidthBounds, DataTable, DataTableColumn, DataTableProps,
DataTableStyling, SortColumn, SortDataTable, SortDataTableProps, SortOrder, SortsRow,
},
+ styling::CanvasStyling,
},
data_collection::processes::ProcessHarvest,
Pid,
diff --git a/src/widgets/process_table/proc_widget_column.rs b/src/widgets/process_table/proc_widget_column.rs
index 9a0a0b94..ea9e8a11 100644
--- a/src/widgets/process_table/proc_widget_column.rs
+++ b/src/widgets/process_table/proc_widget_column.rs
@@ -4,7 +4,7 @@ use serde::{de::Error, Deserialize, Serialize};
use super::ProcWidgetData;
use crate::{
- canvas::tui_widgets::data_table::{ColumnHeader, SortsRow},
+ canvas::components::data_table::{ColumnHeader, SortsRow},
utils::general::sort_partial_fn,
};
diff --git a/src/widgets/process_table/proc_widget_data.rs b/src/widgets/process_table/proc_widget_data.rs
index 8f71434f..1886c6d9 100644
--- a/src/widgets/process_table/proc_widget_data.rs
+++ b/src/widgets/process_table/proc_widget_data.rs
@@ -10,7 +10,7 @@ use tui::{text::Text, widgets::Row};
use super::proc_widget_column::ProcColumn;
use crate::{
canvas::{
- tui_widgets::data_table::{DataTableColumn, DataToCell},
+ components::data_table::{DataTableColumn, DataToCell},
Painter,
},
data_collection::processes::ProcessHarvest,
diff --git a/src/widgets/process_table/sort_table.rs b/src/widgets/process_table/sort_table.rs
index da6a08d3..5b7a9dbd 100644
--- a/src/widgets/process_table/sort_table.rs
+++ b/src/widgets/process_table/sort_table.rs
@@ -3,7 +3,7 @@ use std::borrow::Cow;
use tui::text::Text;
use crate::{
- canvas::tui_widgets::data_table::{ColumnHeader, DataTableColumn, DataToCell},
+ canvas::components::data_table::{ColumnHeader, DataTableColumn, DataToCell},
utils::general::truncate_to_text,
};
diff --git a/src/widgets/temperature_table.rs b/src/widgets/temperature_table.rs
index 3a8a9db4..c7d19702 100644
--- a/src/widgets/temperature_table.rs
+++ b/src/widgets/temperature_table.rs
@@ -7,11 +7,11 @@ use tui::text::Text;
use crate::{
app::AppConfigFields,
canvas::{
- styling::CanvasStyling,
- tui_widgets::data_table::{
+ components::data_table::{
ColumnHeader, DataTableColumn, DataTableProps, DataTableStyling, DataToCell,
SortColumn, SortDataTable, SortDataTableProps, SortOrder, SortsRow,
},
+ styling::CanvasStyling,
},
data_collection::temperature::TemperatureType,
utils::general::{sort_partial_fn, truncate_to_text},