1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
use std::{borrow::Cow, cmp::Reverse};
use super::ProcWidgetData;
use crate::{
components::data_table::{ColumnHeader, SortsRow},
utils::gen_util::sort_partial_fn,
};
#[derive(Debug, PartialEq, Eq, Copy, Clone)]
pub enum ProcColumn {
CpuPercent,
MemoryVal,
MemoryPercent,
Pid,
Count,
Name,
Command,
ReadPerSecond,
WritePerSecond,
TotalRead,
TotalWrite,
State,
User,
}
impl ColumnHeader for ProcColumn {
fn text(&self) -> Cow<'static, str> {
match self {
ProcColumn::CpuPercent => "CPU%",
ProcColumn::MemoryVal => "Mem",
ProcColumn::MemoryPercent => "Mem%",
ProcColumn::Pid => "PID",
ProcColumn::Count => "Count",
ProcColumn::Name => "Name",
ProcColumn::Command => "Command",
ProcColumn::ReadPerSecond => "R/s",
ProcColumn::WritePerSecond => "W/s",
ProcColumn::TotalRead => "T.Read",
ProcColumn::TotalWrite => "T.Write",
ProcColumn::State => "State",
ProcColumn::User => "User",
}
.into()
}
fn header(&self) -> Cow<'static, str> {
match self {
ProcColumn::CpuPercent => "CPU%(c)",
ProcColumn::MemoryVal => "Mem(m)",
ProcColumn::MemoryPercent => "Mem%(m)",
ProcColumn::Pid => "PID(p)",
ProcColumn::Count => "Count",
ProcColumn::Name => "Name(n)",
ProcColumn::Command => "Command(n)",
ProcColumn::ReadPerSecond => "R/s",
ProcColumn::WritePerSecond => "W/s",
ProcColumn::TotalRead => "T.Read",
ProcColumn::TotalWrite => "T.Write",
ProcColumn::State => "State",
ProcColumn::User => "User",
}
.into()
}
}
impl SortsRow for ProcColumn {
type DataType = ProcWidgetData;
fn sort_data(&self, data: &mut [ProcWidgetData], descending: bool) {
match self {
ProcColumn::CpuPercent => {
data.sort_by(|a, b| {
sort_partial_fn(descending)(a.cpu_usage_percent, b.cpu_usage_percent)
});
}
ProcColumn::MemoryVal | ProcColumn::MemoryPercent => {
data.sort_by(|a, b| sort_partial_fn(descending)(&a.mem_usage, &b.mem_usage));
}
ProcColumn::Pid => {
data.sort_by(|a, b| sort_partial_fn(descending)(a.pid, b.pid));
}
ProcColumn::Count => {
data.sort_by(|a, b| sort_partial_fn(descending)(a.num_similar, b.num_similar));
}
ProcColumn::Name | ProcColumn::Command => {
if descending {
data.sort_by_cached_key(|pd| Reverse(pd.id.to_lowercase()));
} else {
data.sort_by_cached_key(|pd| pd.id.to_lowercase());
}
}
ProcColumn::ReadPerSecond => {
data.sort_by(|a, b| sort_partial_fn(descending)(a.rps, b.rps));
}
ProcColumn::WritePerSecond => {
data.sort_by(|a, b| sort_partial_fn(descending)(a.wps, b.wps));
}
ProcColumn::TotalRead => {
data.sort_by(|a, b| sort_partial_fn(descending)(a.total_read, b.total_read));
}
ProcColumn::TotalWrite => {
data.sort_by(|a, b| sort_partial_fn(descending)(a.total_write, b.total_write));
}
ProcColumn::State => {
if descending {
data.sort_by_cached_key(|pd| Reverse(pd.process_state.to_lowercase()));
} else {
data.sort_by_cached_key(|pd| pd.process_state.to_lowercase());
}
}
ProcColumn::User => {
if descending {
data.sort_by_cached_key(|pd| Reverse(pd.user.to_lowercase()));
} else {
data.sort_by_cached_key(|pd| pd.user.to_lowercase());
}
}
}
}
}
|