deps: Update various deps as per 2021-02-19 (#420)

Major update is tui-rs from 0.13 to 0.14.  This change allows us to update our tables to make them look nicer!
This commit is contained in:
Clement Tsang 2021-02-19 17:57:39 -05:00 committed by GitHub
parent f2975c3a7c
commit cb1191ff35
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 251 additions and 219 deletions

View File

@ -33,6 +33,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- [#418](https://github.com/ClementTsang/bottom/pull/418): Removed automatically jumping to the top of the list for process sort shortcuts. The standard behaviour is to now stay in place.
- [#420](https://github.com/ClementTsang/bottom/pull/420): Updated tui-rs, allowing for prettier looking tables!
## Bug Fixes
- [#416](https://github.com/ClementTsang/bottom/pull/416): Fixes grouped vs ungrouped modes in the processes widget having inconsistent spacing.

180
Cargo.lock generated
View File

@ -2,9 +2,9 @@
# It is not intended for manual editing.
[[package]]
name = "addr2line"
version = "0.14.0"
version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c0929d69e78dd9bf5408269919fcbcaeb2e35e5d43e5815517cdc6a8e11a423"
checksum = "a55f82cfe485775d02112886f4169bde0c5894d75e79ead7eafe7e40a25e45f7"
dependencies = [
"gimli",
]
@ -35,16 +35,17 @@ dependencies = [
[[package]]
name = "anyhow"
version = "1.0.35"
version = "1.0.38"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c0df63cb2955042487fad3aefd2c6e3ae7389ac5dc1beb28921de0b69f779d4"
checksum = "afddf7f520a80dbf76e6f50a35bca42a2331ef227a28b3b6dc5c2e2338d114b1"
[[package]]
name = "assert_cmd"
version = "1.0.2"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3dc1679af9a1ab4bea16f228b05d18f8363f8327b1fa8db00d2760cfafc6b61e"
checksum = "f2475b58cd94eb4f70159f4fd8844ba3b807532fe3131b3373fae060bbe30396"
dependencies = [
"bstr",
"doc-comment",
"predicates",
"predicates-core",
@ -176,9 +177,9 @@ checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
[[package]]
name = "backtrace"
version = "0.3.55"
version = "0.3.56"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ef5140344c85b01f9bbb4d4b7288a8aa4b3287ccef913a14bcc78a1063623598"
checksum = "9d117600f438b1707d4e4ae15d3595657288f8235a0eb593e80ecc98ab34e1bc"
dependencies = [
"addr2line",
"cfg-if 1.0.0",
@ -269,6 +270,23 @@ dependencies = [
"winapi",
]
[[package]]
name = "bstr"
version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a40b47ad93e1a5404e6c18dec46b628214fee441c70f4ab5d6942142cc268a3d"
dependencies = [
"lazy_static",
"memchr",
"regex-automata",
]
[[package]]
name = "byteorder"
version = "1.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae44d1a3d5a19df61dd0c8beb138458ac2a53a7ac09eba97d55592540004306b"
[[package]]
name = "cache-padded"
version = "1.1.1"
@ -541,9 +559,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
[[package]]
name = "futures"
version = "0.3.8"
version = "0.3.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b3b0c040a1fe6529d30b3c5944b280c7f0dcb2930d2c3062bca967b602583d0"
checksum = "da9052a1a50244d8d5aa9bf55cbc2fb6f357c86cc52e46c62ed390a7180cf150"
dependencies = [
"futures-channel",
"futures-core",
@ -556,9 +574,9 @@ dependencies = [
[[package]]
name = "futures-channel"
version = "0.3.8"
version = "0.3.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4b7109687aa4e177ef6fe84553af6280ef2778bdb7783ba44c9dc3399110fe64"
checksum = "f2d31b7ec7efab6eefc7c57233bb10b847986139d88cc2f5a02a1ae6871a1846"
dependencies = [
"futures-core",
"futures-sink",
@ -566,15 +584,15 @@ dependencies = [
[[package]]
name = "futures-core"
version = "0.3.8"
version = "0.3.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "847ce131b72ffb13b6109a221da9ad97a64cbe48feb1028356b836b47b8f1748"
checksum = "79e5145dde8da7d1b3892dad07a9c98fc04bc39892b1ecc9692cf53e2b780a65"
[[package]]
name = "futures-executor"
version = "0.3.8"
version = "0.3.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4caa2b2b68b880003057c1dd49f1ed937e38f22fcf6c212188a121f08cf40a65"
checksum = "e9e59fdc009a4b3096bf94f740a0f2424c082521f20a9b08c5c07c48d90fd9b9"
dependencies = [
"futures-core",
"futures-task",
@ -583,9 +601,9 @@ dependencies = [
[[package]]
name = "futures-io"
version = "0.3.8"
version = "0.3.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "611834ce18aaa1bd13c4b374f5d653e1027cf99b6b502584ff8c9a64413b30bb"
checksum = "28be053525281ad8259d47e4de5de657b25e7bac113458555bb4b70bc6870500"
[[package]]
name = "futures-lite"
@ -598,15 +616,15 @@ dependencies = [
"futures-io",
"memchr",
"parking",
"pin-project-lite",
"pin-project-lite 0.1.11",
"waker-fn",
]
[[package]]
name = "futures-macro"
version = "0.3.8"
version = "0.3.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77408a692f1f97bcc61dc001d752e00643408fbc922e4d634c655df50d595556"
checksum = "c287d25add322d9f9abdcdc5927ca398917996600182178774032e9f8258fedd"
dependencies = [
"proc-macro-hack",
"proc-macro2",
@ -616,15 +634,15 @@ dependencies = [
[[package]]
name = "futures-sink"
version = "0.3.8"
version = "0.3.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f878195a49cee50e006b02b93cf7e0a95a38ac7b776b4c4d9cc1207cd20fcb3d"
checksum = "caf5c69029bda2e743fddd0582d1083951d65cc9539aebf8812f36c3491342d6"
[[package]]
name = "futures-task"
version = "0.3.8"
version = "0.3.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c554eb5bf48b2426c4771ab68c6b14468b6e76cc90996f528c3338d761a4d0d"
checksum = "13de07eb8ea81ae445aca7b69f5f7bf15d7bf4912d8ca37d6645c77ae8a58d86"
dependencies = [
"once_cell",
]
@ -637,9 +655,9 @@ checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c"
[[package]]
name = "futures-util"
version = "0.3.8"
version = "0.3.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d304cff4a7b99cfb7986f7d43fbe93d175e72e704a8860787cc95e9ffd85cbd2"
checksum = "632a8cd0f2a4b3fdea1657f08bde063848c3bd00f9bbf6e256b8be78802e624b"
dependencies = [
"futures-channel",
"futures-core",
@ -648,7 +666,7 @@ dependencies = [
"futures-sink",
"futures-task",
"memchr",
"pin-project",
"pin-project-lite 0.2.4",
"pin-utils",
"proc-macro-hack",
"proc-macro-nested",
@ -837,9 +855,9 @@ dependencies = [
[[package]]
name = "itertools"
version = "0.9.0"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b"
checksum = "37d572918e350e82412fe766d24b15e6682fb2ed2bbe018280caa810397cb319"
dependencies = [
"either",
]
@ -858,9 +876,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
[[package]]
name = "libc"
version = "0.2.81"
version = "0.2.86"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1482821306169ec4d07f6aca392a4681f66c75c9918aa49641a2595db64053cb"
checksum = "b7282d924be3275cec7f6756ff4121987bc6481325397dde6ba3e7802b1a8b1c"
[[package]]
name = "lock_api"
@ -873,11 +891,11 @@ dependencies = [
[[package]]
name = "log"
version = "0.4.11"
version = "0.4.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b"
checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
dependencies = [
"cfg-if 0.1.10",
"cfg-if 1.0.0",
]
[[package]]
@ -1034,9 +1052,9 @@ dependencies = [
[[package]]
name = "object"
version = "0.22.0"
version = "0.23.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d3b63360ec3cb337817c2dbd47ab4a0f170d285d8e5a2064600f3def1402397"
checksum = "a9a7ab5d64814df0fe4a4b5ead45ed6c5f181ee3ff04ba344313a6c80446c5d4"
[[package]]
name = "once_cell"
@ -1075,32 +1093,18 @@ dependencies = [
"winapi",
]
[[package]]
name = "pin-project"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ccc2237c2c489783abd8c4c80e5450fc0e98644555b1364da68cc29aa151ca7"
dependencies = [
"pin-project-internal",
]
[[package]]
name = "pin-project-internal"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8e8d2bf0b23038a4424865103a4df472855692821aab4e4f5c3312d461d9e5f"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "pin-project-lite"
version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c917123afa01924fc84bb20c4c03f004d9c38e5127e3c039bbf7f4b9c76a2f6b"
[[package]]
name = "pin-project-lite"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "439697af366c49a6d0a010c56a0d97685bc140ce0d377b13a2ea2aa42d64a827"
[[package]]
name = "pin-utils"
version = "0.1.0"
@ -1122,9 +1126,9 @@ dependencies = [
[[package]]
name = "predicates"
version = "1.0.6"
version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73dd9b7b200044694dfede9edf907c1ca19630908443e9447e624993700c6932"
checksum = "eeb433456c1a57cc93554dea3ce40b4c19c4057e41c55d4a0f3d84ea71c325aa"
dependencies = [
"difference",
"float-cmp",
@ -1222,9 +1226,9 @@ dependencies = [
[[package]]
name = "regex"
version = "1.4.2"
version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38cf2c13ed4745de91a5eb834e11c00bcc3709e773173b2ce4c56c9fbde04b9c"
checksum = "d9251239e129e16308e70d853559389de218ac275b515068abc96829d05b948a"
dependencies = [
"aho-corasick",
"memchr",
@ -1233,10 +1237,19 @@ dependencies = [
]
[[package]]
name = "regex-syntax"
version = "0.6.21"
name = "regex-automata"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b181ba2dcf07aaccad5448e8ead58db5b742cf85dfe035e2227f137a539a189"
checksum = "ae1ded71d66a4a97f5e961fd0cb25a5f366a42a41570d16a763a69c092c26ae4"
dependencies = [
"byteorder",
]
[[package]]
name = "regex-syntax"
version = "0.6.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b5eb417147ba9860a96cfe72a0b93bf88fee1744b5636ec99ab20c1aa9376581"
[[package]]
name = "rustc-demangle"
@ -1252,18 +1265,18 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
[[package]]
name = "serde"
version = "1.0.118"
version = "1.0.123"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06c64263859d87aa2eb554587e2d23183398d617427327cf2b3d0ed8c69e4800"
checksum = "92d5161132722baa40d802cc70b15262b98258453e85e5d1d365c757c73869ae"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.118"
version = "1.0.123"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c84d3526699cd55261af4b941e4e725444df67aa4f9e6a3564f18030d12672df"
checksum = "9391c295d64fc0abb2c556bad848f33cb8296276b1ad2677d1ae1ace4f258f31"
dependencies = [
"proc-macro2",
"quote",
@ -1340,9 +1353,9 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
[[package]]
name = "syn"
version = "1.0.54"
version = "1.0.60"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a2af957a63d6bd42255c359c93d9bfdb97076bd3b820897ce55ffbfbf107f44"
checksum = "c700597eca8a5a762beb35753ef6b94df201c81cca676604f547495a0d7f0081"
dependencies = [
"proc-macro2",
"quote",
@ -1351,11 +1364,12 @@ dependencies = [
[[package]]
name = "sysinfo"
version = "0.15.3"
version = "0.16.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67330cbee3b2a819e3365a773f05e884a136603687f812bf24db5b6c3d76b696"
checksum = "6c280c91abd1aed2e36be1bc8f56fbc7a2acbb2b58fbcac9641510179cc72dd9"
dependencies = [
"cfg-if 0.1.10",
"cfg-if 1.0.0",
"core-foundation-sys 0.8.2",
"doc-comment",
"libc",
"ntapi",
@ -1375,18 +1389,18 @@ dependencies = [
[[package]]
name = "thiserror"
version = "1.0.22"
version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0e9ae34b84616eedaaf1e9dd6026dbe00dcafa92aa0c8077cb69df1fcfe5e53e"
checksum = "e0f4a65597094d4483ddaed134f409b2cb7c1beccf25201a9f73c719254fa98e"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
version = "1.0.22"
version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ba20f23e85b10754cd195504aebf6a27e2e6cbe28c17778a0c930724628dd56"
checksum = "7765189610d8241a44529806d6fd1f2e0a08734313a35d5b3a556f92b381f3c0"
dependencies = [
"proc-macro2",
"quote",
@ -1415,9 +1429,9 @@ dependencies = [
[[package]]
name = "toml"
version = "0.5.7"
version = "0.5.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "75cf45bb0bef80604d001caaec0d09da99611b3c0fd39d3080468875cdb65645"
checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa"
dependencies = [
"serde",
]
@ -1430,9 +1444,9 @@ checksum = "a7f741b240f1a48843f9b8e0444fb55fb2a4ff67293b50a9179dfd5ea67f8d41"
[[package]]
name = "tui"
version = "0.13.0"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5d4e6c82bb967df89f20b875fa8835fab5d5622c6a5efa574a1f0b6d0aa6e8f6"
checksum = "9ced152a8e9295a5b168adc254074525c17ac4a83c90b2716274cc38118bddc9"
dependencies = [
"bitflags",
"cassowary",
@ -1443,9 +1457,9 @@ dependencies = [
[[package]]
name = "typed-builder"
version = "0.8.0"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2ec6661b8cd8dc76d17f15f1cf1da27fc3dd58850ccc220d04653b48e0fae3ba"
checksum = "345426c7406aa355b60c5007c79a2d1f5b605540072795222f17f6443e6a9c6f"
dependencies = [
"proc-macro2",
"quote",

View File

@ -29,8 +29,8 @@ codegen-units = 1
default = ["fern", "log"]
[dependencies]
anyhow = "1.0.35"
backtrace = "~0.3"
anyhow = "1.0.38"
backtrace = "0.3.56"
battery = "0.7.8"
beef = "0.5.0"
chrono = "0.4.19"
@ -39,26 +39,26 @@ ctrlc = { version = "3.1", features = ["termination"] }
clap = "2.33"
dirs-next = "2.0.0"
fnv = "1.0.7"
futures = "0.3.8"
futures = "0.3.12"
indexmap = "~1.6"
itertools = "0.9.0"
itertools = "0.10.0"
once_cell = "1.5.2"
regex = "1.4.2"
serde = { version = "~1.0", features = ["derive"] }
sysinfo = "0.15.3"
thiserror = "1.0.22"
toml = "0.5.7"
tui = { version = "0.13.0", features = ["crossterm"], default-features = false }
typed-builder = "0.8.0"
regex = "1.4.3"
serde = { version = "1.0.123", features = ["derive"] }
sysinfo = "0.16.4"
thiserror = "1.0.24"
toml = "0.5.8"
tui = { version = "0.14.0", features = ["crossterm"], default-features = false }
typed-builder = "0.9.0"
unicode-segmentation = "1.7.1"
unicode-width = "0.1"
# For debugging only... disable on release builds with --no-default-target for no? TODO: Redo this.
fern = { version = "0.6.0", optional=true }
log = { version = "0.4.11", optional=true }
log = { version = "0.4.14", optional=true }
[target.'cfg(unix)'.dependencies]
libc = "~0.2"
libc = "0.2.86"
[target.'cfg(target_os = "linux")'.dependencies]
heim = { version = "0.1.0-rc.1", features = ["cpu", "disk", "memory", "net", "sensors"] }
@ -72,8 +72,8 @@ heim = { version = "0.1.0-rc.1", features = ["disk", "memory"] }
winapi = "0.3.9"
[dev-dependencies]
assert_cmd = "1.0.2"
predicates = "1.0.6"
assert_cmd = "1.0.3"
predicates = "1.0.7"
[build-dependencies]
clap = "2.33"

View File

@ -2757,7 +2757,7 @@ impl App {
/// Moves the mouse to the widget that was clicked on, then propagates the click down to be
/// handled by the widget specifically.
pub fn left_mouse_click_movement(&mut self, x: u16, y: u16) {
pub fn on_left_mouse_up(&mut self, x: u16, y: u16) {
// Pretty dead simple - iterate through the widget map and go to the widget where the click
// is within.
@ -2769,6 +2769,7 @@ impl App {
// Short circuit if we're in basic table... we might have to handle the basic table arrow
// case here...
if let Some(bt) = &mut self.basic_table_widget_state {
if let (
Some((left_tlc_x, left_tlc_y)),

View File

@ -129,40 +129,36 @@ impl BatteryDisplayWidget for Painter {
charge_percentage,
);
let battery_items = vec![
["Charge %", &bars],
["Consumption", &battery_details.watt_consumption],
let battery_items: Vec<Vec<&str>> = vec![
vec!["Charge %", &bars],
vec!["Consumption", &battery_details.watt_consumption],
if let Some(duration_until_full) = &battery_details.duration_until_full {
["Time to full", duration_until_full]
vec!["Time to full", duration_until_full]
} else if let Some(duration_until_empty) = &battery_details.duration_until_empty
{
["Time to empty", duration_until_empty]
vec!["Time to empty", duration_until_empty]
} else {
["Time to full/empty", "N/A"]
vec!["Time to full/empty", "N/A"]
},
["Health %", &battery_details.health],
vec!["Health %", &battery_details.health],
];
let battery_rows = battery_items.iter().map(|item| {
Row::StyledData(
item.iter(),
if charge_percentage < 10.0 {
self.colours.low_battery_colour
} else if charge_percentage < 50.0 {
self.colours.medium_battery_colour
} else {
self.colours.high_battery_colour
},
)
let battery_rows = battery_items.into_iter().map(|item| {
Row::new(item).style(if charge_percentage < 10.0 {
self.colours.low_battery_colour
} else if charge_percentage < 50.0 {
self.colours.medium_battery_colour
} else {
self.colours.high_battery_colour
})
});
// Draw
f.render_widget(
Table::new([""].iter(), battery_rows)
Table::new(battery_rows)
.block(battery_block)
.header_style(self.colours.table_header_style)
.widths(&[Constraint::Percentage(50), Constraint::Percentage(50)])
.header_gap(table_gap),
.header(Row::new(vec![""]).bottom_margin(table_gap))
.widths(&[Constraint::Percentage(50), Constraint::Percentage(50)]),
margined_draw_loc,
);
} else {

View File

@ -1,5 +1,4 @@
use once_cell::sync::Lazy;
use std::borrow::Cow;
use unicode_segmentation::UnicodeSegmentation;
use crate::{
@ -18,7 +17,7 @@ use tui::{
symbols::Marker,
terminal::Frame,
text::Span,
text::Spans,
text::{Spans, Text},
widgets::{Axis, Block, Borders, Chart, Dataset, Row, Table},
};
@ -314,7 +313,7 @@ impl CpuGraphWidget for Painter {
let sliced_cpu_data = &cpu_data[start_position..];
let mut offset_scroll_index = cpu_widget_state
let offset_scroll_index = cpu_widget_state
.scroll_state
.current_scroll_position
.saturating_sub(start_position);
@ -343,58 +342,59 @@ impl CpuGraphWidget for Painter {
let dcw = &cpu_widget_state.table_width_state.desired_column_widths;
let ccw = &cpu_widget_state.table_width_state.calculated_column_widths;
let cpu_rows = sliced_cpu_data.iter().enumerate().filter_map(|(itx, cpu)| {
let truncated_name: Cow<'_, str> =
let cpu_rows = sliced_cpu_data.iter().enumerate().map(|(itx, cpu)| {
let mut truncated_name =
if let (Some(desired_column_width), Some(calculated_column_width)) =
(dcw.get(0), ccw.get(0))
{
if *desired_column_width > *calculated_column_width {
Cow::Borrowed(&cpu.short_cpu_name)
Text::raw(&cpu.short_cpu_name)
} else {
Cow::Borrowed(&cpu.cpu_name)
Text::raw(&cpu.cpu_name)
}
} else {
Cow::Borrowed(&cpu.cpu_name)
};
let truncated_legend: Cow<'_, str> =
if let Some(calculated_column_width) = ccw.get(0) {
if *calculated_column_width == 0 && cpu.legend_value.is_empty() {
Cow::Borrowed("All")
} else {
Cow::Borrowed(&cpu.legend_value)
}
} else {
Cow::Borrowed(&cpu.legend_value)
Text::raw(&cpu.cpu_name)
};
let cpu_string_row: Vec<Cow<'_, str>> = vec![truncated_name, truncated_legend];
if cpu_string_row.is_empty() {
offset_scroll_index += 1;
None
let is_first_column_hidden = if let Some(calculated_column_width) = ccw.get(0) {
*calculated_column_width == 0
} else {
Some(Row::StyledData(
cpu_string_row.into_iter(),
if itx == offset_scroll_index {
self.colours.currently_selected_text_style
} else if itx + start_position == ALL_POSITION {
self.colours.all_colour_style
} else if show_avg_cpu {
if itx + start_position == AVG_POSITION {
self.colours.avg_colour_style
} else {
self.colours.cpu_colour_styles[(itx + start_position
- AVG_POSITION
- 1)
% self.colours.cpu_colour_styles.len()]
}
false
};
let truncated_legend = if is_first_column_hidden && cpu.legend_value.is_empty() {
// For the case where we only have room for one column, display "All" in the normally blank area.
Text::raw("All")
} else {
Text::raw(&cpu.legend_value)
};
if !is_first_column_hidden
&& itx == offset_scroll_index
&& itx + start_position == ALL_POSITION
{
truncated_name.patch_style(self.colours.currently_selected_text_style);
Row::new(vec![truncated_name, truncated_legend])
} else {
let cpu_string_row = vec![truncated_name, truncated_legend];
Row::new(cpu_string_row).style(if itx == offset_scroll_index {
self.colours.currently_selected_text_style
} else if itx + start_position == ALL_POSITION {
self.colours.all_colour_style
} else if show_avg_cpu {
if itx + start_position == AVG_POSITION {
self.colours.avg_colour_style
} else {
self.colours.cpu_colour_styles[(itx + start_position
- ALL_POSITION
- AVG_POSITION
- 1)
% self.colours.cpu_colour_styles.len()]
},
))
}
} else {
self.colours.cpu_colour_styles[(itx + start_position - ALL_POSITION - 1)
% self.colours.cpu_colour_styles.len()]
})
}
});
@ -407,14 +407,17 @@ impl CpuGraphWidget for Painter {
// Draw
f.render_stateful_widget(
Table::new(CPU_LEGEND_HEADER.iter(), cpu_rows)
Table::new(cpu_rows)
.block(
Block::default()
.borders(Borders::ALL)
.border_style(border_and_title_style),
)
.header_style(self.colours.table_header_style)
.highlight_style(self.colours.currently_selected_text_style)
.header(
Row::new(CPU_LEGEND_HEADER.to_vec())
.style(self.colours.table_header_style)
.bottom_margin(table_gap),
)
.widths(
&(cpu_widget_state
.table_width_state
@ -422,8 +425,7 @@ impl CpuGraphWidget for Painter {
.iter()
.map(|calculated_width| Constraint::Length(*calculated_width as u16))
.collect::<Vec<_>>()),
)
.header_gap(table_gap),
),
draw_loc,
cpu_table_state,
);

View File

@ -4,7 +4,7 @@ use tui::{
layout::{Constraint, Direction, Layout, Rect},
terminal::Frame,
text::Span,
text::Spans,
text::{Spans, Text},
widgets::{Block, Borders, Row, Table},
};
@ -16,7 +16,6 @@ use crate::{
},
constants::*,
};
use std::borrow::Cow;
use unicode_segmentation::UnicodeSegmentation;
const DISK_HEADERS: [&str; 7] = ["Disk", "Mount", "Used", "Free", "Total", "R/s", "W/s"];
@ -140,17 +139,17 @@ impl DiskTableWidget for Painter {
let first_n = graphemes
[..(*calculated_col_width as usize - 1)]
.concat();
return Cow::Owned(format!("{}", first_n));
return Text::raw(format!("{}", first_n));
}
}
}
}
Cow::Borrowed(entry)
Text::raw(entry)
},
);
Row::Data(truncated_data)
Row::new(truncated_data)
});
let (border_style, highlight_style) = if is_on_widget {
@ -241,9 +240,13 @@ impl DiskTableWidget for Painter {
// Draw!
f.render_stateful_widget(
Table::new(DISK_HEADERS.iter(), disk_rows)
Table::new(disk_rows)
.block(disk_block)
.header_style(self.colours.table_header_style)
.header(
Row::new(DISK_HEADERS.to_vec())
.style(self.colours.table_header_style)
.bottom_margin(table_gap),
)
.highlight_style(highlight_style)
.style(self.colours.text_style)
.widths(
@ -253,8 +256,7 @@ impl DiskTableWidget for Painter {
.iter()
.map(|calculated_width| Constraint::Length(*calculated_width as u16))
.collect::<Vec<_>>()),
)
.header_gap(table_gap),
),
margined_draw_loc,
disk_table_state,
);

View File

@ -15,7 +15,7 @@ use tui::{
symbols::Marker,
terminal::Frame,
text::Span,
text::Spans,
text::{Spans, Text},
widgets::{Axis, Block, Borders, Chart, Dataset, Row, Table},
};
@ -355,6 +355,12 @@ impl NetworkGraphWidget for Painter {
fn draw_network_labels<B: Backend>(
&self, f: &mut Frame<'_, B>, app_state: &mut App, draw_loc: Rect, widget_id: u64,
) {
let table_gap = if draw_loc.height < TABLE_GAP_HEIGHT_LIMIT {
0
} else {
app_state.app_config_fields.table_gap
};
let rx_display = &app_state.canvas_data.rx_display;
let tx_display = &app_state.canvas_data.tx_display;
let total_rx_display = &app_state.canvas_data.total_rx_display;
@ -362,14 +368,14 @@ impl NetworkGraphWidget for Painter {
// Gross but I need it to work...
let total_network = vec![vec![
rx_display,
tx_display,
total_rx_display,
total_tx_display,
Text::raw(rx_display),
Text::raw(tx_display),
Text::raw(total_rx_display),
Text::raw(total_tx_display),
]];
let mapped_network = total_network
.iter()
.map(|val| Row::StyledData(val.iter(), self.colours.text_style));
.into_iter()
.map(|val| Row::new(val).style(self.colours.text_style));
// Calculate widths
let intrinsic_widths = get_column_widths(
@ -389,7 +395,12 @@ impl NetworkGraphWidget for Painter {
// Draw
f.render_widget(
Table::new(NETWORK_HEADERS.iter(), mapped_network)
Table::new(mapped_network)
.header(
Row::new(NETWORK_HEADERS.to_vec())
.style(self.colours.table_header_style)
.bottom_margin(table_gap),
)
.block(Block::default().borders(Borders::ALL).border_style(
if app_state.current_widget.widget_id == widget_id {
self.colours.highlighted_border_style
@ -397,7 +408,6 @@ impl NetworkGraphWidget for Painter {
self.colours.border_style
},
))
.header_style(self.colours.table_header_style)
.style(self.colours.text_style)
.widths(
&(intrinsic_widths

View File

@ -11,11 +11,10 @@ use tui::{
backend::Backend,
layout::{Alignment, Constraint, Direction, Layout, Rect},
terminal::Frame,
text::{Span, Spans},
text::{Span, Spans, Text},
widgets::{Block, Borders, Paragraph, Row, Table},
};
use std::borrow::Cow;
use unicode_segmentation::{GraphemeIndices, UnicodeSegmentation};
use unicode_width::UnicodeWidthStr;
@ -453,7 +452,7 @@ impl ProcessTableWidget for Painter {
.collect::<Vec<&str>>();
if let Some(alternative) = alternative {
Cow::Borrowed(alternative)
Text::raw(alternative)
} else if graphemes.len() > *calculated_col_width as usize
&& *calculated_col_width > 1
{
@ -461,33 +460,37 @@ impl ProcessTableWidget for Painter {
let first_n = graphemes
[..(*calculated_col_width as usize - 1)]
.concat();
Cow::Owned(format!("{}", first_n))
Text::raw(format!("{}", first_n))
} else {
Cow::Borrowed(entry)
Text::raw(entry)
}
} else {
Cow::Borrowed(entry)
Text::raw(entry)
}
} else {
Cow::Borrowed(entry)
Text::raw(entry)
}
} else {
Cow::Borrowed(entry)
Text::raw(entry)
}
},
);
if *disabled {
Row::StyledData(truncated_data, self.colours.disabled_text_style)
Row::new(truncated_data).style(self.colours.disabled_text_style)
} else {
Row::Data(truncated_data)
Row::new(truncated_data)
}
});
f.render_stateful_widget(
Table::new(process_headers.iter(), process_rows)
Table::new(process_rows)
.header(
Row::new(process_headers)
.style(self.colours.table_header_style)
.bottom_margin(table_gap),
)
.block(process_block)
.header_style(self.colours.table_header_style)
.highlight_style(highlight_style)
.style(self.colours.text_style)
.widths(
@ -499,8 +502,7 @@ impl ProcessTableWidget for Painter {
Constraint::Length(*calculated_width as u16)
})
.collect::<Vec<_>>()),
)
.header_gap(table_gap),
),
margined_draw_loc,
proc_table_state,
);
@ -826,7 +828,7 @@ impl ProcessTableWidget for Painter {
let sort_options = sliced_vec
.iter()
.map(|column| Row::Data(vec![column].into_iter()));
.map(|column| Row::new(vec![column.as_str()]));
let column_state = &mut proc_widget_state.columns.column_state;
column_state.select(Some(
@ -872,13 +874,16 @@ impl ProcessTableWidget for Painter {
.split(draw_loc)[0];
f.render_stateful_widget(
Table::new(["Sort By"].iter(), sort_options)
Table::new(sort_options)
.header(
Row::new(vec!["Sort By"])
.style(self.colours.table_header_style)
.bottom_margin(table_gap),
)
.block(process_sort_block)
.highlight_style(highlight_style)
.style(self.colours.text_style)
.header_style(self.colours.table_header_style)
.widths(&[Constraint::Percentage(100)])
.header_gap(table_gap),
.widths(&[Constraint::Percentage(100)]),
margined_draw_loc,
column_state,
);

View File

@ -4,7 +4,7 @@ use tui::{
layout::{Constraint, Direction, Layout, Rect},
terminal::Frame,
text::Span,
text::Spans,
text::{Spans, Text},
widgets::{Block, Borders, Row, Table},
};
@ -16,7 +16,6 @@ use crate::{
},
constants::*,
};
use std::borrow::Cow;
use unicode_segmentation::UnicodeSegmentation;
const TEMP_HEADERS: [&str; 2] = ["Sensor", "Temp"];
@ -123,23 +122,23 @@ impl TempTableWidget for Painter {
let first_n = graphemes
[..(*calculated_col_width as usize - 1)]
.concat();
Cow::Owned(format!("{}", first_n))
Text::raw(format!("{}", first_n))
} else {
Cow::Borrowed(entry)
Text::raw(entry)
}
} else {
Cow::Borrowed(entry)
Text::raw(entry)
}
} else {
Cow::Borrowed(entry)
Text::raw(entry)
}
} else {
Cow::Borrowed(entry)
Text::raw(entry)
}
},
);
Row::Data(truncated_data)
Row::new(truncated_data)
});
let (border_style, highlight_style) = if is_on_widget {
@ -230,9 +229,13 @@ impl TempTableWidget for Painter {
// Draw
f.render_stateful_widget(
Table::new(TEMP_HEADERS.iter(), temperature_rows)
Table::new(temperature_rows)
.header(
Row::new(TEMP_HEADERS.to_vec())
.style(self.colours.table_header_style)
.bottom_margin(table_gap),
)
.block(temp_block)
.header_style(self.colours.table_header_style)
.highlight_style(highlight_style)
.style(self.colours.text_style)
.widths(
@ -242,8 +245,7 @@ impl TempTableWidget for Painter {
.iter()
.map(|calculated_width| Constraint::Length(*calculated_width as u16))
.collect::<Vec<_>>()),
)
.header_gap(table_gap),
),
margined_draw_loc,
temp_table_state,
);

View File

@ -75,13 +75,11 @@ pub fn handle_mouse_event(event: MouseEvent, app: &mut App) {
MouseEvent::ScrollUp(_x, _y, _modifiers) => app.handle_scroll_up(),
MouseEvent::ScrollDown(_x, _y, _modifiers) => app.handle_scroll_down(),
MouseEvent::Down(button, x, y, _modifiers) => {
// debug!("Button down: {:?}, x: {}, y: {}", button, x, y);
if !app.app_config_fields.disable_click {
match button {
crossterm::event::MouseButton::Left => {
// Trigger left click widget activity
app.left_mouse_click_movement(x, y);
app.on_left_mouse_up(x, y);
}
crossterm::event::MouseButton::Right => {}
_ => {}