mirror of
https://github.com/ilya-zlobintsev/LACT.git
synced 2026-08-17 16:34:54 -05:00
refactor: use helper methods for component launch (#1041)
This commit is contained in:
+17
-25
@@ -21,6 +21,7 @@ use crate::{
|
||||
APP_ID, CONFIG, GUI_VERSION, I18N,
|
||||
app::{
|
||||
about_dialog::{AboutDialog, AboutDialogMsg},
|
||||
ext::RelmLaunchable as _,
|
||||
gpu_selector::GpuSelector,
|
||||
info_dialog::{
|
||||
InfoDialog, InfoDialogConfirmation, InfoDialogData, InfoDialogId, InfoDialogMsg,
|
||||
@@ -436,31 +437,23 @@ impl AsyncComponent for AppModel {
|
||||
|
||||
let info_page = InformationPage::detach_default();
|
||||
|
||||
let oc_page = OcPage::builder()
|
||||
.launch(settings_changed.clone())
|
||||
.forward(sender.input_sender(), |msg| msg);
|
||||
let thermals_page = ThermalsPage::builder().launch(()).detach();
|
||||
let oc_page =
|
||||
OcPage::launch(settings_changed.clone()).forward(sender.input_sender(), |msg| msg);
|
||||
let thermals_page = ThermalsPage::detach_default();
|
||||
|
||||
let software_page = SoftwarePage::builder()
|
||||
.launch((system_info.clone(), daemon_client.embedded))
|
||||
.detach();
|
||||
let software_page = SoftwarePage::detach((system_info.clone(), daemon_client.embedded));
|
||||
|
||||
let crash_page = CrashPage::builder()
|
||||
.launch(String::new())
|
||||
.forward(sender.input_sender(), |msg| msg);
|
||||
let crash_page = CrashPage::launch_default().forward(sender.input_sender(), |msg| msg);
|
||||
|
||||
let overdrive_dialog = OverdriveDialog::builder()
|
||||
.launch((system_info.clone(), root.clone().upcast()))
|
||||
.detach();
|
||||
let overdrive_dialog =
|
||||
OverdriveDialog::detach((system_info.clone(), root.clone().upcast()));
|
||||
|
||||
let preferences_dialog = PreferencesDialog::builder()
|
||||
.launch((system_info.clone(), root.clone()))
|
||||
.detach();
|
||||
let preferences_dialog = PreferencesDialog::detach((system_info.clone(), root.clone()));
|
||||
|
||||
let about_dialog = AboutDialog::builder().launch(root.clone()).detach();
|
||||
let info_dialog = InfoDialog::builder()
|
||||
.launch(root.clone())
|
||||
.forward(sender.input_sender(), |msg| msg);
|
||||
let about_dialog = AboutDialog::detach(root.clone());
|
||||
|
||||
let info_dialog =
|
||||
InfoDialog::launch(root.clone()).forward(sender.input_sender(), |msg| msg);
|
||||
|
||||
let graphs_window = GraphsWindow::detach_default();
|
||||
let process_monitor_window = ProcessMonitorWindow::detach_default();
|
||||
@@ -469,9 +462,8 @@ impl AsyncComponent for AppModel {
|
||||
.launch((devices, initial_gpu_id.clone()))
|
||||
.forward(sender.input_sender(), AppMsg::SelectGpu);
|
||||
|
||||
let profile_selector = ProfileSelector::builder()
|
||||
.launch(())
|
||||
.forward(sender.input_sender(), |msg| msg);
|
||||
let profile_selector =
|
||||
ProfileSelector::launch_default().forward(sender.input_sender(), |msg| msg);
|
||||
|
||||
// create action group and actions for app menu
|
||||
// action group and actions are declared at the bottom of the file
|
||||
@@ -736,7 +728,7 @@ impl AppModel {
|
||||
filters: vec![json_filter],
|
||||
..Default::default()
|
||||
};
|
||||
let file_picker = OpenDialog::builder().launch(settings);
|
||||
let file_picker = OpenDialog::launch(settings);
|
||||
file_picker.emit(OpenDialogMsg::Open);
|
||||
let stream = file_picker.into_stream();
|
||||
|
||||
@@ -755,7 +747,7 @@ impl AppModel {
|
||||
is_modal: true,
|
||||
..Default::default()
|
||||
};
|
||||
let diag = SaveDialog::builder().launch(settings);
|
||||
let diag = SaveDialog::launch(settings);
|
||||
diag.emit(SaveDialogMsg::SaveAs(format!(
|
||||
"LACT-profile-{}.json",
|
||||
name.as_deref().unwrap_or("default")
|
||||
|
||||
+18
-3
@@ -21,15 +21,30 @@ impl FlowBoxExt for FlowBox {
|
||||
.unwrap()
|
||||
}
|
||||
}
|
||||
pub trait RelmDefaultLauchable: Component {
|
||||
fn detach_default() -> relm4::Controller<Self>;
|
||||
|
||||
pub trait RelmLaunchable: Component {
|
||||
fn launch(init: <Self as Component>::Init) -> relm4::component::Connector<Self>;
|
||||
|
||||
fn detach(init: <Self as Component>::Init) -> relm4::Controller<Self> {
|
||||
Self::launch(init).detach()
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Component> RelmLaunchable for T {
|
||||
fn launch(init: <Self as Component>::Init) -> relm4::component::Connector<Self> {
|
||||
Self::builder().launch(init)
|
||||
}
|
||||
}
|
||||
|
||||
pub trait RelmDefaultLauchable: RelmLaunchable {
|
||||
fn launch_default() -> relm4::component::Connector<Self>;
|
||||
|
||||
fn detach_default() -> relm4::Controller<Self>;
|
||||
}
|
||||
|
||||
impl<S: Default, T: Component<Init = S>> RelmDefaultLauchable for T {
|
||||
fn detach_default() -> relm4::Controller<Self> {
|
||||
Self::builder().launch(S::default()).detach()
|
||||
Self::detach(S::default())
|
||||
}
|
||||
|
||||
fn launch_default() -> relm4::component::Connector<Self> {
|
||||
|
||||
@@ -6,6 +6,7 @@ mod power_states;
|
||||
mod vf_curve;
|
||||
|
||||
use super::PageUpdate;
|
||||
use crate::app::ext::RelmLaunchable as _;
|
||||
use crate::app::pages::oc_page::gpu_stats_section::GpuStatsSectionMsg;
|
||||
use crate::app::pages::oc_page::vf_curve::{VfCurveEditor, VfCurveEditorMsg};
|
||||
use crate::app::{ext::RelmDefaultLauchable, msg::AppMsg};
|
||||
@@ -88,7 +89,7 @@ impl relm4::Component for OcPage {
|
||||
let performance_frame =
|
||||
PerformanceFrame::launch_default().forward(sender.input_sender(), |msg| msg);
|
||||
|
||||
let vf_curve_editor = VfCurveEditor::builder().launch(settings_changed).detach();
|
||||
let vf_curve_editor = VfCurveEditor::detach(settings_changed);
|
||||
|
||||
let model = Self {
|
||||
stats_section,
|
||||
|
||||
@@ -2,6 +2,7 @@ use super::power_states_list::PowerStatesList;
|
||||
use crate::{
|
||||
APP_BROKER, I18N,
|
||||
app::{
|
||||
ext::RelmLaunchable as _,
|
||||
msg::AppMsg,
|
||||
page_section_expander::PageSectionExpander,
|
||||
pages::oc_page::power_states::power_states_list::{
|
||||
@@ -18,7 +19,7 @@ use i18n_embed_fl::fl;
|
||||
use indexmap::IndexMap;
|
||||
use lact_schema::{DeviceStats, PowerStates};
|
||||
use relm4::{
|
||||
Component, ComponentController, ComponentParts, ComponentSender, RelmObjectExt,
|
||||
ComponentController, ComponentParts, ComponentSender, RelmObjectExt,
|
||||
binding::{Binding, BoolBinding},
|
||||
css,
|
||||
};
|
||||
@@ -101,18 +102,14 @@ impl relm4::SimpleComponent for PowerStatesFrame {
|
||||
root: Self::Root,
|
||||
sender: ComponentSender<Self>,
|
||||
) -> ComponentParts<Self> {
|
||||
let core_states_list = PowerStatesList::builder()
|
||||
.launch(PowerStatesListOptions {
|
||||
title: fl!(I18N, "gpu-pstates"),
|
||||
value_suffix: fl!(I18N, "mhz"),
|
||||
})
|
||||
.detach();
|
||||
let vram_states_list = PowerStatesList::builder()
|
||||
.launch(PowerStatesListOptions {
|
||||
title: fl!(I18N, "vram-pstates"),
|
||||
value_suffix: fl!(I18N, "mhz"),
|
||||
})
|
||||
.detach();
|
||||
let core_states_list = PowerStatesList::detach(PowerStatesListOptions {
|
||||
title: fl!(I18N, "gpu-pstates"),
|
||||
value_suffix: fl!(I18N, "mhz"),
|
||||
});
|
||||
let vram_states_list = PowerStatesList::detach(PowerStatesListOptions {
|
||||
title: fl!(I18N, "vram-pstates"),
|
||||
value_suffix: fl!(I18N, "mhz"),
|
||||
});
|
||||
|
||||
let states_configured = BoolBinding::new(false);
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ mod profile_row;
|
||||
pub mod profile_rule_window;
|
||||
|
||||
use crate::I18N;
|
||||
use crate::app::ext::RelmLaunchable as _;
|
||||
use crate::app::msg::AppMsg;
|
||||
use crate::app::profiles::new_profile_dialog::NewProfileDialog;
|
||||
use crate::app::profiles::profile_rename_dialog::ProfileRenameDialog;
|
||||
@@ -299,7 +300,7 @@ impl Component for ProfileSelector {
|
||||
auto_switch: *auto,
|
||||
parent: root.clone().upcast::<gtk::Widget>(),
|
||||
};
|
||||
let rule_window = ProfileRuleWindow::builder().launch(params).into_stream();
|
||||
let rule_window = ProfileRuleWindow::launch(params).into_stream();
|
||||
|
||||
sender.clone().oneshot_command(async move {
|
||||
if let Some((name, rule, hooks)) = rule_window.recv_one().await {
|
||||
|
||||
Reference in New Issue
Block a user