cd1743cb92
The default widgets only implement the settings for the `default` "app_name" The game specific widgets sub-class the default widgets and implement whatever they additionally need locally. Remove multiple calls to save config and save when the game settings gets hidden.
91 lines
3.3 KiB
Python
91 lines
3.3 KiB
Python
from typing import Optional
|
|
|
|
from PyQt5.QtCore import Qt, pyqtSignal
|
|
from PyQt5.QtGui import QKeyEvent
|
|
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, SideTabContents
|
|
from .game_dlc import GameDlc
|
|
from .game_info import GameInfo
|
|
from .game_settings import GameSettings
|
|
from .cloud_saves import CloudSaves
|
|
|
|
|
|
class GameInfoTabs(SideTabWidget):
|
|
# str: app_name
|
|
import_clicked = pyqtSignal(str)
|
|
|
|
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_tab = GameInfo(self)
|
|
self.info_tab.import_clicked.connect(self.import_clicked)
|
|
self.info_index = self.addTab(self.info_tab, self.tr("Information"))
|
|
|
|
self.settings_tab = GameSettings(self)
|
|
self.settings_index = self.addTab(self.settings_tab, self.tr("Settings"))
|
|
|
|
self.cloud_saves_tab = CloudSaves(self)
|
|
self.cloud_saves_index = self.addTab(self.cloud_saves_tab, self.tr("Cloud Saves"))
|
|
|
|
self.dlc_tab = GameDlc(self)
|
|
self.dlc_index = 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:
|
|
self.game_meta_view = GameMetadataView(self)
|
|
self.game_meta_index = self.addTab(self.game_meta_view, self.tr("Game Metadata"))
|
|
self.igame_meta_view = GameMetadataView(self)
|
|
self.igame_meta_index = self.addTab(self.igame_meta_view, self.tr("InstalledGame Metadata"))
|
|
|
|
self.setCurrentIndex(self.info_index)
|
|
|
|
def update_game(self, rgame: RareGame):
|
|
self.info_tab.update_game(rgame)
|
|
|
|
self.settings_tab.load_settings(rgame)
|
|
self.settings_tab.setEnabled(rgame.is_installed or rgame.is_origin)
|
|
|
|
self.dlc_tab.update_dlcs(rgame)
|
|
self.dlc_tab.setEnabled(rgame.is_installed and bool(rgame.owned_dlcs))
|
|
|
|
self.cloud_saves_tab.update_game(rgame)
|
|
# self.cloud_saves_tab.setEnabled(rgame.game.supports_cloud_saves or rgame.game.supports_mac_cloud_saves)
|
|
|
|
if self.args.debug:
|
|
self.game_meta_view.update_game(rgame, rgame.game)
|
|
self.igame_meta_view.update_game(rgame, rgame.igame)
|
|
|
|
self.setCurrentIndex(self.info_index)
|
|
|
|
def keyPressEvent(self, a0: QKeyEvent):
|
|
if a0.key() == Qt.Key_Escape:
|
|
self.back_clicked.emit()
|
|
|
|
|
|
class GameMetadataView(QTreeView, SideTabContents):
|
|
def __init__(self, parent=None):
|
|
super(GameMetadataView, self).__init__(parent=parent)
|
|
self.implements_scrollarea = True
|
|
self.setColumnWidth(0, 300)
|
|
self.setWordWrap(True)
|
|
self.model = QJsonModel()
|
|
self.setModel(self.model)
|
|
self.rgame: Optional[RareGame] = None
|
|
|
|
def update_game(self, rgame: RareGame, view):
|
|
self.rgame = rgame
|
|
self.set_title.emit(self.rgame.app_title)
|
|
self.model.clear()
|
|
try:
|
|
self.model.load(vars(view))
|
|
except Exception as e:
|
|
pass
|
|
self.resizeColumnToContents(0)
|