@@ -34,50 +34,88 @@ impl<'a> Tui<'a> {
34
34
}
35
35
36
36
fn calc_header_height ( & self ) -> u16 {
37
- let mut height = 1 ;
37
+ let mut height = u16 :: from ( self . stat . show_load_avg ) ;
38
38
39
+ let mut columns = 0 ;
39
40
if self . stat . cpu_graph_mode != CpuGraphMode :: Hide {
40
- height += 1 ;
41
- height += self . header . cpu . len ( ) as u16 ;
41
+ height += 1 ; // task line
42
+ if self . stat . cpu_graph_mode == CpuGraphMode :: Sum {
43
+ height += self . header . cpu . len ( ) as u16 ;
44
+ } else {
45
+ columns += self . header . cpu . len ( ) as u16 ;
46
+ }
42
47
}
43
48
if self . stat . memory_graph_mode != MemoryGraphMode :: Hide {
44
- height += 2 ;
49
+ if self . stat . memory_graph_mode == MemoryGraphMode :: Sum {
50
+ height += 2 ;
51
+ } else {
52
+ columns += 2 ;
53
+ }
54
+ }
55
+ height += columns / self . stat . cpu_column ;
56
+ if columns % self . stat . cpu_column != 0 {
57
+ height += 1 ;
45
58
}
46
59
47
60
height
48
61
}
49
62
50
63
fn render_header ( & self , area : Rect , buf : & mut Buffer ) {
51
- let mut constraints = vec ! [ Constraint :: Length ( 1 ) ] ;
64
+ let constraints = vec ! [ Constraint :: Length ( 1 ) ; self . calc_header_height ( ) as usize ] ;
52
65
53
66
let cpu = & self . header . cpu ;
54
67
55
- if self . stat . cpu_graph_mode != CpuGraphMode :: Hide {
56
- constraints. extend ( vec ! [ Constraint :: Length ( 1 ) ; cpu. len( ) + 1 ] ) ;
57
- }
58
- if self . stat . memory_graph_mode != MemoryGraphMode :: Hide {
59
- constraints. extend ( vec ! [ Constraint :: Length ( 1 ) ; 2 ] ) ;
60
- }
61
68
let header_layout = Layout :: new ( Direction :: Vertical , constraints) . split ( area) ;
62
69
let mut i = 0 ;
63
70
64
- let render_bars = |bars_to_render : Vec < ( String , f64 , f64 , f64 , f64 , char , bool ) > ,
65
- buf : & mut Buffer ,
66
- i : usize | {
71
+ let mut i_columns = 0 ;
72
+ let mut cpu_column = None ;
73
+ let mut render_bars = |bars_to_render : Vec < ( String , f64 , f64 , f64 , f64 , char , bool ) > ,
74
+ buf : & mut Buffer ,
75
+ i : usize | {
67
76
let mut i = i;
68
77
for ( tag, l, r, red, yellow, content, print_percentage) in bars_to_render {
78
+ if cpu_column. is_none ( ) || i_columns >= self . stat . cpu_column as usize {
79
+ let mut constraints = vec ! [ Constraint :: Min ( 25 ) ] ;
80
+ let mut width_left = header_layout[ i] . width - 25 ;
81
+ for _ in 0 ..self . stat . cpu_column {
82
+ if width_left > 28 {
83
+ constraints. extend ( vec ! [ Constraint :: Length ( 3 ) , Constraint :: Min ( 25 ) ] ) ;
84
+ width_left -= 28 ;
85
+ } else {
86
+ constraints. extend ( vec ! [ Constraint :: Length ( 0 ) , Constraint :: Length ( 0 ) ] ) ;
87
+ }
88
+ }
89
+ let line =
90
+ Layout :: new ( Direction :: Horizontal , constraints) . split ( header_layout[ i] ) ;
91
+ i += 1 ;
92
+ i_columns = 0 ;
93
+ cpu_column = Some ( line) ;
94
+ }
95
+
96
+ let column_offset = i_columns * 2 ;
97
+ let area = cpu_column. as_ref ( ) . unwrap ( ) [ column_offset] ;
98
+ if i_columns > 0 {
99
+ Line :: from ( vec ! [
100
+ Span :: raw( " " ) ,
101
+ Span :: styled( " " , Style :: default ( ) . bg( Color :: Yellow ) ) ,
102
+ Span :: raw( " " ) ,
103
+ ] )
104
+ . render ( cpu_column. as_ref ( ) . unwrap ( ) [ column_offset - 1 ] , buf) ;
105
+ }
69
106
let line_layout = Layout :: new (
70
107
Direction :: Horizontal ,
71
108
[
72
109
Constraint :: Length ( 10 ) ,
73
- Constraint :: Length ( 16 ) ,
110
+ Constraint :: Length ( if self . stat . cpu_column < 3 { 16 } else { 0 } ) ,
74
111
Constraint :: Length ( 1 ) ,
75
112
Constraint :: Min ( 0 ) ,
76
113
Constraint :: Length ( 1 ) ,
77
114
] ,
78
115
)
79
- . split ( header_layout[ i] ) ;
80
- i += 1 ;
116
+ . split ( area) ;
117
+ i_columns += 1 ;
118
+
81
119
Span :: styled ( format ! ( "%{tag:<6}:" , ) , Style :: default ( ) . red ( ) )
82
120
. render ( line_layout[ 0 ] , buf) ;
83
121
let percentage = if print_percentage {
@@ -120,15 +158,17 @@ impl<'a> Tui<'a> {
120
158
i
121
159
} ;
122
160
123
- let uptime = format ! (
124
- "top - {time} {uptime}, {user}, {load_average}" ,
125
- time = self . header. uptime. time,
126
- uptime = self . header. uptime. uptime,
127
- user = self . header. uptime. user,
128
- load_average = self . header. uptime. load_average,
129
- ) ;
130
- Paragraph :: new ( uptime) . render ( header_layout[ 0 ] , buf) ;
131
- i += 1 ;
161
+ if self . stat . show_load_avg {
162
+ let load_avg = format ! (
163
+ "top - {time} {uptime}, {user}, {load_average}" ,
164
+ time = self . header. uptime. time,
165
+ uptime = self . header. uptime. uptime,
166
+ user = self . header. uptime. user,
167
+ load_average = self . header. uptime. load_average,
168
+ ) ;
169
+ Paragraph :: new ( load_avg) . render ( header_layout[ i] , buf) ;
170
+ i += 1 ;
171
+ }
132
172
133
173
if self . stat . cpu_graph_mode != CpuGraphMode :: Hide {
134
174
let task = & self . header . task ;
@@ -145,7 +185,7 @@ impl<'a> Tui<'a> {
145
185
Span :: raw( task. zombie. to_string( ) ) ,
146
186
Span :: styled( " zombie" , Style :: default ( ) . red( ) ) ,
147
187
] ;
148
- Line :: from ( task_line) . render ( header_layout[ 1 ] , buf) ;
188
+ Line :: from ( task_line) . render ( header_layout[ i ] , buf) ;
149
189
i += 1 ;
150
190
151
191
let mut cpu_bars = Vec :: new ( ) ;
@@ -253,15 +293,27 @@ impl<'a> Tui<'a> {
253
293
bar_content,
254
294
false ,
255
295
) ) ;
256
- mem_bars. push ( (
257
- format ! ( "{unit_name} Swap" ) ,
258
- mem. used_swap as f64 / mem. total_swap as f64 * 100.0 ,
259
- format_memory ( mem. total_swap , unit) ,
260
- 0.0 ,
261
- mem. used_swap as f64 / mem. total_swap as f64 ,
262
- bar_content,
263
- false ,
264
- ) ) ;
296
+ if mem. total_swap > 0 {
297
+ mem_bars. push ( (
298
+ format ! ( "{unit_name} Swap" ) ,
299
+ mem. used_swap as f64 / mem. total_swap as f64 * 100.0 ,
300
+ format_memory ( mem. total_swap , unit) ,
301
+ 0.0 ,
302
+ mem. used_swap as f64 / mem. total_swap as f64 ,
303
+ bar_content,
304
+ false ,
305
+ ) ) ;
306
+ } else {
307
+ mem_bars. push ( (
308
+ format ! ( "{unit_name} Swap" ) ,
309
+ 0.0 ,
310
+ 0.0 ,
311
+ 0.0 ,
312
+ 0.0 ,
313
+ bar_content,
314
+ false ,
315
+ ) ) ;
316
+ }
265
317
render_bars ( mem_bars, & mut * buf, i) ;
266
318
}
267
319
}
0 commit comments