1
0
Fork 0
mirror of synced 2024-07-01 12:40:28 +12:00
Rare/rare/components/tabs/tab_widget.py

129 lines
5.5 KiB
Python
Raw Normal View History

2021-09-30 10:22:47 +13:00
from PyQt5.QtCore import QSize, pyqtSignal
2021-08-24 03:03:42 +12:00
from PyQt5.QtWidgets import QMenu, QTabWidget, QWidget, QWidgetAction, QShortcut
2021-03-09 08:36:42 +13:00
from qtawesome import icon
2021-02-18 05:46:03 +13:00
from legendary.core import LegendaryCore
from rare.components.tabs.account import MiniWidget
2021-04-08 08:42:30 +12:00
from rare.components.tabs.cloud_saves import SyncSaves
from rare.components.tabs.downloads import DownloadTab
from rare.components.tabs.games.__init__ import GamesTab
2021-04-08 08:42:30 +12:00
from rare.components.tabs.settings import SettingsTab
from rare.components.tabs.settings.debug_settings import DebugSettings
2021-06-04 09:23:55 +12:00
from rare.components.tabs.shop import Shop
2021-09-30 10:22:47 +13:00
from rare.components.tabs.tab_utils import TabBar, TabButtonWidget
from rare.utils.models import InstallOptionsModel, Signals
2021-02-10 23:48:25 +13:00
class TabWidget(QTabWidget):
2021-04-13 00:10:36 +12:00
delete_presence = pyqtSignal()
2021-04-12 08:44:18 +12:00
2021-10-04 08:29:33 +13:00
def __init__(self, core: LegendaryCore, signals: Signals, parent, args, api_results):
super(TabWidget, self).__init__(parent=parent)
2021-10-04 08:29:33 +13:00
self.offline = args.offline
disabled_tab = 4 if not self.offline else 1
2021-04-13 22:38:11 +12:00
self.core = core
2021-09-30 10:22:47 +13:00
self.signals = signals
self.setTabBar(TabBar(disabled_tab))
2021-04-13 00:10:36 +12:00
# Generate Tabs
2021-10-04 08:29:33 +13:00
self.games_tab = GamesTab(core, args.offline, self.signals, api_results)
2021-04-13 00:10:36 +12:00
self.addTab(self.games_tab, self.tr("Games"))
2021-09-30 10:22:47 +13:00
self.signals.tab_widget.connect(lambda x: self.handle_signal(*x))
2021-10-04 08:29:33 +13:00
if not self.offline:
2021-09-27 03:43:56 +13:00
# updates = self.games_tab.default_widget.game_list.updates
self.downloadTab = DownloadTab(core, self.games_tab.updates, self.signals)
self.addTab(self.downloadTab, "Downloads" + (
" (" + str(len(self.games_tab.updates)) + ")" if len(self.games_tab.updates) != 0 else ""))
2021-09-30 10:22:47 +13:00
self.cloud_saves = SyncSaves(core, self.signals)
2021-04-20 01:44:28 +12:00
self.addTab(self.cloud_saves, "Cloud Saves")
2021-06-15 08:30:57 +12:00
self.store = Shop(self.core)
2021-06-11 05:58:35 +12:00
self.addTab(self.store, self.tr("Store (Beta)"))
self.settings = SettingsTab(core, self)
if args.debug:
self.settings.addTab(DebugSettings(), "Debug")
2021-02-10 23:48:25 +13:00
# Space Tab
self.addTab(QWidget(), "")
self.setTabEnabled(disabled_tab, False)
2021-06-11 05:58:35 +12:00
# Button
2021-02-10 23:48:25 +13:00
self.account = QWidget()
self.addTab(self.account, "")
2021-03-09 03:07:07 +13:00
self.setTabEnabled(disabled_tab + 1, False)
2021-09-30 10:22:47 +13:00
self.mini_widget = MiniWidget(core, self.signals)
2021-04-13 00:10:36 +12:00
account_action = QWidgetAction(self)
account_action.setDefaultWidget(self.mini_widget)
account_button = TabButtonWidget(core, 'mdi.account-circle', 'Account')
account_button.setMenu(QMenu())
account_button.menu().addAction(account_action)
2021-04-23 00:34:06 +12:00
self.tabBar().setTabButton(disabled_tab + 1, self.tabBar().RightSide, account_button)
2021-02-10 23:48:25 +13:00
2021-08-29 06:03:25 +12:00
self.addTab(self.settings, icon("fa.gear"),
2021-04-13 00:10:36 +12:00
"(!)" if self.settings.about.update_available else "")
# Signals
2021-05-18 20:32:46 +12:00
# imported
self.games_tab.import_widget.update_list.connect(self.game_imported)
2021-10-04 08:29:33 +13:00
if not self.offline:
# install dlc
self.games_tab.game_info.dlc.install_dlc.connect(
lambda app_name, update: self.install_game(
InstallOptionsModel(app_name=app_name),
update=update))
2021-04-20 01:44:28 +12:00
# Finished sync
self.cloud_saves.finished.connect(self.finished_sync)
# Game finished
2021-09-27 03:43:56 +13:00
self.games_tab.game_exited.connect(self.game_finished)
2021-04-13 00:10:36 +12:00
# Open game list on click on Games tab button
2021-06-04 09:23:55 +12:00
self.tabBarClicked.connect(self.mouse_clicked)
2021-04-13 00:10:36 +12:00
self.setIconSize(QSize(25, 25))
2021-08-24 03:03:42 +12:00
# shortcuts
QShortcut("Alt+1", self).activated.connect(lambda: self.setCurrentIndex(0))
QShortcut("Alt+2", self).activated.connect(lambda: self.setCurrentIndex(1))
QShortcut("Alt+3", self).activated.connect(lambda: self.setCurrentIndex(2))
QShortcut("Alt+4", self).activated.connect(lambda: self.setCurrentIndex(5))
2021-09-30 10:22:47 +13:00
def handle_signal(self, action, data):
if action == self.signals.actions.set_index:
self.setCurrentIndex(data)
if action == self.signals.actions.set_dl_tab_text:
self.setTabText(1, "Downloads" + ((" (" + str(data) + ")") if data != 0 else ""))
2021-06-04 09:23:55 +12:00
def mouse_clicked(self, tab_num):
if tab_num == 0:
self.games_tab.layout().setCurrentIndex(0)
2021-10-04 08:29:33 +13:00
if not self.offline and tab_num == 3:
self.store.load()
2021-05-18 20:32:46 +12:00
def game_imported(self, app_name: str):
igame = self.core.get_installed_game(app_name)
2021-09-30 10:22:47 +13:00
if self.core.get_asset(app_name, False).build_version != igame.version:
2021-05-18 20:32:46 +12:00
self.downloadTab.add_update(igame)
downloads = len(self.downloadTab.dl_queue) + len(self.downloadTab.update_widgets.keys())
self.setTabText(1, "Downloads" + ((" (" + str(downloads) + ")") if downloads != 0 else ""))
2021-09-27 03:43:56 +13:00
self.games_tab.update_list(app_name)
self.games_tab.setCurrentIndex(0)
2021-05-18 20:32:46 +12:00
2021-04-13 00:10:36 +12:00
# Sync game and delete dc rpc
2021-04-12 08:44:18 +12:00
def game_finished(self, app_name):
2021-04-13 00:10:36 +12:00
self.delete_presence.emit()
game = self.core.get_game(app_name)
if game and game.supports_cloud_saves:
2021-04-13 22:38:11 +12:00
self.cloud_saves.sync_game(app_name, True)
2021-04-12 08:44:18 +12:00
2021-02-10 23:48:25 +13:00
def resizeEvent(self, event):
self.tabBar().setMinimumWidth(self.width())
super(TabWidget, self).resizeEvent(event)
2021-04-10 21:27:40 +12:00
2021-04-13 00:10:36 +12:00
# Remove text "sync game"
2021-04-10 21:27:40 +12:00
def finished_sync(self, app_name):
2021-09-27 03:43:56 +13:00
if self.core.is_installed(app_name):
self.games_tab.widgets[app_name][0].info_text = ""
self.games_tab.widgets[app_name][0].info_label.setText("")
self.games_tab.widgets[app_name][1].info_label.setText("")