GameSettings: Emit signal when a non-editable row changes from the settings
This commit is contained in:
parent
459828f1de
commit
28e6f02fc1
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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():
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Reference in a new issue