mirror of
https://github.com/an-anime-team/an-anime-game-launcher.git
synced 2024-12-18 07:51:47 +03:00
feat: get rid of deprecated libadwaita functions calls
This commit is contained in:
parent
a1d1950ce8
commit
9914072c77
6 changed files with 496 additions and 484 deletions
|
@ -71,82 +71,85 @@ impl SimpleAsyncComponent for EnvironmentPage {
|
|||
type Output = EnhancementsAppMsg;
|
||||
|
||||
view! {
|
||||
gtk::Box {
|
||||
set_orientation: gtk::Orientation::Vertical,
|
||||
adw::NavigationPage {
|
||||
#[wrap(Some)]
|
||||
set_child = >k::Box {
|
||||
set_orientation: gtk::Orientation::Vertical,
|
||||
|
||||
adw::HeaderBar {
|
||||
#[wrap(Some)]
|
||||
set_title_widget = &adw::WindowTitle {
|
||||
set_title: &tr!("environment")
|
||||
},
|
||||
adw::HeaderBar {
|
||||
#[wrap(Some)]
|
||||
set_title_widget = &adw::WindowTitle {
|
||||
set_title: &tr!("environment")
|
||||
},
|
||||
|
||||
pack_start = >k::Button {
|
||||
set_icon_name: "go-previous-symbolic",
|
||||
pack_start = >k::Button {
|
||||
set_icon_name: "go-previous-symbolic",
|
||||
|
||||
connect_clicked[sender] => move |_| {
|
||||
sender.output(EnhancementsAppMsg::OpenMainPage).unwrap();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
adw::PreferencesPage {
|
||||
set_title: &tr!("environment"),
|
||||
set_icon_name: Some("document-properties-symbolic"),
|
||||
|
||||
add = &adw::PreferencesGroup {
|
||||
set_title: &tr!("game-command"),
|
||||
set_description: Some(&tr!("game-command-description")),
|
||||
|
||||
adw::EntryRow {
|
||||
set_title: "%command%",
|
||||
set_text: CONFIG.game.command.as_ref().unwrap_or(&String::new()).trim(),
|
||||
|
||||
connect_changed => |entry| {
|
||||
if let Ok(mut config) = Config::get() {
|
||||
let command = entry.text().trim().to_string();
|
||||
|
||||
config.game.command = if command.is_empty() {
|
||||
None
|
||||
} else {
|
||||
Some(command)
|
||||
};
|
||||
|
||||
Config::update(config);
|
||||
}
|
||||
connect_clicked[sender] => move |_| {
|
||||
sender.output(EnhancementsAppMsg::OpenMainPage).unwrap();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
add = &adw::PreferencesGroup {
|
||||
set_title: &tr!("new-variable"),
|
||||
adw::PreferencesPage {
|
||||
set_title: &tr!("environment"),
|
||||
set_icon_name: Some("document-properties-symbolic"),
|
||||
|
||||
#[wrap(Some)]
|
||||
set_header_suffix = >k::Button {
|
||||
add_css_class: "flat",
|
||||
add = &adw::PreferencesGroup {
|
||||
set_title: &tr!("game-command"),
|
||||
set_description: Some(&tr!("game-command-description")),
|
||||
|
||||
set_valign: gtk::Align::Center,
|
||||
adw::EntryRow {
|
||||
set_title: "%command%",
|
||||
set_text: CONFIG.game.command.as_ref().unwrap_or(&String::new()).trim(),
|
||||
|
||||
adw::ButtonContent {
|
||||
set_icon_name: "list-add-symbolic",
|
||||
set_label: &tr!("add")
|
||||
connect_changed => |entry| {
|
||||
if let Ok(mut config) = Config::get() {
|
||||
let command = entry.text().trim().to_string();
|
||||
|
||||
config.game.command = if command.is_empty() {
|
||||
None
|
||||
} else {
|
||||
Some(command)
|
||||
};
|
||||
|
||||
Config::update(config);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
add = &adw::PreferencesGroup {
|
||||
set_title: &tr!("new-variable"),
|
||||
|
||||
#[wrap(Some)]
|
||||
set_header_suffix = >k::Button {
|
||||
add_css_class: "flat",
|
||||
|
||||
set_valign: gtk::Align::Center,
|
||||
|
||||
adw::ButtonContent {
|
||||
set_icon_name: "list-add-symbolic",
|
||||
set_label: &tr!("add")
|
||||
},
|
||||
|
||||
connect_clicked => EnvironmentPageMsg::Add
|
||||
},
|
||||
|
||||
connect_clicked => EnvironmentPageMsg::Add
|
||||
#[local_ref]
|
||||
name_entry -> adw::EntryRow {
|
||||
set_title: &tr!("name")
|
||||
},
|
||||
|
||||
#[local_ref]
|
||||
value_entry -> adw::EntryRow {
|
||||
set_title: &tr!("value")
|
||||
}
|
||||
},
|
||||
|
||||
#[local_ref]
|
||||
name_entry -> adw::EntryRow {
|
||||
set_title: &tr!("name")
|
||||
},
|
||||
|
||||
#[local_ref]
|
||||
value_entry -> adw::EntryRow {
|
||||
set_title: &tr!("value")
|
||||
}
|
||||
},
|
||||
|
||||
#[local_ref]
|
||||
add = variables -> adw::PreferencesGroup {}
|
||||
add = variables -> adw::PreferencesGroup {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -105,48 +105,51 @@ impl SimpleAsyncComponent for GamePage {
|
|||
type Output = EnhancementsAppMsg;
|
||||
|
||||
view! {
|
||||
gtk::Box {
|
||||
set_orientation: gtk::Orientation::Vertical,
|
||||
adw::NavigationPage {
|
||||
#[wrap(Some)]
|
||||
set_child = >k::Box {
|
||||
set_orientation: gtk::Orientation::Vertical,
|
||||
|
||||
adw::HeaderBar {
|
||||
#[wrap(Some)]
|
||||
set_title_widget = &adw::WindowTitle {
|
||||
set_title: &tr!("game")
|
||||
},
|
||||
adw::HeaderBar {
|
||||
#[wrap(Some)]
|
||||
set_title_widget = &adw::WindowTitle {
|
||||
set_title: &tr!("game")
|
||||
},
|
||||
|
||||
pack_start = >k::Button {
|
||||
set_icon_name: "go-previous-symbolic",
|
||||
pack_start = >k::Button {
|
||||
set_icon_name: "go-previous-symbolic",
|
||||
|
||||
connect_clicked[sender] => move |_| {
|
||||
sender.output(EnhancementsAppMsg::OpenMainPage).unwrap();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
adw::PreferencesPage {
|
||||
set_title: &tr!("game"),
|
||||
set_icon_name: Some("applications-games-symbolic"),
|
||||
|
||||
add = &adw::PreferencesGroup {
|
||||
set_title: &tr!("game-sessions"),
|
||||
|
||||
#[local_ref]
|
||||
session_name_entry -> adw::EntryRow {
|
||||
set_title: &tr!("name"),
|
||||
|
||||
add_suffix = >k::Button {
|
||||
set_icon_name: "list-add-symbolic",
|
||||
add_css_class: "flat",
|
||||
|
||||
set_valign: gtk::Align::Center,
|
||||
|
||||
connect_clicked => GamePageMsg::AddSession
|
||||
connect_clicked[sender] => move |_| {
|
||||
sender.output(EnhancementsAppMsg::OpenMainPage).unwrap();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
#[local_ref]
|
||||
add = sessions -> adw::PreferencesGroup {},
|
||||
adw::PreferencesPage {
|
||||
set_title: &tr!("game"),
|
||||
set_icon_name: Some("applications-games-symbolic"),
|
||||
|
||||
add = &adw::PreferencesGroup {
|
||||
set_title: &tr!("game-sessions"),
|
||||
|
||||
#[local_ref]
|
||||
session_name_entry -> adw::EntryRow {
|
||||
set_title: &tr!("name"),
|
||||
|
||||
add_suffix = >k::Button {
|
||||
set_icon_name: "list-add-symbolic",
|
||||
add_css_class: "flat",
|
||||
|
||||
set_valign: gtk::Align::Center,
|
||||
|
||||
connect_clicked => GamePageMsg::AddSession
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
#[local_ref]
|
||||
add = sessions -> adw::PreferencesGroup {},
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -627,13 +627,13 @@ impl SimpleAsyncComponent for EnhancementsApp {
|
|||
},
|
||||
|
||||
#[local_ref]
|
||||
game_page -> gtk::Box {},
|
||||
game_page -> adw::NavigationPage,
|
||||
|
||||
#[local_ref]
|
||||
sandbox_page -> gtk::Box {},
|
||||
sandbox_page -> adw::NavigationPage,
|
||||
|
||||
#[local_ref]
|
||||
environment_page -> gtk::Box {}
|
||||
environment_page -> adw::NavigationPage,
|
||||
}
|
||||
|
||||
async fn init(
|
||||
|
@ -769,28 +769,28 @@ impl SimpleAsyncComponent for EnhancementsApp {
|
|||
PREFERENCES_WINDOW.as_ref()
|
||||
.unwrap_unchecked()
|
||||
.widget()
|
||||
.close_subpage();
|
||||
.pop_subpage();
|
||||
}
|
||||
|
||||
EnhancementsAppMsg::OpenGameSettingsPage => unsafe {
|
||||
PREFERENCES_WINDOW.as_ref()
|
||||
.unwrap_unchecked()
|
||||
.widget()
|
||||
.present_subpage(self.game_page.widget());
|
||||
.push_subpage(self.game_page.widget());
|
||||
}
|
||||
|
||||
EnhancementsAppMsg::OpenSandboxSettingsPage => unsafe {
|
||||
PREFERENCES_WINDOW.as_ref()
|
||||
.unwrap_unchecked()
|
||||
.widget()
|
||||
.present_subpage(self.sandbox_page.widget());
|
||||
.push_subpage(self.sandbox_page.widget());
|
||||
}
|
||||
|
||||
EnhancementsAppMsg::OpenEnvironmentSettingsPage => unsafe {
|
||||
PREFERENCES_WINDOW.as_ref()
|
||||
.unwrap_unchecked()
|
||||
.widget()
|
||||
.present_subpage(self.environment_page.widget());
|
||||
.push_subpage(self.environment_page.widget());
|
||||
}
|
||||
|
||||
EnhancementsAppMsg::Toast { title, description } => {
|
||||
|
|
|
@ -98,226 +98,229 @@ impl SimpleAsyncComponent for SandboxPage {
|
|||
type Output = EnhancementsAppMsg;
|
||||
|
||||
view! {
|
||||
gtk::Box {
|
||||
set_orientation: gtk::Orientation::Vertical,
|
||||
|
||||
adw::HeaderBar {
|
||||
#[wrap(Some)]
|
||||
set_title_widget = &adw::WindowTitle {
|
||||
set_title: &tr!("sandbox")
|
||||
},
|
||||
|
||||
pack_start = >k::Button {
|
||||
set_icon_name: "go-previous-symbolic",
|
||||
|
||||
connect_clicked[sender] => move |_| {
|
||||
sender.output(EnhancementsAppMsg::OpenMainPage).unwrap();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
adw::PreferencesPage {
|
||||
set_title: &tr!("sandbox"),
|
||||
set_icon_name: Some("folder-symbolic"),
|
||||
|
||||
set_sensitive: is_available("bwrap"),
|
||||
|
||||
add = &adw::PreferencesGroup {
|
||||
set_title: &tr!("sandbox"),
|
||||
set_description: Some(&tr!("sandbox-description")),
|
||||
|
||||
adw::ActionRow {
|
||||
set_title: &tr!("enable-sandboxing"),
|
||||
set_subtitle: &tr!("enable-sandboxing-description"),
|
||||
|
||||
add_suffix = >k::Switch {
|
||||
set_valign: gtk::Align::Center,
|
||||
|
||||
set_state: CONFIG.sandbox.enabled,
|
||||
|
||||
connect_state_notify => |switch| {
|
||||
if is_ready() {
|
||||
if let Ok(mut config) = Config::get() {
|
||||
config.sandbox.enabled = switch.state();
|
||||
|
||||
Config::update(config);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
adw::ActionRow {
|
||||
set_title: &tr!("hide-home-directory"),
|
||||
set_subtitle: &tr!("hide-home-directory-description"),
|
||||
|
||||
add_suffix = >k::Switch {
|
||||
set_valign: gtk::Align::Center,
|
||||
|
||||
set_state: CONFIG.sandbox.isolate_home,
|
||||
|
||||
connect_state_notify => |switch| {
|
||||
if is_ready() {
|
||||
if let Ok(mut config) = Config::get() {
|
||||
config.sandbox.isolate_home = switch.state();
|
||||
|
||||
Config::update(config);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
adw::EntryRow {
|
||||
set_title: &tr!("hostname"),
|
||||
set_text: CONFIG.sandbox.hostname.as_ref().unwrap_or(&String::new()).trim(),
|
||||
|
||||
connect_changed => |entry| {
|
||||
if let Ok(mut config) = Config::get() {
|
||||
let command = entry.text().trim().to_string();
|
||||
|
||||
config.sandbox.hostname = if command.is_empty() {
|
||||
None
|
||||
} else {
|
||||
Some(command)
|
||||
};
|
||||
|
||||
Config::update(config);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
adw::EntryRow {
|
||||
set_title: &tr!("additional-arguments"),
|
||||
set_text: CONFIG.sandbox.args.as_ref().unwrap_or(&String::new()).trim(),
|
||||
|
||||
connect_changed => |entry| {
|
||||
if let Ok(mut config) = Config::get() {
|
||||
let command = entry.text().trim().to_string();
|
||||
|
||||
config.sandbox.args = if command.is_empty() {
|
||||
None
|
||||
} else {
|
||||
Some(command)
|
||||
};
|
||||
|
||||
Config::update(config);
|
||||
}
|
||||
},
|
||||
|
||||
add_suffix = >k::Button {
|
||||
set_icon_name: "dialog-information-symbolic",
|
||||
add_css_class: "flat",
|
||||
|
||||
set_valign: gtk::Align::Center,
|
||||
|
||||
connect_clicked[sender] => move |_| {
|
||||
if let Err(err) = open::that("https://man.archlinux.org/man/bwrap.1") {
|
||||
sender.output(EnhancementsAppMsg::Toast {
|
||||
title: tr!("documentation-url-open-failed"),
|
||||
description: Some(err.to_string())
|
||||
}).unwrap();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
add = &adw::PreferencesGroup {
|
||||
set_title: &tr!("private-directories"),
|
||||
set_description: Some(&tr!("private-directories-description")),
|
||||
|
||||
#[local_ref]
|
||||
private_path_entry -> adw::EntryRow {
|
||||
set_title: &tr!("path"),
|
||||
|
||||
add_suffix = >k::Button {
|
||||
set_icon_name: "list-add-symbolic",
|
||||
add_css_class: "flat",
|
||||
|
||||
set_valign: gtk::Align::Center,
|
||||
|
||||
connect_clicked => SandboxPageMsg::AddPrivate
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
#[local_ref]
|
||||
add = private_paths -> adw::PreferencesGroup {},
|
||||
|
||||
add = &adw::PreferencesGroup {
|
||||
set_title: &tr!("shared-directories"),
|
||||
set_description: Some(&tr!("shared-directories-description")),
|
||||
adw::NavigationPage {
|
||||
#[wrap(Some)]
|
||||
set_child = >k::Box {
|
||||
set_orientation: gtk::Orientation::Vertical,
|
||||
|
||||
adw::HeaderBar {
|
||||
#[wrap(Some)]
|
||||
set_header_suffix = >k::Button {
|
||||
add_css_class: "flat",
|
||||
set_title_widget = &adw::WindowTitle {
|
||||
set_title: &tr!("sandbox")
|
||||
},
|
||||
|
||||
set_valign: gtk::Align::Center,
|
||||
pack_start = >k::Button {
|
||||
set_icon_name: "go-previous-symbolic",
|
||||
|
||||
adw::ButtonContent {
|
||||
set_icon_name: "list-add-symbolic",
|
||||
set_label: &tr!("add")
|
||||
connect_clicked[sender] => move |_| {
|
||||
sender.output(EnhancementsAppMsg::OpenMainPage).unwrap();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
adw::PreferencesPage {
|
||||
set_title: &tr!("sandbox"),
|
||||
set_icon_name: Some("folder-symbolic"),
|
||||
|
||||
set_sensitive: is_available("bwrap"),
|
||||
|
||||
add = &adw::PreferencesGroup {
|
||||
set_title: &tr!("sandbox"),
|
||||
set_description: Some(&tr!("sandbox-description")),
|
||||
|
||||
adw::ActionRow {
|
||||
set_title: &tr!("enable-sandboxing"),
|
||||
set_subtitle: &tr!("enable-sandboxing-description"),
|
||||
|
||||
add_suffix = >k::Switch {
|
||||
set_valign: gtk::Align::Center,
|
||||
|
||||
set_state: CONFIG.sandbox.enabled,
|
||||
|
||||
connect_state_notify => |switch| {
|
||||
if is_ready() {
|
||||
if let Ok(mut config) = Config::get() {
|
||||
config.sandbox.enabled = switch.state();
|
||||
|
||||
Config::update(config);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
connect_clicked => SandboxPageMsg::AddShared
|
||||
adw::ActionRow {
|
||||
set_title: &tr!("hide-home-directory"),
|
||||
set_subtitle: &tr!("hide-home-directory-description"),
|
||||
|
||||
add_suffix = >k::Switch {
|
||||
set_valign: gtk::Align::Center,
|
||||
|
||||
set_state: CONFIG.sandbox.isolate_home,
|
||||
|
||||
connect_state_notify => |switch| {
|
||||
if is_ready() {
|
||||
if let Ok(mut config) = Config::get() {
|
||||
config.sandbox.isolate_home = switch.state();
|
||||
|
||||
Config::update(config);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
adw::EntryRow {
|
||||
set_title: &tr!("hostname"),
|
||||
set_text: CONFIG.sandbox.hostname.as_ref().unwrap_or(&String::new()).trim(),
|
||||
|
||||
connect_changed => |entry| {
|
||||
if let Ok(mut config) = Config::get() {
|
||||
let command = entry.text().trim().to_string();
|
||||
|
||||
config.sandbox.hostname = if command.is_empty() {
|
||||
None
|
||||
} else {
|
||||
Some(command)
|
||||
};
|
||||
|
||||
Config::update(config);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
adw::EntryRow {
|
||||
set_title: &tr!("additional-arguments"),
|
||||
set_text: CONFIG.sandbox.args.as_ref().unwrap_or(&String::new()).trim(),
|
||||
|
||||
connect_changed => |entry| {
|
||||
if let Ok(mut config) = Config::get() {
|
||||
let command = entry.text().trim().to_string();
|
||||
|
||||
config.sandbox.args = if command.is_empty() {
|
||||
None
|
||||
} else {
|
||||
Some(command)
|
||||
};
|
||||
|
||||
Config::update(config);
|
||||
}
|
||||
},
|
||||
|
||||
add_suffix = >k::Button {
|
||||
set_icon_name: "dialog-information-symbolic",
|
||||
add_css_class: "flat",
|
||||
|
||||
set_valign: gtk::Align::Center,
|
||||
|
||||
connect_clicked[sender] => move |_| {
|
||||
if let Err(err) = open::that("https://man.archlinux.org/man/bwrap.1") {
|
||||
sender.output(EnhancementsAppMsg::Toast {
|
||||
title: tr!("documentation-url-open-failed"),
|
||||
description: Some(err.to_string())
|
||||
}).unwrap();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
#[local_ref]
|
||||
shared_path_from_entry -> adw::EntryRow {
|
||||
set_title: &tr!("original-path")
|
||||
},
|
||||
|
||||
#[local_ref]
|
||||
shared_path_to_entry -> adw::EntryRow {
|
||||
set_title: &tr!("new-path")
|
||||
},
|
||||
|
||||
adw::ActionRow {
|
||||
set_title: &tr!("read-only"),
|
||||
set_subtitle: &tr!("read-only-description"),
|
||||
add = &adw::PreferencesGroup {
|
||||
set_title: &tr!("private-directories"),
|
||||
set_description: Some(&tr!("private-directories-description")),
|
||||
|
||||
#[local_ref]
|
||||
add_suffix = read_only_switch -> gtk::Switch {
|
||||
set_valign: gtk::Align::Center
|
||||
private_path_entry -> adw::EntryRow {
|
||||
set_title: &tr!("path"),
|
||||
|
||||
add_suffix = >k::Button {
|
||||
set_icon_name: "list-add-symbolic",
|
||||
add_css_class: "flat",
|
||||
|
||||
set_valign: gtk::Align::Center,
|
||||
|
||||
connect_clicked => SandboxPageMsg::AddPrivate
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
#[local_ref]
|
||||
add = shared_paths -> adw::PreferencesGroup {},
|
||||
#[local_ref]
|
||||
add = private_paths -> adw::PreferencesGroup {},
|
||||
|
||||
add = &adw::PreferencesGroup {
|
||||
set_title: &tr!("symlinks"),
|
||||
set_description: Some(&tr!("symlinks-description")),
|
||||
add = &adw::PreferencesGroup {
|
||||
set_title: &tr!("shared-directories"),
|
||||
set_description: Some(&tr!("shared-directories-description")),
|
||||
|
||||
#[wrap(Some)]
|
||||
set_header_suffix = >k::Button {
|
||||
add_css_class: "flat",
|
||||
#[wrap(Some)]
|
||||
set_header_suffix = >k::Button {
|
||||
add_css_class: "flat",
|
||||
|
||||
set_valign: gtk::Align::Center,
|
||||
set_valign: gtk::Align::Center,
|
||||
|
||||
adw::ButtonContent {
|
||||
set_icon_name: "list-add-symbolic",
|
||||
set_label: &tr!("add")
|
||||
adw::ButtonContent {
|
||||
set_icon_name: "list-add-symbolic",
|
||||
set_label: &tr!("add")
|
||||
},
|
||||
|
||||
connect_clicked => SandboxPageMsg::AddShared
|
||||
},
|
||||
|
||||
connect_clicked => SandboxPageMsg::AddSymlink
|
||||
#[local_ref]
|
||||
shared_path_from_entry -> adw::EntryRow {
|
||||
set_title: &tr!("original-path")
|
||||
},
|
||||
|
||||
#[local_ref]
|
||||
shared_path_to_entry -> adw::EntryRow {
|
||||
set_title: &tr!("new-path")
|
||||
},
|
||||
|
||||
adw::ActionRow {
|
||||
set_title: &tr!("read-only"),
|
||||
set_subtitle: &tr!("read-only-description"),
|
||||
|
||||
#[local_ref]
|
||||
add_suffix = read_only_switch -> gtk::Switch {
|
||||
set_valign: gtk::Align::Center
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
#[local_ref]
|
||||
symlink_path_from_entry -> adw::EntryRow {
|
||||
set_title: &tr!("original-path")
|
||||
add = shared_paths -> adw::PreferencesGroup {},
|
||||
|
||||
add = &adw::PreferencesGroup {
|
||||
set_title: &tr!("symlinks"),
|
||||
set_description: Some(&tr!("symlinks-description")),
|
||||
|
||||
#[wrap(Some)]
|
||||
set_header_suffix = >k::Button {
|
||||
add_css_class: "flat",
|
||||
|
||||
set_valign: gtk::Align::Center,
|
||||
|
||||
adw::ButtonContent {
|
||||
set_icon_name: "list-add-symbolic",
|
||||
set_label: &tr!("add")
|
||||
},
|
||||
|
||||
connect_clicked => SandboxPageMsg::AddSymlink
|
||||
},
|
||||
|
||||
#[local_ref]
|
||||
symlink_path_from_entry -> adw::EntryRow {
|
||||
set_title: &tr!("original-path")
|
||||
},
|
||||
|
||||
#[local_ref]
|
||||
symlink_path_to_entry -> adw::EntryRow {
|
||||
set_title: &tr!("new-path")
|
||||
}
|
||||
},
|
||||
|
||||
#[local_ref]
|
||||
symlink_path_to_entry -> adw::EntryRow {
|
||||
set_title: &tr!("new-path")
|
||||
}
|
||||
},
|
||||
|
||||
#[local_ref]
|
||||
add = symlink_paths -> adw::PreferencesGroup {}
|
||||
add = symlink_paths -> adw::PreferencesGroup {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,193 +49,196 @@ impl SimpleAsyncComponent for ComponentsPage {
|
|||
type Output = GeneralAppMsg;
|
||||
|
||||
view! {
|
||||
gtk::Box {
|
||||
set_orientation: gtk::Orientation::Vertical,
|
||||
adw::NavigationPage {
|
||||
#[wrap(Some)]
|
||||
set_child = >k::Box {
|
||||
set_orientation: gtk::Orientation::Vertical,
|
||||
|
||||
adw::HeaderBar {
|
||||
#[wrap(Some)]
|
||||
set_title_widget = &adw::WindowTitle {
|
||||
set_title: &tr!("components")
|
||||
adw::HeaderBar {
|
||||
#[wrap(Some)]
|
||||
set_title_widget = &adw::WindowTitle {
|
||||
set_title: &tr!("components")
|
||||
},
|
||||
|
||||
pack_start = >k::Button {
|
||||
set_icon_name: "go-previous-symbolic",
|
||||
|
||||
connect_clicked[sender] => move |_| {
|
||||
sender.output(GeneralAppMsg::OpenMainPage).unwrap();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
pack_start = >k::Button {
|
||||
set_icon_name: "go-previous-symbolic",
|
||||
adw::PreferencesPage {
|
||||
add = &adw::PreferencesGroup {
|
||||
set_title: &tr!("wine-version"),
|
||||
|
||||
connect_clicked[sender] => move |_| {
|
||||
sender.output(GeneralAppMsg::OpenMainPage).unwrap();
|
||||
}
|
||||
adw::ComboRow {
|
||||
set_title: &tr!("selected-version"),
|
||||
|
||||
#[watch]
|
||||
#[block_signal(wine_selected_notify)]
|
||||
set_model: Some(>k::StringList::new(&model.downloaded_wine_versions.iter().map(|(version, _)| version.title.as_str()).collect::<Vec<&str>>())),
|
||||
|
||||
#[watch]
|
||||
#[block_signal(wine_selected_notify)]
|
||||
set_selected: model.selected_wine_version,
|
||||
|
||||
#[watch]
|
||||
set_activatable: !model.selecting_wine_version,
|
||||
|
||||
connect_selected_notify[sender] => move |row| {
|
||||
if is_ready() {
|
||||
sender.input(ComponentsPageMsg::SelectWine(row.selected() as usize));
|
||||
}
|
||||
} @wine_selected_notify,
|
||||
|
||||
add_suffix = >k::Spinner {
|
||||
set_spinning: true,
|
||||
|
||||
#[watch]
|
||||
set_visible: model.selecting_wine_version
|
||||
}
|
||||
},
|
||||
|
||||
adw::ActionRow {
|
||||
set_title: &tr!("recommended-only"),
|
||||
set_subtitle: &tr!("wine-recommended-description"),
|
||||
|
||||
add_suffix = >k::Switch {
|
||||
set_valign: gtk::Align::Center,
|
||||
|
||||
#[block_signal(wine_recommended_notify)]
|
||||
set_state: true,
|
||||
|
||||
connect_state_notify[sender] => move |switch| {
|
||||
if is_ready() {
|
||||
sender.input(ComponentsPageMsg::WineRecommendedOnly(switch.state()));
|
||||
}
|
||||
} @wine_recommended_notify
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
add = &adw::PreferencesGroup {
|
||||
add = model.wine_components.widget(),
|
||||
},
|
||||
|
||||
add = &adw::PreferencesGroup {
|
||||
set_title: &tr!("wine-options"),
|
||||
|
||||
adw::ActionRow {
|
||||
set_title: &tr!("wine-use-shared-libraries"),
|
||||
set_subtitle: &tr!("wine-use-shared-libraries-description"),
|
||||
|
||||
add_suffix = >k::Switch {
|
||||
set_valign: gtk::Align::Center,
|
||||
|
||||
#[block_signal(wine_shared_libraries_notify)]
|
||||
set_state: CONFIG.game.wine.shared_libraries.wine,
|
||||
|
||||
connect_state_notify => |switch| {
|
||||
if is_ready() {
|
||||
if let Ok(mut config) = Config::get() {
|
||||
config.game.wine.shared_libraries.wine = switch.state();
|
||||
|
||||
Config::update(config);
|
||||
}
|
||||
}
|
||||
} @wine_shared_libraries_notify
|
||||
}
|
||||
},
|
||||
|
||||
adw::ActionRow {
|
||||
set_title: &tr!("gstreamer-use-shared-libraries"),
|
||||
set_subtitle: &tr!("gstreamer-use-shared-libraries-description"),
|
||||
|
||||
add_suffix = >k::Switch {
|
||||
set_valign: gtk::Align::Center,
|
||||
|
||||
#[block_signal(gstreamer_shared_libraries_notify)]
|
||||
set_state: CONFIG.game.wine.shared_libraries.gstreamer,
|
||||
|
||||
connect_state_notify => |switch| {
|
||||
if is_ready() {
|
||||
if let Ok(mut config) = Config::get() {
|
||||
config.game.wine.shared_libraries.gstreamer = switch.state();
|
||||
|
||||
Config::update(config);
|
||||
}
|
||||
}
|
||||
} @gstreamer_shared_libraries_notify
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
add = &adw::PreferencesGroup {
|
||||
set_title: &tr!("dxvk-version"),
|
||||
|
||||
#[watch]
|
||||
set_description: Some(&if !model.allow_dxvk_selection {
|
||||
tr!("dxvk-selection-disabled")
|
||||
} else {
|
||||
String::new()
|
||||
}),
|
||||
|
||||
#[watch]
|
||||
set_sensitive: model.allow_dxvk_selection,
|
||||
|
||||
adw::ComboRow {
|
||||
set_title: &tr!("selected-version"),
|
||||
|
||||
#[watch]
|
||||
#[block_signal(dxvk_selected_notify)]
|
||||
set_model: Some(>k::StringList::new(&model.downloaded_dxvk_versions.iter().map(|version| version.name.as_str()).collect::<Vec<&str>>())),
|
||||
|
||||
#[watch]
|
||||
#[block_signal(dxvk_selected_notify)]
|
||||
set_selected: model.selected_dxvk_version,
|
||||
|
||||
#[watch]
|
||||
set_activatable: !model.selecting_dxvk_version,
|
||||
|
||||
connect_selected_notify[sender] => move |row| {
|
||||
if is_ready() {
|
||||
sender.input(ComponentsPageMsg::SelectDxvk(row.selected() as usize));
|
||||
}
|
||||
} @dxvk_selected_notify,
|
||||
|
||||
add_suffix = >k::Spinner {
|
||||
set_spinning: true,
|
||||
|
||||
#[watch]
|
||||
set_visible: model.selecting_dxvk_version
|
||||
}
|
||||
},
|
||||
|
||||
adw::ActionRow {
|
||||
set_title: &tr!("recommended-only"),
|
||||
set_subtitle: &tr!("dxvk-recommended-description"),
|
||||
|
||||
add_suffix = >k::Switch {
|
||||
set_valign: gtk::Align::Center,
|
||||
|
||||
#[block_signal(dxvk_recommended_notify)]
|
||||
set_state: true,
|
||||
|
||||
connect_state_notify[sender] => move |switch| {
|
||||
if is_ready() {
|
||||
sender.input(ComponentsPageMsg::DxvkRecommendedOnly(switch.state()));
|
||||
}
|
||||
} @dxvk_recommended_notify
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
add = &adw::PreferencesGroup {
|
||||
#[watch]
|
||||
set_sensitive: model.allow_dxvk_selection,
|
||||
|
||||
add = model.dxvk_components.widget(),
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
adw::PreferencesPage {
|
||||
add = &adw::PreferencesGroup {
|
||||
set_title: &tr!("wine-version"),
|
||||
|
||||
adw::ComboRow {
|
||||
set_title: &tr!("selected-version"),
|
||||
|
||||
#[watch]
|
||||
#[block_signal(wine_selected_notify)]
|
||||
set_model: Some(>k::StringList::new(&model.downloaded_wine_versions.iter().map(|(version, _)| version.title.as_str()).collect::<Vec<&str>>())),
|
||||
|
||||
#[watch]
|
||||
#[block_signal(wine_selected_notify)]
|
||||
set_selected: model.selected_wine_version,
|
||||
|
||||
#[watch]
|
||||
set_activatable: !model.selecting_wine_version,
|
||||
|
||||
connect_selected_notify[sender] => move |row| {
|
||||
if is_ready() {
|
||||
sender.input(ComponentsPageMsg::SelectWine(row.selected() as usize));
|
||||
}
|
||||
} @wine_selected_notify,
|
||||
|
||||
add_suffix = >k::Spinner {
|
||||
set_spinning: true,
|
||||
|
||||
#[watch]
|
||||
set_visible: model.selecting_wine_version
|
||||
}
|
||||
},
|
||||
|
||||
adw::ActionRow {
|
||||
set_title: &tr!("recommended-only"),
|
||||
set_subtitle: &tr!("wine-recommended-description"),
|
||||
|
||||
add_suffix = >k::Switch {
|
||||
set_valign: gtk::Align::Center,
|
||||
|
||||
#[block_signal(wine_recommended_notify)]
|
||||
set_state: true,
|
||||
|
||||
connect_state_notify[sender] => move |switch| {
|
||||
if is_ready() {
|
||||
sender.input(ComponentsPageMsg::WineRecommendedOnly(switch.state()));
|
||||
}
|
||||
} @wine_recommended_notify
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
add = &adw::PreferencesGroup {
|
||||
add = model.wine_components.widget(),
|
||||
},
|
||||
|
||||
add = &adw::PreferencesGroup {
|
||||
set_title: &tr!("wine-options"),
|
||||
|
||||
adw::ActionRow {
|
||||
set_title: &tr!("wine-use-shared-libraries"),
|
||||
set_subtitle: &tr!("wine-use-shared-libraries-description"),
|
||||
|
||||
add_suffix = >k::Switch {
|
||||
set_valign: gtk::Align::Center,
|
||||
|
||||
#[block_signal(wine_shared_libraries_notify)]
|
||||
set_state: CONFIG.game.wine.shared_libraries.wine,
|
||||
|
||||
connect_state_notify => |switch| {
|
||||
if is_ready() {
|
||||
if let Ok(mut config) = Config::get() {
|
||||
config.game.wine.shared_libraries.wine = switch.state();
|
||||
|
||||
Config::update(config);
|
||||
}
|
||||
}
|
||||
} @wine_shared_libraries_notify
|
||||
}
|
||||
},
|
||||
|
||||
adw::ActionRow {
|
||||
set_title: &tr!("gstreamer-use-shared-libraries"),
|
||||
set_subtitle: &tr!("gstreamer-use-shared-libraries-description"),
|
||||
|
||||
add_suffix = >k::Switch {
|
||||
set_valign: gtk::Align::Center,
|
||||
|
||||
#[block_signal(gstreamer_shared_libraries_notify)]
|
||||
set_state: CONFIG.game.wine.shared_libraries.gstreamer,
|
||||
|
||||
connect_state_notify => |switch| {
|
||||
if is_ready() {
|
||||
if let Ok(mut config) = Config::get() {
|
||||
config.game.wine.shared_libraries.gstreamer = switch.state();
|
||||
|
||||
Config::update(config);
|
||||
}
|
||||
}
|
||||
} @gstreamer_shared_libraries_notify
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
add = &adw::PreferencesGroup {
|
||||
set_title: &tr!("dxvk-version"),
|
||||
|
||||
#[watch]
|
||||
set_description: Some(&if !model.allow_dxvk_selection {
|
||||
tr!("dxvk-selection-disabled")
|
||||
} else {
|
||||
String::new()
|
||||
}),
|
||||
|
||||
#[watch]
|
||||
set_sensitive: model.allow_dxvk_selection,
|
||||
|
||||
adw::ComboRow {
|
||||
set_title: &tr!("selected-version"),
|
||||
|
||||
#[watch]
|
||||
#[block_signal(dxvk_selected_notify)]
|
||||
set_model: Some(>k::StringList::new(&model.downloaded_dxvk_versions.iter().map(|version| version.name.as_str()).collect::<Vec<&str>>())),
|
||||
|
||||
#[watch]
|
||||
#[block_signal(dxvk_selected_notify)]
|
||||
set_selected: model.selected_dxvk_version,
|
||||
|
||||
#[watch]
|
||||
set_activatable: !model.selecting_dxvk_version,
|
||||
|
||||
connect_selected_notify[sender] => move |row| {
|
||||
if is_ready() {
|
||||
sender.input(ComponentsPageMsg::SelectDxvk(row.selected() as usize));
|
||||
}
|
||||
} @dxvk_selected_notify,
|
||||
|
||||
add_suffix = >k::Spinner {
|
||||
set_spinning: true,
|
||||
|
||||
#[watch]
|
||||
set_visible: model.selecting_dxvk_version
|
||||
}
|
||||
},
|
||||
|
||||
adw::ActionRow {
|
||||
set_title: &tr!("recommended-only"),
|
||||
set_subtitle: &tr!("dxvk-recommended-description"),
|
||||
|
||||
add_suffix = >k::Switch {
|
||||
set_valign: gtk::Align::Center,
|
||||
|
||||
#[block_signal(dxvk_recommended_notify)]
|
||||
set_state: true,
|
||||
|
||||
connect_state_notify[sender] => move |switch| {
|
||||
if is_ready() {
|
||||
sender.input(ComponentsPageMsg::DxvkRecommendedOnly(switch.state()));
|
||||
}
|
||||
} @dxvk_recommended_notify
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
add = &adw::PreferencesGroup {
|
||||
#[watch]
|
||||
set_sensitive: model.allow_dxvk_selection,
|
||||
|
||||
add = model.dxvk_components.widget(),
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -528,7 +528,7 @@ impl SimpleAsyncComponent for GeneralApp {
|
|||
},
|
||||
|
||||
#[local_ref]
|
||||
components_page -> gtk::Box {}
|
||||
components_page -> adw::NavigationPage,
|
||||
}
|
||||
|
||||
async fn init(
|
||||
|
@ -664,14 +664,14 @@ impl SimpleAsyncComponent for GeneralApp {
|
|||
PREFERENCES_WINDOW.as_ref()
|
||||
.unwrap_unchecked()
|
||||
.widget()
|
||||
.close_subpage();
|
||||
.pop_subpage();
|
||||
}
|
||||
|
||||
GeneralAppMsg::OpenComponentsPage => unsafe {
|
||||
PREFERENCES_WINDOW.as_ref()
|
||||
.unwrap_unchecked()
|
||||
.widget()
|
||||
.present_subpage(self.components_page.widget());
|
||||
.push_subpage(self.components_page.widget());
|
||||
}
|
||||
|
||||
#[allow(unused_must_use)]
|
||||
|
|
Loading…
Reference in a new issue