1
0
Fork 0
mirror of synced 2024-06-29 11:40:37 +12:00
Rare/rare/components/tabs/games/head_bar.py
loathingKernel 0ea29bc941 HeadBar: Use int as the data type for the combo boxes and improve checks
Also fix an exception when the setting in the config was faulty we were
looking for the wrong data type in the combobox data.
2024-02-12 21:52:07 +02:00

175 lines
6.9 KiB
Python

from PyQt5.QtCore import QSettings, pyqtSignal, pyqtSlot, QSize, Qt
from PyQt5.QtWidgets import (
QLabel,
QPushButton,
QWidget,
QHBoxLayout,
QComboBox,
QToolButton,
QMenu,
QAction,
)
from rare.shared import RareCore
from rare.models.options import options
from rare.utils.extra_widgets import SelectViewWidget, ButtonLineEdit
from rare.utils.misc import icon
from .game_widgets import LibraryFilter, LibraryOrder
class GameListHeadBar(QWidget):
filterChanged: pyqtSignal = pyqtSignal(int)
orderChanged: pyqtSignal = pyqtSignal(int)
goto_import: pyqtSignal = pyqtSignal()
goto_egl_sync: pyqtSignal = pyqtSignal()
goto_eos_ubisoft: pyqtSignal = pyqtSignal()
def __init__(self, parent=None):
super(GameListHeadBar, self).__init__(parent=parent)
self.rcore = RareCore.instance()
self.settings = QSettings(self)
self.filter = QComboBox(self)
filters = {
int(LibraryFilter.ALL): self.tr("All games"),
int(LibraryFilter.INSTALLED): self.tr("Installed"),
int(LibraryFilter.OFFLINE): self.tr("Offline"),
# int(LibraryFilter.HIDDEN): self.tr("Hidden"),
}
for data, text in filters.items():
self.filter.addItem(text, data)
if self.rcore.bit32_games:
self.filter.addItem(self.tr("32bit games"), int(LibraryFilter.WIN32))
if self.rcore.mac_games:
self.filter.addItem(self.tr("macOS games"), int(LibraryFilter.MAC))
if self.rcore.origin_games:
self.filter.addItem(self.tr("Exclude Origin"), int(LibraryFilter.INSTALLABLE))
self.filter.addItem(self.tr("Include Unreal"), int(LibraryFilter.INCLUDE_UE))
try:
index = self.filter.findData(self.settings.value(*options.library_filter), Qt.UserRole)
if index < 0:
raise ValueError
self.filter.setCurrentIndex(index)
except (TypeError, ValueError):
self.settings.setValue(options.library_filter.key, options.library_filter.default)
self.filter.setCurrentIndex(self.filter.findData(options.library_filter.default))
self.filter.currentIndexChanged.connect(self.__filter_changed)
self.order = QComboBox(parent=self)
sortings = {
int(LibraryOrder.TITLE): self.tr("Title"),
int(LibraryOrder.RECENT): self.tr("Recently played"),
int(LibraryOrder.NEWEST): self.tr("Newest"),
int(LibraryOrder.OLDEST): self.tr("Oldest"),
}
for data, text in sortings.items():
self.order.addItem(text, data)
try:
index = self.order.findData(self.settings.value(*options.library_order), Qt.UserRole)
if index < 0:
raise ValueError
self.order.setCurrentIndex(index)
except (TypeError, ValueError):
self.settings.setValue(options.library_order.key, options.library_order.default)
self.order.setCurrentIndex(self.order.findData(options.library_order.default, Qt.UserRole))
self.order.currentIndexChanged.connect(self.__order_changed)
integrations_menu = QMenu(parent=self)
import_action = QAction(
icon("mdi.import", "fa.arrow-down"), self.tr("Import Game"), integrations_menu
)
import_action.triggered.connect(self.goto_import)
egl_sync_action = QAction(icon("mdi.sync", "fa.refresh"), self.tr("Sync with EGL"), integrations_menu)
egl_sync_action.triggered.connect(self.goto_egl_sync)
eos_ubisoft_action = QAction(
icon("mdi.rocket", "fa.rocket"), self.tr("Epic Overlay and Ubisoft"), integrations_menu
)
eos_ubisoft_action.triggered.connect(self.goto_eos_ubisoft)
integrations_menu.addAction(import_action)
integrations_menu.addAction(egl_sync_action)
integrations_menu.addAction(eos_ubisoft_action)
integrations = QToolButton(parent=self)
integrations.setText(self.tr("Integrations"))
integrations.setMenu(integrations_menu)
integrations.setPopupMode(QToolButton.InstantPopup)
self.search_bar = ButtonLineEdit("fa.search", placeholder_text=self.tr("Search Game"))
self.search_bar.setObjectName("SearchBar")
self.search_bar.setFrame(False)
self.search_bar.setMinimumWidth(200)
checked = QSettings().value("icon_view", True, bool)
installed_tooltip = self.tr("Installed games")
self.installed_icon = QLabel(parent=self)
self.installed_icon.setPixmap(icon("ph.floppy-disk-back-fill").pixmap(QSize(16, 16)))
self.installed_icon.setToolTip(installed_tooltip)
self.installed_label = QLabel(parent=self)
font = self.installed_label.font()
font.setBold(True)
self.installed_label.setFont(font)
self.installed_label.setToolTip(installed_tooltip)
available_tooltip = self.tr("Available games")
self.available_icon = QLabel(parent=self)
self.available_icon.setPixmap(icon("ph.floppy-disk-back-light").pixmap(QSize(16, 16)))
self.available_icon.setToolTip(available_tooltip)
self.available_label = QLabel(parent=self)
self.available_label.setToolTip(available_tooltip)
self.view = SelectViewWidget(checked)
self.refresh_list = QPushButton(parent=self)
self.refresh_list.setIcon(icon("fa.refresh")) # Reload icon
self.refresh_list.clicked.connect(self.__refresh_clicked)
layout = QHBoxLayout(self)
layout.setContentsMargins(0, 5, 0, 5)
layout.addWidget(self.filter)
layout.addWidget(self.order)
layout.addStretch(0)
layout.addWidget(integrations)
layout.addStretch(2)
layout.addWidget(self.search_bar)
layout.addStretch(2)
layout.addWidget(self.installed_icon)
layout.addWidget(self.installed_label)
layout.addWidget(self.available_icon)
layout.addWidget(self.available_label)
layout.addStretch(2)
layout.addWidget(self.view)
layout.addStretch(2)
layout.addWidget(self.refresh_list)
def set_games_count(self, inst: int, avail: int) -> None:
self.installed_label.setText(str(inst))
self.available_label.setText(str(avail))
@pyqtSlot()
def __refresh_clicked(self):
self.rcore.fetch()
def current_filter(self) -> int:
return self.filter.currentData(Qt.UserRole)
@pyqtSlot(int)
def __filter_changed(self, index: int):
data = self.filter.itemData(index, Qt.UserRole)
self.filterChanged.emit(data)
self.settings.setValue(options.library_filter.key, data)
def current_order(self) -> int:
return self.order.currentData(Qt.UserRole)
@pyqtSlot(int)
def __order_changed(self, index: int):
data = self.order.itemData(index, Qt.UserRole)
self.orderChanged.emit(data)
self.settings.setValue(options.library_order.key, data)