diff --git a/rare/components/tabs/games/game_info/__init__.py b/rare/components/tabs/games/game_info/__init__.py index 0c61eea2..6e238bac 100644 --- a/rare/components/tabs/games/game_info/__init__.py +++ b/rare/components/tabs/games/game_info/__init__.py @@ -7,7 +7,7 @@ from PyQt5.QtWidgets import QTreeView from rare.models.game import RareGame from rare.shared import LegendaryCoreSingleton, GlobalSignalsSingleton, ArgumentsSingleton from rare.utils.json_formatter import QJsonModel -from rare.widgets.side_tab import SideTabWidget +from rare.widgets.side_tab import SideTabWidget, SideTabContents from .game_dlc import GameDlc from .game_info import GameInfo from .game_settings import GameSettings @@ -58,7 +58,7 @@ class GameInfoTabs(SideTabWidget): self.back_clicked.emit() -class GameMetadataView(QTreeView): +class GameMetadataView(QTreeView, SideTabContents): def __init__(self, parent=None): super(GameMetadataView, self).__init__(parent=parent) self.setColumnWidth(0, 300) @@ -69,7 +69,7 @@ class GameMetadataView(QTreeView): def update_game(self, rgame: RareGame, view): self.rgame = rgame - self.title.setTitle(self.rgame.app_title) + self.set_title.emit(self.rgame.app_title) self.model.clear() try: self.model.load(view.__dict__) diff --git a/rare/components/tabs/games/game_info/game_dlc.py b/rare/components/tabs/games/game_info/game_dlc.py index a38a577c..33adc410 100644 --- a/rare/components/tabs/games/game_info/game_dlc.py +++ b/rare/components/tabs/games/game_info/game_dlc.py @@ -9,6 +9,7 @@ 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.widgets.side_tab import SideTabContents from rare.utils.misc import widget_object_name @@ -71,7 +72,7 @@ class AvailableGameDlcWidget(GameDlcWidget): self.rdlc.install() -class GameDlc(QToolBox): +class GameDlc(QToolBox, SideTabContents): def __init__(self, parent=None): super(GameDlc, self).__init__(parent=parent) @@ -147,7 +148,7 @@ class GameDlc(QToolBox): def update_dlcs(self, rgame: RareGame): self.rgame = rgame - self.title.setTitle(self.rgame.app_title) + self.set_title.emit(self.rgame.app_title) for i_widget in self.list_installed(): self.ui.installed_dlc_container.layout().removeWidget(i_widget) diff --git a/rare/components/tabs/games/game_info/game_info.py b/rare/components/tabs/games/game_info/game_info.py index 99fcb5fb..392cd1b4 100644 --- a/rare/components/tabs/games/game_info/game_info.py +++ b/rare/components/tabs/games/game_info/game_info.py @@ -23,12 +23,13 @@ from rare.shared.workers import VerifyWorker, MoveWorker from rare.ui.components.tabs.games.game_info.game_info import Ui_GameInfo from rare.utils.misc import get_size from rare.widgets.image_widget import ImageWidget +from rare.widgets.side_tab import SideTabContents from .move_game import MoveGamePopUp, is_game_dir logger = getLogger("GameInfo") -class GameInfo(QWidget): +class GameInfo(QWidget, SideTabContents): def __init__(self, parent=None): super(GameInfo, self).__init__(parent=parent) self.ui = Ui_GameInfo() @@ -332,7 +333,7 @@ class GameInfo(QWidget): if isinstance(worker, MoveWorker): worker.signals.progress.connect(self.__on_move_progress) - self.title.setTitle(rgame.app_title) + self.set_title.emit(rgame.app_title) self.ui.app_name.setText(rgame.app_name) self.ui.dev.setText(rgame.developer) diff --git a/rare/components/tabs/games/game_info/game_settings.py b/rare/components/tabs/games/game_info/game_settings.py index 4e80d4cf..ba881d3a 100644 --- a/rare/components/tabs/games/game_info/game_settings.py +++ b/rare/components/tabs/games/game_info/game_settings.py @@ -12,12 +12,13 @@ from rare.models.game import RareGame from rare.shared.workers.wine_resolver import WineResolver from rare.utils import config_helper from rare.widgets.indicator_edit import PathEdit, IndicatorReasonsCommon +from rare.widgets.side_tab import SideTabContents from rare.utils.misc import icon, get_raw_save_path logger = getLogger("GameSettings") -class GameSettings(DefaultGameSettings): +class GameSettings(DefaultGameSettings, SideTabContents): game: Game igame: InstalledGame @@ -165,7 +166,7 @@ class GameSettings(DefaultGameSettings): else: self.skip_update.setCurrentIndex(0) - self.title.setTitle(self.game.app_title) + self.set_title.emit(self.game.app_title) if platform.system() != "Windows": if self.igame and self.igame.platform == "Mac": self.linux_settings_widget.setVisible(False) diff --git a/rare/components/tabs/games/integrations/__init__.py b/rare/components/tabs/games/integrations/__init__.py index d6329577..af99bf77 100644 --- a/rare/components/tabs/games/integrations/__init__.py +++ b/rare/components/tabs/games/integrations/__init__.py @@ -53,14 +53,13 @@ class IntegrationsWidget(QWidget): super(IntegrationsWidget, self).__init__(parent=parent) self.info = QLabel(f"{info}") - layout = QVBoxLayout() + layout = QVBoxLayout(self) if widget is not None: layout.addWidget(widget) layout.addWidget(self.info) layout.addItem( QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) ) - self.setLayout(layout) def addWidget(self, widget: QWidget, stretch: int = 0, alignment: Qt.AlignmentFlag = Qt.Alignment()): self.layout().insertWidget(self.layout().count() - 2, widget, stretch, alignment) diff --git a/rare/components/tabs/settings/debug.py b/rare/components/tabs/settings/debug.py index fd41d42e..326b3128 100644 --- a/rare/components/tabs/settings/debug.py +++ b/rare/components/tabs/settings/debug.py @@ -6,16 +6,16 @@ from rare.shared import GlobalSignalsSingleton class DebugSettings(QWidget): def __init__(self, parent=None): super(DebugSettings, self).__init__(parent=parent) - self.setLayout(QVBoxLayout()) + layout = QVBoxLayout(self) self.raise_runtime_exception_button = QPushButton("Raise Exception") - self.layout().addWidget(self.raise_runtime_exception_button) + layout.addWidget(self.raise_runtime_exception_button) self.raise_runtime_exception_button.clicked.connect(self.raise_exception) self.restart_button = QPushButton("Restart") - self.layout().addWidget(self.restart_button) + layout.addWidget(self.restart_button) self.restart_button.clicked.connect(lambda: GlobalSignalsSingleton().application.quit.emit(-133742)) - self.layout().addStretch(1) + layout.addStretch(1) def raise_exception(self): raise RuntimeError("Debug Crash") diff --git a/rare/widgets/side_tab.py b/rare/widgets/side_tab.py index 2cb84d26..e49fe12c 100644 --- a/rare/widgets/side_tab.py +++ b/rare/widgets/side_tab.py @@ -1,4 +1,5 @@ from logging import getLogger +from typing import Union, Protocol from PyQt5.QtCore import ( Qt, @@ -17,7 +18,7 @@ from PyQt5.QtWidgets import ( QTabBar, QTabWidget, QVBoxLayout, - QScrollArea, + QScrollArea, QLayout, ) from rare.utils.misc import icon as qta_icon @@ -63,8 +64,24 @@ class SideTabBar(QTabBar): painter.restore() +class SideTabContents(object): + # str: title + set_title = pyqtSignal(str) + + +class SideTabContentsProtocol(Protocol): + def layout(self) -> QLayout: + pass + + def set_title(self) -> pyqtSignal: + pass + + def sizeHint(self) -> QSize: + pass + + class SideTabContainer(QWidget): - def __init__(self, widget: QWidget, title: str = "", parent: QWidget = None): + def __init__(self, widget: Union[QWidget, SideTabContentsProtocol], title: str = "", parent: QWidget = None): super(SideTabContainer, self).__init__(parent=parent) self.title = QLabel(self) self.setTitle(title) @@ -77,17 +94,16 @@ class SideTabContainer(QWidget): if widget.layout(): widget.layout().setAlignment(Qt.AlignTop) widget.layout().setContentsMargins(0, 0, 3, 0) - widget.title = self.title - widget.title.setTitle = self.setTitle + if hasattr(widget, "set_title"): + widget.set_title.connect(self.setTitle) self.scrollarea.setMinimumWidth( widget.sizeHint().width() + self.scrollarea.verticalScrollBar().sizeHint().width() ) self.scrollarea.setWidget(widget) - layout = QVBoxLayout() + layout = QVBoxLayout(self) layout.addWidget(self.title) layout.addWidget(self.scrollarea) - self.setLayout(layout) def setTitle(self, text: str) -> None: self.title.setText(f"

{text}

") @@ -104,7 +120,7 @@ class SideTabWidget(QTabWidget): self.setTabPosition(QTabWidget.West) if show_back: super(SideTabWidget, self).addTab( - QWidget(), qta_icon("mdi.keyboard-backspace", "ei.backward"), self.tr("Back") + QWidget(self), qta_icon("mdi.keyboard-backspace", "ei.backward"), self.tr("Back") ) self.tabBarClicked.connect(self.back_func) @@ -113,6 +129,6 @@ class SideTabWidget(QTabWidget): if not tab: self.back_clicked.emit() - def addTab(self, widget: QWidget, a1: str, title: str = "") -> int: + def addTab(self, widget: Union[QWidget, SideTabContentsProtocol], a1: str, title: str = "") -> int: container = SideTabContainer(widget, title, parent=self) return super(SideTabWidget, self).addTab(container, a1)