From 870aeea7487d722f8e04eec9e012a65ac63aa0c8 Mon Sep 17 00:00:00 2001 From: loathingKernel <142770+loathingKernel@users.noreply.github.com> Date: Mon, 4 Sep 2023 00:29:15 +0300 Subject: [PATCH] EOSGroup: Use UI membership instead of double inheritance --- .../tabs/games/integrations/eos_group.py | 102 +++++++++--------- .../tabs/games/integrations/eos_widget.py | 90 +++++++--------- .../tabs/games/integrations/eos_widget.ui | 60 +++++------ 3 files changed, 115 insertions(+), 137 deletions(-) diff --git a/rare/components/tabs/games/integrations/eos_group.py b/rare/components/tabs/games/integrations/eos_group.py index 174f34aa..9e541d25 100644 --- a/rare/components/tabs/games/integrations/eos_group.py +++ b/rare/components/tabs/games/integrations/eos_group.py @@ -10,8 +10,9 @@ from legendary.lfs import eos from rare.models.install import InstallOptionsModel from rare.shared import LegendaryCoreSingleton, GlobalSignalsSingleton from rare.ui.components.tabs.games.integrations.eos_widget import Ui_EosWidget +from rare.utils.misc import icon -logger = getLogger("EOS") +logger = getLogger("EpicOverlay") def get_wine_prefixes() -> List[str]: @@ -42,83 +43,86 @@ class CheckForUpdateWorker(QRunnable): self.signals.update_available.emit(self.core.overlay_update_available) -class EOSGroup(QGroupBox, Ui_EosWidget): +class EOSGroup(QGroupBox): def __init__(self, parent=None): super(EOSGroup, self).__init__(parent=parent) - self.setupUi(self) + self.ui = Ui_EosWidget() + self.ui.setupUi(self) # lk: set object names for CSS properties - self.install_button.setObjectName("InstallButton") - self.uninstall_button.setObjectName("UninstallButton") + self.ui.install_button.setObjectName("InstallButton") + self.ui.install_button.setIcon(icon("ri.install-line")) + self.ui.uninstall_button.setObjectName("UninstallButton") + self.ui.uninstall_button.setIcon(icon("ri.uninstall-line")) self.core = LegendaryCoreSingleton() self.signals = GlobalSignalsSingleton() self.prefix_enabled = False - self.enabled_cb.stateChanged.connect(self.change_enable) - self.uninstall_button.clicked.connect(self.uninstall_overlay) + self.ui.enabled_cb.stateChanged.connect(self.change_enable) + self.ui.uninstall_button.clicked.connect(self.uninstall_overlay) - self.update_button.setVisible(False) + self.ui.update_button.setVisible(False) self.overlay = self.core.lgd.get_overlay_install_info() self.signals.application.overlay_installed.connect(self.overlay_installation_finished) self.signals.application.prefix_updated.connect(self.update_prefixes) - self.update_check_button.clicked.connect(self.check_for_update) - self.install_button.clicked.connect(self.install_overlay) - self.update_button.clicked.connect(lambda: self.install_overlay(True)) + self.ui.update_check_button.clicked.connect(self.check_for_update) + self.ui.install_button.clicked.connect(self.install_overlay) + self.ui.update_button.clicked.connect(lambda: self.install_overlay(True)) if self.overlay: # installed - self.installed_version_lbl.setText(f"{self.overlay.version}") - self.installed_path_lbl.setText(f"{self.overlay.install_path}") - self.overlay_stack.setCurrentIndex(0) + self.ui.installed_version_lbl.setText(f"{self.overlay.version}") + self.ui.installed_path_lbl.setText(f"{self.overlay.install_path}") + self.ui.overlay_stack.setCurrentIndex(0) else: - self.overlay_stack.setCurrentIndex(1) - self.enable_frame.setDisabled(True) + self.ui.overlay_stack.setCurrentIndex(1) + self.ui.enable_frame.setDisabled(True) if platform.system() == "Windows": self.current_prefix = None - self.select_pfx_combo.setVisible(False) + self.ui.select_pfx_combo.setVisible(False) else: self.current_prefix = os.path.expanduser("~/.wine") \ if os.path.exists(os.path.expanduser("~/.wine")) \ else None pfxs = get_wine_prefixes() for pfx in pfxs: - self.select_pfx_combo.addItem(pfx.replace(os.path.expanduser("~/"), "~/")) + self.ui.select_pfx_combo.addItem(pfx.replace(os.path.expanduser("~/"), "~/")) if not pfxs: - self.enable_frame.setDisabled(True) + self.ui.enable_frame.setDisabled(True) else: - self.select_pfx_combo.setCurrentIndex(0) + self.ui.select_pfx_combo.setCurrentIndex(0) - self.select_pfx_combo.currentIndexChanged.connect(self.update_select_combo) + self.ui.select_pfx_combo.currentIndexChanged.connect(self.update_select_combo) if pfxs: self.update_select_combo(None) - self.enabled_info_label.setText("") + self.ui.enabled_info_label.setText("") self.threadpool = QThreadPool.globalInstance() def update_prefixes(self): logger.debug("Updated prefixes") pfxs = get_wine_prefixes() # returns /home/whatever - self.select_pfx_combo.clear() + self.ui.select_pfx_combo.clear() for pfx in pfxs: - self.select_pfx_combo.addItem(pfx.replace(os.path.expanduser("~/"), "~/")) + self.ui.select_pfx_combo.addItem(pfx.replace(os.path.expanduser("~/"), "~/")) if self.current_prefix in pfxs: - self.select_pfx_combo.setCurrentIndex( - self.select_pfx_combo.findText(self.current_prefix.replace(os.path.expanduser("~/"), "~/"))) + self.ui.select_pfx_combo.setCurrentIndex( + self.ui.select_pfx_combo.findText(self.current_prefix.replace(os.path.expanduser("~/"), "~/"))) def check_for_update(self): def worker_finished(update_available): - self.update_button.setVisible(update_available) - self.update_check_button.setDisabled(False) + self.ui.update_button.setVisible(update_available) + self.ui.update_check_button.setDisabled(False) if not update_available: - self.update_check_button.setText(self.tr("No update available")) + self.ui.update_check_button.setText(self.tr("No update available")) - self.update_check_button.setDisabled(True) + self.ui.update_check_button.setDisabled(True) worker = CheckForUpdateWorker() worker.signals.update_available.connect(worker_finished) QThreadPool.globalInstance().start(worker) @@ -131,18 +135,18 @@ class EOSGroup(QGroupBox, Ui_EosWidget): QMessageBox.warning(self, "Error", self.tr("Something went wrong, when installing overlay")) return - self.overlay_stack.setCurrentIndex(0) - self.installed_version_lbl.setText(f"{self.overlay.version}") - self.installed_path_lbl.setText(f"{self.overlay.install_path}") + self.ui.overlay_stack.setCurrentIndex(0) + self.ui.installed_version_lbl.setText(f"{self.overlay.version}") + self.ui.installed_path_lbl.setText(f"{self.overlay.install_path}") - self.update_button.setVisible(False) + self.ui.update_button.setVisible(False) - self.enable_frame.setEnabled(True) + self.ui.enable_frame.setEnabled(True) def update_select_combo(self, i: None): if i is None: - i = self.select_pfx_combo.currentIndex() - prefix = os.path.expanduser(self.select_pfx_combo.itemText(i)) + i = self.ui.select_pfx_combo.currentIndex() + prefix = os.path.expanduser(self.ui.select_pfx_combo.itemText(i)) if platform.system() != "Windows" and not os.path.isfile(os.path.join(prefix, "user.reg")): return self.current_prefix = prefix @@ -151,10 +155,10 @@ class EOSGroup(QGroupBox, Ui_EosWidget): overlay_enabled = False if reg_paths['overlay_path'] and self.core.is_overlay_install(reg_paths['overlay_path']): overlay_enabled = True - self.enabled_cb.setChecked(overlay_enabled) + self.ui.enabled_cb.setChecked(overlay_enabled) def change_enable(self): - enabled = self.enabled_cb.isChecked() + enabled = self.ui.enabled_cb.isChecked() if not enabled: try: eos.remove_registry_entries(self.current_prefix) @@ -164,7 +168,7 @@ class EOSGroup(QGroupBox, Ui_EosWidget): "Failed to disable Overlay. Probably it is installed by Epic Games Launcher")) return logger.info("Disabled Epic Overlay") - self.enabled_info_label.setText(self.tr("Disabled")) + self.ui.enabled_info_label.setText(self.tr("Disabled")) else: if not self.overlay: available_installs = self.core.search_overlay_installs(self.current_prefix) @@ -177,7 +181,7 @@ class EOSGroup(QGroupBox, Ui_EosWidget): if not self.core.is_overlay_install(path): logger.error(f'Not a valid Overlay installation: {path}') - self.select_pfx_combo.removeItem(self.select_pfx_combo.currentIndex()) + self.ui.select_pfx_combo.removeItem(self.ui.select_pfx_combo.currentIndex()) return path = os.path.normpath(path) @@ -202,7 +206,7 @@ class EOSGroup(QGroupBox, Ui_EosWidget): QMessageBox.warning(self, "Error", self.tr( "Failed to enable EOS overlay. Maybe it is already installed by Epic Games Launcher")) return - self.enabled_info_label.setText(self.tr("Enabled")) + self.ui.enabled_info_label.setText(self.tr("Enabled")) logger.info(f'Enabled overlay at: {path}') def update_checkbox(self): @@ -210,14 +214,14 @@ class EOSGroup(QGroupBox, Ui_EosWidget): enabled = False if reg_paths['overlay_path'] and self.core.is_overlay_install(reg_paths['overlay_path']): enabled = True - self.enabled_cb.setChecked(enabled) + self.ui.enabled_cb.setChecked(enabled) def install_overlay(self, update=False): base_path = os.path.join(self.core.get_default_install_dir(), ".overlay") if update: if not self.overlay: - self.overlay_stack.setCurrentIndex(1) - self.enable_frame.setDisabled(True) + self.ui.overlay_stack.setCurrentIndex(1) + self.ui.enable_frame.setDisabled(True) QMessageBox.warning(self, "Warning", self.tr("Overlay is not installed. Could not update")) return base_path = self.overlay.install_path @@ -231,7 +235,7 @@ class EOSGroup(QGroupBox, Ui_EosWidget): def uninstall_overlay(self): if not self.core.is_overlay_installed(): logger.error('No legendary-managed overlay installation found.') - self.overlay_stack.setCurrentIndex(1) + self.ui.overlay_stack.setCurrentIndex(1) return if QMessageBox.No == QMessageBox.question( @@ -242,7 +246,7 @@ class EOSGroup(QGroupBox, Ui_EosWidget): if platform.system() == "Windows": eos.remove_registry_entries(None) else: - for prefix in [self.select_pfx_combo.itemText(i) for i in range(self.select_pfx_combo.count())]: + for prefix in [self.ui.select_pfx_combo.itemText(i) for i in range(self.ui.select_pfx_combo.count())]: logger.info(f"Removing registry entries from {prefix}") try: eos.remove_registry_entries(os.path.expanduser(prefix)) @@ -250,6 +254,6 @@ class EOSGroup(QGroupBox, Ui_EosWidget): logger.warning(f"{prefix}: {e}") self.core.remove_overlay_install() - self.overlay_stack.setCurrentIndex(1) + self.ui.overlay_stack.setCurrentIndex(1) - self.enable_frame.setDisabled(True) + self.ui.enable_frame.setDisabled(True) diff --git a/rare/ui/components/tabs/games/integrations/eos_widget.py b/rare/ui/components/tabs/games/integrations/eos_widget.py index a6ecce82..8b856256 100644 --- a/rare/ui/components/tabs/games/integrations/eos_widget.py +++ b/rare/ui/components/tabs/games/integrations/eos_widget.py @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- -# Form implementation generated from reading ui file 'rare/ui/components/tabs/games/import_sync/eos_widget.ui' +# Form implementation generated from reading ui file 'rare/ui/components/tabs/games/integrations/eos_widget.ui' # -# Created by: PyQt5 UI code generator 5.15.7 +# Created by: PyQt5 UI code generator 5.15.9 # # WARNING: Any manual changes made to this file will be lost when pyuic5 is # run again. Do not edit this file unless you know what you are doing. @@ -30,99 +30,85 @@ class Ui_EosWidget(object): self.overlay_stack.setObjectName("overlay_stack") self.overlay_info_page = QtWidgets.QWidget() self.overlay_info_page.setObjectName("overlay_info_page") - self.formLayout_3 = QtWidgets.QFormLayout(self.overlay_info_page) - self.formLayout_3.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) - self.formLayout_3.setFormAlignment(QtCore.Qt.AlignBottom|QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft) - self.formLayout_3.setObjectName("formLayout_3") + self.overlay_info_layout = QtWidgets.QFormLayout(self.overlay_info_page) + self.overlay_info_layout.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.overlay_info_layout.setFormAlignment(QtCore.Qt.AlignBottom|QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft) + self.overlay_info_layout.setObjectName("overlay_info_layout") self.installed_version_info_lbl = QtWidgets.QLabel(self.overlay_info_page) self.installed_version_info_lbl.setObjectName("installed_version_info_lbl") - self.formLayout_3.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.installed_version_info_lbl) + self.overlay_info_layout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.installed_version_info_lbl) self.installed_version_lbl = QtWidgets.QLabel(self.overlay_info_page) self.installed_version_lbl.setText("error") self.installed_version_lbl.setObjectName("installed_version_lbl") - self.formLayout_3.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.installed_version_lbl) + self.overlay_info_layout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.installed_version_lbl) self.installed_path_info_lbl = QtWidgets.QLabel(self.overlay_info_page) self.installed_path_info_lbl.setObjectName("installed_path_info_lbl") - self.formLayout_3.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.installed_path_info_lbl) + self.overlay_info_layout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.installed_path_info_lbl) self.installed_path_lbl = QtWidgets.QLabel(self.overlay_info_page) self.installed_path_lbl.setText("error") self.installed_path_lbl.setObjectName("installed_path_lbl") - self.formLayout_3.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.installed_path_lbl) - self.horizontalLayout = QtWidgets.QHBoxLayout() - self.horizontalLayout.setObjectName("horizontalLayout") + self.overlay_info_layout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.installed_path_lbl) + self.info_buttons_layout = QtWidgets.QHBoxLayout() + self.info_buttons_layout.setObjectName("info_buttons_layout") spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout.addItem(spacerItem) + self.info_buttons_layout.addItem(spacerItem) self.uninstall_button = QtWidgets.QPushButton(self.overlay_info_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Minimum) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.uninstall_button.sizePolicy().hasHeightForWidth()) - self.uninstall_button.setSizePolicy(sizePolicy) - self.uninstall_button.setMaximumSize(QtCore.QSize(150, 16777215)) + self.uninstall_button.setMinimumSize(QtCore.QSize(120, 0)) self.uninstall_button.setObjectName("uninstall_button") - self.horizontalLayout.addWidget(self.uninstall_button) + self.info_buttons_layout.addWidget(self.uninstall_button) self.update_check_button = QtWidgets.QPushButton(self.overlay_info_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Minimum) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.update_check_button.sizePolicy().hasHeightForWidth()) - self.update_check_button.setSizePolicy(sizePolicy) - self.update_check_button.setMaximumSize(QtCore.QSize(150, 16777215)) + self.update_check_button.setMinimumSize(QtCore.QSize(120, 0)) self.update_check_button.setObjectName("update_check_button") - self.horizontalLayout.addWidget(self.update_check_button) + self.info_buttons_layout.addWidget(self.update_check_button) self.update_button = QtWidgets.QPushButton(self.overlay_info_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Minimum) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.update_button.sizePolicy().hasHeightForWidth()) - self.update_button.setSizePolicy(sizePolicy) - self.update_button.setMaximumSize(QtCore.QSize(150, 16777215)) + self.update_button.setMinimumSize(QtCore.QSize(120, 0)) self.update_button.setObjectName("update_button") - self.horizontalLayout.addWidget(self.update_button) - self.formLayout_3.setLayout(3, QtWidgets.QFormLayout.SpanningRole, self.horizontalLayout) + self.info_buttons_layout.addWidget(self.update_button) + self.overlay_info_layout.setLayout(3, QtWidgets.QFormLayout.SpanningRole, self.info_buttons_layout) spacerItem1 = QtWidgets.QSpacerItem(6, 6, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.formLayout_3.setItem(2, QtWidgets.QFormLayout.SpanningRole, spacerItem1) + self.overlay_info_layout.setItem(2, QtWidgets.QFormLayout.SpanningRole, spacerItem1) self.overlay_stack.addWidget(self.overlay_info_page) self.overlay_install_page = QtWidgets.QWidget() self.overlay_install_page.setObjectName("overlay_install_page") - self.formLayout = QtWidgets.QFormLayout(self.overlay_install_page) - self.formLayout.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) - self.formLayout.setFormAlignment(QtCore.Qt.AlignBottom|QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft) - self.formLayout.setObjectName("formLayout") + self.overlay_install_layout = QtWidgets.QFormLayout(self.overlay_install_page) + self.overlay_install_layout.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.overlay_install_layout.setFormAlignment(QtCore.Qt.AlignBottom|QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft) + self.overlay_install_layout.setObjectName("overlay_install_layout") self.label = QtWidgets.QLabel(self.overlay_install_page) self.label.setObjectName("label") - self.formLayout.setWidget(0, QtWidgets.QFormLayout.SpanningRole, self.label) - self.horizontalLayout_3 = QtWidgets.QHBoxLayout() - self.horizontalLayout_3.setObjectName("horizontalLayout_3") + self.overlay_install_layout.setWidget(0, QtWidgets.QFormLayout.SpanningRole, self.label) + self.install_buttons_layout = QtWidgets.QHBoxLayout() + self.install_buttons_layout.setObjectName("install_buttons_layout") spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout_3.addItem(spacerItem2) + self.install_buttons_layout.addItem(spacerItem2) self.install_button = QtWidgets.QPushButton(self.overlay_install_page) + self.install_button.setMinimumSize(QtCore.QSize(120, 0)) self.install_button.setObjectName("install_button") - self.horizontalLayout_3.addWidget(self.install_button) - self.formLayout.setLayout(2, QtWidgets.QFormLayout.SpanningRole, self.horizontalLayout_3) + self.install_buttons_layout.addWidget(self.install_button) + self.overlay_install_layout.setLayout(2, QtWidgets.QFormLayout.SpanningRole, self.install_buttons_layout) spacerItem3 = QtWidgets.QSpacerItem(6, 6, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.formLayout.setItem(1, QtWidgets.QFormLayout.SpanningRole, spacerItem3) + self.overlay_install_layout.setItem(1, QtWidgets.QFormLayout.SpanningRole, spacerItem3) self.overlay_stack.addWidget(self.overlay_install_page) self.eos_layout.addWidget(self.overlay_stack) self.enable_frame = QtWidgets.QFrame(EosWidget) self.enable_frame.setFrameShape(QtWidgets.QFrame.StyledPanel) self.enable_frame.setFrameShadow(QtWidgets.QFrame.Raised) self.enable_frame.setObjectName("enable_frame") - self.verticalLayout = QtWidgets.QVBoxLayout(self.enable_frame) - self.verticalLayout.setObjectName("verticalLayout") + self.enable_layout = QtWidgets.QVBoxLayout(self.enable_frame) + self.enable_layout.setObjectName("enable_layout") self.select_pfx_combo = QtWidgets.QComboBox(self.enable_frame) self.select_pfx_combo.setObjectName("select_pfx_combo") - self.verticalLayout.addWidget(self.select_pfx_combo) + self.enable_layout.addWidget(self.select_pfx_combo) self.enabled_cb = QtWidgets.QCheckBox(self.enable_frame) self.enabled_cb.setObjectName("enabled_cb") - self.verticalLayout.addWidget(self.enabled_cb) + self.enable_layout.addWidget(self.enabled_cb) self.enabled_info_label = QtWidgets.QLabel(self.enable_frame) font = QtGui.QFont() font.setItalic(True) self.enabled_info_label.setFont(font) self.enabled_info_label.setText("") self.enabled_info_label.setObjectName("enabled_info_label") - self.verticalLayout.addWidget(self.enabled_info_label) + self.enable_layout.addWidget(self.enabled_info_label) self.eos_layout.addWidget(self.enable_frame) self.retranslateUi(EosWidget) diff --git a/rare/ui/components/tabs/games/integrations/eos_widget.ui b/rare/ui/components/tabs/games/integrations/eos_widget.ui index 7a70d318..84e017bf 100644 --- a/rare/ui/components/tabs/games/integrations/eos_widget.ui +++ b/rare/ui/components/tabs/games/integrations/eos_widget.ui @@ -38,7 +38,7 @@ 0 - + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -74,9 +74,9 @@ - + - + Qt::Horizontal @@ -90,16 +90,10 @@ - - - 0 - 0 - - - + - 150 - 16777215 + 120 + 0 @@ -109,16 +103,10 @@ - - - 0 - 0 - - - + - 150 - 16777215 + 120 + 0 @@ -128,16 +116,10 @@ - - - 0 - 0 - - - + - 150 - 16777215 + 120 + 0 @@ -148,7 +130,7 @@ - + Qt::Vertical @@ -163,7 +145,7 @@ - + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -178,9 +160,9 @@ - + - + Qt::Horizontal @@ -194,6 +176,12 @@ + + + 120 + 0 + + Install @@ -202,7 +190,7 @@ - + Qt::Vertical @@ -226,7 +214,7 @@ QFrame::Raised - +