From 32705a60c4f865eb829cc460b2ac82db79107c1a Mon Sep 17 00:00:00 2001
From: Jack Wills <32690432+mrjackwills@users.noreply.github.com>
Date: Sat, 30 Apr 2022 00:45:06 +0000
Subject: [PATCH] refactor: generate_block()
insert area in gui_state in generate_block, don't pass in currently
selected panel, instead get from gui_state itself
---
README.md | 3 +-
src/ui/draw_blocks.rs | 73 ++++++++++++++++++++-----------------------
src/ui/mod.rs | 4 ---
3 files changed, 35 insertions(+), 45 deletions(-)
diff --git a/README.md b/README.md
index 8035554..525ab08 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@
- A simple tui to view and control docker containers
+ A simple tui to view & control docker containers
@@ -55,7 +55,6 @@ available command line arguments
requires docker & cross-rs
-
#### 64bit pi (pi 4, pi zero w 2)
```cross build --target aarch64-unknown-linux-gnu --release```
diff --git a/src/ui/draw_blocks.rs b/src/ui/draw_blocks.rs
index 182462c..ae5828f 100644
--- a/src/ui/draw_blocks.rs
+++ b/src/ui/draw_blocks.rs
@@ -42,32 +42,32 @@ const MARGIN: &str = " ";
/// Generate block, add a border if is the selected panel,
/// add custom title based on state of each panel
fn generate_block<'a>(
- selectable_panel: Option,
app_data: &Arc>,
- selected_panel: &SelectablePanel,
+ area: Rect,
+ gui_state: &Arc>,
+ panel: SelectablePanel,
) -> Block<'a> {
+ gui_state.lock().insert_into_area_map(panel, area);
let mut block = Block::default()
.borders(Borders::ALL)
.border_type(BorderType::Rounded);
-
- if let Some(panel) = selectable_panel {
- let title = match panel {
- SelectablePanel::Containers => {
- format!(
- " {} {} ",
- panel.title(),
- app_data.lock().containers.get_state_title()
- )
- }
- SelectablePanel::Logs => {
- format!(" {} {} ", panel.title(), app_data.lock().get_log_title())
- }
- _ => String::from(""),
- };
- block = block.title(title);
- if selected_panel == &panel {
- block = block.border_style(Style::default().fg(Color::LightCyan));
+ let current_selected_panel = gui_state.lock().selected_panel;
+ let title = match panel {
+ SelectablePanel::Containers => {
+ format!(
+ " {} {} ",
+ panel.title(),
+ app_data.lock().containers.get_state_title()
+ )
}
+ SelectablePanel::Logs => {
+ format!(" {} {} ", panel.title(), app_data.lock().get_log_title())
+ }
+ _ => String::from(""),
+ };
+ block = block.title(title);
+ if current_selected_panel == panel {
+ block = block.border_style(Style::default().fg(Color::LightCyan));
}
block
}
@@ -79,13 +79,8 @@ pub fn draw_commands(
f: &mut Frame<'_, B>,
gui_state: &Arc>,
index: Option,
- selected_panel: &SelectablePanel,
) {
- let panel = SelectablePanel::Commands;
- let block = generate_block(Some(panel), app_data, selected_panel);
-
- gui_state.lock().insert_into_area_map(panel, area);
-
+ let block = generate_block(app_data, area, gui_state, SelectablePanel::Commands);
if let Some(i) = index {
let items = app_data.lock().containers.items[i]
.docker_controls
@@ -125,13 +120,14 @@ pub fn draw_containers(
area: Rect,
f: &mut Frame<'_, B>,
gui_state: &Arc>,
- selected_panel: &SelectablePanel,
widths: &Columns,
) {
- let panel = SelectablePanel::Containers;
- let block = generate_block(Some(panel), app_data, selected_panel);
-
- gui_state.lock().insert_into_area_map(panel, area);
+ let block = generate_block(
+ app_data,
+ area,
+ gui_state,
+ SelectablePanel::Containers,
+ );
let items = app_data
.lock()
@@ -216,7 +212,7 @@ pub fn draw_containers(
}
}
-/// Draw the selectable panels
+/// Draw the logs panels
pub fn draw_logs(
app_data: &Arc>,
area: Rect,
@@ -224,17 +220,16 @@ pub fn draw_logs(
gui_state: &Arc>,
index: Option,
loading_icon: String,
- selected_panel: &SelectablePanel,
) {
- let panel = SelectablePanel::Logs;
-
- gui_state.lock().insert_into_area_map(panel, area);
-
- let block = generate_block(Some(panel), app_data, selected_panel);
+ let block = generate_block(
+ app_data,
+ area,
+ gui_state,
+ SelectablePanel::Logs,
+ );
let init = app_data.lock().init;
if !init {
- // let icon = gui_state.lock().get_loading();
let parsing_logs = format!("parsing logs {}", loading_icon);
let paragraph = Paragraph::new(parsing_logs)
.style(Style::default())
diff --git a/src/ui/mod.rs b/src/ui/mod.rs
index 15d04d2..144c86d 100644
--- a/src/ui/mod.rs
+++ b/src/ui/mod.rs
@@ -153,7 +153,6 @@ fn ui(
let has_containers = !app_data.lock().containers.items.is_empty();
let has_error = app_data.lock().get_error();
let log_index = app_data.lock().get_selected_log_index();
- let selected_panel = gui_state.lock().selected_panel;
let show_help = gui_state.lock().show_help;
let info_text = gui_state.lock().info_box_text.clone();
let loading_icon = gui_state.lock().get_loading();
@@ -197,7 +196,6 @@ fn ui(
top_panel[0],
f,
gui_state,
- &selected_panel,
&column_widths,
);
@@ -208,7 +206,6 @@ fn ui(
f,
gui_state,
log_index,
- &selected_panel,
);
}
@@ -219,7 +216,6 @@ fn ui(
gui_state,
log_index,
loading_icon.to_owned(),
- &selected_panel,
);
draw_heading_bar(