diff --git a/Rare/Components/Tabs/Games/GameInfo/GameSettings.py b/Rare/Components/Tabs/Games/GameInfo/GameSettings.py index eab9ad00..5d9cba55 100644 --- a/Rare/Components/Tabs/Games/GameInfo/GameSettings.py +++ b/Rare/Components/Tabs/Games/GameInfo/GameSettings.py @@ -1,6 +1,6 @@ import os -from PyQt5.QtWidgets import QWidget, QLabel, QVBoxLayout, QComboBox, QFileDialog, QPushButton, QMessageBox +from PyQt5.QtWidgets import QWidget, QLabel, QVBoxLayout, QComboBox, QFileDialog, QPushButton, QMessageBox, QLineEdit from Rare.Components.Tabs.Settings.Linux import LinuxSettings from Rare.Components.Tabs.Settings.SettingsWidget import SettingsWidget @@ -35,6 +35,12 @@ class GameSettings(QWidget): self.layout.addWidget(self.offline_widget) + self.wrapper = QLineEdit("") + self.wrapper_save_button = QPushButton(self.tr("Save")) + self.wrapper_save_button.clicked.connect(self.update_wrapper) + self.wrapper_widget = SettingsWidget(self.tr("Wrapper (e.g. optirun)"), self.wrapper, self.wrapper_save_button) + self.layout.addWidget(self.wrapper_widget) + if os.name != "nt": self.linux_settings = LinuxAppSettings(core) self.layout.addWidget(self.linux_settings) @@ -47,7 +53,8 @@ class GameSettings(QWidget): "proton") + '" run' self.possible_proton_wrappers.append(wrapper) except FileNotFoundError as e: - print("Unable to find Proton:", e) + print("Unable to find any Proton version") + self.select_proton = QComboBox() self.select_proton.addItems(["Don't use Proton"] + self.possible_proton_wrappers) self.select_proton.currentIndexChanged.connect(self.change_proton) @@ -65,6 +72,19 @@ class GameSettings(QWidget): self.layout.addStretch(1) self.setLayout(self.layout) + def update_wrapper(self): + wrapper = self.wrapper.text() + if wrapper != "": + if not self.game.app_name in self.core.lgd.config.sections(): + self.core.lgd.config[self.game.app_name] = {} + self.core.lgd.config.set(self.game.app_name, "wrapper", wrapper) + else: + if self.game.app_name in self.core.lgd.config.sections() and self.core.lgd.config.get(f"{self.game.app_name}", "wrapper", fallback="") != "": + self.core.lgd.config.remove_option(self.game.app_name, "wrapper") + if self.core.lgd.config[self.game.app_name] == {}: + self.core.lgd.config.remove_section(self.game.app_name) + self.core.lgd.save_config() + def update_offline(self, i): if self.change: # remove section @@ -104,6 +124,7 @@ class GameSettings(QWidget): # Dont use Proton if i == 0: self.proton_prefix_widget.setVisible(False) + self.wrapper_widget.setVisible(True) if f"{self.game.app_name}" in self.core.lgd.config.sections(): if self.core.lgd.config.get(f"{self.game.app_name}", "wrapper", fallback="") != "": self.core.lgd.config.remove_option(self.game.app_name, "wrapper") @@ -119,6 +140,7 @@ class GameSettings(QWidget): self.core.lgd.config.remove_section(self.game.app_name + ".env") else: self.proton_prefix_widget.setVisible(True) + self.wrapper_widget.setVisible(False) wrapper = self.possible_proton_wrappers[i - 1] if not self.game.app_name in self.core.lgd.config.sections(): self.core.lgd.config[self.game.app_name] = {} @@ -180,6 +202,10 @@ class GameSettings(QWidget): else: self.skip_update.setCurrentIndex(0) + wrapper = self.core.lgd.config.get(self.game.app_name, "wrapper", fallback="") + self.wrapper.setText(wrapper) + + self.title.setText(f"

{self.game.app_title}

") if os.name != "nt": self.linux_settings.update_game(app_name) @@ -192,10 +218,11 @@ class GameSettings(QWidget): fallback=self.tr( "Please select path for proton prefix")) self.proton_prefix.text_edit.setText(proton_prefix) - + self.wrapper_widget.setVisible(False) else: self.select_proton.setCurrentIndex(0) self.proton_prefix_widget.setVisible(False) + self.wrapper_widget.setVisible(True) self.change = True diff --git a/Rare/Components/Tabs/Settings/SettingsWidget.py b/Rare/Components/Tabs/Settings/SettingsWidget.py index 080688a8..10978b9f 100644 --- a/Rare/Components/Tabs/Settings/SettingsWidget.py +++ b/Rare/Components/Tabs/Settings/SettingsWidget.py @@ -1,13 +1,16 @@ -from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QPushButton +from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QPushButton, QGroupBox -class SettingsWidget(QWidget): +class SettingsWidget(QGroupBox): def __init__(self, text: str, widget: QWidget, accept_button: QPushButton = None): super(SettingsWidget, self).__init__() self.setObjectName("settings_widget") + self.setStyleSheet("""QGroupBox{border: 1px solid gray; + border-radius: 3px; + margin-top: 1ex;}""") self.layout = QVBoxLayout() self.info_text = QLabel("") - self.layout.addWidget(QLabel(text)) + self.setTitle(text) self.layout.addWidget(widget) if accept_button: self.layout.addWidget(accept_button)