From 8c882177e1a9900a70a8bd9d4209efe05c9d864a Mon Sep 17 00:00:00 2001 From: Stelios Tsampas Date: Sat, 1 May 2021 23:15:42 +0300 Subject: [PATCH] Make PathEdit more self-contained --- .../tabs/games/game_info/game_settings.py | 3 +-- rare/components/tabs/games/import_widget.py | 3 +-- rare/components/tabs/settings/dxvk_ui.py | 3 +-- rare/components/tabs/settings/legendary.py | 8 ++---- rare/components/tabs/settings/linux.py | 25 +++++-------------- rare/components/tabs/settings/rare.py | 6 +---- rare/utils/extra_widgets.py | 18 ++++++++++++- resources/ui/components/tabs/settings/dxvk.ui | 10 +------- 8 files changed, 30 insertions(+), 46 deletions(-) diff --git a/rare/components/tabs/games/game_info/game_settings.py b/rare/components/tabs/games/game_info/game_settings.py index d53d27bd..bb9d7623 100644 --- a/rare/components/tabs/games/game_info/game_settings.py +++ b/rare/components/tabs/games/game_info/game_settings.py @@ -92,8 +92,7 @@ class GameSettings(QScrollArea): self.select_proton_widget = SettingsWidget(self.tr("Proton Wrapper"), self.select_proton) self.layout.addWidget(self.select_proton_widget) - self.proton_prefix = PathEdit("x", QFileDialog.DirectoryOnly) - self.proton_prefix.save_path_button.clicked.connect(self.update_prefix) + self.proton_prefix = PathEdit("x", QFileDialog.DirectoryOnly, save_func=self.update_prefix) self.proton_prefix_widget = SettingsWidget(self.tr("Proton prefix"), self.proton_prefix) self.layout.addWidget(self.proton_prefix_widget) diff --git a/rare/components/tabs/games/import_widget.py b/rare/components/tabs/games/import_widget.py index 0cd15230..93fe9126 100644 --- a/rare/components/tabs/games/import_widget.py +++ b/rare/components/tabs/games/import_widget.py @@ -55,8 +55,7 @@ class ImportWidget(QWidget): self.app_name_input.setLayout(minilayout) self.app_name_input.textChanged.connect(self.app_name_changed) - self.path_edit = PathEdit(os.path.expanduser("~"), QFileDialog.DirectoryOnly) - self.path_edit.text_edit.textChanged.connect(self.path_changed) + self.path_edit = PathEdit(os.path.expanduser("~"), QFileDialog.DirectoryOnly, edit_func=self.path_changed) self.gb_layout.addWidget(self.path_edit) self.gb_layout.addWidget(self.override_app_name_label) diff --git a/rare/components/tabs/settings/dxvk_ui.py b/rare/components/tabs/settings/dxvk_ui.py index 60fd9a9f..577cdae9 100644 --- a/rare/components/tabs/settings/dxvk_ui.py +++ b/rare/components/tabs/settings/dxvk_ui.py @@ -14,7 +14,6 @@ from PyQt5 import QtCore, QtGui, QtWidgets class Ui_DxvkSettings(object): def setupUi(self, DxvkSettings): DxvkSettings.setObjectName("DxvkSettings") - DxvkSettings.resize(598, 182) self.gridLayout = QtWidgets.QGridLayout(DxvkSettings) self.gridLayout.setObjectName("gridLayout") self.gb_dxvk_options = QtWidgets.QGroupBox(DxvkSettings) @@ -42,7 +41,7 @@ class Ui_DxvkSettings(object): self.fps = QtWidgets.QCheckBox(self.gb_dxvk_options) self.fps.setObjectName("fps") self.layout_dxvk_options.addWidget(self.fps, 2, 0, 1, 1) - spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + spacerItem = QtWidgets.QSpacerItem(0, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.layout_dxvk_options.addItem(spacerItem, 0, 3, 4, 1) self.gridLayout.addWidget(self.gb_dxvk_options, 2, 0, 1, 3) self.lbl_show_dxvk = QtWidgets.QLabel(DxvkSettings) diff --git a/rare/components/tabs/settings/legendary.py b/rare/components/tabs/settings/legendary.py index 3b9911bc..ed3c0796 100644 --- a/rare/components/tabs/settings/legendary.py +++ b/rare/components/tabs/settings/legendary.py @@ -19,12 +19,8 @@ class LegendarySettings(QWidget, Ui_LegendarySettings): # Default installation directory self.install_dir = PathEdit(core.get_default_install_dir(), - file_type=QFileDialog.DirectoryOnly) - self.install_dir.text_edit.textChanged.connect( - lambda t: self.install_dir.save_path_button.setDisabled(False) - ) - self.install_dir.save_path_button.clicked.connect(self.save_path) - self.install_dir.save_path_button.setDisabled(True) + file_type=QFileDialog.DirectoryOnly, + save_func=self.save_path) self.layout_install_dir.addWidget(self.install_dir) # Max Workers diff --git a/rare/components/tabs/settings/linux.py b/rare/components/tabs/settings/linux.py index 1eaf3551..d889e323 100644 --- a/rare/components/tabs/settings/linux.py +++ b/rare/components/tabs/settings/linux.py @@ -18,29 +18,17 @@ class LinuxSettings(QWidget, Ui_LinuxSettings): self.name = name if name is not None else "default" self.core = core - # Wineprefix + # Wine prefix self.wine_prefix = PathEdit(self.core.lgd.config.get(self.name, "wine_prefix", fallback=""), - file_type=QFileDialog.DirectoryOnly) - self.wine_prefix.text_edit.textChanged.connect( - lambda t: self.wine_prefix.save_path_button.setDisabled(False) - ) - self.wine_prefix.save_path_button.clicked.connect( - lambda: self.save_setting(self.wine_prefix, "wine_prefix") - ) - self.wine_prefix.save_path_button.setDisabled(True) + file_type=QFileDialog.DirectoryOnly, + save_func=lambda: self.save_setting(self.wine_prefix, "wine_prefix")) self.prefix_layout.addWidget(self.wine_prefix) # Wine executable self.wine_exec = PathEdit(self.core.lgd.config.get(self.name, "wine_executable", fallback=""), file_type=QFileDialog.ExistingFile, - name_filter="Wine executable (wine wine64)") - self.wine_exec.text_edit.textChanged.connect( - lambda t: self.wine_exec.save_path_button.setDisabled(False) - ) - self.wine_exec.save_path_button.clicked.connect( - lambda: self.save_setting(self.wine_exec, "wine_executable") - ) - self.wine_exec.save_path_button.setDisabled(True) + name_filter="Wine executable (wine wine64)", + save_func=lambda: self.save_setting(self.wine_exec, "wine_executable")) self.exec_layout.addWidget(self.wine_exec) # dxvk @@ -56,11 +44,10 @@ class LinuxSettings(QWidget, Ui_LinuxSettings): self.core.lgd.config.add_section(self.name) self.core.lgd.config.set(self.name, setting_name, widget.text()) - if widget.text() == "": + if not widget.text(): self.core.lgd.config.remove_option(self.name, setting_name) else: logger.info("Set config of wine_prefix to " + widget.text()) if self.core.lgd.config[self.name] == {}: self.core.lgd.config.remove_section(self.name) - widget.save_path_button.setDisabled(True) self.core.lgd.save_config() diff --git a/rare/components/tabs/settings/rare.py b/rare/components/tabs/settings/rare.py index f4f37388..2b5a8029 100644 --- a/rare/components/tabs/settings/rare.py +++ b/rare/components/tabs/settings/rare.py @@ -42,10 +42,7 @@ class RareSettings(QWidget, Ui_RareSettings): self.logdir = os.path.expanduser("~/.cache/rare/logs") # Select Image directory - self.img_dir = PathEdit(self.img_dir_path, file_type=QFileDialog.DirectoryOnly) - self.img_dir.text_edit.textChanged.connect(lambda t: self.img_dir.save_path_button.setDisabled(False)) - self.img_dir.save_path_button.clicked.connect(self.save_path) - self.img_dir.save_path_button.setDisabled(True) + self.img_dir = PathEdit(self.img_dir_path, file_type=QFileDialog.DirectoryOnly, save_func=self.save_path) self.layout_img_dir.addWidget(self.img_dir) # Select lang @@ -98,7 +95,6 @@ class RareSettings(QWidget, Ui_RareSettings): self.settings.remove("window_size") def save_path(self): - self.img_dir.save_path_button.setDisabled(True) self.update_path() def update_lang(self, i: int): diff --git a/rare/utils/extra_widgets.py b/rare/utils/extra_widgets.py index 35139142..5d1bae80 100644 --- a/rare/utils/extra_widgets.py +++ b/rare/utils/extra_widgets.py @@ -126,20 +126,36 @@ class PathEdit(QWidget, Ui_PathEdit): text: str = "", file_type: QFileDialog.FileType = QFileDialog.AnyFile, type_filter: str = None, - name_filter: str = None): + name_filter: str = None, + edit_func: callable = None, + save_func: callable = None): super(PathEdit, self).__init__() self.setupUi(self) self.type_filter = type_filter self.name_filter = name_filter self.file_type = file_type + self.edit_func = edit_func + self.save_func = save_func if text: self.text_edit.setText(text) + if self.edit_func is not None: + self.text_edit.textChanged.connect(self.edit_func) + if self.save_func is None: + self.save_path_button.setVisible(False) + else: + self.text_edit.textChanged.connect(lambda t: self.save_path_button.setDisabled(False)) + self.save_path_button.clicked.connect(self.save) + self.save_path_button.setDisabled(True) self.path_select.clicked.connect(self.set_path) def text(self): return self.text_edit.text() + def save(self): + self.save_func() + self.save_path_button.setDisabled(True) + def set_path(self): dlg_path = self.text_edit.text() if not dlg_path: diff --git a/resources/ui/components/tabs/settings/dxvk.ui b/resources/ui/components/tabs/settings/dxvk.ui index 7b6be624..edf5b241 100644 --- a/resources/ui/components/tabs/settings/dxvk.ui +++ b/resources/ui/components/tabs/settings/dxvk.ui @@ -2,14 +2,6 @@ DxvkSettings - - - 0 - 0 - 598 - 182 - - DxvkSettings @@ -79,7 +71,7 @@ - 40 + 0 20