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 {
|
add = &adw::PreferencesGroup {
|
||||||
set_title: &tr("wine-version"),
|
set_title: &tr("wine-version"),
|
||||||
|
|
||||||
|
#[name(wine_version_selector)]
|
||||||
adw::ComboRow {
|
adw::ComboRow {
|
||||||
set_title: &tr("selected-version")
|
set_title: &tr("selected-version")
|
||||||
},
|
},
|
||||||
|
@ -243,6 +244,7 @@ impl WidgetTemplate for General {
|
||||||
add = &adw::PreferencesGroup {
|
add = &adw::PreferencesGroup {
|
||||||
set_title: &tr("dxvk-version"),
|
set_title: &tr("dxvk-version"),
|
||||||
|
|
||||||
|
#[name(dxvk_version_selector)]
|
||||||
adw::ComboRow {
|
adw::ComboRow {
|
||||||
set_title: &tr("selected-version")
|
set_title: &tr("selected-version")
|
||||||
},
|
},
|
||||||
|
|
|
@ -12,13 +12,21 @@ use crate::CONFIG;
|
||||||
|
|
||||||
pub struct App {
|
pub struct App {
|
||||||
wine_components: Controller<ComponentsList>,
|
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)]
|
#[derive(Debug)]
|
||||||
pub enum AppMsg {
|
pub enum AppMsg {
|
||||||
WineRecommendedOnly(bool),
|
WineRecommendedOnly(bool),
|
||||||
DxvkRecommendedOnly(bool)
|
DxvkRecommendedOnly(bool),
|
||||||
|
UpdateDownloadedWine,
|
||||||
|
UpdateDownloadedDxvk
|
||||||
}
|
}
|
||||||
|
|
||||||
#[relm4::component(pub)]
|
#[relm4::component(pub)]
|
||||||
|
@ -45,6 +53,15 @@ impl SimpleComponent for App {
|
||||||
add = model.wine_components.widget(),
|
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]
|
#[template_child]
|
||||||
wine_recommended_only {
|
wine_recommended_only {
|
||||||
connect_state_notify[sender] => move |switch| {
|
connect_state_notify[sender] => move |switch| {
|
||||||
|
@ -57,6 +74,15 @@ impl SimpleComponent for App {
|
||||||
add = model.dxvk_components.widget(),
|
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]
|
#[template_child]
|
||||||
dxvk_recommended_only {
|
dxvk_recommended_only {
|
||||||
connect_state_notify[sender] => move |switch| {
|
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()
|
groups: dxvk::get_groups().into_iter().map(|group| group.into()).collect()
|
||||||
})
|
})
|
||||||
.detach(),
|
.detach(),
|
||||||
|
|
||||||
|
downloaded_wine_versions: vec![],
|
||||||
|
downloaded_dxvk_versions: vec![],
|
||||||
|
|
||||||
|
selected_wine_version: 0,
|
||||||
|
selected_dxvk_version: 0
|
||||||
};
|
};
|
||||||
|
|
||||||
let widgets = view_output!();
|
let widgets = view_output!();
|
||||||
|
|
||||||
widgets.preferences_window.set_transient_for(Some(&parent));
|
widgets.preferences_window.set_transient_for(Some(&parent));
|
||||||
|
|
||||||
|
sender.input(AppMsg::UpdateDownloadedWine);
|
||||||
|
sender.input(AppMsg::UpdateDownloadedDxvk);
|
||||||
|
|
||||||
ComponentParts { model, widgets }
|
ComponentParts { model, widgets }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,6 +154,50 @@ impl SimpleComponent for App {
|
||||||
// todo
|
// todo
|
||||||
self.dxvk_components.sender().send(components::list::AppMsg::ShowRecommendedOnly(state)).unwrap();
|
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…
Reference in a new issue