1
0
Fork 0
mirror of synced 2024-07-05 14:40:42 +12:00
Rare/rare/components/tabs/games/game_widgets/installed_icon_widget.py

130 lines
4.6 KiB
Python
Raw Normal View History

2021-02-10 23:48:25 +13:00
from logging import getLogger
2021-04-23 00:34:06 +12:00
from PyQt5.QtCore import QEvent, pyqtSignal, QSize, Qt
from PyQt5.QtGui import QMouseEvent
2021-09-12 23:46:48 +12:00
from PyQt5.QtWidgets import QVBoxLayout, QHBoxLayout, QPushButton, QLabel
2021-03-09 08:36:42 +13:00
from qtawesome import icon
2021-02-10 23:48:25 +13:00
2021-10-08 07:19:24 +13:00
from rare import shared
2021-12-24 22:09:50 +13:00
from rare.components.tabs.games.game_widgets.base_installed_widget import (
BaseInstalledWidget,
)
2021-02-10 23:48:25 +13:00
logger = getLogger("GameWidgetInstalled")
2021-02-10 23:48:25 +13:00
class InstalledIconWidget(BaseInstalledWidget):
2021-03-09 05:20:28 +13:00
update_game = pyqtSignal()
2021-02-18 05:46:03 +13:00
def __init__(self, app_name, pixmap, game_utils):
super(InstalledIconWidget, self).__init__(app_name, pixmap, game_utils)
2021-03-27 01:29:26 +13:00
self.setObjectName("game_widget_icon")
2021-03-18 23:35:07 +13:00
self.setContextMenuPolicy(Qt.ActionsContextMenu)
2021-02-10 23:48:25 +13:00
self.layout = QVBoxLayout()
2021-10-15 10:18:13 +13:00
self.core = shared.core
2021-03-26 00:14:34 +13:00
if self.update_available:
2021-02-18 05:46:03 +13:00
logger.info("Update available for game: " + self.game.app_name)
2021-02-10 23:48:25 +13:00
2021-09-09 05:22:45 +12:00
self.layout.addWidget(self.image)
2021-02-10 23:48:25 +13:00
self.game_utils.finished.connect(self.game_finished)
self.game_utils.cloud_save_finished.connect(self.sync_finished)
2021-10-24 12:47:49 +13:00
self.title_label = QLabel(f"<h4>{self.game.app_title}</h4>")
self.title_label.setAutoFillBackground(False)
2021-02-10 23:48:25 +13:00
self.title_label.setWordWrap(True)
2021-02-18 06:44:24 +13:00
self.title_label.setFixedWidth(175)
2021-02-10 23:48:25 +13:00
minilayout = QHBoxLayout()
self.title_label.setObjectName("game_widget")
minilayout.addWidget(self.title_label)
2021-03-09 08:36:42 +13:00
# Info Button
2021-02-18 06:44:24 +13:00
self.menu_btn = QPushButton()
2021-08-29 06:03:25 +12:00
self.menu_btn.setIcon(icon("ei.info-circle"))
2021-03-09 08:36:42 +13:00
# self.menu_btn.setObjectName("installed_menu_button")
self.menu_btn.setIconSize(QSize(18, 18))
2021-12-24 22:09:50 +13:00
self.menu_btn.enterEvent = lambda x: self.info_label.setText(
self.tr("Information")
)
self.menu_btn.leaveEvent = lambda x: self.enterEvent(None)
2021-03-09 08:36:42 +13:00
# remove Border
2021-03-10 06:13:04 +13:00
self.menu_btn.setObjectName("menu_button")
self.menu_btn.clicked.connect(lambda: self.show_info.emit(self.game.app_name))
2021-02-18 06:44:24 +13:00
self.menu_btn.setFixedWidth(17)
2021-02-18 05:46:03 +13:00
minilayout.addWidget(self.menu_btn)
2021-02-10 23:48:25 +13:00
minilayout.addStretch(1)
self.layout.addLayout(minilayout)
self.info_label = QLabel("")
self.leaveEvent(None)
self.info_label.setAutoFillBackground(False)
2021-02-10 23:48:25 +13:00
self.info_label.setObjectName("info_label")
self.layout.addWidget(self.info_label)
if self.igame and self.igame.needs_verification:
self.info_label.setText(self.texts["needs_verification"])
2021-02-10 23:48:25 +13:00
self.setLayout(self.layout)
self.setFixedWidth(self.sizeHint().width())
self.game_utils.game_launched.connect(self.game_started)
def enterEvent(self, a0: QEvent = None) -> None:
2021-04-10 08:40:27 +12:00
if self.game_running:
self.info_label.setText(self.texts["hover"]["running"])
elif self.igame and self.igame.needs_verification:
self.info_label.setText(self.texts["needs_verification"])
2021-04-10 08:40:27 +12:00
elif self.update_available:
self.info_label.setText(self.texts["hover"]["update_available"])
else:
2021-12-24 22:09:50 +13:00
self.info_label.setText(
self.texts["hover"]["launch" if self.igame else "launch_origin"]
)
2021-02-10 23:48:25 +13:00
def leaveEvent(self, a0: QEvent = None) -> None:
if self.game_running:
self.info_label.setText(self.texts["default"]["running"])
elif self.syncing_cloud_saves:
self.info_label.setText(self.texts["default"]["syncing"])
elif self.update_available:
self.info_label.setText(self.texts["default"]["update_available"])
elif self.igame and self.igame.needs_verification:
self.info_label.setText(self.texts["needs_verification"])
else:
self.info_label.setText("")
2021-02-10 23:48:25 +13:00
2021-03-19 00:45:59 +13:00
def mousePressEvent(self, e: QMouseEvent):
2021-03-18 23:35:07 +13:00
# left button
2021-10-04 06:37:46 +13:00
if e.button() == 1 and not self.game_running:
if self.igame and self.igame.needs_verification:
2021-10-04 06:37:46 +13:00
return
2021-03-18 23:35:07 +13:00
if self.update_available:
self.launch(skip_version_check=True)
else:
self.launch()
2021-03-18 23:35:07 +13:00
# right
elif e.button() == 2:
2021-04-10 08:40:27 +12:00
pass # self.showMenu(e)
def sync_finished(self, app_name):
if not app_name == self.game.app_name:
return
super().sync_finished(app_name)
self.leaveEvent(None)
def game_finished(self, app_name, error):
if app_name != self.game.app_name:
return
2021-11-17 10:54:23 +13:00
self.game_running = False
self.leaveEvent(None)
def game_started(self, app_name):
if app_name == self.game.app_name:
self.game_running = True
self.leaveEvent(None)