mirror of
https://github.com/ilya-zlobintsev/LACT.git
synced 2026-11-03 12:50:31 -06:00
fix: move performance frame listbox (#1209)
* fix performance-frame render * power mode UI fixes
This commit is contained in:
1 parent
9bbda62034
commit
c55a6ebe13
3 files changed
+78
-44
No files matched your search
@@ -168,7 +168,7 @@ performance-level-profile-min-mclk-description = Forces the VRAM clock to lowest
|
||||
performance-level-profile-peak-description = Forces GPU and VRAM clocks to highest levels
|
||||
|
||||
performance-level = Performance Level
|
||||
power-profile-mode = Power Profile Mode:
|
||||
power-profile-mode = Power Profile Mode
|
||||
manual-level-needed = Performance level has to be set to "manual" to use power states and modes
|
||||
power-mizer-mode = PowerMizer Mode
|
||||
power-mizer-mode-auto = Auto
|
||||
|
||||
@@ -33,6 +33,23 @@ pub struct PerformanceFrame {
|
||||
heuristics_components: Vec<relm4::Controller<PowerProfileHeuristicsList>>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Default)]
|
||||
pub struct PerformanceRows {
|
||||
pub performance_level: gtk::ListBoxRow,
|
||||
pub power_profile: gtk::ListBoxRow,
|
||||
pub power_mizer: gtk::ListBoxRow,
|
||||
}
|
||||
|
||||
impl PerformanceRows {
|
||||
pub fn rows(&self) -> [>k::ListBoxRow; 3] {
|
||||
[
|
||||
&self.performance_level,
|
||||
&self.power_profile,
|
||||
&self.power_mizer,
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum PerformanceFrameMsg {
|
||||
PerformanceLevel(Option<PerformanceLevel>),
|
||||
@@ -53,19 +70,19 @@ impl relm4::Component for PerformanceFrame {
|
||||
type CommandOutput = ();
|
||||
|
||||
view! {
|
||||
gtk::Box {
|
||||
set_orientation: gtk::Orientation::Vertical,
|
||||
set_spacing: 10,
|
||||
#[watch]
|
||||
set_visible: model.performance_level.is_some()
|
||||
|| model.power_profile_modes_table.is_some()
|
||||
|| model.active_power_mizer_mode.is_some(),
|
||||
#[root]
|
||||
PerformanceRows::default() {},
|
||||
|
||||
append = >k::Box {
|
||||
#[local]
|
||||
performance_level_row -> gtk::ListBoxRow {
|
||||
set_activatable: false,
|
||||
set_selectable: false,
|
||||
#[watch]
|
||||
set_visible: model.performance_level.is_some(),
|
||||
|
||||
gtk::Box {
|
||||
set_orientation: gtk::Orientation::Horizontal,
|
||||
set_spacing: 10,
|
||||
#[watch]
|
||||
set_visible: model.performance_level.is_some(),
|
||||
|
||||
gtk::Box {
|
||||
set_orientation: gtk::Orientation::Vertical,
|
||||
@@ -113,21 +130,25 @@ impl relm4::Component for PerformanceFrame {
|
||||
} @ level_select_handler,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
append = >k::Box {
|
||||
#[local]
|
||||
power_profile_row -> gtk::ListBoxRow {
|
||||
set_activatable: false,
|
||||
set_selectable: false,
|
||||
#[watch]
|
||||
set_visible: model.power_profile_modes_table.is_some(),
|
||||
|
||||
gtk::Box {
|
||||
set_orientation: gtk::Orientation::Horizontal,
|
||||
set_spacing: 10,
|
||||
#[watch]
|
||||
set_visible: model.power_profile_modes_table.is_some(),
|
||||
|
||||
gtk::Label {
|
||||
set_label: &fl!(I18N, "power-profile-mode"),
|
||||
set_hexpand: true,
|
||||
set_halign: gtk::Align::Start,
|
||||
},
|
||||
|
||||
gtk::MenuButton {
|
||||
set_icon_name: "dialog-information-symbolic",
|
||||
#[watch]
|
||||
set_visible: model.performance_level != Some(PerformanceLevel::Manual),
|
||||
|
||||
@@ -137,9 +158,18 @@ impl relm4::Component for PerformanceFrame {
|
||||
set_label: &fl!(I18N, "manual-level-needed"),
|
||||
}
|
||||
},
|
||||
|
||||
add_css_class: css::FLAT,
|
||||
#[wrap(Some)]
|
||||
set_child = >k::Image {
|
||||
set_icon_name: Some("info-outline-symbolic"),
|
||||
set_pixel_size: 12,
|
||||
},
|
||||
},
|
||||
|
||||
gtk::MenuButton {
|
||||
set_hexpand: true,
|
||||
set_halign: gtk::Align::End,
|
||||
set_always_show_arrow: false,
|
||||
#[watch]
|
||||
set_label: model.power_profile_modes_table.as_ref().and_then(|table| table.modes.get(&table.active)).map(|profile| profile.name.as_str()).unwrap_or_default(),
|
||||
@@ -182,12 +212,18 @@ impl relm4::Component for PerformanceFrame {
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
append = >k::Box {
|
||||
#[local]
|
||||
power_mizer_row -> gtk::ListBoxRow {
|
||||
set_activatable: false,
|
||||
set_selectable: false,
|
||||
#[watch]
|
||||
set_visible: model.active_power_mizer_mode.is_some(),
|
||||
|
||||
gtk::Box {
|
||||
set_orientation: gtk::Orientation::Horizontal,
|
||||
set_spacing: 10,
|
||||
#[watch]
|
||||
set_visible: model.active_power_mizer_mode.is_some(),
|
||||
|
||||
gtk::Box {
|
||||
set_orientation: gtk::Orientation::Vertical,
|
||||
@@ -238,9 +274,12 @@ impl relm4::Component for PerformanceFrame {
|
||||
|
||||
fn init(
|
||||
_init: Self::Init,
|
||||
_root: Self::Root,
|
||||
root: Self::Root,
|
||||
sender: ComponentSender<Self>,
|
||||
) -> ComponentParts<Self> {
|
||||
let performance_level_row = root.performance_level.clone();
|
||||
let power_profile_row = root.power_profile.clone();
|
||||
let power_mizer_row = root.power_mizer.clone();
|
||||
let level_names = PERFORMANCE_LEVELS.map(level_friendly_name);
|
||||
let level_names_ref = level_names
|
||||
.iter()
|
||||
|
||||
@@ -63,20 +63,7 @@ impl relm4::Component for PowerFrame {
|
||||
},
|
||||
#[template]
|
||||
#[local]
|
||||
append_child = &card -> AdjustmentCard {
|
||||
#[template_child]
|
||||
content {
|
||||
#[name = "performance_row"]
|
||||
gtk::ListBoxRow {
|
||||
set_activatable: false,
|
||||
set_selectable: false,
|
||||
#[watch]
|
||||
set_visible: model.performance_frame.widget().get_visible(),
|
||||
|
||||
set_child: Some(model.performance_frame.widget()),
|
||||
},
|
||||
},
|
||||
},
|
||||
append_child = &card -> AdjustmentCard {},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -94,20 +81,22 @@ impl relm4::Component for PowerFrame {
|
||||
performance_frame: PerformanceFrame::launch_default()
|
||||
.forward(sender.output_sender(), |msg| msg),
|
||||
};
|
||||
let visibility_sender = sender.clone();
|
||||
model
|
||||
.performance_frame
|
||||
.widget()
|
||||
.connect_visible_notify(move |_| {
|
||||
for row in model.performance_frame.widget().rows() {
|
||||
card.content.append(row);
|
||||
let visibility_sender = sender.clone();
|
||||
row.connect_visible_notify(move |_| {
|
||||
visibility_sender.input(PowerFrameMsg::RefreshVisibility);
|
||||
});
|
||||
}
|
||||
|
||||
let widgets = view_output!();
|
||||
let performance_row = widgets.performance_row.clone();
|
||||
// FIXME: performance-row should be adjustmentRow like factory. until that we need to sort to get right order
|
||||
let rows = model.performance_frame.widget().rows().map(Clone::clone);
|
||||
// FIXME: performance rows should be factory items like AdjustmentRow; until then
|
||||
// sort to keep the power limit before them when the factory recreates it.
|
||||
model.power_row.widget().set_sort_func(move |left, right| {
|
||||
(left == &performance_row)
|
||||
.cmp(&(right == &performance_row))
|
||||
rows.iter()
|
||||
.position(|row| row == left)
|
||||
.cmp(&rows.iter().position(|row| row == right))
|
||||
.into()
|
||||
});
|
||||
|
||||
@@ -161,7 +150,13 @@ impl relm4::Component for PowerFrame {
|
||||
|
||||
impl PowerFrame {
|
||||
fn is_available(&self) -> bool {
|
||||
!self.power_row.is_empty() || self.performance_frame.widget().get_visible()
|
||||
!self.power_row.is_empty()
|
||||
|| self
|
||||
.performance_frame
|
||||
.widget()
|
||||
.rows()
|
||||
.iter()
|
||||
.any(|row| row.get_visible())
|
||||
}
|
||||
|
||||
pub fn get_user_cap(&self) -> Option<f64> {
|
||||
|
||||
Reference in new issue
Block a user