mirror of
https://github.com/an-anime-team/sleepy-launcher.git
synced 2025-03-15 06:28:27 +03:00
General settings: added wine/dxvk selection skeleton
This commit is contained in:
parent
d38d098882
commit
48d7f0fc06
7 changed files with 291 additions and 17 deletions
54
src/ui/components/group.rs
Normal file
54
src/ui/components/group.rs
Normal file
|
@ -0,0 +1,54 @@
|
|||
use relm4::prelude::*;
|
||||
|
||||
use adw::prelude::*;
|
||||
|
||||
pub struct ComponentGroup {
|
||||
pub title: String
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum AppMsg {
|
||||
Install,
|
||||
Remove
|
||||
}
|
||||
|
||||
#[relm4::component(pub)]
|
||||
impl SimpleComponent for ComponentGroup {
|
||||
type Init = super::ComponentsListGroup;
|
||||
type Input = AppMsg;
|
||||
type Output = ();
|
||||
|
||||
view! {
|
||||
group = adw::ExpanderRow {
|
||||
set_title: &model.title
|
||||
}
|
||||
}
|
||||
|
||||
fn init(
|
||||
init: Self::Init,
|
||||
root: &Self::Root,
|
||||
_sender: ComponentSender<Self>,
|
||||
) -> ComponentParts<Self> {
|
||||
let model = ComponentGroup {
|
||||
title: init.title
|
||||
};
|
||||
|
||||
let widgets = view_output!();
|
||||
|
||||
for version in init.versions {
|
||||
let version = super::ComponentVersion::builder()
|
||||
.launch(version)
|
||||
.detach();
|
||||
|
||||
widgets.group.add_row(version.widget());
|
||||
}
|
||||
|
||||
ComponentParts { model, widgets }
|
||||
}
|
||||
|
||||
fn update(&mut self, msg: Self::Input, _sender: ComponentSender<Self>) {
|
||||
tracing::debug!("Called about dialog event: {:?}", msg);
|
||||
|
||||
// todo
|
||||
}
|
||||
}
|
52
src/ui/components/list.rs
Normal file
52
src/ui/components/list.rs
Normal file
|
@ -0,0 +1,52 @@
|
|||
use relm4::prelude::*;
|
||||
|
||||
use adw::prelude::*;
|
||||
|
||||
pub struct ComponentsList {
|
||||
_download_folder: String
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum AppMsg {
|
||||
Install,
|
||||
Remove
|
||||
}
|
||||
|
||||
#[relm4::component(pub)]
|
||||
impl SimpleComponent for ComponentsList {
|
||||
type Init = super::ComponentsListPattern;
|
||||
type Input = AppMsg;
|
||||
type Output = ();
|
||||
|
||||
view! {
|
||||
group = adw::PreferencesGroup {}
|
||||
}
|
||||
|
||||
fn init(
|
||||
init: Self::Init,
|
||||
root: &Self::Root,
|
||||
_sender: ComponentSender<Self>,
|
||||
) -> ComponentParts<Self> {
|
||||
let model = ComponentsList {
|
||||
_download_folder: init.download_folder
|
||||
};
|
||||
|
||||
let widgets = view_output!();
|
||||
|
||||
for group in init.groups {
|
||||
let group = super::ComponentGroup::builder()
|
||||
.launch(group)
|
||||
.detach();
|
||||
|
||||
widgets.group.add(group.widget());
|
||||
}
|
||||
|
||||
ComponentParts { model, widgets }
|
||||
}
|
||||
|
||||
fn update(&mut self, msg: Self::Input, _sender: ComponentSender<Self>) {
|
||||
tracing::debug!("Called about dialog event: {:?}", msg);
|
||||
|
||||
// todo
|
||||
}
|
||||
}
|
25
src/ui/components/mod.rs
Normal file
25
src/ui/components/mod.rs
Normal file
|
@ -0,0 +1,25 @@
|
|||
pub mod list;
|
||||
pub mod group;
|
||||
pub mod version;
|
||||
|
||||
pub use list::*;
|
||||
pub use group::*;
|
||||
pub use version::*;
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct ComponentsListPattern {
|
||||
pub download_folder: String,
|
||||
pub groups: Vec<ComponentsListGroup>
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct ComponentsListGroup {
|
||||
pub title: String,
|
||||
pub versions: Vec<ComponentsListVersion>
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct ComponentsListVersion {
|
||||
pub title: String,
|
||||
pub url: String
|
||||
}
|
46
src/ui/components/version.rs
Normal file
46
src/ui/components/version.rs
Normal file
|
@ -0,0 +1,46 @@
|
|||
use relm4::prelude::*;
|
||||
|
||||
use adw::prelude::*;
|
||||
|
||||
pub struct ComponentVersion {
|
||||
pub title: String
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum AppMsg {
|
||||
Install,
|
||||
Remove
|
||||
}
|
||||
|
||||
#[relm4::component(pub)]
|
||||
impl SimpleComponent for ComponentVersion {
|
||||
type Init = super::ComponentsListVersion;
|
||||
type Input = AppMsg;
|
||||
type Output = ();
|
||||
|
||||
view! {
|
||||
row = adw::ActionRow {
|
||||
set_title: &model.title
|
||||
}
|
||||
}
|
||||
|
||||
fn init(
|
||||
init: Self::Init,
|
||||
root: &Self::Root,
|
||||
_sender: ComponentSender<Self>,
|
||||
) -> ComponentParts<Self> {
|
||||
let model = ComponentVersion {
|
||||
title: init.title
|
||||
};
|
||||
|
||||
let widgets = view_output!();
|
||||
|
||||
ComponentParts { model, widgets }
|
||||
}
|
||||
|
||||
fn update(&mut self, msg: Self::Input, _sender: ComponentSender<Self>) {
|
||||
tracing::debug!("Called about dialog event: {:?}", msg);
|
||||
|
||||
// todo
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
pub mod main;
|
||||
pub mod about;
|
||||
|
||||
pub mod preferences;
|
||||
pub mod components;
|
||||
|
|
|
@ -148,6 +148,9 @@ impl WidgetTemplate for General {
|
|||
}
|
||||
},
|
||||
|
||||
#[name(wine_versions)]
|
||||
add = &adw::PreferencesGroup {},
|
||||
|
||||
add = &adw::PreferencesGroup {
|
||||
set_title: &tr("dxvk-version"),
|
||||
|
||||
|
@ -164,6 +167,9 @@ impl WidgetTemplate for General {
|
|||
}
|
||||
}
|
||||
},
|
||||
|
||||
#[name(dxvk_versions)]
|
||||
add = &adw::PreferencesGroup {},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,19 +3,19 @@ use relm4::prelude::*;
|
|||
use gtk::prelude::*;
|
||||
use adw::prelude::*;
|
||||
|
||||
use crate::ui::components::*;
|
||||
|
||||
use crate::i18n::tr;
|
||||
|
||||
pub struct App;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum AppMsg {
|
||||
Test
|
||||
pub struct App {
|
||||
wine_components: Controller<ComponentsList>,
|
||||
dxvk_components: Controller<ComponentsList>
|
||||
}
|
||||
|
||||
#[relm4::component(pub)]
|
||||
impl SimpleComponent for App {
|
||||
type Init = gtk::Window;
|
||||
type Input = AppMsg;
|
||||
type Input = ();
|
||||
type Output = ();
|
||||
|
||||
view! {
|
||||
|
@ -26,7 +26,21 @@ impl SimpleComponent for App {
|
|||
set_modal: true,
|
||||
|
||||
#[template]
|
||||
add = &super::general::General,
|
||||
add = &super::general::General {
|
||||
// Here technically it's AdwPreferencesGroup inside of AdwPreferencesGroup
|
||||
// but I have no idea how to do it other way
|
||||
// There're no graphical glitches so don't care
|
||||
|
||||
#[template_child]
|
||||
wine_versions {
|
||||
add = model.wine_components.widget(),
|
||||
},
|
||||
|
||||
#[template_child]
|
||||
dxvk_versions {
|
||||
add = model.dxvk_components.widget(),
|
||||
}
|
||||
},
|
||||
|
||||
#[template]
|
||||
add = &super::enhancements::Enhancements,
|
||||
|
@ -44,19 +58,96 @@ impl SimpleComponent for App {
|
|||
root: &Self::Root,
|
||||
_sender: ComponentSender<Self>,
|
||||
) -> ComponentParts<Self> {
|
||||
let model = App;
|
||||
let model = App {
|
||||
wine_components: ComponentsList::builder()
|
||||
.launch(ComponentsListPattern {
|
||||
download_folder: String::from("/tmp"),
|
||||
groups: vec![
|
||||
ComponentsListGroup {
|
||||
title: String::from("Test group 1"),
|
||||
versions: vec![
|
||||
ComponentsListVersion {
|
||||
title: String::from("Test version 1"),
|
||||
url: String::from("/")
|
||||
},
|
||||
ComponentsListVersion {
|
||||
title: String::from("Test version 2"),
|
||||
url: String::from("/")
|
||||
},
|
||||
ComponentsListVersion {
|
||||
title: String::from("Test version 3"),
|
||||
url: String::from("/")
|
||||
}
|
||||
]
|
||||
},
|
||||
ComponentsListGroup {
|
||||
title: String::from("Test group 2"),
|
||||
versions: vec![
|
||||
ComponentsListVersion {
|
||||
title: String::from("Test version 1"),
|
||||
url: String::from("/")
|
||||
},
|
||||
ComponentsListVersion {
|
||||
title: String::from("Test version 2"),
|
||||
url: String::from("/")
|
||||
},
|
||||
ComponentsListVersion {
|
||||
title: String::from("Test version 3"),
|
||||
url: String::from("/")
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
})
|
||||
.detach(),
|
||||
|
||||
dxvk_components: ComponentsList::builder()
|
||||
.launch(ComponentsListPattern {
|
||||
download_folder: String::from("/tmp"),
|
||||
groups: vec![
|
||||
ComponentsListGroup {
|
||||
title: String::from("Test group 1"),
|
||||
versions: vec![
|
||||
ComponentsListVersion {
|
||||
title: String::from("Test version 1"),
|
||||
url: String::from("/")
|
||||
},
|
||||
ComponentsListVersion {
|
||||
title: String::from("Test version 2"),
|
||||
url: String::from("/")
|
||||
},
|
||||
ComponentsListVersion {
|
||||
title: String::from("Test version 3"),
|
||||
url: String::from("/")
|
||||
}
|
||||
]
|
||||
},
|
||||
ComponentsListGroup {
|
||||
title: String::from("Test group 2"),
|
||||
versions: vec![
|
||||
ComponentsListVersion {
|
||||
title: String::from("Test version 1"),
|
||||
url: String::from("/")
|
||||
},
|
||||
ComponentsListVersion {
|
||||
title: String::from("Test version 2"),
|
||||
url: String::from("/")
|
||||
},
|
||||
ComponentsListVersion {
|
||||
title: String::from("Test version 3"),
|
||||
url: String::from("/")
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
})
|
||||
.detach(),
|
||||
};
|
||||
|
||||
let widgets = view_output!();
|
||||
|
||||
widgets.preferences_window.set_transient_for(Some(&parent));
|
||||
|
||||
ComponentParts { model, widgets }
|
||||
}
|
||||
|
||||
fn update(&mut self, msg: Self::Input, _sender: ComponentSender<Self>) {
|
||||
match msg {
|
||||
AppMsg::Test => {
|
||||
println!("sus");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue