1
0
Fork 0
mirror of synced 2024-06-02 18:54:41 +12:00

GameSettings: Emit signal when a non-editable row changes from the settings

This commit is contained in:
loathingKernel 2023-03-31 14:03:32 +03:00
parent 459828f1de
commit 28e6f02fc1
No known key found for this signature in database
GPG key ID: CE0C72D0B53821FD
7 changed files with 36 additions and 19 deletions

View file

@ -58,6 +58,8 @@ class DefaultGameSettings(QWidget):
self.ui.linux_settings_widget.setVisible(False)
self.env_vars = EnvVars(self)
self.linux_settings.environ_changed.connect(self.env_vars.reset_model)
self.proton_settings.environ_changed.connect(self.env_vars.reset_model)
self.ui.game_settings_layout.addWidget(self.env_vars)
if is_default:

View file

@ -35,8 +35,8 @@ class EnvVars(QGroupBox):
# We use this function to keep an eye on the config.
# When the user uses for example the wineprefix settings, we need to update the table.
# With this function, when the config file changes, we update the table.
self.config_file_watcher = QFileSystemWatcher([str(self.core.lgd.config_path)], self)
self.config_file_watcher.fileChanged.connect(self.table_model.reset)
# self.config_file_watcher = QFileSystemWatcher([str(self.core.lgd.config_path)], self)
# self.config_file_watcher.fileChanged.connect(self.table_model.reset)
row_height = self.table_view.rowHeight(0)
self.table_view.setMinimumHeight(row_height * 7)
@ -57,5 +57,8 @@ class EnvVars(QGroupBox):
elif e.key() == Qt.Key_Escape:
e.ignore()
def reset_model(self):
self.table_model.reset()
def update_game(self, app_name):
self.table_model.load(app_name)

View file

@ -170,7 +170,7 @@ class EnvVarsTableModel(QAbstractTableModel):
# TODO: restrict spaces in variable names
if index.column() == 0:
if not self.__is_key_valid(value):
if (not self.__is_key_valid(value)) or value in self.__readonly:
return False
# Do not accept existing variable names
if value in self.__data_map.keys():

View file

@ -2,6 +2,7 @@ import os
import shutil
from logging import getLogger
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QFileDialog, QWidget
from rare.components.tabs.settings.widgets.dxvk import DxvkSettings
@ -9,11 +10,15 @@ from rare.components.tabs.settings.widgets.mangohud import MangoHudSettings
from rare.shared import LegendaryCoreSingleton, GlobalSignalsSingleton
from rare.ui.components.tabs.settings.linux import Ui_LinuxSettings
from rare.widgets.indicator_edit import PathEdit, IndicatorReasonsCommon
from rare.utils import config_helper
logger = getLogger("LinuxSettings")
class LinuxSettings(QWidget):
# str: option key
environ_changed = pyqtSignal(str)
def __init__(self, name=None, parent=None):
super(LinuxSettings, self).__init__(parent=parent)
self.ui = Ui_LinuxSettings()
@ -47,10 +52,12 @@ class LinuxSettings(QWidget):
# dxvk
self.dxvk = DxvkSettings()
self.dxvk.environ_changed.connect(self.environ_changed)
self.ui.linux_layout.addWidget(self.dxvk)
self.dxvk.load_settings(self.name)
self.mangohud = MangoHudSettings()
self.mangohud.environ_changed.connect(self.environ_changed)
self.ui.linux_layout.addWidget(self.mangohud)
self.mangohud.load_settings(self.name)
@ -67,6 +74,7 @@ class LinuxSettings(QWidget):
def save_prefix(self, text: str):
self.save_setting(text, f"{self.name}.env", "WINEPREFIX")
self.environ_changed.emit("WINEPREFIX")
self.save_setting(text, self.name, "wine_prefix")
self.signals.application.prefix_updated.emit()
@ -75,20 +83,9 @@ class LinuxSettings(QWidget):
def save_setting(self, text: str, section: str, setting: str):
if text:
if section not in self.core.lgd.config.sections():
self.core.lgd.config.add_section(section)
logger.debug(f"Added {f'[{section}]'} configuration section")
self.core.lgd.config.set(section, setting, text)
config_helper.add_option(section, setting, text)
logger.debug(f"Set {setting} in {f'[{section}]'} to {text}")
else:
if self.core.lgd.config.has_section(
section
) and self.core.lgd.config.has_option(section, setting):
self.core.lgd.config.remove_option(section, setting)
logger.debug(f"Unset {setting} from {f'[{section}]'}")
if not self.core.lgd.config[section]:
self.core.lgd.config.remove_section(section)
logger.debug(f"Removed {f'[{section}]'} configuration section")
self.core.lgd.save_config()
config_helper.remove_option(section, setting)
logger.debug(f"Unset {setting} from {f'[{section}]'}")
config_helper.save_config()

