From 3e66a59d0744915e5121b7d0fdbacf48731ce31f Mon Sep 17 00:00:00 2001 From: Ilya Zlobintsev Date: Sun, 19 Feb 2023 20:32:49 +0200 Subject: [PATCH] feat: fan curve reset --- lact-gui/src/app/mod.rs | 8 ++--- .../thermals_page/fan_curve_frame/mod.rs | 34 ++++++++++++++++--- 2 files changed, 32 insertions(+), 10 deletions(-) diff --git a/lact-gui/src/app/mod.rs b/lact-gui/src/app/mod.rs index 6984a18..c8e0682 100644 --- a/lact-gui/src/app/mod.rs +++ b/lact-gui/src/app/mod.rs @@ -83,15 +83,12 @@ impl App { let current_gpu_id = Arc::new(RwLock::new(String::new())); - { - let current_gpu_id = current_gpu_id.clone(); - app.header.connect_gpu_selection_changed(clone!(@strong app => move |gpu_id| { + app.header.connect_gpu_selection_changed(clone!(@strong app, @strong current_gpu_id => move |gpu_id| { info!("GPU Selection changed"); app.set_info(&gpu_id); *current_gpu_id.write().unwrap() = gpu_id; })); - } let devices_buf = app .daemon_client @@ -138,7 +135,7 @@ impl App { app.set_initial(&gpu_id) })); - app.start_stats_update_loop(current_gpu_id.clone()); + app.start_stats_update_loop(current_gpu_id); app.window.show(); @@ -151,6 +148,7 @@ impl App { } })); + // Args are passed manually since they were already processed by clap before self.application.run_with_args::(&[]); Ok(()) } diff --git a/lact-gui/src/app/root_stack/thermals_page/fan_curve_frame/mod.rs b/lact-gui/src/app/root_stack/thermals_page/fan_curve_frame/mod.rs index 49e920a..ee5c544 100644 --- a/lact-gui/src/app/root_stack/thermals_page/fan_curve_frame/mod.rs +++ b/lact-gui/src/app/root_stack/thermals_page/fan_curve_frame/mod.rs @@ -6,7 +6,7 @@ use gtk::graphene::Point; use gtk::gsk::Transform; use gtk::prelude::*; use gtk::*; -use lact_client::schema::FanCurveMap; +use lact_client::schema::{default_fan_curve, FanCurveMap}; use std::cell::RefCell; use std::collections::BTreeMap; use std::rc::Rc; @@ -47,22 +47,46 @@ impl FanCurveFrame { let temperature_title_label = Label::new(Some("Temperature (°C)")); - // let add_button = Button::builder().icon_name("list-add-symbolic").build(); + let buttons_box = Box::builder() + .orientation(Orientation::Horizontal) + .spacing(5) + .halign(Align::End) + .build(); + + let add_button = Button::builder().icon_name("list-add-symbolic").build(); + let remove_button = Button::builder().icon_name("list-remove-symbolic").build(); + let default_button = Button::builder().label("Default").build(); + + buttons_box.append(&default_button); + buttons_box.append(&remove_button); + buttons_box.append(&add_button); root_box.append(&hbox); root_box.append(&temperature_title_label); - // root_box.append(&add_button); + root_box.append(&buttons_box); let points = Rc::new(RefCell::new(Vec::new())); - Self { + let curve_frame = Self { container: root_box, curve_container, points, - } + }; + + default_button.connect_clicked(clone!(@strong curve_frame => move |_| { + let curve = default_fan_curve(); + curve_frame.set_curve(&curve); + })); + + curve_frame } pub fn set_curve(&self, curve: &FanCurveMap) { + // Notify that the values were changed when the entire curve is overwritten, e.g. when resetting to default + if let Some(point) = self.points.borrow().first() { + point.ratio.emit_by_name::<()>("value-changed", &[]); + } + let points_container = Box::builder() .orientation(Orientation::Horizontal) .spacing(5)