summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClement Tsang <34804052+ClementTsang@users.noreply.github.com>2023-05-18 05:45:07 -0400
committerGitHub <noreply@github.com>2023-05-18 05:45:07 -0400
commit463b0fbef8195de26c1f8ad0f665a86a4b1b0713 (patch)
treec0542522b7538df106ead52bb6f303d25fe15f17
parent0a98ad1b9351be1bbdf6c2cc441e7ff98f30fe2c (diff)
refactor: remove TypedBuilder for widget (#1159)
* refactor: remove TypedBuilder for widget * group together cpu * clean up proc too
-rw-r--r--src/app/layout_manager.rs274
-rw-r--r--src/options/layout_options.rs206
2 files changed, 222 insertions, 258 deletions
diff --git a/src/app/layout_manager.rs b/src/app/layout_manager.rs
index 27dbd395..9a4a9d1a 100644
--- a/src/app/layout_manager.rs
+++ b/src/app/layout_manager.rs
@@ -538,78 +538,72 @@ impl BottomLayout {
vec![
BottomCol::builder()
.canvas_handle_width(true)
- .children(vec![BottomColRow::new(vec![BottomWidget::builder()
- .canvas_handle_width(true)
- .widget_type(BottomWidgetType::Disk)
- .widget_id(4)
- .up_neighbour(Some(100))
- .left_neighbour(Some(8))
- .right_neighbour(Some(DEFAULT_WIDGET_ID + 2))
- .build()])
+ .children(vec![BottomColRow::new(vec![BottomWidget::new(
+ BottomWidgetType::Disk,
+ 4,
+ )
+ .canvas_handle_width(true)
+ .up_neighbour(Some(100))
+ .left_neighbour(Some(8))
+ .right_neighbour(Some(DEFAULT_WIDGET_ID + 2))])
.canvas_handle_height(true)])
.build(),
BottomCol::builder()
.canvas_handle_width(true)
.children(vec![
BottomColRow::new(vec![
- BottomWidget::builder()
+ BottomWidget::new(BottomWidgetType::ProcSort, DEFAULT_WIDGET_ID + 2)
.canvas_handle_width(true)
- .widget_type(BottomWidgetType::ProcSort)
- .widget_id(DEFAULT_WIDGET_ID + 2)
.up_neighbour(Some(100))
.down_neighbour(Some(DEFAULT_WIDGET_ID + 1))
.left_neighbour(Some(4))
.right_neighbour(Some(DEFAULT_WIDGET_ID))
.width_ratio(1)
- .parent_reflector(Some((WidgetDirection::Right, 2)))
- .build(),
- BottomWidget::builder()
+ .parent_reflector(Some((WidgetDirection::Right, 2))),
+ BottomWidget::new(BottomWidgetType::Proc, DEFAULT_WIDGET_ID)
.canvas_handle_width(true)
- .widget_type(BottomWidgetType::Proc)
- .widget_id(DEFAULT_WIDGET_ID)
.up_neighbour(Some(100))
.down_neighbour(Some(DEFAULT_WIDGET_ID + 1))
.left_neighbour(Some(DEFAULT_WIDGET_ID + 2))
.right_neighbour(Some(7))
- .width_ratio(2)
- .build(),
+ .width_ratio(2),
])
.canvas_handle_height(true)
.total_widget_ratio(3),
- BottomColRow::new(vec![BottomWidget::builder()
- .canvas_handle_width(true)
- .widget_type(BottomWidgetType::ProcSearch)
- .widget_id(DEFAULT_WIDGET_ID + 1)
- .up_neighbour(Some(DEFAULT_WIDGET_ID))
- .left_neighbour(Some(4))
- .right_neighbour(Some(7))
- .parent_reflector(Some((WidgetDirection::Up, 1)))
- .build()])
+ BottomColRow::new(vec![BottomWidget::new(
+ BottomWidgetType::ProcSearch,
+ DEFAULT_WIDGET_ID + 1,
+ )
+ .canvas_handle_width(true)
+ .up_neighbour(Some(DEFAULT_WIDGET_ID))
+ .left_neighbour(Some(4))
+ .right_neighbour(Some(7))
+ .parent_reflector(Some((WidgetDirection::Up, 1)))])
.canvas_handle_height(true),
])
.build(),
BottomCol::builder()
.canvas_handle_width(true)
- .children(vec![BottomColRow::new(vec![BottomWidget::builder()
- .canvas_handle_width(true)
- .widget_type(BottomWidgetType::Temp)
- .widget_id(7)
- .up_neighbour(Some(100))
- .left_neighbour(Some(DEFAULT_WIDGET_ID))
- .right_neighbour(Some(8))
- .build()])
+ .children(vec![BottomColRow::new(vec![BottomWidget::new(
+ BottomWidgetType::Temp,
+ 7,
+ )
+ .canvas_handle_width(true)
+ .up_neighbour(Some(100))
+ .left_neighbour(Some(DEFAULT_WIDGET_ID))
+ .right_neighbour(Some(8))])
.canvas_handle_height(true)])
.build(),
BottomCol::builder()
.canvas_handle_width(true)
- .children(vec![BottomColRow::new(vec![BottomWidget::builder()
- .canvas_handle_width(true)
- .widget_type(BottomWidgetType::Battery)
- .widget_id(8)
- .up_neighbour(Some(100))
- .left_neighbour(Some(7))
- .right_neighbour(Some(4))
- .build()])
+ .children(vec![BottomColRow::new(vec![BottomWidget::new(
+ BottomWidgetType::Battery,
+ 8,
+ )
+ .canvas_handle_width(true)
+ .up_neighbour(Some(100))
+ .left_neighbour(Some(7))
+ .right_neighbour(Some(4))])
.canvas_handle_height(true)])
.build(),
]
@@ -617,63 +611,57 @@ impl BottomLayout {
vec![
BottomCol::builder()
.canvas_handle_width(true)
- .children(vec![BottomColRow::new(vec![BottomWidget::builder()
- .canvas_handle_width(true)
- .widget_type(BottomWidgetType::Disk)
- .widget_id(4)
- .up_neighbour(Some(100))
- .left_neighbour(Some(7))
- .right_neighbour(Some(DEFAULT_WIDGET_ID + 2))
- .build()])
+ .children(vec![BottomColRow::new(vec![BottomWidget::new(
+ BottomWidgetType::Disk,
+ 4,
+ )
+ .canvas_handle_width(true)
+ .up_neighbour(Some(100))
+ .left_neighbour(Some(7))
+ .right_neighbour(Some(DEFAULT_WIDGET_ID + 2))])
.canvas_handle_height(true)])
.build(),
BottomCol::builder()
.canvas_handle_width(true)
.children(vec![
BottomColRow::new(vec![
- BottomWidget::builder()
+ BottomWidget::new(BottomWidgetType::ProcSort, DEFAULT_WIDGET_ID + 2)
.canvas_handle_width(true)
- .widget_type(BottomWidgetType::ProcSort)
- .widget_id(DEFAULT_WIDGET_ID + 2)
.up_neighbour(Some(100))
.down_neighbour(Some(DEFAULT_WIDGET_ID + 1))
.left_neighbour(Some(4))
.right_neighbour(Some(DEFAULT_WIDGET_ID))
- .parent_reflector(Some((WidgetDirection::Right, 2)))
- .build(),
- BottomWidget::builder()
+ .parent_reflector(Some((WidgetDirection::Right, 2))),
+ BottomWidget::new(BottomWidgetType::Proc, DEFAULT_WIDGET_ID)
.canvas_handle_width(true)
- .widget_type(BottomWidgetType::Proc)
- .widget_id(DEFAULT_WIDGET_ID)
.up_neighbour(Some(100))
.down_neighbour(Some(DEFAULT_WIDGET_ID + 1))
.left_neighbour(Some(DEFAULT_WIDGET_ID + 2))
- .right_neighbour(Some(7))
- .build(),
+ .right_neighbour(Some(7)),
])
.canvas_handle_height(true),
- BottomColRow::new(vec![BottomWidget::builder()
- .canvas_handle_width(true)
- .widget_type(BottomWidgetType::ProcSearch)
- .widget_id(DEFAULT_WIDGET_ID + 1)
- .up_neighbour(Some(DEFAULT_WIDGET_ID))
- .left_neighbour(Some(4))
- .right_neighbour(Some(7))
- .parent_reflector(Some((WidgetDirection::Up, 1)))
- .build()])
+ BottomColRow::new(vec![BottomWidget::new(
+ BottomWidgetType::ProcSearch,
+ DEFAULT_WIDGET_ID + 1,
+ )
+ .canvas_handle_width(true)
+ .up_neighbour(Some(DEFAULT_WIDGET_ID))
+ .left_neighbour(Some(4))
+ .right_neighbour(Some(7))
+ .parent_reflector(Some((WidgetDirection::Up, 1)))])
.canvas_handle_height(true),
])
.build(),
BottomCol::builder()
.canvas_handle_width(true)
- .children(vec![BottomColRow::new(vec![BottomWidget::builder()
- .canvas_handle_width(true)
- .widget_type(BottomWidgetType::Temp)
- .widget_id(7)
- .up_neighbour(Some(100))
- .left_neighbour(Some(DEFAULT_WIDGET_ID))
- .right_neighbour(Some(4))
- .build()])
+ .children(vec![BottomColRow::new(vec![BottomWidget::new(
+ BottomWidgetType::Temp,
+ 7,
+ )
+ .canvas_handle_width(true)
+ .up_neighbour(Some(100))
+ .left_neighbour(Some(DEFAULT_WIDGET_ID))
+ .right_neighbour(Some(4))])
.canvas_handle_height(true)])
.build(),
]
@@ -686,12 +674,12 @@ impl BottomLayout {
.canvas_handle_height(true)
.children(vec![BottomCol::builder()
.canvas_handle_width(true)
- .children(vec![BottomColRow::new(vec![BottomWidget::builder()
- .canvas_handle_width(true)
- .widget_type(BottomWidgetType::BasicCpu)
- .widget_id(1)
- .down_neighbour(Some(2))
- .build()])
+ .children(vec![BottomColRow::new(vec![BottomWidget::new(
+ BottomWidgetType::BasicCpu,
+ 1,
+ )
+ .canvas_handle_width(true)
+ .down_neighbour(Some(2))])
.canvas_handle_height(true)])
.build()])
.build(),
@@ -700,22 +688,16 @@ impl BottomLayout {
.children(vec![BottomCol::builder()
.canvas_handle_width(true)
.children(vec![BottomColRow::new(vec![
- BottomWidget::builder()
+ BottomWidget::new(BottomWidgetType::BasicMem, 2)
.canvas_handle_width(true)
- .widget_type(BottomWidgetType::BasicMem)
- .widget_id(2)
.up_neighbour(Some(1))
.down_neighbour(Some(100))
- .right_neighbour(Some(3))
- .build(),
- BottomWidget::builder()
+ .right_neighbour(Some(3)),
+ BottomWidget::new(BottomWidgetType::BasicNet, 3)
.canvas_handle_width(true)
- .widget_type(BottomWidgetType::BasicNet)
- .widget_id(3)
.up_neighbour(Some(1))
.down_neighbour(Some(100))
- .left_neighbour(Some(2))
- .build(),
+ .left_neighbour(Some(2)),
])
.canvas_handle_height(true)])
.build()])
@@ -724,12 +706,12 @@ impl BottomLayout {
.canvas_handle_height(true)
.children(vec![BottomCol::builder()
.canvas_handle_width(true)
- .children(vec![BottomColRow::new(vec![BottomWidget::builder()
- .canvas_handle_width(true)
- .widget_type(BottomWidgetType::BasicTables)
- .widget_id(100)
- .up_neighbour(Some(2))
- .build()])
+ .children(vec![BottomColRow::new(vec![BottomWidget::new(
+ BottomWidgetType::BasicTables,
+ 100,
+ )
+ .canvas_handle_width(true)
+ .up_neighbour(Some(2))])
.canvas_handle_height(true)])
.build()])
.build(),
@@ -831,57 +813,105 @@ pub enum WidgetDirection {
impl WidgetDirection {
pub fn is_opposite(&self, other_direction: &WidgetDirection) -> bool {
- match &self {
- WidgetDirection::Left => *other_direction == WidgetDirection::Right,
- WidgetDirection::Right => *other_direction == WidgetDirection::Left,
- WidgetDirection::Up => *other_direction == WidgetDirection::Down,
- WidgetDirection::Down => *other_direction == WidgetDirection::Up,
- }
+ let to_compare = match &self {
+ WidgetDirection::Left => WidgetDirection::Right,
+ WidgetDirection::Right => WidgetDirection::Left,
+ WidgetDirection::Up => WidgetDirection::Down,
+ WidgetDirection::Down => WidgetDirection::Up,
+ };
+
+ *other_direction == to_compare
}
}
/// Represents a single widget.
-#[derive(Debug, Default, Clone, TypedBuilder)]
+#[derive(Debug, Default, Clone)]
pub struct BottomWidget {
pub widget_type: BottomWidgetType,
pub widget_id: u64,
-
- #[builder(default = 1)]
pub width_ratio: u32,
-
- #[builder(default = None)]
pub left_neighbour: Option<u64>,
-
- #[builder(default = None)]
pub right_neighbour: Option<u64>,
-
- #[builder(default = None)]
pub up_neighbour: Option<u64>,
-
- #[builder(default = None)]
pub down_neighbour: Option<u64>,
/// If set to true, the canvas will override any ratios.
- #[builder(default = false)]
pub canvas_handle_width: bool,
/// Whether we want this widget to take up all available room (and ignore any ratios).
- #[builder(default = false)]
pub flex_grow: bool,
/// The value is the direction to bounce, as well as the parent offset.
- #[builder(default = None)]
pub parent_reflector: Option<(WidgetDirection, u64)>,
/// Top left corner when drawn, for mouse click detection. (x, y)
- #[builder(default = None)]
pub top_left_corner: Option<(u16, u16)>,
/// Bottom right corner when drawn, for mouse click detection. (x, y)
- #[builder(default = None)]
pub bottom_right_corner: Option<(u16, u16)>,
}
+impl BottomWidget {
+ pub(crate) fn new(widget_type: BottomWidgetType, widget_id: u64) -> Self {
+ Self {
+ widget_type,
+ widget_id,
+ width_ratio: 1,
+ left_neighbour: None,
+ right_neighbour: None,
+ up_neighbour: None,
+ down_neighbour: None,
+ canvas_handle_width: false,
+ flex_grow: false,
+ parent_reflector: None,
+ top_left_corner: None,
+ bottom_right_corner: None,
+ }
+ }
+
+ pub(crate) fn width_ratio(mut self, width_ratio: u32) -> Self {
+ self.width_ratio = width_ratio;
+ self
+ }
+
+ pub(crate) fn left_neighbour(mut self, left_neighbour: Option<u64>) -> Self {
+ self.left_neighbour = left_neighbour;
+ self
+ }
+
+ pub(crate) fn right_neighbour(mut self, right_neighbour: Option<u64>) -> Self {
+ self.right_neighbour = right_neighbour;
+ self
+ }
+
+ pub(crate) fn up_neighbour(mut self, up_neighbour: Option<u64>) -> Self {
+ self.up_neighbour = up_neighbour;
+ self
+ }
+
+ pub(crate) fn down_neighbour(mut self, down_neighbour: Option<u64>) -> Self {
+ self.down_neighbour = down_neighbour;
+ self
+ }
+
+ pub(crate) fn canvas_handle_width(mut self, canvas_handle_width: bool) -> Self {
+ self.canvas_handle_width = canvas_handle_width;
+ self
+ }
+
+ pub(crate) fn flex_grow(mut self, flex_grow: bool) -> Self {
+ self.flex_grow = flex_grow;
+ self
+ }
+
+ pub(crate) fn parent_reflector(
+ mut self, parent_reflector: Option<(WidgetDirection, u64)>,
+ ) -> Self {
+ self.parent_reflector = parent_reflector;
+ self
+ }
+}
+
#[derive(Debug, Clone, Eq, PartialEq, Hash, Default)]
pub enum BottomWidgetType {
#[default]
diff --git a/src/options/layout_options.rs b/src/options/layout_options.rs
index 0f05c9b8..e55800b1 100644
--- a/src/options/layout_options.rs
+++ b/src/options/layout_options.rs
@@ -12,6 +12,51 @@ pub struct Row {
pub child: Option<Vec<RowChildren>>,
}
+fn new_cpu(left_legend: bool, iter_id: &mut u64) -> BottomColRow {
+ let cpu_id = *iter_id;
+ *iter_id += 1;
+ let legend_id = *iter_id;
+
+ if left_legend {
+ BottomColRow::new(vec![
+ BottomWidget::new(BottomWidgetType::CpuLegend, legend_id)
+ .width_ratio(3)
+ .canvas_handle_width(true)
+ .parent_reflector(Some((WidgetDirection::Right, 1))),
+ BottomWidget::new(BottomWidgetType::Cpu, cpu_id)
+ .width_ratio(17)
+ .flex_grow(true),
+ ])
+ } else {
+ BottomColRow::new(vec![
+ BottomWidget::new(BottomWidgetType::Cpu, cpu_id)
+ .width_ratio(17)
+ .flex_grow(true),
+ BottomWidget::new(BottomWidgetType::CpuLegend, legend_id)
+ .width_ratio(3)
+ .canvas_handle_width(true)
+ .parent_reflector(Some((WidgetDirection::Left, 1))),
+ ])
+ }
+ .total_widget_ratio(20)
+}
+
+fn new_proc_sort(sort_id: u64) -> BottomWidget {
+ BottomWidget::new(BottomWidgetType::ProcSort, sort_id)
+ .canvas_handle_width(true)
+ .parent_reflector(Some((WidgetDirection::Right, 2)))
+ .width_ratio(1)
+}
+
+fn new_proc(proc_id: u64) -> BottomWidget {
+ BottomWidget::new(BottomWidgetType::Proc, proc_id).width_ratio(2)
+}
+
+fn new_proc_search(search_id: u64) -> BottomWidget {
+ BottomWidget::new(BottomWidgetType::ProcSearch, search_id)
+ .parent_reflector(Some((WidgetDirection::Up, 1)))
+}
+
impl Row {
pub fn convert_row_to_bottom_row(
&self, iter_id: &mut u64, total_height_ratio: &mut u32, default_widget_id: &mut u64,
@@ -53,48 +98,10 @@ impl Row {
}
children.push(match widget_type {
- BottomWidgetType::Cpu => {
- let cpu_id = *iter_id;
- *iter_id += 1;
- BottomCol::builder()
- .col_width_ratio(width_ratio)
- .children(if left_legend {
- vec![BottomColRow::new(vec![
- BottomWidget::builder()
- .width_ratio(3)
- .widget_type(BottomWidgetType::CpuLegend)
- .widget_id(*iter_id)
- .canvas_handle_width(true)
- .parent_reflector(Some((WidgetDirection::Right, 1)))
- .build(),
- BottomWidget::builder()
- .width_ratio(17)
- .widget_type(BottomWidgetType::Cpu)
- .widget_id(cpu_id)
- .flex_grow(true)
- .build(),
- ])
- .total_widget_ratio(20)]
- } else {
- vec![BottomColRow::new(vec![
- BottomWidget::builder()
- .width_ratio(17)
- .widget_type(BottomWidgetType::Cpu)
- .widget_id(cpu_id)
- .flex_grow(true)
- .build(),
- BottomWidget::builder()
- .width_ratio(3)
- .widget_type(BottomWidgetType::CpuLegend)
- .widget_id(*iter_id)
- .canvas_handle_width(true)
- .parent_reflector(Some((WidgetDirection::Left, 1)))
- .build(),
- ])
- .total_widget_ratio(20)]
- })
- .build()
- }
+ BottomWidgetType::Cpu => BottomCol::builder()
+ .col_width_ratio(width_ratio)
+ .children(vec![new_cpu(left_legend, iter_id)])
+ .build(),
BottomWidgetType::Proc => {
let proc_id = *iter_id;
let proc_search_id = *iter_id + 1;
@@ -104,36 +111,22 @@ impl Row {
.col_width_ratio(width_ratio)
.children(vec![
BottomColRow::new(vec![
- BottomWidget::builder()
- .widget_type(BottomWidgetType::ProcSort)
- .widget_id(*iter_id)
- .canvas_handle_width(true)
- .parent_reflector(Some((WidgetDirection::Right, 2)))
- .width_ratio(1)
- .build(),
- BottomWidget::builder()
- .widget_type(BottomWidgetType::Proc)
- .widget_id(proc_id)
- .width_ratio(2)
- .build(),
+ new_proc_sort(*iter_id),
+ new_proc(proc_id),
])
.total_widget_ratio(3)
.flex_grow(true),
- BottomColRow::new(vec![BottomWidget::builder()
- .widget_type(BottomWidgetType::ProcSearch)
- .widget_id(proc_search_id)
- .parent_reflector(Some((WidgetDirection::Up, 1)))
- .build()])
- .canvas_handle_height(true),
+ BottomColRow::new(vec![new_proc_search(proc_search_id)])
+ .canvas_handle_height(true),
])
.build()
}
_ => BottomCol::builder()
.col_width_ratio(width_ratio)
- .children(vec![BottomColRow::new(vec![BottomWidget::builder()
- .widget_type(widget_type)
- .widget_id(*iter_id)
- .build()])])
+ .children(vec![BottomColRow::new(vec![BottomWidget::new(
+ widget_type,
+ *iter_id,
+ )])])
.build(),
});
}
@@ -171,55 +164,10 @@ impl Row {
match widget_type {
BottomWidgetType::Cpu => {
- let cpu_id = *iter_id;
- *iter_id += 1;
- if left_legend {
- col_row_children.push(
- BottomColRow::new(vec![
- BottomWidget::builder()
- .width_ratio(3)
- .widget_type(BottomWidgetType::CpuLegend)
- .widget_id(*iter_id)
- .canvas_handle_width(true)
- .parent_reflector(Some((
- WidgetDirection::Right,
- 1,
- )))
- .build(),
- BottomWidget::builder()
- .width_ratio(17)
- .widget_type(BottomWidgetType::Cpu)
- .widget_id(cpu_id)
- .flex_grow(true)
- .build(),
- ])
- .col_row_height_ratio(col_row_height_ratio)
- .total_widget_ratio(20),
- );
- } else {
- col_row_children.push(
- BottomColRow::new(vec![
- BottomWidget::builder()
- .width_ratio(17)
- .widget_type(BottomWidgetType::Cpu)
- .widget_id(cpu_id)
- .flex_grow(true)
- .build(),
- BottomWidget::builder()
- .width_ratio(3)
- .widget_type(BottomWidgetType::CpuLegend)
- .widget_id(*iter_id)
- .canvas_handle_width(true)
- .parent_reflector(Some((
- WidgetDirection::Left,
- 1,
- )))
- .build(),
- ])
- .col_row_height_ratio(col_row_height_ratio)
- .total_widget_ratio(20),
- );
- }
+ col_row_children.push(
+ new_cpu(left_legend, iter_id)
+ .col_row_height_ratio(col_row_height_ratio),
+ );
}
BottomWidgetType::Proc => {
contains_proc = true;
@@ -228,37 +176,23 @@ impl Row {
*iter_id += 2;
col_row_children.push(
BottomColRow::new(vec![
- BottomWidget::builder()
- .widget_type(BottomWidgetType::ProcSort)
- .widget_id(*iter_id)
- .canvas_handle_width(true)
- .parent_reflector(Some((WidgetDirection::Right, 2)))
- .width_ratio(1)
- .build(),
- BottomWidget::builder()
- .widget_type(BottomWidgetType::Proc)
- .widget_id(proc_id)
- .width_ratio(2)
- .build(),
+ new_proc_sort(*iter_id),
+ new_proc(proc_id),
])
.col_row_height_ratio(col_row_height_ratio)
.total_widget_ratio(3),
);
col_row_children.push(
- BottomColRow::new(vec![BottomWidget::builder()
- .widget_type(BottomWidgetType::ProcSearch)
- .widget_id(proc_search_id)
- .parent_reflector(Some((WidgetDirection::Up, 1)))
- .build()])
- .canvas_handle_height(true)
- .col_row_height_ratio(col_row_height_ratio),
+ BottomColRow::new(vec![new_proc_search(proc_search_id)])
+ .canvas_handle_height(true)
+ .col_row_height_ratio(col_row_height_ratio),
);
}
_ => col_row_children.push(
- BottomColRow::new(vec![BottomWidget::builder()
- .widget_type(widget_type)
- .widget_id(*iter_id)
- .build()])
+ BottomColRow::new(vec![BottomWidget::new(
+ widget_type,
+ *iter_id,
+ )])
.col_row_height_ratio(col_row_height_ratio),
),
}