View file

@ -93,7 +93,9 @@ class MangoHudSettings(OverlaySettings):
cfg = f"{var_name}=0"
if cfg:
config_helper.add_option(f"{self.name}.env", "MANGOHUD_CONFIG", cfg)
self.environ_changed.emit(self.config_env_var_name)
else:
config_helper.remove_option(f"{self.name}.env", "MANGOHUD_CONFIG")
self.environ_changed.emit(self.config_env_var_name)
self.set_wrapper_activated.emit(True)

View file

@ -2,6 +2,7 @@ from enum import Enum
from logging import getLogger
from typing import List, Dict, Tuple, Any, Callable
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtGui import QIntValidator, QDoubleValidator
from PyQt5.QtWidgets import QGroupBox, QCheckBox, QWidget, QLineEdit, QLabel, QComboBox
@ -74,6 +75,8 @@ class ActivationStates(Enum):
class OverlaySettings(QGroupBox, Ui_OverlaySettings):
# str: option key
environ_changed = pyqtSignal(str)
name: str = "default"
settings_updatable = True
@ -113,6 +116,7 @@ class OverlaySettings(QGroupBox, Ui_OverlaySettings):
if self.show_overlay_combo.currentIndex() == 0:
# System default
config_helper.remove_option(f"{self.name}.env", self.config_env_var_name)
self.environ_changed.emit(self.config_env_var_name)
self.gb_options.setDisabled(True)
self.set_activation_state(ActivationStates.DEFAULT)
return
@ -120,6 +124,7 @@ class OverlaySettings(QGroupBox, Ui_OverlaySettings):
elif self.show_overlay_combo.currentIndex() == 1:
# hidden
config_helper.add_option(f"{self.name}.env", self.config_env_var_name, self.no_display_value)
self.environ_changed.emit(self.config_env_var_name)
self.gb_options.setDisabled(True)
self.set_activation_state(ActivationStates.HIDDEN)
return
@ -141,6 +146,7 @@ class OverlaySettings(QGroupBox, Ui_OverlaySettings):
var_names.append(list(self.checkboxes.keys())[0])
config_helper.add_option(f"{self.name}.env", self.config_env_var_name, ",".join(var_names))
self.environ_changed.emit(self.config_env_var_name)
self.set_activation_state(ActivationStates.ACTIVATED)
def load_settings(self, name: str):

View file

@ -3,6 +3,7 @@ from logging import getLogger
from pathlib import Path
from typing import Tuple
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QGroupBox, QFileDialog
from rare.components.tabs.settings import LinuxSettings
@ -40,7 +41,8 @@ def find_proton_combos():
class ProtonSettings(QGroupBox):
# str: option key
environ_changed = pyqtSignal(str)
app_name: str
changeable = True
@ -72,7 +74,9 @@ class ProtonSettings(QGroupBox):
self._wrapper_settings.delete_wrapper("proton")
config_helper.remove_option(self.app_name, "no_wine")
config_helper.remove_option(f"{self.app_name}.env", "STEAM_COMPAT_DATA_PATH")
self.environ_changed.emit("STEAM_COMPAT_DATA_PATH")
config_helper.remove_option(f"{self.app_name}.env", "STEAM_COMPAT_CLIENT_INSTALL_PATH")
self.environ_changed.emit("STEAM_COMPAT_CLIENT_INSTALL_PATH")
self.proton_prefix.setEnabled(False)
self.proton_prefix.setText("")
@ -89,6 +93,8 @@ class ProtonSettings(QGroupBox):
"STEAM_COMPAT_CLIENT_INSTALL_PATH",
str(Path.home().joinpath(".steam", "steam"))
)
self.environ_changed.emit("STEAM_COMPAT_CLIENT_INSTALL_PATH")
self.proton_prefix.setText(os.path.expanduser("~/.proton"))
# Don't use Wine
@ -109,6 +115,7 @@ class ProtonSettings(QGroupBox):
config_helper.add_option(
f"{self.app_name}.env", "STEAM_COMPAT_DATA_PATH", text
)
self.environ_changed.emit("STEAM_COMPAT_DATA_PATH")
config_helper.save_config()
def load_settings(self, app_name: str, proton: str):