gardesk/gartop / dfa3936

Browse files

Display max temperature in header bar

Authored by espadonne
SHA
dfa39369bef63c80eddd75861368023e79bb6760
Parents
6418383
Tree
cd05458

1 changed file

StatusFile+-
M gartop/src/gui/header.rs 30 1
gartop/src/gui/header.rsmodified
@@ -12,6 +12,7 @@ pub struct HeaderBar {
1212
     memory_usage: f32,
1313
     net_rate: f64,   // Combined rx+tx bytes/sec
1414
     disk_rate: f64,  // Combined read+write bytes/sec
15
+    max_temp: Option<f64>,  // Maximum temperature reading
1516
 }
1617
 
1718
 impl HeaderBar {
@@ -24,6 +25,7 @@ impl HeaderBar {
2425
             memory_usage: 0.0,
2526
             net_rate: 0.0,
2627
             disk_rate: 0.0,
28
+            max_temp: None,
2729
         }
2830
     }
2931
 
@@ -36,6 +38,11 @@ impl HeaderBar {
3638
         self.disk_rate = disk_rate;
3739
     }
3840
 
41
+    /// Update temperature reading.
42
+    pub fn update_temp(&mut self, max_temp: Option<f64>) {
43
+        self.max_temp = max_temp;
44
+    }
45
+
3946
     /// Render the header bar.
4047
     pub fn render(&self, renderer: &Renderer, theme: &Theme) -> anyhow::Result<()> {
4148
         // Background - use panel_bg for seamless transition to tab bar
@@ -88,6 +95,15 @@ impl HeaderBar {
8895
             ..stats_style.clone()
8996
         };
9097
 
98
+        // Temperature indicator (if available)
99
+        let temp_text = self.max_temp
100
+            .map(|t| format!("TEMP: {:.0}°C", t))
101
+            .unwrap_or_default();
102
+        let temp_style = TextStyle {
103
+            color: theme.temp_color,
104
+            ..stats_style.clone()
105
+        };
106
+
91107
         // Uptime
92108
         let uptime_text = format!("up {}", self.uptime);
93109
 
@@ -97,6 +113,11 @@ impl HeaderBar {
97113
         let y = self.bounds.y as f64 + (self.bounds.height as f64 * 0.4) + 6.0;
98114
 
99115
         let uptime_width = renderer.measure_text(&uptime_text, &stats_style)?.width as f64;
116
+        let temp_width = if self.max_temp.is_some() {
117
+            renderer.measure_text(&temp_text, &temp_style)?.width as f64
118
+        } else {
119
+            0.0
120
+        };
100121
         let disk_width = renderer.measure_text(&disk_text, &disk_style)?.width as f64;
101122
         let net_width = renderer.measure_text(&net_text, &net_style)?.width as f64;
102123
         let mem_width = renderer.measure_text(&mem_text, &mem_style)?.width as f64;
@@ -105,7 +126,12 @@ impl HeaderBar {
105126
         let right_edge = (self.bounds.x + self.bounds.width as i32) as f64;
106127
 
107128
         let uptime_x = right_edge - right_margin - uptime_width;
108
-        let disk_x = uptime_x - spacing - disk_width;
129
+        let temp_x = if self.max_temp.is_some() {
130
+            uptime_x - spacing - temp_width
131
+        } else {
132
+            uptime_x
133
+        };
134
+        let disk_x = temp_x - spacing - disk_width;
109135
         let net_x = disk_x - spacing - net_width;
110136
         let mem_x = net_x - spacing - mem_width;
111137
         let cpu_x = mem_x - spacing - cpu_width;
@@ -114,6 +140,9 @@ impl HeaderBar {
114140
         renderer.text(&mem_text, mem_x, y, &mem_style)?;
115141
         renderer.text(&net_text, net_x, y, &net_style)?;
116142
         renderer.text(&disk_text, disk_x, y, &disk_style)?;
143
+        if self.max_temp.is_some() {
144
+            renderer.text(&temp_text, temp_x, y, &temp_style)?;
145
+        }
117146
         renderer.text(&uptime_text, uptime_x, y, &stats_style)?;
118147
 
119148
         Ok(())