mirror of
https://github.com/an-anime-team/sleepy-launcher.git
synced 2025-03-15 06:28:27 +03:00
preferences: added downloaded wine/dxvks lists
This commit is contained in:
parent
29702782e2
commit
7ba025489d
2 changed files with 83 additions and 2 deletions
|
@ -221,6 +221,7 @@ impl WidgetTemplate for General {
|
|||
add = &adw::PreferencesGroup {
|
||||
set_title: &tr("wine-version"),
|
||||
|
||||
#[name(wine_version_selector)]
|
||||
adw::ComboRow {
|
||||
set_title: &tr("selected-version")
|
||||
},
|
||||
|
@ -243,6 +244,7 @@ impl WidgetTemplate for General {
|
|||
add = &adw::PreferencesGroup {
|
||||
set_title: &tr("dxvk-version"),
|
||||
|
||||
#[name(dxvk_version_selector)]
|
||||
adw::ComboRow {
|
||||
set_title: &tr("selected-version")
|
||||
},
|
||||
|
|
|
@ -12,13 +12,21 @@ use crate::CONFIG;
|
|||
|
||||
pub struct App {
|
||||
wine_components: Controller<ComponentsList>,
|
||||
dxvk_components: Controller<ComponentsList>
|
||||
dxvk_components: Controller<ComponentsList>,
|
||||
|
||||
downloaded_wine_versions: Vec<wine::Version>,
|
||||
downloaded_dxvk_versions: Vec<dxvk::Version>,
|
||||
|
||||
selected_wine_version: u32,
|
||||
selected_dxvk_version: u32
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum AppMsg {
|
||||
WineRecommendedOnly(bool),
|
||||
DxvkRecommendedOnly(bool)
|
||||
DxvkRecommendedOnly(bool),
|
||||
UpdateDownloadedWine,
|
||||
UpdateDownloadedDxvk
|
||||
}
|
||||
|
||||
#[relm4::component(pub)]
|
||||
|
@ -45,6 +53,15 @@ impl SimpleComponent for App {
|
|||
add = model.wine_components.widget(),
|
||||
},
|
||||
|
||||
#[template_child]
|
||||
wine_version_selector {
|
||||
#[watch]
|
||||
set_model: Some(>k::StringList::new(&model.downloaded_wine_versions.iter().map(|version| version.title.as_str()).collect::<Vec<&str>>())),
|
||||
|
||||
#[watch]
|
||||
set_selected: model.selected_wine_version
|
||||
},
|
||||
|
||||
#[template_child]
|
||||
wine_recommended_only {
|
||||
connect_state_notify[sender] => move |switch| {
|
||||
|
@ -57,6 +74,15 @@ impl SimpleComponent for App {
|
|||
add = model.dxvk_components.widget(),
|
||||
},
|
||||
|
||||
#[template_child]
|
||||
dxvk_version_selector {
|
||||
#[watch]
|
||||
set_model: Some(>k::StringList::new(&model.downloaded_dxvk_versions.iter().map(|version| version.name.as_str()).collect::<Vec<&str>>())),
|
||||
|
||||
#[watch]
|
||||
set_selected: model.selected_dxvk_version
|
||||
},
|
||||
|
||||
#[template_child]
|
||||
dxvk_recommended_only {
|
||||
connect_state_notify[sender] => move |switch| {
|
||||
|
@ -97,12 +123,21 @@ impl SimpleComponent for App {
|
|||
groups: dxvk::get_groups().into_iter().map(|group| group.into()).collect()
|
||||
})
|
||||
.detach(),
|
||||
|
||||
downloaded_wine_versions: vec![],
|
||||
downloaded_dxvk_versions: vec![],
|
||||
|
||||
selected_wine_version: 0,
|
||||
selected_dxvk_version: 0
|
||||
};
|
||||
|
||||
let widgets = view_output!();
|
||||
|
||||
widgets.preferences_window.set_transient_for(Some(&parent));
|
||||
|
||||
sender.input(AppMsg::UpdateDownloadedWine);
|
||||
sender.input(AppMsg::UpdateDownloadedDxvk);
|
||||
|
||||
ComponentParts { model, widgets }
|
||||
}
|
||||
|
||||
|
@ -119,6 +154,50 @@ impl SimpleComponent for App {
|
|||
// todo
|
||||
self.dxvk_components.sender().send(components::list::AppMsg::ShowRecommendedOnly(state)).unwrap();
|
||||
}
|
||||
|
||||
AppMsg::UpdateDownloadedWine => {
|
||||
self.downloaded_wine_versions = wine::get_downloaded(&CONFIG.game.wine.builds).unwrap_or_default();
|
||||
|
||||
self.selected_wine_version = if let Some(selected) = &CONFIG.game.wine.selected {
|
||||
let mut index = 0;
|
||||
|
||||
for (i, version) in self.downloaded_wine_versions.iter().enumerate() {
|
||||
if &version.name == selected {
|
||||
index = i;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
index as u32
|
||||
}
|
||||
|
||||
else {
|
||||
0
|
||||
};
|
||||
}
|
||||
|
||||
AppMsg::UpdateDownloadedDxvk => {
|
||||
self.downloaded_dxvk_versions = dxvk::get_downloaded(&CONFIG.game.dxvk.builds).unwrap_or_default();
|
||||
|
||||
self.selected_dxvk_version = if let Ok(Some(selected)) = CONFIG.try_get_selected_dxvk_info() {
|
||||
let mut index = 0;
|
||||
|
||||
for (i, version) in self.downloaded_dxvk_versions.iter().enumerate() {
|
||||
if version.name == selected.name {
|
||||
index = i;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
index as u32
|
||||
}
|
||||
|
||||
else {
|
||||
0
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue