ui: add dll and preset field

This commit is contained in:
PancakeTAS 2025-07-24 03:08:56 +02:00 committed by Pancake
parent 8bf5eba479
commit 0003cd6eb2
8 changed files with 75 additions and 12 deletions

View file

@ -26,8 +26,26 @@
<property name="margin-top">32</property>
<property name="margin-bottom">32</property>
<property name="spacing">32</property>
<!-- General Properties -->
<child>
<object class="AdwPreferencesGroup">
<property name="title">General Properties</property>
<!--General Properties: Path to Lossless.dll -->
<child>
<object class="LSPrefEntry" id="dll">
<property name="opt-name">Path to Lossless.dll</property>
</object>
</child>
<!--General Properties: Preset name -->
<child>
<object class="LSPrefEntry" id="preset_name">
<property name="opt-name">Preset name</property>
</object>
</child>
</object>
</child>
<!-- Frame Generation -->
<child>
<object class="AdwPreferencesGroup">
<property name="title">Frame Generation</property>
<!-- Frame Generation: Multiplier -->
@ -51,8 +69,8 @@
</child>
</object>
</child>
<child>
<!-- Misc -->
<child>
<object class="AdwPreferencesGroup">
<property name="title">Misc</property>
<!-- Misc: HDR Mode -->

View file

@ -24,8 +24,9 @@
bind-source="LSPrefEntry" bind-property="default-text" bind-flags="sync-create"/>
<property name="placeholder-text"
bind-source="LSPrefEntry" bind-property="tooltip-text" bind-flags="sync-create"/>
<property name="input-purpose">number</property>
<property name="css-classes">compact</property>
<property name="width-chars">60</property>
<property name="max-width-chars">60</property>
</object>
</child>
</object>

View file

@ -2,8 +2,8 @@
<interface>
<template class="LSApplicationWindow" parent="AdwApplicationWindow">
<property name="title">lsfg-vk Configuration Window</property>
<property name="default-width">800</property>
<property name="default-height">600</property>
<property name="default-width">1000</property>
<property name="default-height">700</property>
<property name="content">
<!-- Split View -->
<object class="AdwNavigationSplitView">

View file

@ -11,7 +11,6 @@ const APP_ID: &str = "gay.pancake.lsfg-vk.ConfigurationUi";
#[derive(Debug)]
struct State {
// ui state
selected_game: Option<usize>
}

View file

@ -1,5 +1,5 @@
use adw::{self, subclass::prelude::ObjectSubclassIsExt};
use gtk::prelude::*;
use gtk::prelude::{WidgetExt, EditableExt, GtkWindowExt};
use crate::config;
use crate::wrapper;
@ -22,11 +22,20 @@ pub fn build(app: &adw::Application) {
entry_handler::add_entry(entry, imp.sidebar.imp().profiles.clone());
}
if let Some(dll_path) = config.global.dll {
imp.main.imp().dll.imp().entry.set_text(&dll_path);
}
// register handlers on sidebar pane.
sidebar_handler::register_signals(&imp.sidebar, imp.main.clone());
// register handlers on main pane.
main_handler::register_signals(&imp.main);
main_handler::register_signals(imp.sidebar.clone(), &imp.main);
// activate the first profile if available
if let Some(entry) = imp.sidebar.imp().profiles.row_at_index(0) {
entry.activate();
}
// present the window
window.present();

View file

@ -1,7 +1,7 @@
use adw::subclass::prelude::ObjectSubclassIsExt;
use gtk::prelude::RangeExt;
use gtk::{glib::object::CastNone, prelude::{EditableExt, RangeExt}};
use crate::{config, wrapper::pane, STATE};
use crate::{config, wrapper::{pane, entry}, STATE};
// update the currently selected game configuration
fn update_game<F: FnOnce(&mut config::TomlGame)>(update: F) {
@ -17,14 +17,32 @@ fn update_game<F: FnOnce(&mut config::TomlGame)>(update: F) {
///
/// Register signals for preset preferences.
///
pub fn register_signals(main: &pane::PaneMain) {
pub fn register_signals(sidebar_: pane::PaneSidebar, main: &pane::PaneMain) {
let main = main.imp();
let exe = main.preset_name.imp();
let multiplier = main.multiplier.imp();
let flow_scale = main.flow_scale.imp();
let performance_mode = main.performance_mode.imp();
let hdr_mode = main.hdr_mode.imp();
let experimental_present_mode = main.experimental_present_mode.imp();
let sidebar = sidebar_.clone();
exe.entry.connect_changed(move |entry| {
let mut exe = entry.text().to_string();
if exe.trim().is_empty() {
exe = "new preset".to_string();
}
// rename list entry
let row = sidebar.imp().profiles.selected_row()
.and_downcast::<entry::Entry>().unwrap();
row.set_exe(exe.clone());
// update the game configuration
update_game(|conf| {
conf.exe = exe;
});
});
multiplier.number.connect_value_changed(|dropdown| {
update_game(|conf| {
conf.multiplier = (dropdown.value() as i64).into();
@ -55,4 +73,16 @@ pub fn register_signals(main: &pane::PaneMain) {
};
});
});
let dll = main.dll.imp();
dll.entry.connect_changed(|entry| {
let _ = config::edit_config(|config| {
let text = entry.text().to_string();
if text.trim().is_empty() {
config.global.dll = None;
} else {
config.global.dll = Some(text);
}
});
});
}

View file

@ -1,5 +1,5 @@
use adw::subclass::prelude::ObjectSubclassIsExt;
use gtk::prelude::{ButtonExt, ListBoxRowExt, RangeExt, WidgetExt};
use gtk::prelude::{ButtonExt, EditableExt, ListBoxRowExt, RangeExt, WidgetExt};
use crate::{config, ui::entry_handler, wrapper::{pane, entry}, STATE};
@ -21,6 +21,7 @@ pub fn register_signals(sidebar_: &pane::PaneSidebar, main: pane::PaneMain) {
// update main pane
let main = main.imp();
let exe = main.preset_name.imp();
let multiplier = main.multiplier.imp();
let flow_scale = main.flow_scale.imp();
let performance_mode = main.performance_mode.imp();
@ -29,6 +30,7 @@ pub fn register_signals(sidebar_: &pane::PaneSidebar, main: pane::PaneMain) {
// (lock state early, so the ui update doesn't override the config)
if let Ok(mut state) = state.write() {
exe.entry.set_text(&conf.exe);
multiplier.number.set_value(conf.multiplier.into());
flow_scale.slider.set_value(Into::<f64>::into(conf.flow_scale) * 100.0);
performance_mode.switch.set_active(conf.performance_mode);

View file

@ -6,6 +6,10 @@ use crate::wrapper::pref::*;
#[derive(gtk::CompositeTemplate, Default)]
#[template(resource = "/gay/pancake/lsfg-vk/pane/main.ui")]
pub struct PaneMain {
#[template_child]
pub dll: TemplateChild<PrefEntry>,
#[template_child]
pub preset_name: TemplateChild<PrefEntry>,
#[template_child]
pub multiplier: TemplateChild<PrefNumber>,
#[template_child]