1
0
Fork 0
mirror of synced 2024-06-29 03:31:06 +12:00

While we are here, adjust UninstalledInfo to match GameInfo. Make it easier to unify them in the future.

This commit is contained in:
Stelios Tsampas 2021-05-21 21:54:26 +03:00
parent 1131edda20
commit eb461529f7
4 changed files with 497 additions and 486 deletions

View file

@ -7,7 +7,7 @@ from PyQt5.QtWidgets import QWidget, QTabWidget, QMessageBox
from qtawesome import icon
from custom_legendary.core import LegendaryCore
from custom_legendary.models.game import InstalledGame, Game
from custom_legendary.models.game import Game, InstalledGame
from rare.components.tabs.games.game_info.dlcs import DlcTab
from rare.components.tabs.games.game_info.game_settings import GameSettings
from rare.ui.components.tabs.games.game_info.game_info import Ui_GameInfo
@ -65,22 +65,26 @@ class GameInfo(QWidget, Ui_GameInfo):
def __init__(self, core: LegendaryCore, parent):
super(GameInfo, self).__init__(parent=parent)
self.setupUi(self)
self.ratings = {"platinum": self.tr("Platimum"),
self.core = core
self.ratings = {"platinum": self.tr("Platinum"),
"gold": self.tr("Gold"),
"silver": self.tr("Silver"),
"bronze": self.tr("Bronze"),
"fail": self.tr("Could not get grade from ProtonDB"),
"pending": "Not enough reports"}
"fail": self.tr("Could not get grade"),
"pending": self.tr("Not enough reports")}
if os.path.exists(p := os.path.expanduser("~/.cache/rare/game_list.json")):
self.grade_table = json.load(open(p))
else:
self.grade_table = {}
self.widget = QWidget()
self.core = core
if os.name == "nt":
self.lbl_grade.setVisible(False)
self.grade.setVisible(False)
self.game_actions_stack.setCurrentIndex(0)
self.game_actions_stack.resize(self.game_actions_stack.minimumSize())
self.uninstall_button.clicked.connect(self.uninstall)
self.verify_button.clicked.connect(self.verify)
self.repair_button.clicked.connect(self.repair)
@ -153,14 +157,15 @@ class GameInfo(QWidget, Ui_GameInfo):
if os.name != "nt" and self.grade_table:
try:
grade = self.ratings.get(self.grade_table[app_name].get("grade"))
grade = self.grade_table[app_name]["grade"]
except KeyError:
grade = (self.tr("Error"))
self.grade.setText(grade)
grade = "fail"
self.grade.setText(self.ratings[grade])
if len(self.verify_threads.keys()) == 0 or not self.verify_threads.get(app_name):
self.verify_widget.setCurrentIndex(0)
elif self.verify_threads.get(app_name):
self.verify_widget.setCurrentIndex(1)
self.verify_progress.setValue(
self.verify_threads[app_name].num / self.verify_threads[app_name].total * 100)
self.verify_threads[app_name].num / self.verify_threads[app_name].total * 100
)

View file

