From 304ad0388ec594ae7eaae75d17c4f1225e9a7b69 Mon Sep 17 00:00:00 2001 From: loathingKernel <142770+loathingKernel@users.noreply.github.com> Date: Thu, 26 Jan 2023 16:18:32 +0200 Subject: [PATCH] GameDlc: Re-write the form to use a QToolBox instead of two separate QGroupBoxes. By using a QToolBox, we can better utilize the available space for long lists of DLCs. `GameDlcWidget` is now responsible for handling installing and uninstalling the DLC based on RareGame's functionality. Since `GameUtils` is not used for uninstalling any more, remove it the arguments of `GameInfoTabs` completely. --- rare/components/tabs/games/__init__.py | 4 +- .../tabs/games/game_info/__init__.py | 29 +- .../tabs/games/game_info/game_dlc.py | 232 ++++++++------ .../tabs/games/game_info/game_info.py | 7 +- .../tabs/games/game_info/game_dlc.py | 118 +++---- .../tabs/games/game_info/game_dlc.ui | 287 +++++++----------- .../tabs/games/game_info/game_dlc_widget.py | 7 +- .../tabs/games/game_info/game_dlc_widget.ui | 18 +- 8 files changed, 338 insertions(+), 364 deletions(-) diff --git a/rare/components/tabs/games/__init__.py b/rare/components/tabs/games/__init__.py index 6917048d..5b92e100 100644 --- a/rare/components/tabs/games/__init__.py +++ b/rare/components/tabs/games/__init__.py @@ -57,7 +57,7 @@ class GamesTab(QStackedWidget): self.head_bar.goto_eos_ubisoft.connect(self.show_eos_ubisoft) self.games.layout().addWidget(self.head_bar) - self.game_info_tabs = GameInfoTabs(self.game_utils, self) + self.game_info_tabs = GameInfoTabs(self) self.game_info_tabs.back_clicked.connect(lambda: self.setCurrentWidget(self.games)) self.addWidget(self.game_info_tabs) @@ -152,8 +152,8 @@ class GamesTab(QStackedWidget): @pyqtSlot(RareGame) def show_game_info(self, rgame): - self.game_info_tabs.update_game(rgame) self.setCurrentWidget(self.game_info_tabs) + self.game_info_tabs.update_game(rgame) @pyqtSlot() def update_count_games_label(self): diff --git a/rare/components/tabs/games/game_info/__init__.py b/rare/components/tabs/games/game_info/__init__.py index 269e769a..357a7d3d 100644 --- a/rare/components/tabs/games/game_info/__init__.py +++ b/rare/components/tabs/games/game_info/__init__.py @@ -6,7 +6,6 @@ from PyQt5.QtWidgets import QTreeView from rare.models.game import RareGame from rare.shared import LegendaryCoreSingleton, GlobalSignalsSingleton, ArgumentsSingleton -from rare.shared.game_utils import GameUtils from rare.utils.extra_widgets import SideTabWidget from rare.utils.json_formatter import QJsonModel from .game_dlc import GameDlc @@ -15,20 +14,20 @@ from .game_settings import GameSettings class GameInfoTabs(SideTabWidget): - def __init__(self, game_utils: GameUtils, parent=None): + def __init__(self, parent=None): super(GameInfoTabs, self).__init__(show_back=True, parent=parent) self.core = LegendaryCoreSingleton() self.signals = GlobalSignalsSingleton() self.args = ArgumentsSingleton() - self.info = GameInfo(game_utils, self) - self.addTab(self.info, self.tr("Information")) + self.info_tab = GameInfo(self) + self.addTab(self.info_tab, self.tr("Information")) - self.settings = GameSettings(self) - self.addTab(self.settings, self.tr("Settings")) + self.settings_tab = GameSettings(self) + self.addTab(self.settings_tab, self.tr("Settings")) - self.dlc = GameDlc(game_utils, self) - self.addTab(self.dlc, self.tr("Downloadable Content")) + self.dlc_tab = GameDlc(self) + self.addTab(self.dlc_tab, self.tr("Downloadable Content")) # FIXME: Hiding didn't work, so don't add these tabs in normal mode. Fix this properly later if self.args.debug: @@ -37,21 +36,23 @@ class GameInfoTabs(SideTabWidget): self.igame_meta_view = GameMetadataView(self) self.addTab(self.igame_meta_view, self.tr("InstalledGame Metadata")) - self.tabBar().setCurrentIndex(1) + # self.setCurrentWidget(self.info_tab) + self.setCurrentIndex(1) def update_game(self, rgame: RareGame): - self.info.update_game(rgame) + self.info_tab.update_game(rgame) - self.settings.load_settings(rgame) - self.settings.setEnabled(rgame.is_installed) + self.settings_tab.load_settings(rgame) + self.settings_tab.setEnabled(rgame.is_installed) - self.dlc.update_dlcs(rgame) - self.dlc.setEnabled(bool(rgame.owned_dlcs)) + self.dlc_tab.update_dlcs(rgame) + self.dlc_tab.setEnabled(bool(rgame.owned_dlcs)) if self.args.debug: self.game_meta_view.update_game(rgame, rgame.game) self.igame_meta_view.update_game(rgame, rgame.igame) + # self.setCurrentWidget(self.info_tab) self.setCurrentIndex(1) def keyPressEvent(self, e: QKeyEvent): diff --git a/rare/components/tabs/games/game_info/game_dlc.py b/rare/components/tabs/games/game_info/game_dlc.py index 180f09c9..a38a577c 100644 --- a/rare/components/tabs/games/game_info/game_dlc.py +++ b/rare/components/tabs/games/game_info/game_dlc.py @@ -1,22 +1,79 @@ -from typing import Optional +from typing import Optional, List -from PyQt5.QtCore import pyqtSignal, pyqtSlot -from PyQt5.QtWidgets import QFrame, QWidget, QMessageBox +from PyQt5.QtCore import Qt, pyqtSlot, pyqtSignal +from PyQt5.QtWidgets import QFrame, QMessageBox, QToolBox from rare.models.game import RareGame -from rare.models.install import InstallOptionsModel from rare.shared import LegendaryCoreSingleton, GlobalSignalsSingleton -from rare.shared.game_utils import GameUtils from rare.shared.image_manager import ImageSize from rare.ui.components.tabs.games.game_info.game_dlc import Ui_GameDlc from rare.ui.components.tabs.games.game_info.game_dlc_widget import Ui_GameDlcWidget from rare.widgets.image_widget import ImageWidget +from rare.utils.misc import widget_object_name -class GameDlc(QWidget): - install_dlc = pyqtSignal(str, bool) +class GameDlcWidget(QFrame): + def __init__(self, rgame: RareGame, rdlc: RareGame, parent=None): + super(GameDlcWidget, self).__init__(parent=parent) + self.ui = Ui_GameDlcWidget() + self.ui.setupUi(self) + self.setObjectName(widget_object_name(self, rdlc.app_name)) + self.rgame = rgame + self.rdlc = rdlc - def __init__(self, game_utils: GameUtils, parent=None): + self.image = ImageWidget(self) + self.image.setFixedSize(ImageSize.Icon) + self.ui.dlc_layout.insertWidget(0, self.image) + + self.ui.dlc_name.setText(rdlc.app_title) + self.ui.version.setText(rdlc.version) + self.ui.app_name.setText(rdlc.app_name) + + self.image.setPixmap(rdlc.pixmap) + + +class InstalledGameDlcWidget(GameDlcWidget): + uninstalled = pyqtSignal(RareGame) + + def __init__(self, rgame: RareGame, rdlc: RareGame, parent=None): + super(InstalledGameDlcWidget, self).__init__(rgame=rgame, rdlc=rdlc, parent=parent) + # lk: set object names for CSS properties + self.ui.action_button.setObjectName("UninstallButton") + self.ui.action_button.clicked.connect(self.uninstall_dlc) + self.ui.action_button.setText(self.tr("Uninstall DLC")) + # lk: don't reference `self.rdlc` here because the object has been deleted + rdlc.signals.game.uninstalled.connect(lambda: self.uninstalled.emit(rdlc)) + + def uninstall_dlc(self): + self.rdlc.uninstall() + + +class AvailableGameDlcWidget(GameDlcWidget): + installed = pyqtSignal(RareGame) + + def __init__(self, rgame: RareGame, rdlc: RareGame, parent=None): + super(AvailableGameDlcWidget, self).__init__(rgame=rgame, rdlc=rdlc, parent=parent) + # lk: set object names for CSS properties + self.ui.action_button.setObjectName("InstallButton") + self.ui.action_button.clicked.connect(self.install_dlc) + self.ui.action_button.setText(self.tr("Install DLC")) + # lk: don't reference `self.rdlc` here because the object has been deleted + rdlc.signals.game.installed.connect(lambda: self.installed.emit(rdlc)) + + def install_dlc(self): + if not self.rgame.is_installed: + QMessageBox.warning( + self, + self.tr("Error"), + self.tr("Base Game is not installed. Please install {} first").format(self.rgame.app_title), + ) + return + self.rdlc.install() + + +class GameDlc(QToolBox): + + def __init__(self, parent=None): super(GameDlc, self).__init__(parent=parent) self.ui = Ui_GameDlc() self.ui.setupUi(self) @@ -24,100 +81,89 @@ class GameDlc(QWidget): self.signals = GlobalSignalsSingleton() self.rgame: Optional[RareGame] = None - self.game_utils = game_utils - self.ui.available_dlc_scroll.setFrameStyle(QFrame.NoFrame) - self.ui.installed_dlc_scroll.setFrameStyle(QFrame.NoFrame) + def list_installed(self) -> List[InstalledGameDlcWidget]: + return self.ui.installed_dlc_container.findChildren(InstalledGameDlcWidget, options=Qt.FindDirectChildrenOnly) - self.installed_dlc_widgets = list() - self.available_dlc_widgets = list() + def list_available(self) -> List[AvailableGameDlcWidget]: + return self.ui.available_dlc_container.findChildren(AvailableGameDlcWidget, options=Qt.FindDirectChildrenOnly) + + def get_installed(self, app_name: str) -> Optional[InstalledGameDlcWidget]: + return self.ui.installed_dlc_container.findChild( + InstalledGameDlcWidget, + name=widget_object_name(InstalledGameDlcWidget, app_name), + options = Qt.FindDirectChildrenOnly + ) + + def get_available(self, app_name: str) -> Optional[AvailableGameDlcWidget]: + return self.ui.available_dlc_container.findChild( + AvailableGameDlcWidget, + name=widget_object_name(AvailableGameDlcWidget, app_name), + options=Qt.FindDirectChildrenOnly + ) + + def update_installed_page(self): + have_installed = bool(self.list_installed()) + self.ui.installed_dlc_label.setVisible(not have_installed) + self.ui.installed_dlc_container.setVisible(have_installed) + if not have_installed: + self.setCurrentWidget(self.ui.available_dlc_page) + + def update_available_page(self): + have_available = bool(self.list_available()) + self.ui.available_dlc_label.setVisible(not have_available) + self.ui.available_dlc_container.setVisible(have_available) + if not have_available: + self.setCurrentWidget(self.ui.installed_dlc_page) + + def append_installed(self, rdlc: RareGame): + self.ui.installed_dlc_label.setVisible(False) + self.ui.installed_dlc_container.setVisible(True) + a_widget: AvailableGameDlcWidget = self.get_available(rdlc.app_name) + if a_widget is not None: + self.ui.available_dlc_container.layout().removeWidget(a_widget) + a_widget.deleteLater() + i_widget: InstalledGameDlcWidget = InstalledGameDlcWidget( + self.rgame, rdlc, self.ui.installed_dlc_container + ) + i_widget.destroyed.connect(self.update_installed_page) + i_widget.uninstalled.connect(self.append_available) + self.ui.installed_dlc_container.layout().addWidget(i_widget) + + + def append_available(self, rdlc: RareGame): + self.ui.available_dlc_label.setVisible(False) + self.ui.available_dlc_container.setVisible(True) + i_widget: InstalledGameDlcWidget = self.get_installed(rdlc.app_name) + if i_widget is not None: + self.ui.available_dlc_container.layout().removeWidget(i_widget) + i_widget.deleteLater() + a_widget: AvailableGameDlcWidget = AvailableGameDlcWidget( + self.rgame, rdlc, self.ui.available_dlc_container + ) + a_widget.destroyed.connect(self.update_available_page) + a_widget.installed.connect(self.append_installed) + self.ui.available_dlc_container.layout().addWidget(a_widget) def update_dlcs(self, rgame: RareGame): self.rgame = rgame self.title.setTitle(self.rgame.app_title) - if self.installed_dlc_widgets: - for dlc_widget in self.installed_dlc_widgets: - dlc_widget.uninstall.disconnect() - dlc_widget.deleteLater() - self.installed_dlc_widgets.clear() - if self.available_dlc_widgets: - for dlc_widget in self.available_dlc_widgets: - dlc_widget.install.disconnect() - dlc_widget.deleteLater() - self.available_dlc_widgets.clear() + for i_widget in self.list_installed(): + self.ui.installed_dlc_container.layout().removeWidget(i_widget) + i_widget.deleteLater() + + for a_widget in self.list_available(): + self.ui.available_dlc_container.layout().removeWidget(a_widget) + a_widget.deleteLater() for dlc in sorted(self.rgame.owned_dlcs, key=lambda x: x.app_title): if dlc.is_installed: - dlc_widget = GameDlcWidget(dlc, True) - self.ui.installed_dlc_contents_layout.addWidget(dlc_widget) - dlc_widget.uninstall.connect(self.uninstall) - self.installed_dlc_widgets.append(dlc_widget) - + self.append_installed(rdlc=dlc) else: - dlc_widget = GameDlcWidget(dlc, False) - self.ui.available_dlc_contents_layout.addWidget(dlc_widget) - dlc_widget.install.connect(self.install) - self.available_dlc_widgets.append(dlc_widget) + self.append_available(rdlc=dlc) - self.ui.installed_dlc_label.setVisible(not self.installed_dlc_widgets) - self.ui.installed_dlc_scroll.setVisible(bool(self.installed_dlc_widgets)) - - self.ui.available_dlc_label.setVisible(not self.available_dlc_widgets) - self.ui.available_dlc_scroll.setVisible(bool(self.available_dlc_widgets)) - - @pyqtSlot(RareGame) - def uninstall(self, rgame: RareGame): - if self.game_utils.uninstall_game(rgame.app_name): - self.update_dlcs(self.rgame) - - def install(self, app_name): - if not self.core.is_installed(self.rgame.app_name): - QMessageBox.warning( - self, - "Error", - self.tr("Base Game is not installed. Please install {} first").format(self.rgame.app_title), - ) - return - - self.signals.game.install.emit(InstallOptionsModel(app_name=app_name, update=True)) - - -class GameDlcWidget(QFrame): - install = pyqtSignal(RareGame) - uninstall = pyqtSignal(RareGame) - - def __init__(self, dlc: RareGame, installed: bool, parent=None): - super(GameDlcWidget, self).__init__(parent=parent) - self.ui = Ui_GameDlcWidget() - self.ui.setupUi(self) - self.dlc = dlc - - self.image = ImageWidget(self) - self.image.setFixedSize(ImageSize.Smaller) - self.ui.dlc_layout.insertWidget(0, self.image) - - self.ui.dlc_name.setText(dlc.app_title) - self.ui.version.setText(dlc.version) - self.ui.app_name.setText(dlc.app_name) - - self.image.setPixmap(dlc.pixmap) - - if installed: - self.ui.action_button.setProperty("uninstall", 1) - self.ui.action_button.clicked.connect(self.uninstall_dlc) - self.ui.action_button.setText(self.tr("Uninstall DLC")) - else: - self.ui.action_button.setProperty("install", 1) - self.ui.action_button.clicked.connect(self.install_game) - self.ui.action_button.setText(self.tr("Install DLC")) - - def uninstall_dlc(self): - self.ui.action_button.setDisabled(True) - self.ui.action_button.setText(self.tr("Uninstalling")) - self.uninstall.emit(self.dlc) - - def install_game(self): - self.ui.action_button.setDisabled(True) - self.ui.action_button.setText(self.tr("Installing")) - self.install.emit(self.dlc) + if not self.list_available(): + self.setCurrentWidget(self.ui.installed_dlc_page) + if not self.list_installed(): + self.setCurrentWidget(self.ui.available_dlc_page) diff --git a/rare/components/tabs/games/game_info/game_info.py b/rare/components/tabs/games/game_info/game_info.py index e87b9049..5e6f3bed 100644 --- a/rare/components/tabs/games/game_info/game_info.py +++ b/rare/components/tabs/games/game_info/game_info.py @@ -38,16 +38,19 @@ logger = getLogger("GameInfo") class GameInfo(QWidget): - def __init__(self, game_utils, parent=None): + def __init__(self, parent=None): super(GameInfo, self).__init__(parent=parent) self.ui = Ui_GameInfo() self.ui.setupUi(self) + # lk: set object names for CSS properties + self.ui.install_button.setObjectName("InstallButton") + self.ui.uninstall_button.setObjectName("UninstallButton") + self.rcore = RareCore.instance() self.core = LegendaryCoreSingleton() self.signals = GlobalSignalsSingleton() self.args = ArgumentsSingleton() self.image_manager = ImageManagerSingleton() - self.game_utils = game_utils self.rgame: Optional[RareGame] = None diff --git a/rare/ui/components/tabs/games/game_info/game_dlc.py b/rare/ui/components/tabs/games/game_info/game_dlc.py index d2b4303d..41b4a59e 100644 --- a/rare/ui/components/tabs/games/game_info/game_dlc.py +++ b/rare/ui/components/tabs/games/game_info/game_dlc.py @@ -2,7 +2,7 @@ # Form implementation generated from reading ui file 'rare/ui/components/tabs/games/game_info/game_dlc.ui' # -# Created by: PyQt5 UI code generator 5.15.6 +# Created by: PyQt5 UI code generator 5.15.7 # # 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. @@ -14,96 +14,60 @@ from PyQt5 import QtCore, QtGui, QtWidgets class Ui_GameDlc(object): def setupUi(self, GameDlc): GameDlc.setObjectName("GameDlc") - GameDlc.resize(287, 354) - self.game_dlc_layout = QtWidgets.QVBoxLayout(GameDlc) - self.game_dlc_layout.setObjectName("game_dlc_layout") - self.installed_dlc_group = QtWidgets.QGroupBox(GameDlc) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.installed_dlc_group.sizePolicy().hasHeightForWidth()) - self.installed_dlc_group.setSizePolicy(sizePolicy) - self.installed_dlc_group.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop) - self.installed_dlc_group.setObjectName("installed_dlc_group") - self.installed_dlc_group_layout = QtWidgets.QVBoxLayout(self.installed_dlc_group) - self.installed_dlc_group_layout.setObjectName("installed_dlc_group_layout") - self.installed_dlc_label = QtWidgets.QLabel(self.installed_dlc_group) + GameDlc.resize(271, 139) + GameDlc.setWindowTitle("GameDlc") + GameDlc.setFrameShape(QtWidgets.QFrame.StyledPanel) + GameDlc.setFrameShadow(QtWidgets.QFrame.Sunken) + GameDlc.setLineWidth(0) + self.installed_dlc_page = QtWidgets.QWidget() + self.installed_dlc_page.setGeometry(QtCore.QRect(0, 0, 267, 79)) + self.installed_dlc_page.setObjectName("installed_dlc_page") + self.installed_dlc_page_layout = QtWidgets.QVBoxLayout(self.installed_dlc_page) + self.installed_dlc_page_layout.setContentsMargins(0, 0, 0, 0) + self.installed_dlc_page_layout.setObjectName("installed_dlc_page_layout") + self.installed_dlc_label = QtWidgets.QLabel(self.installed_dlc_page) self.installed_dlc_label.setObjectName("installed_dlc_label") - self.installed_dlc_group_layout.addWidget(self.installed_dlc_label) - self.installed_dlc_scroll = QtWidgets.QScrollArea(self.installed_dlc_group) - self.installed_dlc_scroll.setFocusPolicy(QtCore.Qt.WheelFocus) - self.installed_dlc_scroll.setFrameShape(QtWidgets.QFrame.StyledPanel) - self.installed_dlc_scroll.setFrameShadow(QtWidgets.QFrame.Sunken) - self.installed_dlc_scroll.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) - self.installed_dlc_scroll.setWidgetResizable(True) - self.installed_dlc_scroll.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop) - self.installed_dlc_scroll.setObjectName("installed_dlc_scroll") - self.installed_dlc_contents = QtWidgets.QWidget() - self.installed_dlc_contents.setGeometry(QtCore.QRect(0, 0, 255, 16)) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Maximum) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.installed_dlc_contents.sizePolicy().hasHeightForWidth()) - self.installed_dlc_contents.setSizePolicy(sizePolicy) - self.installed_dlc_contents.setObjectName("installed_dlc_contents") - self.installed_dlc_contents_layout = QtWidgets.QVBoxLayout(self.installed_dlc_contents) - self.installed_dlc_contents_layout.setContentsMargins(0, 0, 9, 0) - self.installed_dlc_contents_layout.setObjectName("installed_dlc_contents_layout") - self.installed_dlc_scroll.setWidget(self.installed_dlc_contents) - self.installed_dlc_group_layout.addWidget(self.installed_dlc_scroll) - self.game_dlc_layout.addWidget(self.installed_dlc_group) - self.available_dlc_group = QtWidgets.QGroupBox(GameDlc) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.available_dlc_group.sizePolicy().hasHeightForWidth()) - self.available_dlc_group.setSizePolicy(sizePolicy) - self.available_dlc_group.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop) - self.available_dlc_group.setObjectName("available_dlc_group") - self.available_dlc_group_layout = QtWidgets.QVBoxLayout(self.available_dlc_group) - self.available_dlc_group_layout.setObjectName("available_dlc_group_layout") - self.available_dlc_label = QtWidgets.QLabel(self.available_dlc_group) + self.installed_dlc_page_layout.addWidget(self.installed_dlc_label, 0, QtCore.Qt.AlignTop) + self.installed_dlc_container = QtWidgets.QWidget(self.installed_dlc_page) + self.installed_dlc_container.setObjectName("installed_dlc_container") + self.installed_dlc_container_layout = QtWidgets.QVBoxLayout(self.installed_dlc_container) + self.installed_dlc_container_layout.setContentsMargins(0, 0, 3, 0) + self.installed_dlc_container_layout.setObjectName("installed_dlc_container_layout") + self.installed_dlc_page_layout.addWidget(self.installed_dlc_container, 0, QtCore.Qt.AlignTop) + self.installed_dlc_page_layout.setStretch(1, 1) + GameDlc.addItem(self.installed_dlc_page, "") + self.available_dlc_page = QtWidgets.QWidget() + self.available_dlc_page.setGeometry(QtCore.QRect(0, 0, 267, 79)) + self.available_dlc_page.setObjectName("available_dlc_page") + self.available_dlc_page_layou = QtWidgets.QVBoxLayout(self.available_dlc_page) + self.available_dlc_page_layou.setContentsMargins(0, 0, 0, 0) + self.available_dlc_page_layou.setObjectName("available_dlc_page_layou") + self.available_dlc_label = QtWidgets.QLabel(self.available_dlc_page) self.available_dlc_label.setObjectName("available_dlc_label") - self.available_dlc_group_layout.addWidget(self.available_dlc_label) - self.available_dlc_scroll = QtWidgets.QScrollArea(self.available_dlc_group) - self.available_dlc_scroll.setFrameShape(QtWidgets.QFrame.StyledPanel) - self.available_dlc_scroll.setFrameShadow(QtWidgets.QFrame.Sunken) - self.available_dlc_scroll.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) - self.available_dlc_scroll.setWidgetResizable(True) - self.available_dlc_scroll.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop) - self.available_dlc_scroll.setObjectName("available_dlc_scroll") - self.available_dlc_contents = QtWidgets.QWidget() - self.available_dlc_contents.setGeometry(QtCore.QRect(0, 0, 255, 16)) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Maximum) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.available_dlc_contents.sizePolicy().hasHeightForWidth()) - self.available_dlc_contents.setSizePolicy(sizePolicy) - self.available_dlc_contents.setObjectName("available_dlc_contents") - self.available_dlc_contents_layout = QtWidgets.QVBoxLayout(self.available_dlc_contents) - self.available_dlc_contents_layout.setContentsMargins(0, 0, 9, 0) - self.available_dlc_contents_layout.setObjectName("available_dlc_contents_layout") - self.available_dlc_scroll.setWidget(self.available_dlc_contents) - self.available_dlc_group_layout.addWidget(self.available_dlc_scroll) - self.game_dlc_layout.addWidget(self.available_dlc_group) - spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.game_dlc_layout.addItem(spacerItem) + self.available_dlc_page_layou.addWidget(self.available_dlc_label, 0, QtCore.Qt.AlignTop) + self.available_dlc_container = QtWidgets.QWidget(self.available_dlc_page) + self.available_dlc_container.setObjectName("available_dlc_container") + self.available_dlc_container_layout = QtWidgets.QVBoxLayout(self.available_dlc_container) + self.available_dlc_container_layout.setContentsMargins(0, 0, 3, 0) + self.available_dlc_container_layout.setObjectName("available_dlc_container_layout") + self.available_dlc_page_layou.addWidget(self.available_dlc_container, 0, QtCore.Qt.AlignTop) + self.available_dlc_page_layou.setStretch(1, 1) + GameDlc.addItem(self.available_dlc_page, "") self.retranslateUi(GameDlc) def retranslateUi(self, GameDlc): _translate = QtCore.QCoreApplication.translate - GameDlc.setWindowTitle(_translate("GameDlc", "GameDlc")) - self.installed_dlc_group.setTitle(_translate("GameDlc", "Installed DLCs")) self.installed_dlc_label.setText(_translate("GameDlc", "No Downloadable Content has been installed.")) - self.available_dlc_group.setTitle(_translate("GameDlc", "Available DLCs")) + GameDlc.setItemText(GameDlc.indexOf(self.installed_dlc_page), _translate("GameDlc", "Installed DLCs")) self.available_dlc_label.setText(_translate("GameDlc", "No Downloadable Content is available")) + GameDlc.setItemText(GameDlc.indexOf(self.available_dlc_page), _translate("GameDlc", "Available DLCs")) if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) - GameDlc = QtWidgets.QWidget() + GameDlc = QtWidgets.QToolBox() ui = Ui_GameDlc() ui.setupUi(GameDlc) GameDlc.show() diff --git a/rare/ui/components/tabs/games/game_info/game_dlc.ui b/rare/ui/components/tabs/games/game_info/game_dlc.ui index 020fd1db..9409af5c 100644 --- a/rare/ui/components/tabs/games/game_info/game_dlc.ui +++ b/rare/ui/components/tabs/games/game_info/game_dlc.ui @@ -1,184 +1,131 @@ GameDlc - + 0 0 - 287 - 354 + 271 + 139 - GameDlc + GameDlc - - - - - - 0 - 0 - - - - Installed DLCs - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - - - - No Downloadable Content has been installed. - - - - - - - Qt::WheelFocus - - - QFrame::StyledPanel - - - QFrame::Sunken - - - Qt::ScrollBarAlwaysOff - - - true - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - - - 0 - 0 - 255 - 16 - - - - - 0 - 0 - - - - - 0 - - - 0 - - - 9 - - - 0 - - - - - - - - - - - - - 0 - 0 - - - - Available DLCs - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - - - - No Downloadable Content is available - - - - - - - QFrame::StyledPanel - - - QFrame::Sunken - - - Qt::ScrollBarAlwaysOff - - - true - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - - - 0 - 0 - 255 - 16 - - - - - 0 - 0 - - - - - 0 - - - 0 - - - 9 - - - 0 - - - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - + + QFrame::StyledPanel + + + QFrame::Sunken + + + 0 + + + + + 0 + 0 + 267 + 79 + + + + Installed DLCs + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + No Downloadable Content has been installed. + + + + + + + + 0 + + + 0 + + + 3 + + + 0 + + + + + + + + + + 0 + 0 + 267 + 79 + + + + Available DLCs + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + No Downloadable Content is available + + + + + + + + 0 + + + 0 + + + 3 + + + 0 + + + + + + diff --git a/rare/ui/components/tabs/games/game_info/game_dlc_widget.py b/rare/ui/components/tabs/games/game_info/game_dlc_widget.py index 5d756f59..dad466e1 100644 --- a/rare/ui/components/tabs/games/game_info/game_dlc_widget.py +++ b/rare/ui/components/tabs/games/game_info/game_dlc_widget.py @@ -2,7 +2,7 @@ # Form implementation generated from reading ui file 'rare/ui/components/tabs/games/game_info/game_dlc_widget.ui' # -# Created by: PyQt5 UI code generator 5.15.6 +# Created by: PyQt5 UI code generator 5.15.7 # # 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. @@ -14,7 +14,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets class Ui_GameDlcWidget(object): def setupUi(self, GameDlcWidget): GameDlcWidget.setObjectName("GameDlcWidget") - GameDlcWidget.resize(517, 70) + GameDlcWidget.resize(454, 58) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Maximum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) @@ -24,6 +24,7 @@ class Ui_GameDlcWidget(object): GameDlcWidget.setFrameShape(QtWidgets.QFrame.StyledPanel) GameDlcWidget.setFrameShadow(QtWidgets.QFrame.Plain) self.dlc_layout = QtWidgets.QHBoxLayout(GameDlcWidget) + self.dlc_layout.setContentsMargins(0, 0, 0, 0) self.dlc_layout.setObjectName("dlc_layout") self.dlc_info = QtWidgets.QWidget(GameDlcWidget) self.dlc_info.setObjectName("dlc_info") @@ -98,7 +99,7 @@ class Ui_GameDlcWidget(object): self.action_button.setStyleSheet("") self.action_button.setText("Action") self.action_button.setObjectName("action_button") - self.dlc_layout.addWidget(self.action_button, 0, QtCore.Qt.AlignTop) + self.dlc_layout.addWidget(self.action_button, 0, QtCore.Qt.AlignBottom) self.dlc_layout.setStretch(1, 1) self.retranslateUi(GameDlcWidget) diff --git a/rare/ui/components/tabs/games/game_info/game_dlc_widget.ui b/rare/ui/components/tabs/games/game_info/game_dlc_widget.ui index ff228bb4..267f533e 100644 --- a/rare/ui/components/tabs/games/game_info/game_dlc_widget.ui +++ b/rare/ui/components/tabs/games/game_info/game_dlc_widget.ui @@ -6,8 +6,8 @@ 0 0 - 517 - 70 + 454 + 58 @@ -26,6 +26,18 @@ QFrame::Plain + + 0 + + + 0 + + + 0 + + + 0 + @@ -165,7 +177,7 @@ - +