Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 06cd411089 |
6
Cargo.lock
generated
6
Cargo.lock
generated
@@ -279,7 +279,7 @@ checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cm-dashboard"
|
name = "cm-dashboard"
|
||||||
version = "0.1.280"
|
version = "0.1.281"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"chrono",
|
"chrono",
|
||||||
@@ -301,7 +301,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cm-dashboard-agent"
|
name = "cm-dashboard-agent"
|
||||||
version = "0.1.280"
|
version = "0.1.281"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
@@ -325,7 +325,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cm-dashboard-shared"
|
name = "cm-dashboard-shared"
|
||||||
version = "0.1.280"
|
version = "0.1.281"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chrono",
|
"chrono",
|
||||||
"serde",
|
"serde",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "cm-dashboard-agent"
|
name = "cm-dashboard-agent"
|
||||||
version = "0.1.280"
|
version = "0.1.281"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "cm-dashboard"
|
name = "cm-dashboard"
|
||||||
version = "0.1.280"
|
version = "0.1.281"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -503,7 +503,7 @@ impl TuiApp {
|
|||||||
|
|
||||||
// Calculate hosts panel height dynamically based on available width
|
// Calculate hosts panel height dynamically based on available width
|
||||||
let hosts_inner_width = content_chunks[0].width.saturating_sub(2);
|
let hosts_inner_width = content_chunks[0].width.saturating_sub(2);
|
||||||
let hosts_content_height = HostsWidget::required_height(self.available_hosts.len(), hosts_inner_width);
|
let hosts_content_height = HostsWidget::required_height(self.available_hosts.len(), hosts_inner_width, &self.available_hosts);
|
||||||
let hosts_height = hosts_content_height + 2; // Add borders
|
let hosts_height = hosts_content_height + 2; // Add borders
|
||||||
|
|
||||||
// Left side: hosts panel on top, system panel below
|
// Left side: hosts panel on top, system panel below
|
||||||
|
|||||||
@@ -55,17 +55,23 @@ impl HostsWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Calculate the required height for hosts panel based on host count and available width
|
/// Calculate the required height for hosts panel based on host count and available width
|
||||||
pub fn required_height(num_hosts: usize, available_width: u16) -> u16 {
|
pub fn required_height(num_hosts: usize, available_width: u16, hostnames: &[String]) -> u16 {
|
||||||
if num_hosts == 0 {
|
if num_hosts == 0 {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
// Estimate column width: icon(2) + arrow(2) + max_hostname(~12) + padding(2) = ~18
|
let col_width = Self::calculate_column_width(hostnames);
|
||||||
let col_width = 18u16;
|
|
||||||
let num_columns = (available_width / col_width).max(1) as usize;
|
let num_columns = (available_width / col_width).max(1) as usize;
|
||||||
let rows_needed = (num_hosts + num_columns - 1) / num_columns;
|
let rows_needed = (num_hosts + num_columns - 1) / num_columns;
|
||||||
rows_needed.max(1) as u16
|
rows_needed.max(1) as u16
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Calculate column width based on longest hostname
|
||||||
|
fn calculate_column_width(hostnames: &[String]) -> u16 {
|
||||||
|
// icon(2) + arrow(2) + hostname + asterisk(1) + padding(1)
|
||||||
|
let max_name_len = hostnames.iter().map(|h| h.len()).max().unwrap_or(8);
|
||||||
|
(2 + 2 + max_name_len + 1 + 1) as u16
|
||||||
|
}
|
||||||
|
|
||||||
/// Render hosts list in dynamic columns based on available width
|
/// Render hosts list in dynamic columns based on available width
|
||||||
pub fn render<F>(
|
pub fn render<F>(
|
||||||
&mut self,
|
&mut self,
|
||||||
@@ -88,8 +94,8 @@ impl HostsWidget {
|
|||||||
// Store viewport height for scroll calculations
|
// Store viewport height for scroll calculations
|
||||||
self.last_viewport_height = area.height as usize;
|
self.last_viewport_height = area.height as usize;
|
||||||
|
|
||||||
// Calculate column width and number of columns that fit
|
// Calculate column width based on actual hostname lengths
|
||||||
let col_width = 18u16;
|
let col_width = Self::calculate_column_width(available_hosts);
|
||||||
let num_columns = (area.width / col_width).max(1) as usize;
|
let num_columns = (area.width / col_width).max(1) as usize;
|
||||||
let rows_per_column = (available_hosts.len() + num_columns - 1) / num_columns;
|
let rows_per_column = (available_hosts.len() + num_columns - 1) / num_columns;
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "cm-dashboard-shared"
|
name = "cm-dashboard-shared"
|
||||||
version = "0.1.280"
|
version = "0.1.281"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
Reference in New Issue
Block a user