2021-02-10 23:48:25 +13:00
|
|
|
import os
|
|
|
|
from logging import getLogger
|
|
|
|
|
2021-03-10 04:52:51 +13:00
|
|
|
from PyQt5.QtCore import QEvent, pyqtSignal, QSettings, QSize, Qt
|
2021-03-25 23:49:05 +13:00
|
|
|
from PyQt5.QtGui import QMouseEvent
|
2021-02-10 23:48:25 +13:00
|
|
|
from PyQt5.QtWidgets import *
|
2021-03-09 08:36:42 +13:00
|
|
|
from qtawesome import icon
|
2021-02-10 23:48:25 +13:00
|
|
|
|
2021-04-08 08:42:30 +12:00
|
|
|
from rare.components.tabs.games.game_widgets.base_installed_widget import BaseInstalledWidget
|
2021-04-08 08:39:23 +12:00
|
|
|
from rare.utils import legendary_utils
|
|
|
|
from rare.utils.extra_widgets import ClickableLabel
|
2021-03-19 00:45:59 +13:00
|
|
|
from custom_legendary.core import LegendaryCore
|
|
|
|
from custom_legendary.models.game import InstalledGame
|
2021-02-10 23:48:25 +13:00
|
|
|
|
2021-02-18 01:58:29 +13:00
|
|
|
logger = getLogger("GameWidgetInstalled")
|
2021-02-10 23:48:25 +13:00
|
|
|
|
|
|
|
|
2021-03-25 23:49:05 +13:00
|
|
|
class GameWidgetInstalled(BaseInstalledWidget):
|
2021-02-18 05:46:03 +13:00
|
|
|
update_list = pyqtSignal()
|
2021-02-23 06:50:00 +13:00
|
|
|
show_info = pyqtSignal(str)
|
2021-03-09 05:20:28 +13:00
|
|
|
update_game = pyqtSignal()
|
2021-02-18 05:46:03 +13:00
|
|
|
|
2021-03-26 02:15:18 +13:00
|
|
|
def __init__(self, game: InstalledGame, core: LegendaryCore, pixmap):
|
2021-03-25 23:49:05 +13:00
|
|
|
super(GameWidgetInstalled, self).__init__(game, core, pixmap)
|
2021-03-27 01:29:26 +13:00
|
|
|
self.setObjectName("game_widget_icon")
|
2021-03-10 04:52:51 +13:00
|
|
|
|
2021-03-18 23:35:07 +13:00
|
|
|
self.setContextMenuPolicy(Qt.ActionsContextMenu)
|
|
|
|
|
2021-02-10 23:48:25 +13:00
|
|
|
self.layout = QVBoxLayout()
|
|
|
|
self.core = core
|
|
|
|
self.running = False
|
2021-03-01 00:06:33 +13:00
|
|
|
self.info_text = ""
|
2021-03-26 00:14:34 +13:00
|
|
|
|
2021-02-18 01:58:29 +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-03-01 08:01:15 +13:00
|
|
|
self.info_text = self.tr("Update available")
|
2021-02-10 23:48:25 +13:00
|
|
|
|
2021-03-25 23:49:05 +13:00
|
|
|
if self.pixmap:
|
2021-02-10 23:48:25 +13:00
|
|
|
w = 200
|
2021-04-06 22:10:42 +12:00
|
|
|
self.pixmap = self.pixmap.scaled(w, int(w * 4 / 3), transformMode=Qt.SmoothTransformation)
|
2021-02-10 23:48:25 +13:00
|
|
|
self.image = ClickableLabel()
|
|
|
|
self.image.setObjectName("game_widget")
|
2021-03-25 23:49:05 +13:00
|
|
|
self.image.setPixmap(self.pixmap)
|
2021-02-10 23:48:25 +13:00
|
|
|
self.layout.addWidget(self.image)
|
|
|
|
|
|
|
|
self.title_label = QLabel(f"<h4>{game.title}</h4>")
|
2021-03-10 04:52:51 +13:00
|
|
|
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-03-09 08:36:42 +13:00
|
|
|
self.menu_btn.setIcon(icon("ei.info-circle", color="white"))
|
|
|
|
# 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
|
2021-03-10 06:13:04 +13:00
|
|
|
|
|
|
|
self.menu_btn.setObjectName("menu_button")
|
|
|
|
|
2021-03-09 08:36:42 +13:00
|
|
|
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)
|
|
|
|
|
2021-03-01 00:06:33 +13:00
|
|
|
self.info_label = QLabel(self.info_text)
|
2021-03-10 04:52:51 +13:00
|
|
|
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)
|
|
|
|
|
2021-03-19 00:45:59 +13:00
|
|
|
# p = self.palette()
|
|
|
|
# p.setColor(self.backgroundRole(), Qt.red)
|
|
|
|
# self.setPalette(p)
|
2021-03-10 04:52:51 +13:00
|
|
|
|
2021-02-10 23:48:25 +13:00
|
|
|
self.setLayout(self.layout)
|
|
|
|
self.setFixedWidth(self.sizeHint().width())
|
|
|
|
|
|
|
|
def enterEvent(self, a0: QEvent) -> None:
|
2021-04-10 08:40:27 +12:00
|
|
|
if self.game_running:
|
|
|
|
self.info_label.setText(self.tr("Game running"))
|
|
|
|
elif self.update_available:
|
2021-03-18 23:35:07 +13:00
|
|
|
self.info_label.setText(self.tr("Start game without version check"))
|
2021-03-10 04:52:51 +13:00
|
|
|
else:
|
2021-04-10 08:40:27 +12:00
|
|
|
self.info_label.setText("Start Game")
|
2021-02-10 23:48:25 +13:00
|
|
|
|
|
|
|
def leaveEvent(self, a0: QEvent) -> None:
|
2021-03-10 04:52:51 +13:00
|
|
|
if self.running:
|
|
|
|
self.info_label.setText(self.tr("Game running"))
|
|
|
|
else:
|
|
|
|
self.info_label.setText(self.info_text)
|
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-03-25 23:49:05 +13:00
|
|
|
if e.button() == 1 and not self.game_running:
|
2021-03-18 23:35:07 +13:00
|
|
|
if self.update_available:
|
|
|
|
self.launch(skip_version_check=True)
|
|
|
|
else:
|
|
|
|
self.launch()
|
2021-03-25 23:49:05 +13:00
|
|
|
|
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 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")"""
|