diff --git a/rare/components/dialogs/login/browser_login.py b/rare/components/dialogs/login/browser_login.py index 900c0421..de726d68 100644 --- a/rare/components/dialogs/login/browser_login.py +++ b/rare/components/dialogs/login/browser_login.py @@ -27,7 +27,7 @@ class BrowserLogin(QWidget, Ui_BrowserLogin): self.core = core self.sid_edit = IndicatorLineEdit( - ph_text=self.tr("Insert SID here"), edit_func=self.text_changed, parent=self + placeholder=self.tr("Insert SID here"), edit_func=self.text_changed, parent=self ) self.link_text.setText(self.login_url) self.copy_button.setIcon(icon("mdi.content-copy", "fa.copy")) diff --git a/rare/components/tabs/games/game_info/game_settings.py b/rare/components/tabs/games/game_info/game_settings.py index 90eeacf0..95f86ded 100644 --- a/rare/components/tabs/games/game_info/game_settings.py +++ b/rare/components/tabs/games/game_info/game_settings.py @@ -15,6 +15,7 @@ from legendary.core import LegendaryCore from legendary.models.game import InstalledGame, Game from rare.components.tabs.settings.linux import LinuxSettings +from rare.components.tabs.settings.widgets.pre_launch import PreLaunchSettings from rare.components.tabs.settings.widgets.proton import ProtonSettings from rare.components.tabs.settings.widgets.wrapper import WrapperSettings from rare.ui.components.tabs.games.game_info.game_settings import Ui_GameSettings @@ -47,6 +48,11 @@ class GameSettings(QWidget, Ui_GameSettings): QLabel("Wrapper"), self.wrapper_settings ) + self.pre_launch_settings = PreLaunchSettings() + self.launch_settings_group.layout().addRow( + QLabel("pre launch"), self.pre_launch_settings + ) + self.cloud_save_path_edit = PathEdit( "", file_type=QFileDialog.DirectoryOnly, @@ -264,6 +270,9 @@ class GameSettings(QWidget, Ui_GameSettings): self.override_exe_edit.setText( self.core.lgd.config.get(self.game.app_name, "override_exe", fallback="") ) + + self.pre_launch_settings.load_settings(app_name) + self.change = True self.env_vars.update_game(app_name) diff --git a/rare/components/tabs/games/import_sync/import_group.py b/rare/components/tabs/games/import_sync/import_group.py index 811a60ab..e296d6e7 100644 --- a/rare/components/tabs/games/import_sync/import_group.py +++ b/rare/components/tabs/games/import_sync/import_group.py @@ -87,7 +87,7 @@ class ImportGroup(QGroupBox, Ui_ImportGroup): self.path_edit_layout.addWidget(self.path_edit) self.app_name = IndicatorLineEdit( - ph_text=self.tr("Use in case the app name was not found automatically"), + placeholder=self.tr("Use in case the app name was not found automatically"), completer=AppNameCompleter( app_names=[ (i.app_name, i.app_title) for i in self.api_results.game_list diff --git a/rare/components/tabs/settings/widgets/pre_launch.py b/rare/components/tabs/settings/widgets/pre_launch.py new file mode 100644 index 00000000..a098a5f2 --- /dev/null +++ b/rare/components/tabs/settings/widgets/pre_launch.py @@ -0,0 +1,62 @@ +import os +import shutil +from typing import Tuple + +from PyQt5.QtWidgets import QWidget, QHBoxLayout, QCheckBox + +from rare.shared import LegendaryCoreSingleton +from rare.utils import config_helper +from rare.utils.extra_widgets import IndicatorLineEdit + + +class PreLaunchSettings(QWidget): + app_name: str + + def __init__(self): + super(PreLaunchSettings, self).__init__() + self.setLayout(QHBoxLayout()) + self.core = LegendaryCoreSingleton() + self.edit = IndicatorLineEdit( + text="", + placeholder=self.tr("Pre launch command"), + edit_func=self.edit_command, + save_func=self.save_pre_launch_command, + parent=self + ) + self.layout().addWidget(self.edit) + + self.wait_check = QCheckBox(self.tr("Wait for finish")) + self.layout().addWidget(self.wait_check) + self.wait_check.stateChanged.connect(self.save_wait_finish) + + def edit_command(self, text: str) -> Tuple[bool, str, str]: + if not text: + return True, text, "" + + if not os.path.isfile(text.split()[0]) and not shutil.which(text.split()[0]): + return False, text, IndicatorLineEdit.reasons.dir_not_exist + else: + return True, text, "" + + def save_pre_launch_command(self, text): + if text: + config_helper.add_option(self.app_name, "pre_launch_command", text) + self.wait_check.setDisabled(False) + else: + config_helper.remove_option(self.app_name, "pre_launch_command") + self.wait_check.setDisabled(True) + config_helper.remove_option(self.app_name, "pre_launch_wait") + + def save_wait_finish(self): + config_helper.add_option(self.app_name, "pre_launch_wait", str(self.wait_check.isChecked()).lower()) + + def load_settings(self, app_name): + self.app_name = app_name + + command = self.core.lgd.config.get(app_name, "pre_launch_command", fallback="") + self.edit.setText(command) + + wait = self.core.lgd.config.getboolean(app_name, "pre_launch_wait", fallback=False) + self.wait_check.setChecked(wait) + + self.wait_check.setEnabled(bool(command)) diff --git a/rare/utils/extra_widgets.py b/rare/utils/extra_widgets.py index dad4420a..28d8b7a9 100644 --- a/rare/utils/extra_widgets.py +++ b/rare/utils/extra_widgets.py @@ -161,7 +161,7 @@ class IndicatorLineEdit(QWidget): def __init__( self, text: str = "", - ph_text: str = "", + placeholder: str = "", completer: QCompleter = None, edit_func: Callable[[str], Tuple[bool, str, str]] = None, save_func: Callable[[str], None] = None, @@ -176,7 +176,7 @@ class IndicatorLineEdit(QWidget): # Add line_edit self.line_edit = QLineEdit(self) self.line_edit.setObjectName("line_edit") - self.line_edit.setPlaceholderText(ph_text) + self.line_edit.setPlaceholderText(placeholder) self.line_edit.setSizePolicy(horiz_policy, QSizePolicy.Fixed) # Add hint_label to line_edit self.line_edit.setLayout(QHBoxLayout()) @@ -199,7 +199,7 @@ class IndicatorLineEdit(QWidget): self.indicator_label.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) self.layout.addWidget(self.indicator_label) - if not ph_text: + if not placeholder: _translate = QCoreApplication.translate self.line_edit.setPlaceholderText( _translate(self.__class__.__name__, "Default") @@ -320,7 +320,7 @@ class PathEdit(IndicatorLineEdit): self.completer.setModel(self.compl_model) super(PathEdit, self).__init__( text=path, - ph_text=placeholder, + placeholder=placeholder, completer=self.completer, edit_func=edit_func, save_func=save_func,