@ -1,15 +1,17 @@
import json
import os
from PyQt5.QtCore import pyqtSignal, QSettings, Qt
from PyQt5.QtCore import Qt, pyqtSignal
from PyQt5.QtGui import QPixmap, QKeyEvent
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLabel, QTabWidget, QTreeView
from PyQt5.QtWidgets import QWidget, QTabWidget, QTreeView
from qtawesome import icon
from custom_legendary.core import LegendaryCore
from custom_legendary.models.game import Game
from rare.ui.components.tabs.games.game_info.game_info import Ui_GameInfo
from rare.utils.extra_widgets import SideTabBar
from rare.utils.json_formatter import QJsonModel
from rare.utils.utils import IMAGE_DIR
class UninstalledTabInfo(QTabWidget):
@ -18,7 +20,6 @@ class UninstalledTabInfo(QTabWidget):
self.app_name = ""
self.core = core
self.setTabBar(SideTabBar())
self.setTabPosition(QTabWidget.West)
self.addTab(QWidget(), icon("mdi.keyboard-backspace", color="white"), self.tr("Back"))
@ -49,69 +50,44 @@ class UninstalledTabInfo(QTabWidget):
self.parent().layout.setCurrentIndex(0)
class UninstalledInfo(QWidget):
class UninstalledInfo(QWidget, Ui_GameInfo):
game: Game
install_game = pyqtSignal(str)
def __init__(self, core: LegendaryCore, parent):
def __init__(self, core: LegendaryCore, parent=None):
super(UninstalledInfo, self).__init__(parent=parent)
self.layout = QVBoxLayout()
if os.path.exists(p := os.path.expanduser("~/.cache/rare/game_list.json")):
self.grade_table = json.load(open(p))
else:
self.grade_table = {}
self.setupUi(self)
self.core = core
self.ratings = {"platinum": self.tr("Platinum"),
"gold": self.tr("Gold"),
"silver": self.tr("Silver"),
"bronze": self.tr("Bronze"),
"fail": self.tr("Could not get grade from ProtonDB"),
"pending": "Not enough reports"}
"fail": self.tr("Could not get grade"),
"pending": self.tr("Not enough reports")}
if os.path.exists(p := os.path.expanduser("~/.cache/rare/game_list.json")):
self.grade_table = json.load(open(p))
else:
self.grade_table = {}
self.core = core
if os.name == "nt":
self.lbl_grade.setVisible(False)
self.grade.setVisible(False)
self.settings = QSettings()
self.install_size.setEnabled(False)
self.lbl_install_size.setEnabled(False)
self.install_path.setEnabled(False)
self.lbl_install_path.setEnabled(False)
self.top_layout = QHBoxLayout()
left_layout = QVBoxLayout()
self.image = QLabel()
left_layout.addWidget(self.image)
left_layout.addStretch(1)
self.top_layout.addLayout(left_layout)
self.right_layout = QVBoxLayout()
self.game_actions_stack.setCurrentIndex(1)
self.game_actions_stack.resize(self.game_actions_stack.minimumSize())
self.title = QLabel("Error")
self.right_layout.addWidget(self.title)
self.app_name = QLabel("Error")
self.right_layout.addWidget(self.app_name)
if os.name != "nt":
self.rating = QLabel("Rating: Error")
self.right_layout.addWidget(self.rating)
self.install_button = QPushButton(self.tr("Install"))
self.install_button.setFixedWidth(300)
self.install_button.setStyleSheet("""background-color: #090""")
self.install_button.clicked.connect(lambda: self.install_game.emit(self.game.app_name))
self.right_layout.addWidget(self.install_button)
self.version = QLabel("Error")
self.right_layout.addWidget(self.version)
self.right_layout.addStretch(1)
self.top_layout.addLayout(self.right_layout)
self.top_layout.addStretch(1)
self.layout.addLayout(self.top_layout)
self.setLayout(self.layout)
def update_game(self, app_name):
self.game = self.core.get_game(app_name)
self.title.setText(f"<h2>{self.game.app_title}</h2>")
self.app_name.setText("Appname: " + app_name)
IMAGE_DIR = self.settings.value("img_dir", os.path.expanduser("~/.cache/rare/images"), str)
self.game_title.setText(f"<h2>{self.game.app_title}</h2>")
if os.path.exists(f"{IMAGE_DIR}/{self.game.app_name}/FinalArt.png"):
pixmap = QPixmap(f"{IMAGE_DIR}/{self.game.app_name}/FinalArt.png")
@ -127,13 +103,15 @@ class UninstalledInfo(QWidget):
pixmap = pixmap.scaled(w, int(w * 4 / 3))
self.image.setPixmap(pixmap)
self.version.setText(self.game.asset_info.build_version)
if self.grade_table and (not os.name == "nt"):
self.app_name.setText(self.game.app_name)
self.version.setText(self.game.app_version)
self.dev.setText(self.game.metadata["developer"])
self.install_size.setText("N/A")
self.install_path.setText("N/A")
if os.name != "nt" and self.grade_table:
try:
rating = self.grade_table[app_name]["grade"]
grade = self.grade_table[app_name]["grade"]
except KeyError:
rating = "fail"
if rating not in ["fail", "pending"]:
self.rating.setText(self.tr("Rating from ProtonDB: ") + self.ratings[rating])
else:
self.rating.setText(self.ratings[rating])
grade = "fail"
self.grade.setText(self.ratings[grade])

View file

