1
0
Fork 0
mirror of synced 2024-06-02 18:54:41 +12:00

Redesign Game Info and Game Settings tabs

This commit is contained in:
Stelios Tsampas 2021-04-30 00:30:42 +03:00
parent 8c882177e1
commit 2f58422191
7 changed files with 1066 additions and 183 deletions

View file

@ -7,7 +7,7 @@ import time
from PyQt5.QtCore import QSettings, QTranslator
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QSystemTrayIcon
from PyQt5.QtWidgets import QApplication, QSystemTrayIcon, QStyleFactory
from custom_legendary.core import LegendaryCore
from rare import lang_path, style_path
@ -67,7 +67,8 @@ class App(QApplication):
self.installTranslator(self.translator)
# Style
self.setStyleSheet(open(style_path + "RareStyle.qss").read())
# self.setStyle(QStyleFactory.create("Fusion"))
# self.setStyleSheet(open(style_path + "RareStyle.qss").read())
self.setWindowIcon(QIcon(style_path + "Logo.png"))
# launch app
@ -107,4 +108,4 @@ def start(args):
if exit_code != -133742:
break
# restart app
del app
del app

View file

@ -3,14 +3,14 @@ import os
from PyQt5.QtCore import Qt, pyqtSignal
from PyQt5.QtGui import QPixmap, QKeyEvent
from PyQt5.QtWidgets import QWidget, QPushButton, QVBoxLayout, QLabel, QHBoxLayout, QTabWidget, QMessageBox, \
QProgressBar, QStackedWidget, QGroupBox, QScrollArea
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 rare.components.dialogs.uninstall_dialog import UninstallDialog
from rare.components.tabs.games.game_info.dlcs import DlcTab
from rare.components.tabs.games.game_info.game_info_ui import Ui_GameInfo
from rare.components.tabs.games.game_info.game_settings import GameSettings
from rare.utils import legendary_utils
from rare.utils.extra_widgets import SideTabBar
@ -56,7 +56,7 @@ class InfoTabs(QTabWidget):
self.parent().layout.setCurrentIndex(0)
class GameInfo(QScrollArea):
class GameInfo(QWidget, Ui_GameInfo):
igame: InstalledGame
game: Game
update_list = pyqtSignal()
@ -67,6 +67,7 @@ class GameInfo(QScrollArea):
def __init__(self, core: LegendaryCore, parent):
super(GameInfo, self).__init__(parent=parent)
self.setupUi(self)
self.ratings = {"platinum": self.tr("Platimum"),
"gold": self.tr("Gold"),
@ -77,58 +78,15 @@ class GameInfo(QScrollArea):
self.widget = QWidget()
self.core = core
self.layout = QVBoxLayout()
self.setWidgetResizable(True)
top_layout = QHBoxLayout()
# No Game at start. Game is set when clicked info
self.image = QLabel()
top_layout.addWidget(self.image)
right_layout = QVBoxLayout()
self.game_title = QLabel("Error")
self.game_title.setTextInteractionFlags(Qt.TextSelectableByMouse)
right_layout.addWidget(self.game_title)
self.dev = QLabel("Error")
self.dev.setTextInteractionFlags(Qt.TextSelectableByMouse)
right_layout.addWidget(self.dev)
self.app_name = QLabel("Error")
self.app_name.setTextInteractionFlags(Qt.TextSelectableByMouse)
right_layout.addWidget(self.app_name)
if os.name != "nt":
self.grade = QLabel("Error")
right_layout.addWidget(self.grade)
self.grade.setTextInteractionFlags(Qt.TextSelectableByMouse)
self.version = QLabel("Error")
self.version.setTextInteractionFlags(Qt.TextSelectableByMouse)
right_layout.addWidget(self.version)
self.install_size = QLabel("Error")
right_layout.addWidget(self.install_size)
self.install_path = QLabel("Error")
self.install_path.setTextInteractionFlags(Qt.TextSelectableByMouse)
self.install_path.setWordWrap(True)
right_layout.addWidget(self.install_path)
top_layout.addLayout(right_layout)
top_layout.addStretch()
self.game_actions = GameActions()
self.game_actions.uninstall_button.clicked.connect(self.uninstall)
self.game_actions.verify_button.clicked.connect(self.verify)
self.game_actions.repair_button.clicked.connect(self.repair)
self.layout.addLayout(top_layout)
self.layout.addWidget(self.game_actions)
self.layout.addStretch()
self.widget.setLayout(self.layout)
self.setWidget(self.widget)
self.uninstall_button.clicked.connect(self.uninstall)
self.verify_button.clicked.connect(self.verify)
self.repair_button.clicked.connect(self.repair)
def uninstall(self):
infos = UninstallDialog(self.game).get_information()
@ -147,18 +105,18 @@ class GameInfo(QScrollArea):
self.verify_game.emit(self.game.app_name)
def verify(self):
self.game_actions.verify_widget.setCurrentIndex(1)
self.verify_widget.setCurrentIndex(1)
verify_thread = VerifyThread(self.core, self.game.app_name)
verify_thread.status.connect(self.verify_satistics)
verify_thread.summary.connect(self.finish_verify)
verify_thread.start()
self.game_actions.verify_progress_bar.setValue(0)
self.verify_progress.setValue(0)
self.verify_threads[self.game.app_name] = verify_thread
def verify_satistics(self, progress):
# checked, max, app_name
if progress[2] == self.game.app_name:
self.game_actions.verify_progress_bar.setValue(progress[0] * 100 / progress[1])
self.verify_progress.setValue(progress[0] * 100 / progress[1])
def finish_verify(self, failed):
failed, missing, app_name = failed
@ -171,7 +129,7 @@ class GameInfo(QScrollArea):
failed, missing), QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
if ans == QMessageBox.Yes:
self.verify_game.emit(self.game.app_name)
self.game_actions.verify_widget.setCurrentIndex(0)
self.verify_widget.setCurrentIndex(0)
self.verify_threads.pop(app_name)
def update_game(self, app_name):
@ -193,12 +151,11 @@ class GameInfo(QScrollArea):
w = 200
pixmap = pixmap.scaled(w, int(w * 4 / 3))
self.image.setPixmap(pixmap)
self.app_name.setText("App name: " + self.game.app_name)
self.version.setText("Version: " + self.game.app_version)
self.dev.setText(self.tr("Developer: ") + self.game.metadata["developer"])
self.install_size.setText(
self.tr("Install size: ") + get_size(self.igame.install_size))
self.install_path.setText(self.tr("Install path: ") + self.igame.install_path)
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(get_size(self.igame.install_size))
self.install_path.setText(self.igame.install_path)
if os.name != "nt":
if grade := self.ratings.get(self.grade_table[app_name].get("grade")):
@ -207,48 +164,9 @@ class GameInfo(QScrollArea):
self.grade.setText(self.tr("ProtonDB rating: Error"))
if len(self.verify_threads.keys()) == 0 or not self.verify_threads.get(app_name):
self.game_actions.verify_widget.setCurrentIndex(0)
self.verify_widget.setCurrentIndex(0)
elif self.verify_threads.get(app_name):
self.game_actions.verify_widget.setCurrentIndex(1)
self.game_actions.verify_progress_bar.setValue(
self.verify_widget.setCurrentIndex(1)
self.verify_progress.setValue(
self.verify_threads[app_name].num / self.verify_threads[app_name].total * 100)
class GameActions(QGroupBox):
def __init__(self):
super(GameActions, self).__init__()
self.setTitle(f"{self.tr('Game actions')}")
self.setStyleSheet("QGroupBox{font-size: 20px}")
self.layout = QVBoxLayout()
uninstall_layout = QHBoxLayout()
self.uninstall_game = QLabel(self.tr("Uninstall game"))
uninstall_layout.addWidget(self.uninstall_game)
self.uninstall_button = QPushButton(self.tr("Uninstall"))
self.uninstall_button.setFixedWidth(250)
uninstall_layout.addWidget(self.uninstall_button)
self.layout.addLayout(uninstall_layout)
verify_layout = QHBoxLayout()
self.verify_game = QLabel(self.tr("Verify Game"))
verify_layout.addWidget(self.verify_game)
self.verify_widget = QStackedWidget()
self.verify_widget.setMaximumHeight(20)
self.verify_widget.setFixedWidth(250)
self.verify_button = QPushButton(self.tr("Verify"))
self.verify_widget.addWidget(self.verify_button)
self.verify_progress_bar = QProgressBar()
self.verify_progress_bar.setMaximum(100)
self.verify_widget.addWidget(self.verify_progress_bar)
verify_layout.addWidget(self.verify_widget)
self.layout.addLayout(verify_layout)
repair_layout = QHBoxLayout()
repair_info = QLabel(self.tr("Repair Game"))
repair_layout.addWidget(repair_info)
self.repair_button = QPushButton(self.tr("Repair"))
self.repair_button.setFixedWidth(250)
repair_layout.addWidget(self.repair_button)
self.layout.addLayout(repair_layout)
self.setLayout(self.layout)

View file

@ -0,0 +1,206 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'resources/ui/components/tabs/games/game_info/game_info.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_GameInfo(object):
def setupUi(self, GameInfo):
GameInfo.setObjectName("GameInfo")
self.layout_game_info = QtWidgets.QGridLayout(GameInfo)
self.layout_game_info.setObjectName("layout_game_info")
self.layout_game_info_form = QtWidgets.QGridLayout()
self.layout_game_info_form.setContentsMargins(6, 6, 6, 6)
self.layout_game_info_form.setSpacing(12)
self.layout_game_info_form.setObjectName("layout_game_info_form")
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.setObjectName("install_path")
self.layout_game_info_form.addWidget(self.install_path, 4, 1, 1, 1)
self.version = QtWidgets.QLabel(GameInfo)
self.version.setText("error")
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.install_size = QtWidgets.QLabel(GameInfo)
self.install_size.setText("error")
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, 3, 1, 1, 1)
self.lbl_dev = QtWidgets.QLabel(GameInfo)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.lbl_dev.sizePolicy().hasHeightForWidth())
self.lbl_dev.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.lbl_dev.setFont(font)
self.lbl_dev.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.lbl_dev.setObjectName("lbl_dev")
self.layout_game_info_form.addWidget(self.lbl_dev, 0, 0, 1, 1)
self.dev = QtWidgets.QLabel(GameInfo)
self.dev.setText("error")
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.setObjectName("app_name")
self.layout_game_info_form.addWidget(self.app_name, 1, 1, 1, 1)
self.lbl_version = QtWidgets.QLabel(GameInfo)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.lbl_version.sizePolicy().hasHeightForWidth())
self.lbl_version.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.lbl_version.setFont(font)
self.lbl_version.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.lbl_version.setObjectName("lbl_version")
self.layout_game_info_form.addWidget(self.lbl_version, 2, 0, 1, 1)
self.lbl_install_path = QtWidgets.QLabel(GameInfo)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.lbl_install_path.sizePolicy().hasHeightForWidth())
self.lbl_install_path.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.lbl_install_path.setFont(font)
self.lbl_install_path.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.lbl_install_path.setObjectName("lbl_install_path")
self.layout_game_info_form.addWidget(self.lbl_install_path, 4, 0, 1, 1)
spacerItem = QtWidgets.QSpacerItem(0, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.layout_game_info_form.addItem(spacerItem, 6, 1, 1, 1)
self.lbl_game_actions = QtWidgets.QLabel(GameInfo)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.lbl_game_actions.sizePolicy().hasHeightForWidth())
self.lbl_game_actions.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.lbl_game_actions.setFont(font)
self.lbl_game_actions.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.lbl_game_actions.setObjectName("lbl_game_actions")
self.layout_game_info_form.addWidget(self.lbl_game_actions, 5, 0, 1, 1)
self.lbl_app_name = QtWidgets.QLabel(GameInfo)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.lbl_app_name.sizePolicy().hasHeightForWidth())
self.lbl_app_name.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.lbl_app_name.setFont(font)
self.lbl_app_name.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.lbl_app_name.setObjectName("lbl_app_name")
self.layout_game_info_form.addWidget(self.lbl_app_name, 1, 0, 1, 1)
self.lbl_install_size = QtWidgets.QLabel(GameInfo)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.lbl_install_size.sizePolicy().hasHeightForWidth())
self.lbl_install_size.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.lbl_install_size.setFont(font)
self.lbl_install_size.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.lbl_install_size.setObjectName("lbl_install_size")
self.layout_game_info_form.addWidget(self.lbl_install_size, 3, 0, 1, 1)
spacerItem1 = QtWidgets.QSpacerItem(20, 0, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.layout_game_info_form.addItem(spacerItem1, 6, 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, 5, 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.game_title = QtWidgets.QLabel(GameInfo)
self.game_title.setText("error")
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.verify_widget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(GameInfo)
def retranslateUi(self, GameInfo):
_translate = QtCore.QCoreApplication.translate
GameInfo.setWindowTitle(_translate("GameInfo", "Game Info"))
self.lbl_dev.setText(_translate("GameInfo", "Developer:"))
self.lbl_version.setText(_translate("GameInfo", "Version:"))
self.lbl_install_path.setText(_translate("GameInfo", "Installation Path:"))
self.lbl_game_actions.setText(_translate("GameInfo", "Game Actions:"))
self.lbl_app_name.setText(_translate("GameInfo", "Application Name:"))
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"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
GameInfo = QtWidgets.QWidget()
ui = Ui_GameInfo()
ui.setupUi(GameInfo)
GameInfo.show()
sys.exit(app.exec_())

View file

@ -1,13 +1,12 @@
import os
from PyQt5.QtCore import QSettings
from PyQt5.QtWidgets import QWidget, QLabel, QVBoxLayout, QComboBox, QFileDialog, QPushButton, QMessageBox, QLineEdit, \
QScrollArea, QCheckBox
from PyQt5.QtWidgets import QWidget, QFileDialog, QMessageBox
from custom_legendary.core import LegendaryCore
from custom_legendary.models.game import InstalledGame, Game
from rare.components.tabs.games.game_info.game_settings_ui import Ui_GameSettings
from rare.components.tabs.settings.linux import LinuxSettings
from rare.components.tabs.settings.settings_widget import SettingsWidget
from rare.utils.extra_widgets import PathEdit
@ -31,7 +30,7 @@ def find_proton_wrappers():
return possible_proton_wrappers
class GameSettings(QScrollArea):
class GameSettings(QWidget, Ui_GameSettings):
game: Game
igame: InstalledGame
@ -40,71 +39,40 @@ class GameSettings(QScrollArea):
def __init__(self, core: LegendaryCore, parent):
super(GameSettings, self).__init__(parent=parent)
self.setupUi(self)
self.core = core
self.widget = QWidget()
self.settings = QSettings()
self.setWidgetResizable(True)
self.layout = QVBoxLayout()
self.title = QLabel("Error")
self.layout.addWidget(self.title)
self.offline = QComboBox()
self.offline.addItems(["unset", "true", "false"])
self.offline_widget = SettingsWidget(self.tr("Launch Game offline"), self.offline)
self.offline.currentIndexChanged.connect(lambda x: self.update_combobox(x, "offline"))
self.skip_update = QComboBox()
self.skip_update.addItems(["unset", "true", "false"])
self.skip_update_widget = SettingsWidget(self.tr("Skip update check before launching"), self.skip_update)
self.layout.addWidget(self.skip_update_widget)
self.skip_update.currentIndexChanged.connect(lambda x: self.update_combobox(x, "skip_update_check"))
self.launch_params = QLineEdit("")
self.launch_params.setPlaceholderText(self.tr("Start parameter"))
self.launch_params_accept_button = QPushButton(self.tr("Save"))
self.launch_params_widget = SettingsWidget(self.tr("Launch parameters"), self.launch_params,
self.launch_params_accept_button)
self.layout.addWidget(self.launch_params_widget)
self.launch_params_accept_button.clicked.connect(
lambda: self.save_line_edit("start_params", self.launch_params.text()))
self.cloud_sync = QCheckBox("Sync with cloud")
self.cloud_sync_widget = SettingsWidget(self.tr("Auto sync with cloud"), self.cloud_sync)
self.layout.addWidget(self.cloud_sync_widget)
self.cloud_sync.stateChanged.connect(lambda: self.settings.setValue(f"{self.game.app_name}/auto_sync_cloud",
self.cloud_sync.isChecked()))
self.layout.addWidget(self.offline_widget)
self.wrapper = QLineEdit("")
self.wrapper.setPlaceholderText("Wrapper")
self.wrapper_save_button = QPushButton(self.tr("Save"))
self.wrapper_save_button.clicked.connect(lambda: self.save_line_edit("wrapper", self.wrapper.text()))
self.wrapper_widget = SettingsWidget(self.tr("Wrapper (e.g. optirun)"), self.wrapper, self.wrapper_save_button)
self.layout.addWidget(self.wrapper_widget)
self.offline.currentIndexChanged.connect(
lambda x: self.update_combobox(x, "offline")
)
self.skip_update.currentIndexChanged.connect(
lambda x: self.update_combobox(x, "skip_update_check")
)
self.launch_params_button.clicked.connect(
lambda: self.save_line_edit("start_params", self.launch_params.text())
)
self.cloud_sync.stateChanged.connect(
lambda: self.settings.setValue(f"{self.game.app_name}/auto_sync_cloud", self.cloud_sync.isChecked())
)
self.wrapper_button.clicked.connect(
lambda: self.save_line_edit("wrapper", self.wrapper.text())
)
if os.name != "nt":
self.possible_proton_wrappers = find_proton_wrappers()
self.select_proton = QComboBox()
self.select_proton.addItems(["Don't use Proton"] + self.possible_proton_wrappers)
self.select_proton.currentIndexChanged.connect(self.change_proton)
self.select_proton_widget = SettingsWidget(self.tr("Proton Wrapper"), self.select_proton)
self.layout.addWidget(self.select_proton_widget)
self.proton_wrapper.addItems(self.possible_proton_wrappers)
self.proton_wrapper.currentIndexChanged.connect(self.change_proton)
self.proton_prefix = PathEdit("x", QFileDialog.DirectoryOnly, save_func=self.update_prefix)
self.proton_prefix_widget = SettingsWidget(self.tr("Proton prefix"), self.proton_prefix)
self.layout.addWidget(self.proton_prefix_widget)
self.proton_prefix = PathEdit("None", QFileDialog.DirectoryOnly, save_func=self.update_prefix)
self.proton_prefix_layout.addWidget(self.proton_prefix)
self.linux_settings = LinuxAppSettings(core)
self.layout.addWidget(self.linux_settings)
self.linux_layout.addWidget(self.linux_settings)
# startparams, skip_update_check
self.layout.addStretch(1)
self.widget.setLayout(self.layout)
self.setWidget(self.widget)
def save_line_edit(self, option, value):
if value != "":
if not (self.game.app_name in self.core.lgd.config.sections()):
@ -121,26 +89,27 @@ class GameSettings(QScrollArea):
def update_combobox(self, i, option):
if self.change:
# remove section
if i == 0:
if i:
if not self.core.lgd.config[self.game.app_name]:
self.core.lgd.config.add_section(self.game.app_name)
if i == 1:
self.core.lgd.config.set(self.game.app_name, option, "true")
if i == 2:
self.core.lgd.config.set(self.game.app_name, option, "false")
else:
if self.game.app_name in self.core.lgd.config.sections():
if self.core.lgd.config.get(f"{self.game.app_name}", option, fallback="") != "":
self.core.lgd.config.remove_option(self.game.app_name, option)
if self.core.lgd.config[self.game.app_name] == {}:
self.core.lgd.config.remove_section(self.game.app_name)
elif i == 1:
self.core.lgd.config.add_section(self.game.app_name)
self.core.lgd.config.set(self.game.app_name, option, "true")
elif i == 2:
self.core.lgd.config.add_section(self.game.app_name)
self.core.lgd.config.set(self.game.app_name, option, "false")
self.core.lgd.save_config()
def change_proton(self, i):
if self.change:
# Dont use Proton
if i == 0:
self.proton_prefix_widget.setVisible(False)
self.wrapper_widget.setVisible(True)
self.proton_prefix.setEnabled(False)
self.wrapper_widget.setEnabled(True)
if f"{self.game.app_name}" in self.core.lgd.config.sections():
if self.core.lgd.config.get(f"{self.game.app_name}", "wrapper", fallback="") != "":
self.core.lgd.config.remove_option(self.game.app_name, "wrapper")
@ -155,8 +124,8 @@ class GameSettings(QScrollArea):
if self.core.lgd.config[self.game.app_name + ".env"] == {}:
self.core.lgd.config.remove_section(self.game.app_name + ".env")
else:
self.proton_prefix_widget.setVisible(True)
self.wrapper_widget.setVisible(False)
self.proton_prefix.setEnabled(True)
self.wrapper_widget.setEnabled(False)
wrapper = self.possible_proton_wrappers[i - 1]
if not self.game.app_name in self.core.lgd.config.sections():
self.core.lgd.config[self.game.app_name] = {}
@ -191,7 +160,6 @@ class GameSettings(QScrollArea):
self.core.lgd.config.set(self.game.app_name + ".env", "STEAM_COMPAT_DATA_PATH", text)
self.core.lgd.save_config()
self.proton_prefix.save_path_button.setDisabled(True)
def update_game(self, app_name):
self.change = False
@ -207,9 +175,9 @@ class GameSettings(QScrollArea):
else:
self.offline.setCurrentIndex(0)
self.offline_widget.setVisible(True)
self.offline.setEnabled(True)
else:
self.offline_widget.setVisible(False)
self.offline.setEnabled(False)
skip_update = self.core.lgd.config.get(self.game.app_name, "skip_update_check", fallback="unset")
if skip_update == "true":
@ -228,22 +196,22 @@ class GameSettings(QScrollArea):
self.linux_settings.dxvk.update_settings(app_name)
proton = self.core.lgd.config.get(f"{app_name}", "wrapper", fallback="").replace('"', "")
if proton != "":
self.proton_prefix_widget.setVisible(True)
self.select_proton.setCurrentText(f'"{proton.replace(" run", "")}" run')
self.proton_prefix.setEnabled(True)
self.proton_wrapper.setCurrentText(f'"{proton.replace(" run", "")}" run')
proton_prefix = self.core.lgd.config.get(f"{app_name}.env", "STEAM_COMPAT_DATA_PATH",
fallback=self.tr(
"Please select path for proton prefix"))
self.proton_prefix.text_edit.setText(proton_prefix)
self.wrapper_widget.setVisible(False)
self.wrapper_widget.setEnabled(False)
else:
self.select_proton.setCurrentIndex(0)
self.proton_prefix_widget.setVisible(False)
self.wrapper_widget.setVisible(True)
self.proton_wrapper.setCurrentIndex(0)
self.proton_prefix.setEnabled(False)
self.wrapper_widget.setEnabled(True)
if not self.game.supports_cloud_saves:
self.cloud_sync_widget.setVisible(False)
self.cloud_sync.setEnabled(False)
else:
self.cloud_sync_widget.setVisible(True)
self.cloud_sync.setEnabled(True)
sync_cloud = self.settings.value(f"{self.game.app_name}/auto_sync_cloud", True, bool)
self.cloud_sync.setChecked(sync_cloud)

View file

@ -0,0 +1,157 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'resources/ui/components/tabs/games/game_info/game_settings.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_GameSettings(object):
def setupUi(self, GameSettings):
GameSettings.setObjectName("GameSettings")
GameSettings.resize(668, 433)
self.game_settings_layout = QtWidgets.QVBoxLayout(GameSettings)
self.game_settings_layout.setObjectName("game_settings_layout")
self.title = QtWidgets.QLabel(GameSettings)
self.title.setText("error")
self.title.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
self.title.setObjectName("title")
self.game_settings_layout.addWidget(self.title)
self.launch_settings_groupbox = QtWidgets.QGroupBox(GameSettings)
self.launch_settings_groupbox.setObjectName("launch_settings_groupbox")
self.launch_settings_layout = QtWidgets.QGridLayout(self.launch_settings_groupbox)
self.launch_settings_layout.setObjectName("launch_settings_layout")
self.launch_params_label = QtWidgets.QLabel(self.launch_settings_groupbox)
self.launch_params_label.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.launch_params_label.setObjectName("launch_params_label")
self.launch_settings_layout.addWidget(self.launch_params_label, 3, 0, 1, 1)
self.skip_update = QtWidgets.QComboBox(self.launch_settings_groupbox)
self.skip_update.setObjectName("skip_update")
self.skip_update.addItem("")
self.skip_update.addItem("")
self.skip_update.addItem("")
self.launch_settings_layout.addWidget(self.skip_update, 0, 1, 1, 1, QtCore.Qt.AlignLeft)
self.skip_update_label = QtWidgets.QLabel(self.launch_settings_groupbox)
self.skip_update_label.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.skip_update_label.setObjectName("skip_update_label")
self.launch_settings_layout.addWidget(self.skip_update_label, 0, 0, 1, 1)
self.offline_label = QtWidgets.QLabel(self.launch_settings_groupbox)
self.offline_label.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.offline_label.setObjectName("offline_label")
self.launch_settings_layout.addWidget(self.offline_label, 1, 0, 1, 1)
self.wrapper_label = QtWidgets.QLabel(self.launch_settings_groupbox)
self.wrapper_label.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.wrapper_label.setObjectName("wrapper_label")
self.launch_settings_layout.addWidget(self.wrapper_label, 4, 0, 1, 1)
self.offline = QtWidgets.QComboBox(self.launch_settings_groupbox)
self.offline.setObjectName("offline")
self.offline.addItem("")
self.offline.addItem("")
self.offline.addItem("")
self.launch_settings_layout.addWidget(self.offline, 1, 1, 1, 1, QtCore.Qt.AlignLeft)
self.cloud_sync = QtWidgets.QCheckBox(self.launch_settings_groupbox)
self.cloud_sync.setText("")
self.cloud_sync.setObjectName("cloud_sync")
self.launch_settings_layout.addWidget(self.cloud_sync, 2, 1, 1, 1, QtCore.Qt.AlignLeft)
self.cloud_sync_label = QtWidgets.QLabel(self.launch_settings_groupbox)
self.cloud_sync_label.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.cloud_sync_label.setObjectName("cloud_sync_label")
self.launch_settings_layout.addWidget(self.cloud_sync_label, 2, 0, 1, 1)
self.wrapper_widget = QtWidgets.QWidget(self.launch_settings_groupbox)
self.wrapper_widget.setObjectName("wrapper_widget")
self.wrapper_layout = QtWidgets.QHBoxLayout(self.wrapper_widget)
self.wrapper_layout.setContentsMargins(0, 0, 0, 0)
self.wrapper_layout.setObjectName("wrapper_layout")
self.wrapper = QtWidgets.QLineEdit(self.wrapper_widget)
self.wrapper.setObjectName("wrapper")
self.wrapper_layout.addWidget(self.wrapper)
self.wrapper_button = QtWidgets.QPushButton(self.wrapper_widget)
self.wrapper_button.setObjectName("wrapper_button")
self.wrapper_layout.addWidget(self.wrapper_button)
self.launch_settings_layout.addWidget(self.wrapper_widget, 4, 1, 1, 1)
self.launch_params_widget = QtWidgets.QWidget(self.launch_settings_groupbox)
self.launch_params_widget.setObjectName("launch_params_widget")
self.launch_params_layout = QtWidgets.QHBoxLayout(self.launch_params_widget)
self.launch_params_layout.setContentsMargins(0, 0, 0, 0)
self.launch_params_layout.setObjectName("launch_params_layout")
self.launch_params = QtWidgets.QLineEdit(self.launch_params_widget)
self.launch_params.setObjectName("launch_params")
self.launch_params_layout.addWidget(self.launch_params)
self.launch_params_button = QtWidgets.QPushButton(self.launch_params_widget)
self.launch_params_button.setObjectName("launch_params_button")
self.launch_params_layout.addWidget(self.launch_params_button)
self.launch_settings_layout.addWidget(self.launch_params_widget, 3, 1, 1, 1)
self.game_settings_layout.addWidget(self.launch_settings_groupbox)
self.proton_groupbox = QtWidgets.QGroupBox(GameSettings)
self.proton_groupbox.setObjectName("proton_groupbox")
self.proton_layout = QtWidgets.QGridLayout(self.proton_groupbox)
self.proton_layout.setObjectName("proton_layout")
self.proton_prefix_label = QtWidgets.QLabel(self.proton_groupbox)
self.proton_prefix_label.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.proton_prefix_label.setObjectName("proton_prefix_label")
self.proton_layout.addWidget(self.proton_prefix_label, 1, 0, 1, 1)
self.proton_wrapper_label = QtWidgets.QLabel(self.proton_groupbox)
self.proton_wrapper_label.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.proton_wrapper_label.setObjectName("proton_wrapper_label")
self.proton_layout.addWidget(self.proton_wrapper_label, 0, 0, 1, 1)
self.proton_wrapper = QtWidgets.QComboBox(self.proton_groupbox)
self.proton_wrapper.setObjectName("proton_wrapper")
self.proton_wrapper.addItem("")
self.proton_layout.addWidget(self.proton_wrapper, 0, 1, 1, 1, QtCore.Qt.AlignLeft)
self.proton_prefix_layout = QtWidgets.QVBoxLayout()
self.proton_prefix_layout.setObjectName("proton_prefix_layout")
self.proton_layout.addLayout(self.proton_prefix_layout, 1, 1, 2, 1)
self.proton_prefix_alignment_label = QtWidgets.QLabel(self.proton_groupbox)
self.proton_prefix_alignment_label.setEnabled(False)
self.proton_prefix_alignment_label.setText("")
self.proton_prefix_alignment_label.setObjectName("proton_prefix_alignment_label")
self.proton_layout.addWidget(self.proton_prefix_alignment_label, 2, 0, 1, 1)
self.game_settings_layout.addWidget(self.proton_groupbox)
self.linux_layout = QtWidgets.QVBoxLayout()
self.linux_layout.setSpacing(0)
self.linux_layout.setObjectName("linux_layout")
self.game_settings_layout.addLayout(self.linux_layout)
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.game_settings_layout.addItem(spacerItem)
self.retranslateUi(GameSettings)
QtCore.QMetaObject.connectSlotsByName(GameSettings)
def retranslateUi(self, GameSettings):
_translate = QtCore.QCoreApplication.translate
GameSettings.setWindowTitle(_translate("GameSettings", "Game Settings"))
self.launch_settings_groupbox.setTitle(_translate("GameSettings", "Launch Settings"))
self.launch_params_label.setText(_translate("GameSettings", "Launch parameters:"))
self.skip_update.setItemText(0, _translate("GameSettings", "Default"))
self.skip_update.setItemText(1, _translate("GameSettings", "Yes"))
self.skip_update.setItemText(2, _translate("GameSettings", "No"))
self.skip_update_label.setText(_translate("GameSettings", "Skip update check:"))
self.offline_label.setText(_translate("GameSettings", "Offline mode:"))
self.wrapper_label.setText(_translate("GameSettings", "Wrapper:"))
self.offline.setItemText(0, _translate("GameSettings", "Default"))
self.offline.setItemText(1, _translate("GameSettings", "Yes"))
self.offline.setItemText(2, _translate("GameSettings", "No"))
self.cloud_sync_label.setText(_translate("GameSettings", "Sync with cloud:"))
self.wrapper.setPlaceholderText(_translate("GameSettings", "e.g. optirun"))
self.wrapper_button.setText(_translate("GameSettings", "Save"))
self.launch_params.setPlaceholderText(_translate("GameSettings", "parameters"))
self.launch_params_button.setText(_translate("GameSettings", "Save"))
self.proton_groupbox.setTitle(_translate("GameSettings", "Proton"))
self.proton_prefix_label.setText(_translate("GameSettings", "Prefix:"))
self.proton_wrapper_label.setText(_translate("GameSettings", "Wrapper:"))
self.proton_wrapper.setItemText(0, _translate("GameSettings", "Don\'t use Proton"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
GameSettings = QtWidgets.QWidget()
ui = Ui_GameSettings()
ui.setupUi(GameSettings)
GameSettings.show()
sys.exit(app.exec_())

View file

@ -0,0 +1,363 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<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_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="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="3" 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">
<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>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</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="2" column="0">
<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>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="4" column="0">
<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>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="6" 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="5" column="0">
<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>Game Actions:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="1" column="0">
<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>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="3" column="0">
<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>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="6" 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="5" 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>
</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>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View file

@ -0,0 +1,270 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>GameSettings</class>
<widget class="QWidget" name="GameSettings">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>668</width>
<height>433</height>
</rect>
</property>
<property name="windowTitle">
<string>Game Settings</string>
</property>
<layout class="QVBoxLayout" name="game_settings_layout">
<item>
<widget class="QLabel" name="title">
<property name="text">
<string notr="true">error</string>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
<item>
<widget class="QGroupBox" name="launch_settings_groupbox">
<property name="title">
<string>Launch Settings</string>
</property>
<layout class="QGridLayout" name="launch_settings_layout">
<item row="3" column="0">
<widget class="QLabel" name="launch_params_label">
<property name="text">
<string>Launch parameters:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="1" alignment="Qt::AlignLeft">
<widget class="QComboBox" name="skip_update">
<item>
<property name="text">
<string>Default</string>
</property>
</item>
<item>
<property name="text">
<string>Yes</string>
</property>
</item>
<item>
<property name="text">
<string>No</string>
</property>
</item>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="skip_update_label">
<property name="text">
<string>Skip update check:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="offline_label">
<property name="text">
<string>Offline mode:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="wrapper_label">
<property name="text">
<string>Wrapper:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="1" column="1" alignment="Qt::AlignLeft">
<widget class="QComboBox" name="offline">
<item>
<property name="text">
<string>Default</string>
</property>
</item>
<item>
<property name="text">
<string>Yes</string>
</property>
</item>
<item>
<property name="text">
<string>No</string>
</property>
</item>
</widget>
</item>
<item row="2" column="1" alignment="Qt::AlignLeft">
<widget class="QCheckBox" name="cloud_sync">
<property name="text">
<string notr="true"/>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="cloud_sync_label">
<property name="text">
<string>Sync with cloud:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QWidget" name="wrapper_widget" native="true">
<layout class="QHBoxLayout" name="wrapper_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="QLineEdit" name="wrapper">
<property name="placeholderText">
<string>e.g. optirun</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="wrapper_button">
<property name="text">
<string>Save</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="3" column="1">
<widget class="QWidget" name="launch_params_widget" native="true">
<layout class="QHBoxLayout" name="launch_params_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="QLineEdit" name="launch_params">
<property name="placeholderText">
<string>parameters</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="launch_params_button">
<property name="text">
<string>Save</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="proton_groupbox">
<property name="title">
<string>Proton</string>
</property>
<layout class="QGridLayout" name="proton_layout">
<item row="1" column="0">
<widget class="QLabel" name="proton_prefix_label">
<property name="text">
<string>Prefix:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="proton_wrapper_label">
<property name="text">
<string>Wrapper:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="1" alignment="Qt::AlignLeft">
<widget class="QComboBox" name="proton_wrapper">
<item>
<property name="text">
<string>Don't use Proton</string>
</property>
</item>
</widget>
</item>
<item row="1" column="1" rowspan="2">
<layout class="QVBoxLayout" name="proton_prefix_layout"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="proton_prefix_alignment_label">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string notr="true"/>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="linux_layout">
<property name="spacing">
<number>0</number>
</property>
</layout>
</item>
<item>
<spacer name="game_settings_vspacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>