1
0
Fork 0
mirror of synced 2024-07-03 05:31:23 +12:00
Rare/rare/components/tabs/games/__init__.py

156 lines
5.9 KiB
Python
Raw Normal View History

2021-09-27 03:43:56 +13:00
from logging import getLogger
from PyQt5.QtCore import QSettings, Qt, pyqtSlot
2023-12-15 00:43:59 +13:00
from PyQt5.QtGui import QShowEvent
2022-06-22 11:38:04 +12:00
from PyQt5.QtWidgets import QStackedWidget, QVBoxLayout, QWidget, QScrollArea, QFrame
from rare.models.game import RareGame
from rare.shared import (
LegendaryCoreSingleton,
GlobalSignalsSingleton,
ArgumentsSingleton,
ImageManagerSingleton,
)
from rare.shared import RareCore
from rare.models.options import options
from .game_info import GameInfoTabs
from .game_widgets import LibraryWidgetController, LibraryFilter, LibraryOrder, LibraryView
from .game_widgets.icon_game_widget import IconGameWidget
from .game_widgets.list_game_widget import ListGameWidget
from .head_bar import GameListHeadBar
from .integrations import IntegrationsTabs
2021-09-27 03:43:56 +13:00
logger = getLogger("GamesTab")
2022-06-22 11:38:04 +12:00
class GamesTab(QStackedWidget):
def __init__(self, parent=None):
super(GamesTab, self).__init__(parent=parent)
self.rcore = RareCore.instance()
self.core = LegendaryCoreSingleton()
self.signals = GlobalSignalsSingleton()
self.args = ArgumentsSingleton()
self.image_manager = ImageManagerSingleton()
2021-09-27 03:43:56 +13:00
self.settings = QSettings()
self.games_page = QWidget(parent=self)
games_page_layout = QVBoxLayout(self.games_page)
self.addWidget(self.games_page)
self.head_bar = GameListHeadBar(parent=self.games_page)
self.head_bar.goto_import.connect(self.show_import)
self.head_bar.goto_egl_sync.connect(self.show_egl_sync)
self.head_bar.goto_eos_ubisoft.connect(self.show_eos_ubisoft)
games_page_layout.addWidget(self.head_bar)
2021-09-27 03:43:56 +13:00
self.game_info_page = GameInfoTabs(self)
self.game_info_page.back_clicked.connect(lambda: self.setCurrentWidget(self.games_page))
self.game_info_page.import_clicked.connect(self.show_import)
self.addWidget(self.game_info_page)
self.integrations_page = IntegrationsTabs(self)
self.integrations_page.back_clicked.connect(lambda: self.setCurrentWidget(self.games_page))
self.addWidget(self.integrations_page)
self.view_scroll = QScrollArea(self.games_page)
self.view_scroll.setWidgetResizable(True)
self.view_scroll.setFrameShape(QFrame.StyledPanel)
self.view_scroll.horizontalScrollBar().setDisabled(True)
2022-06-22 11:38:04 +12:00
library_view = LibraryView(self.settings.value(*options.library_view))
self.library_controller = LibraryWidgetController(library_view, self.view_scroll)
games_page_layout.addWidget(self.view_scroll)
2021-09-27 03:43:56 +13:00
self.head_bar.search_bar.textChanged.connect(self.search_games)
self.head_bar.search_bar.textChanged.connect(self.scroll_to_top)
self.head_bar.filterChanged.connect(self.filter_games)
self.head_bar.filterChanged.connect(self.scroll_to_top)
self.head_bar.orderChanged.connect(self.order_games)
self.head_bar.orderChanged.connect(self.scroll_to_top)
self.head_bar.refresh_list.clicked.connect(self.library_controller.update_game_views)
2021-09-27 03:43:56 +13:00
2021-10-15 10:05:00 +13:00
# signals
self.signals.game.installed.connect(self.update_count_games_label)
self.signals.game.uninstalled.connect(self.update_count_games_label)
2021-11-17 10:54:23 +13:00
2023-12-15 00:43:59 +13:00
self.init = True
def showEvent(self, a0: QShowEvent):
if a0.spontaneous() or not self.init:
return super().showEvent(a0)
2022-06-22 11:38:04 +12:00
self.setup_game_list()
2023-12-15 00:43:59 +13:00
self.init = False
return super().showEvent(a0)
2021-10-15 10:05:00 +13:00
@pyqtSlot()
def scroll_to_top(self):
self.view_scroll.verticalScrollBar().setSliderPosition(
self.view_scroll.verticalScrollBar().minimum()
)
@pyqtSlot()
@pyqtSlot(str)
def show_import(self, app_name: str = None):
self.setCurrentWidget(self.integrations_page)
self.integrations_page.show_import(app_name)
@pyqtSlot()
def show_egl_sync(self):
self.setCurrentWidget(self.integrations_page)
self.integrations_page.show_egl_sync()
@pyqtSlot()
def show_eos_ubisoft(self):
self.setCurrentWidget(self.integrations_page)
self.integrations_page.show_eos_ubisoft()
@pyqtSlot(RareGame)
def show_game_info(self, rgame):
self.game_info_page.update_game(rgame)
self.setCurrentWidget(self.game_info_page)
2021-09-27 03:43:56 +13:00
2022-06-22 11:38:04 +12:00
@pyqtSlot()
def update_count_games_label(self):
self.head_bar.set_games_count(
len([game for game in self.rcore.games if game.is_installed]),
len(list(self.rcore.games)),
)
2022-06-22 11:38:04 +12:00
def setup_game_list(self):
for rgame in self.rcore.games:
widget = self.add_library_widget(rgame)
if not widget:
logger.warning("Excluding %s from the game list", rgame.app_title)
2022-03-17 05:46:57 +13:00
continue
self.filter_games(self.head_bar.current_filter())
self.update_count_games_label()
2021-09-27 03:43:56 +13:00
def add_library_widget(self, rgame: RareGame):
2021-12-27 11:03:50 +13:00
try:
widget = self.library_controller.add_game(rgame)
2021-12-27 11:03:50 +13:00
except Exception as e:
logger.error("Could not add widget for %s to library: %s", rgame.app_name, e)
return None
widget.show_info.connect(self.show_game_info)
return widget
2021-09-27 03:43:56 +13:00
@pyqtSlot(str)
def search_games(self, search_text: str = ""):
self.filter_games(self.head_bar.current_filter(), search_text)
@pyqtSlot(object)
@pyqtSlot(object, str)
def filter_games(self, library_filter: LibraryFilter = LibraryFilter.ALL, search_text: str = ""):
2021-11-02 08:39:47 +13:00
if not search_text and (t := self.head_bar.search_bar.text()):
search_text = t
self.library_controller.filter_game_views(library_filter, search_text.lower())
@pyqtSlot(object)
@pyqtSlot(object, str)
def order_games(self, library_order: LibraryOrder = LibraryFilter.ALL, search_text: str = ""):
if not search_text and (t := self.head_bar.search_bar.text()):
search_text = t
2021-09-27 03:43:56 +13:00
self.library_controller.order_game_views(library_order, search_text.lower())