@ -22,7 +22,7 @@ class Ui_GameInfo(object):
self.layout_game_info_form.setObjectName("layout_game_info_form")
self.install_size = QtWidgets.QLabel(GameInfo)
self.install_size.setText("error")
self.install_size.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse | QtCore.Qt.TextSelectableByMouse)
self.install_size.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
self.install_size.setObjectName("install_size")
self.layout_game_info_form.addWidget(self.install_size, 4, 1, 1, 1)
self.lbl_dev = QtWidgets.QLabel(GameInfo)
@ -39,7 +39,7 @@ class Ui_GameInfo(object):
self.layout_game_info_form.addWidget(self.lbl_dev, 0, 0, 1, 1, QtCore.Qt.AlignRight)
self.version = QtWidgets.QLabel(GameInfo)
self.version.setText("error")
self.version.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse | QtCore.Qt.TextSelectableByMouse)
self.version.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
self.version.setObjectName("version")
self.layout_game_info_form.addWidget(self.version, 2, 1, 1, 1)
self.lbl_install_path = QtWidgets.QLabel(GameInfo)
@ -70,43 +70,6 @@ class Ui_GameInfo(object):
self.layout_game_info_form.addItem(spacerItem, 7, 1, 1, 1)
spacerItem1 = QtWidgets.QSpacerItem(20, 0, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.layout_game_info_form.addItem(spacerItem1, 7, 0, 1, 1)
self.wg_game_actions = QtWidgets.QWidget(GameInfo)
self.wg_game_actions.setMinimumSize(QtCore.QSize(250, 0))
self.wg_game_actions.setObjectName("wg_game_actions")
self.layout_game_actions = QtWidgets.QVBoxLayout(self.wg_game_actions)
self.layout_game_actions.setContentsMargins(0, 0, 0, 0)
self.layout_game_actions.setObjectName("layout_game_actions")
self.uninstall_button = QtWidgets.QPushButton(self.wg_game_actions)
self.uninstall_button.setObjectName("uninstall_button")
self.layout_game_actions.addWidget(self.uninstall_button)
self.verify_widget = QtWidgets.QStackedWidget(self.wg_game_actions)
self.verify_widget.setObjectName("verify_widget")
self.page_verify_button = QtWidgets.QWidget()
self.page_verify_button.setObjectName("page_verify_button")
self.layout_verify_button = QtWidgets.QVBoxLayout(self.page_verify_button)
self.layout_verify_button.setContentsMargins(0, 0, 0, 0)
self.layout_verify_button.setSpacing(0)
self.layout_verify_button.setObjectName("layout_verify_button")
self.verify_button = QtWidgets.QPushButton(self.page_verify_button)
self.verify_button.setObjectName("verify_button")
self.layout_verify_button.addWidget(self.verify_button)
self.verify_widget.addWidget(self.page_verify_button)
self.page_verify_progress = QtWidgets.QWidget()
self.page_verify_progress.setObjectName("page_verify_progress")
self.layout_verify_progress = QtWidgets.QVBoxLayout(self.page_verify_progress)
self.layout_verify_progress.setContentsMargins(0, 0, 0, 0)
self.layout_verify_progress.setSpacing(0)
self.layout_verify_progress.setObjectName("layout_verify_progress")
self.verify_progress = QtWidgets.QProgressBar(self.page_verify_progress)
self.verify_progress.setProperty("value", 24)
self.verify_progress.setObjectName("verify_progress")
self.layout_verify_progress.addWidget(self.verify_progress)
self.verify_widget.addWidget(self.page_verify_progress)
self.layout_game_actions.addWidget(self.verify_widget)
self.repair_button = QtWidgets.QPushButton(self.wg_game_actions)
self.repair_button.setObjectName("repair_button")
self.layout_game_actions.addWidget(self.repair_button)
self.layout_game_info_form.addWidget(self.wg_game_actions, 6, 1, 1, 1, QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop)
self.lbl_version = QtWidgets.QLabel(GameInfo)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
@ -133,18 +96,18 @@ class Ui_GameInfo(object):
self.layout_game_info_form.addWidget(self.lbl_app_name, 1, 0, 1, 1, QtCore.Qt.AlignRight)
self.dev = QtWidgets.QLabel(GameInfo)
self.dev.setText("error")
self.dev.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse | QtCore.Qt.TextSelectableByMouse)
self.dev.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
self.dev.setObjectName("dev")
self.layout_game_info_form.addWidget(self.dev, 0, 1, 1, 1)
self.app_name = QtWidgets.QLabel(GameInfo)
self.app_name.setText("error")
self.app_name.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse | QtCore.Qt.TextSelectableByMouse)
self.app_name.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
self.app_name.setObjectName("app_name")
self.layout_game_info_form.addWidget(self.app_name, 1, 1, 1, 1)
self.install_path = QtWidgets.QLabel(GameInfo)
self.install_path.setText("error")
self.install_path.setWordWrap(True)
self.install_path.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse | QtCore.Qt.TextSelectableByMouse)
self.install_path.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
self.install_path.setObjectName("install_path")
self.layout_game_info_form.addWidget(self.install_path, 5, 1, 1, 1)
self.lbl_game_actions = QtWidgets.QLabel(GameInfo)
@ -168,23 +131,74 @@ class Ui_GameInfo(object):
self.layout_game_info_form.addWidget(self.lbl_grade, 3, 0, 1, 1, QtCore.Qt.AlignRight)
self.grade = QtWidgets.QLabel(GameInfo)
self.grade.setText("error")
self.grade.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse | QtCore.Qt.TextSelectableByMouse)
self.grade.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
self.grade.setObjectName("grade")
self.layout_game_info_form.addWidget(self.grade, 3, 1, 1, 1)
self.game_actions_stack = QtWidgets.QStackedWidget(GameInfo)
self.game_actions_stack.setMinimumSize(QtCore.QSize(250, 0))
self.game_actions_stack.setObjectName("game_actions_stack")
self.installed_page = QtWidgets.QWidget()
self.installed_page.setObjectName("installed_page")
self.installed_layout = QtWidgets.QVBoxLayout(self.installed_page)
self.installed_layout.setContentsMargins(0, 0, 0, 0)
self.installed_layout.setObjectName("installed_layout")
self.verify_widget = QtWidgets.QStackedWidget(self.installed_page)
self.verify_widget.setObjectName("verify_widget")
self.page_verify_button = QtWidgets.QWidget()
self.page_verify_button.setObjectName("page_verify_button")
self.layout_verify_button = QtWidgets.QVBoxLayout(self.page_verify_button)
self.layout_verify_button.setContentsMargins(0, 0, 0, 0)
self.layout_verify_button.setSpacing(0)
self.layout_verify_button.setObjectName("layout_verify_button")
self.verify_button = QtWidgets.QPushButton(self.page_verify_button)
self.verify_button.setObjectName("verify_button")
self.layout_verify_button.addWidget(self.verify_button)
self.verify_widget.addWidget(self.page_verify_button)
self.page_verify_progress = QtWidgets.QWidget()
self.page_verify_progress.setObjectName("page_verify_progress")
self.layout_verify_progress = QtWidgets.QVBoxLayout(self.page_verify_progress)
self.layout_verify_progress.setContentsMargins(0, 0, 0, 0)
self.layout_verify_progress.setSpacing(0)
self.layout_verify_progress.setObjectName("layout_verify_progress")
self.verify_progress = QtWidgets.QProgressBar(self.page_verify_progress)
self.verify_progress.setProperty("value", 24)
self.verify_progress.setObjectName("verify_progress")
self.layout_verify_progress.addWidget(self.verify_progress)
self.verify_widget.addWidget(self.page_verify_progress)
self.installed_layout.addWidget(self.verify_widget)
self.repair_button = QtWidgets.QPushButton(self.installed_page)
self.repair_button.setObjectName("repair_button")
self.installed_layout.addWidget(self.repair_button)
self.uninstall_button = QtWidgets.QPushButton(self.installed_page)
self.uninstall_button.setStyleSheet("background-color: #900")
self.uninstall_button.setObjectName("uninstall_button")
self.installed_layout.addWidget(self.uninstall_button)
self.game_actions_stack.addWidget(self.installed_page)
self.uninstalled_page = QtWidgets.QWidget()
self.uninstalled_page.setObjectName("uninstalled_page")
self.uninstalled_layout = QtWidgets.QVBoxLayout(self.uninstalled_page)
self.uninstalled_layout.setObjectName("uninstalled_layout")
self.install_button = QtWidgets.QPushButton(self.uninstalled_page)
self.install_button.setStyleSheet("background-color: #090")
self.install_button.setObjectName("install_button")
self.uninstalled_layout.addWidget(self.install_button)
self.game_actions_stack.addWidget(self.uninstalled_page)
self.layout_game_info_form.addWidget(self.game_actions_stack, 6, 1, 1, 1, QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
self.layout_game_info.addLayout(self.layout_game_info_form, 2, 1, 1, 1)
self.image = QtWidgets.QLabel(GameInfo)
self.image.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.image.setFrameShadow(QtWidgets.QFrame.Sunken)
self.image.setText("")
self.image.setObjectName("image")
self.layout_game_info.addWidget(self.image, 2, 0, 1, 1, QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop)
self.layout_game_info.addWidget(self.image, 2, 0, 1, 1, QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
self.game_title = QtWidgets.QLabel(GameInfo)
self.game_title.setText("error")
self.game_title.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse | QtCore.Qt.TextSelectableByMouse)
self.game_title.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
self.game_title.setObjectName("game_title")
self.layout_game_info.addWidget(self.game_title, 0, 0, 1, 3)
self.retranslateUi(GameInfo)
self.game_actions_stack.setCurrentIndex(0)
self.verify_widget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(GameInfo)
@ -194,18 +208,18 @@ class Ui_GameInfo(object):
self.lbl_dev.setText(_translate("GameInfo", "Developer"))
self.lbl_install_path.setText(_translate("GameInfo", "Installation Path"))
self.lbl_install_size.setText(_translate("GameInfo", "Installation Size"))
self.uninstall_button.setText(_translate("GameInfo", "Uninstall Game"))
self.verify_button.setText(_translate("GameInfo", "Verify Installation"))
self.repair_button.setText(_translate("GameInfo", "Repair Instalation"))
self.lbl_version.setText(_translate("GameInfo", "Version"))
self.lbl_app_name.setText(_translate("GameInfo", "Application Name"))
self.lbl_game_actions.setText(_translate("GameInfo", "Actions"))
self.lbl_grade.setText(_translate("GameInfo", "ProtonDB Grade"))
self.verify_button.setText(_translate("GameInfo", "Verify Installation"))
self.repair_button.setText(_translate("GameInfo", "Repair Instalation"))
self.uninstall_button.setText(_translate("GameInfo", "Uninstall Game"))
self.install_button.setText(_translate("GameInfo", "Install Game"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
GameInfo = QtWidgets.QWidget()
ui = Ui_GameInfo()

View file

@ -1,376 +1,390 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>GameInfo</class>
<widget class="QWidget" name="GameInfo">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>436</width>
<height>317</height>
</rect>
</property>
<property name="windowTitle">
<string>Game Info</string>
</property>
<layout class="QGridLayout" name="layout_game_info">
<item row="2" column="1">
<layout class="QGridLayout" name="layout_game_info_form">
<property name="leftMargin">
<number>6</number>
</property>
<property name="topMargin">
<number>6</number>
</property>
<property name="rightMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>6</number>
</property>
<property name="spacing">
<number>12</number>
</property>
<item row="4" column="1">
<widget class="QLabel" name="install_size">
<property name="text">
<string notr="true">error</string>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
<item row="0" column="0" alignment="Qt::AlignRight">
<widget class="QLabel" name="lbl_dev">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Developer</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLabel" name="version">
<property name="text">
<string notr="true">error</string>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
<item row="5" column="0" alignment="Qt::AlignRight">
<widget class="QLabel" name="lbl_install_path">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Installation Path</string>
</property>
</widget>
</item>
<item row="4" column="0" alignment="Qt::AlignRight">
<widget class="QLabel" name="lbl_install_size">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Installation Size</string>
</property>
</widget>
</item>
<item row="7" column="1">
<spacer name="hs_game_info_form">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>0</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="7" column="0">
<spacer name="vs_game_info_form">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
<item row="6" column="1" alignment="Qt::AlignLeft|Qt::AlignTop">
<widget class="QWidget" name="wg_game_actions" native="true">
<property name="minimumSize">
<size>
<width>250</width>
<height>0</height>
</size>
</property>
<layout class="QVBoxLayout" name="layout_game_actions">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QPushButton" name="uninstall_button">
<property name="text">
<string>Uninstall Game</string>
</property>
</widget>
</item>
<item>
<widget class="QStackedWidget" name="verify_widget">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="page_verify_button">
<layout class="QVBoxLayout" name="layout_verify_button">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QPushButton" name="verify_button">
<property name="text">
<string>Verify Installation</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="page_verify_progress">
<layout class="QVBoxLayout" name="layout_verify_progress">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QProgressBar" name="verify_progress">
<property name="value">
<number>24</number>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
<item>
<widget class="QPushButton" name="repair_button">
<property name="text">
<string>Repair Instalation</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="2" column="0" alignment="Qt::AlignRight">
<widget class="QLabel" name="lbl_version">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Version</string>
</property>
</widget>
</item>
<item row="1" column="0" alignment="Qt::AlignRight">
<widget class="QLabel" name="lbl_app_name">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Application Name</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="dev">
<property name="text">
<string notr="true">error</string>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="app_name">
<property name="text">
<string notr="true">error</string>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QLabel" name="install_path">
<property name="text">
<string notr="true">error</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
<item row="6" column="0" alignment="Qt::AlignRight">
<widget class="QLabel" name="lbl_game_actions">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Actions</string>
</property>
</widget>
</item>
<item row="3" column="0" alignment="Qt::AlignRight">
<widget class="QLabel" name="lbl_grade">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>ProtonDB Grade</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLabel" name="grade">
<property name="text">
<string notr="true">error</string>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0" alignment="Qt::AlignLeft|Qt::AlignTop">
<widget class="QLabel" name="image">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Sunken</enum>
</property>
<property name="text">
<string notr="true"/>
</property>
</widget>
</item>
<item row="0" column="0" colspan="3">
<widget class="QLabel" name="game_title">
<property name="text">
<string notr="true">error</string>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
<class>GameInfo</class>
<widget class="QWidget" name="GameInfo">
<property name="windowTitle">
<string>Game Info</string>
</property>
<layout class="QGridLayout" name="layout_game_info">
<item row="2" column="1">
<layout class="QGridLayout" name="layout_game_info_form">
<property name="leftMargin">
<number>6</number>
</property>
<property name="topMargin">
<number>6</number>
</property>
<property name="rightMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>6</number>
</property>
<property name="spacing">
<number>12</number>
</property>
<item row="4" column="1">
<widget class="QLabel" name="install_size">
<property name="text">
<string notr="true">error</string>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
<item row="0" column="0" alignment="Qt::AlignRight">
<widget class="QLabel" name="lbl_dev">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Developer</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLabel" name="version">
<property name="text">
<string notr="true">error</string>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
<item row="5" column="0" alignment="Qt::AlignRight">
<widget class="QLabel" name="lbl_install_path">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Installation Path</string>
</property>
</widget>
</item>
<item row="4" column="0" alignment="Qt::AlignRight">
<widget class="QLabel" name="lbl_install_size">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Installation Size</string>
</property>
</widget>
</item>
<item row="7" column="1">
<spacer name="hs_game_info_form">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>0</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="7" column="0">
<spacer name="vs_game_info_form">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="0" alignment="Qt::AlignRight">
<widget class="QLabel" name="lbl_version">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Version</string>
</property>
</widget>
</item>
<item row="1" column="0" alignment="Qt::AlignRight">
<widget class="QLabel" name="lbl_app_name">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Application Name</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="dev">
<property name="text">
<string notr="true">error</string>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="app_name">
<property name="text">
<string notr="true">error</string>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QLabel" name="install_path">
<property name="text">
<string notr="true">error</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
<item row="6" column="0" alignment="Qt::AlignRight">
<widget class="QLabel" name="lbl_game_actions">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Actions</string>
</property>
</widget>
</item>
<item row="3" column="0" alignment="Qt::AlignRight">
<widget class="QLabel" name="lbl_grade">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>ProtonDB Grade</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLabel" name="grade">
<property name="text">
<string notr="true">error</string>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
<item row="6" column="1" alignment="Qt::AlignLeft|Qt::AlignTop">
<widget class="QStackedWidget" name="game_actions_stack">
<property name="minimumSize">
<size>
<width>250</width>
<height>0</height>
</size>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="installed_page" native="true">
<layout class="QVBoxLayout" name="installed_layout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QStackedWidget" name="verify_widget">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="page_verify_button">
<layout class="QVBoxLayout" name="layout_verify_button">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QPushButton" name="verify_button">
<property name="text">
<string>Verify Installation</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="page_verify_progress">
<layout class="QVBoxLayout" name="layout_verify_progress">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QProgressBar" name="verify_progress">
<property name="value">
<number>24</number>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
<item>
<widget class="QPushButton" name="repair_button">
<property name="text">
<string>Repair Instalation</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="uninstall_button">
<property name="styleSheet">
<string notr="true">background-color: #900</string>
</property>
<property name="text">
<string>Uninstall Game</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="uninstalled_page">
<layout class="QVBoxLayout" name="uninstalled_layout">
<item>
<widget class="QPushButton" name="install_button">
<property name="styleSheet">
<string notr="true">background-color: #090</string>
</property>
<property name="text">
<string>Install Game</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</item>
<item row="2" column="0" alignment="Qt::AlignLeft|Qt::AlignTop">
<widget class="QLabel" name="image">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Sunken</enum>
</property>
<property name="text">
<string notr="true"/>
</property>
</widget>
<resources/>
<connections/>
</item>
<item row="0" column="0" colspan="3">
<widget class="QLabel" name="game_title">
<property name="text">
<string notr="true">error</string>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>