from logging import getLogger from PyQt5.QtCore import QEvent, pyqtSignal, QSize, Qt from PyQt5.QtGui import QMouseEvent from PyQt5.QtWidgets import QVBoxLayout, QHBoxLayout, QPushButton, QLabel from qtawesome import icon from legendary.core import LegendaryCore from legendary.models.game import InstalledGame from rare.components.tabs.games.game_widgets.base_installed_widget import BaseInstalledWidget logger = getLogger("GameWidgetInstalled") class GameWidgetInstalled(BaseInstalledWidget): update_list = pyqtSignal(str) show_info = pyqtSignal(str) update_game = pyqtSignal() def __init__(self, game: InstalledGame, core: LegendaryCore, pixmap, offline): super(GameWidgetInstalled, self).__init__(game, core, pixmap, offline) self.setObjectName("game_widget_icon") self.setContextMenuPolicy(Qt.ActionsContextMenu) self.layout = QVBoxLayout() self.core = core self.running = False self.info_text = "" if self.update_available: logger.info("Update available for game: " + self.game.app_name) self.info_text = self.tr("Update available") self.layout.addWidget(self.image) self.title_label = QLabel(f"

{game.title}

") self.title_label.setAutoFillBackground(False) self.title_label.setWordWrap(True) self.title_label.setFixedWidth(175) minilayout = QHBoxLayout() self.title_label.setObjectName("game_widget") minilayout.addWidget(self.title_label) # Info Button self.menu_btn = QPushButton() self.menu_btn.setIcon(icon("ei.info-circle")) # self.menu_btn.setObjectName("installed_menu_button") self.menu_btn.setIconSize(QSize(18, 18)) self.menu_btn.enterEvent = lambda x: self.info_label.setText("Information") self.menu_btn.leaveEvent = lambda x: self.info_label.setText( "Please update Game") if self.update_available else self.info_label.setText("Start Game") # remove Border self.menu_btn.setObjectName("menu_button") self.menu_btn.clicked.connect(lambda: self.show_info.emit(self.game.app_name)) self.menu_btn.setFixedWidth(17) minilayout.addWidget(self.menu_btn) minilayout.addStretch(1) self.layout.addLayout(minilayout) self.info_label = QLabel(self.info_text) self.info_label.setAutoFillBackground(False) self.info_label.setObjectName("info_label") self.layout.addWidget(self.info_label) # p = self.palette() # p.setColor(self.backgroundRole(), Qt.red) # self.setPalette(p) self.setLayout(self.layout) self.setFixedWidth(self.sizeHint().width()) def enterEvent(self, a0: QEvent) -> None: if self.game_running: self.info_label.setText(self.tr("Game running")) elif self.update_available: self.info_label.setText(self.tr("Start game without version check")) else: self.info_label.setText("Start Game") def leaveEvent(self, a0: QEvent) -> None: if self.running: self.info_label.setText(self.tr("Game running")) else: self.info_label.setText(self.info_text) def mousePressEvent(self, e: QMouseEvent): # left button if e.button() == 1 and not self.game_running: if self.update_available: self.launch(skip_version_check=True) else: self.launch() # right elif e.button() == 2: pass # self.showMenu(e) """def showMenu(self, event): menu = QMenu() desktop_link = menu.addAction("Add Desktop link") action = menu.exec_(self.mapToGlobal(event.pos())) if action == desktop_link: print("LOL")"""