1
0
Fork 0
mirror of synced 2024-06-23 08:40:45 +12:00

Settings added (but with small bug)

This commit is contained in:
Dummerle 2021-03-09 21:57:54 +01:00
parent f33153af3a
commit c3515feaec
5 changed files with 186 additions and 36 deletions

View file

@ -7,6 +7,7 @@ from PyQt5.QtWidgets import QWidget, QPushButton, QVBoxLayout, QLabel, QHBoxLayo
from legendary.core import LegendaryCore
from legendary.models.game import InstalledGame, Game
from Rare.Components.Tabs.Games.GameInfo.GameSettings import GameSettings
from Rare.utils import LegendaryApi
from Rare.utils.LegendaryApi import VerifyThread
from Rare.utils.QtExtensions import SideTabBar
@ -16,13 +17,19 @@ from Rare.utils.utils import IMAGE_DIR
class InfoTabs(QTabWidget):
def __init__(self, core):
super(InfoTabs, self).__init__()
self.app_name = ""
self.core = core
self.setTabBar(SideTabBar())
self.setTabPosition(QTabWidget.West)
self.info = GameInfo(core)
self.addTab(self.info, "Game Info")
self.addTab(QLabel("Coming soon"), "Settings")
self.addTab(self.info, self.tr("Game Info"))
self.settings = GameSettings(core)
self.addTab(self.settings, self.tr("Settings"))
def update_game(self, app_name):
self.info.update_game(app_name)
self.settings.update_game(app_name)
class GameInfo(QWidget):

View file

@ -0,0 +1,128 @@
import os
from PyQt5.QtWidgets import QWidget, QLabel, QVBoxLayout, QComboBox, QFileDialog, QPushButton, QMessageBox
from legendary.core import LegendaryCore
from legendary.models.game import InstalledGame, Game
from Rare.Components.Tabs.Settings.Linux import LinuxSettings
from Rare.Components.Tabs.Settings.SettingsWidget import SettingsWidget
from Rare.utils.QtExtensions import PathEdit
class GameSettings(QWidget):
game: Game
igame: InstalledGame
x = True
def __init__(self, core: LegendaryCore):
super(GameSettings, self).__init__()
self.core = core
self.layout = QVBoxLayout()
self.title = QLabel("Error")
self.layout.addWidget(self.title)
if os.name != "nt":
self.linux_settings = LinuxAppSettings(core)
self.layout.addWidget(self.linux_settings)
self.possible_proton_wrappers = []
for i in os.listdir(os.path.expanduser("~/.steam/steam/steamapps/common")):
if i.startswith("Proton"):
wrapper = os.path.join(os.path.expanduser("~/.steam/steam/steamapps/common"), i, "proton") + " run"
self.possible_proton_wrappers.append(wrapper)
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_prefix = PathEdit("x", QFileDialog.DirectoryOnly)
self.proton_prefix_accept_button = QPushButton(self.tr("Save"))
self.proton_prefix_accept_button.clicked.connect(self.update_prefix)
self.proton_prefix_widget = SettingsWidget(self.tr("Proton prefix"), self.proton_prefix, self.proton_prefix_accept_button)
self.layout.addWidget(self.proton_prefix_widget)
# Offline, startparams, skip_update_check
self.layout.addStretch(1)
self.setLayout(self.layout)
def change_proton(self, i):
# Dont use Proton
if self.x:
if i == 0:
self.proton_prefix_widget.setVisible(False)
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")
if self.core.lgd.config.get(f"{self.game.app_name}", "no_wine", fallback="") != "":
self.core.lgd.config.remove_option(self.game.app_name, "no_wine")
if self.core.lgd.config[self.game.app_name] == {}:
self.core.lgd.config.remove_section(self.game.app_name)
if f"{self.game.app_name}.env" in self.core.lgd.config.sections():
if self.core.lgd.config.get(f"{self.game.app_name}.env", "STEAM_COMPAT_DATA_PATH", fallback="") != "":
self.core.lgd.config.remove_option(f"{self.game.app_name}.env", "STEAM_COMPAT_DATA_PATH")
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)
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] = {}
if not self.game.app_name + ".env" in self.core.lgd.config.sections():
self.core.lgd.config[self.game.app_name + ".env"] = {}
self.core.lgd.config.set(self.game.app_name, "wrapper", wrapper)
self.core.lgd.config.set(self.game.app_name, "no_wine", "true")
self.core.lgd.config.set(self.game.app_name+".env", "STEAM_COMPAT_DATA_PATH", os.path.expanduser("~/.proton"))
self.proton_prefix.text_edit.setText(os.path.expanduser("~/.proton"))
self.core.lgd.save_config()
def update_prefix(self):
text = self.proton_prefix.text()
if text == "":
text = os.path.expanduser("~/.proton")
self.proton_prefix.text_edit.setText(text)
if not os.path.exists(text):
try:
os.makedirs(text)
except PermissionError:
QMessageBox.warning(self, "Warning", self.tr("No permission to create folder"))
text = os.path.expanduser("~/.proton")
self.proton_prefix.text_edit.setText(text)
self.core.lgd.config.set(self.game.app_name+".env", "STEAM_COMPAT_DATA_PATH", text)
self.core.lgd.save_config()
def update_game(self, app_name):
# print(self.core.lgd.config.get(f"{app_name}.env", "STEAM_COMPAT_DATA_PATH", fallback=self.tr("hefjoa")))
self.x = False
self.game = self.core.get_game(app_name)
self.igame = self.core.get_installed_game(app_name)
self.title.setText(f"<h2>{self.game.app_title}</h2>")
if os.name != "nt":
self.linux_settings.update_game(app_name)
self.linux_settings.dxvk_widget.update_settings(app_name)
proton = self.core.lgd.config.get(f"{app_name}", "wrapper", fallback="").replace('"', "")
print(proton)
if proton != "":
self.select_proton.setCurrentText(proton)
self.select_proton_widget.setVisible(True)
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)
else:
self.select_proton.setCurrentIndex(0)
self.proton_prefix_widget.setVisible(False)
self.x = True
class LinuxAppSettings(LinuxSettings):
def __init__(self, core):
super(LinuxAppSettings, self).__init__(core, "app")
def update_game(self, app_name):
self.name = app_name
self.select_path.text_edit.setText(self.core.lgd.config.get(self.name, "wine_prefix", fallback=""))
self.select_wine_exec.setText(self.core.lgd.config.get(self.name, "wine_executable", fallback=""))
self.dxvk_widget.name = app_name
self.dxvk_widget.more_settings_widget.name = app_name

View file

@ -32,7 +32,7 @@ class GameTab(QWidget):
self.layout.setCurrentIndex(0)
def show_info(self, app_name):
self.game_info.info.update_game(app_name)
self.game_info.update_game(app_name)
self.layout.setCurrentIndex(1)

View file

@ -19,13 +19,15 @@ class DxvkWidget(QWidget):
def __init__(self, core: LegendaryCore):
super(DxvkWidget, self).__init__()
self.core = core
self.name = "default"
self.layout = QVBoxLayout()
self.child_layout = QHBoxLayout()
self.title = QLabel("dxvk settings")
self.show_dxvk = QCheckBox("Show Dxvk HUD")
self.more_settings = QToolButton()
dxvk_hud = self.core.lgd.config.get("default.env", "DXVK_HUD", fallback="")
dxvk_hud = self.core.lgd.config.get(f"{self.name}.env", "DXVK_HUD", fallback="")
self.more_settings.setDisabled(not dxvk_hud == "")
if dxvk_hud:
for s in dxvk_hud.split(","):
@ -51,10 +53,22 @@ class DxvkWidget(QWidget):
self.setLayout(self.layout)
def update_settings(self, app_name):
self.name = app_name
dxvk_hud = self.core.lgd.config.get(f"{self.name}.env", "DXVK_HUD", fallback="")
self.more_settings.setDisabled(not dxvk_hud == "")
if dxvk_hud:
for s in dxvk_hud.split(","):
y = list(self.dxvk_settings[s])
y[0] = True
self.dxvk_settings[s] = tuple(y)
else:
self.show_dxvk.setChecked(False)
def update_dxvk_active(self):
if self.show_dxvk.isChecked():
if not "default.env" in self.core.lgd.config.sections():
self.core.lgd.config["default.env"] = ""
if not f"{self.name}.env" in self.core.lgd.config.sections():
self.core.lgd.config[f"{self.name}.env"] = {}
self.more_settings.setDisabled(False)
self.more_settings_widget.settings = {"fps": (True, "Fps"),
"gpuload": (True, "GPU usage"),
@ -63,7 +77,7 @@ class DxvkWidget(QWidget):
"version": (False, "DXVK version"),
"api": (False, "D3D Level of application")
}
self.core.lgd.config["default.env"]["DXVK_HUD"] = "fps,gpuload"
self.core.lgd.config[f"{self.name}.env"]["DXVK_HUD"] = "fps,gpuload"
for w in self.more_settings_widget.widgets:
if w.tag == "fps" or w.tag == "gpuload":
w.setChecked(True)
@ -72,7 +86,10 @@ class DxvkWidget(QWidget):
w.setChecked(False)
else:
self.more_settings.setDisabled(True)
self.core.lgd.config.remove_option("default.env", "DXVK_HUD")
if not self.core.lgd.config.get(f"{self.name}.env", "DXVK_HUD", fallback="") == "":
self.core.lgd.config.remove_option(f"{self.name}.env", "DXVK_HUD")
if not self.core.lgd.config[f"{self.name}.env"]:
self.core.lgd.config.remove_section(f"{self.name}.env")
print("Remove Section DXVK_HUD")
self.core.lgd.save_config()
@ -81,6 +98,7 @@ class DxvkMoreSettingsWidget(QWidget):
def __init__(self, settings: dict, core: LegendaryCore):
super(DxvkMoreSettingsWidget, self).__init__()
self.layout = QVBoxLayout()
self.name = "default"
self.widgets = []
self.core = core
self.settings = settings
@ -105,7 +123,7 @@ class DxvkMoreSettingsWidget(QWidget):
if check:
sett.append(i)
if sett:
self.core.lgd.config["default.env"]["DXVK_HUD"] = ",".join(sett)
self.core.lgd.config[f"{self.name}.env"]["DXVK_HUD"] = ",".join(sett)
self.core.lgd.save_config()
@ -118,6 +136,3 @@ class CheckBox(QCheckBox):
self.setChecked(checked)
self.tag = tag
self.clicked.connect(lambda: self.signal.emit((self.tag, self.isChecked())))
def update_settings(self):
pass

View file

@ -1,6 +1,6 @@
from logging import getLogger
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QPushButton, QFileDialog
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QPushButton, QFileDialog, QLineEdit
from legendary.core import LegendaryCore
from Rare.Components.Tabs.Settings.DXVK.Dxvk import DxvkWidget
@ -11,62 +11,62 @@ logger = getLogger("LinuxSettings")
class LinuxSettings(QWidget):
def __init__(self, core: LegendaryCore):
def __init__(self, core: LegendaryCore, name="default"):
super(LinuxSettings, self).__init__()
self.layout = QVBoxLayout()
self.name = name
self.core = core
self.title = QLabel("<h2>Linux settings</h2>")
self.layout.addWidget(self.title)
# Wineprefix
self.select_path = PathEdit(self.core.lgd.config.get("default", "wine_prefix", fallback=""),
self.select_path = PathEdit(self.core.lgd.config.get(self.name, "wine_prefix", fallback=""),
type_of_file=QFileDialog.DirectoryOnly,
infotext="Default")
self.select_path.text_edit.textChanged.connect(lambda t: self.save_path_button.setDisabled(False))
self.save_path_button = QPushButton("Save")
self.save_path_button.clicked.connect(self.save_wineprefix)
self.install_dir_widget = SettingsWidget(self.tr("Default Wine Prefix"), self.select_path, self.save_path_button)
self.install_dir_widget = SettingsWidget(self.tr("Default Wine Prefix"), self.select_path,
self.save_path_button)
self.layout.addWidget(self.install_dir_widget)
# Wine executable
self.select_wine_exec = PathEdit(self.core.lgd.config.get("default", "wine_executable", fallback=""),
type_of_file=QFileDialog.DirectoryOnly,
infotext="Default")
self.select_wine_exec.text_edit.textChanged.connect(lambda t: self.save_path_button.setDisabled(False))
self.select_wine_exec = QLineEdit(self.core.lgd.config.get(self.name, "wine_executable", fallback=""))
self.save_wine_exec = QPushButton("Save")
self.save_wine_exec.clicked.connect(self.save_wineexec)
self.install_dir_widget = SettingsWidget(self.tr("Default Wine executable"), self.select_wine_exec, self.save_wine_exec)
self.install_dir_widget = SettingsWidget(self.tr("Default Wine executable"), self.select_wine_exec,
self.save_wine_exec)
self.layout.addWidget(self.install_dir_widget)
# dxvk
self.dxvk_widget = DxvkWidget(core)
self.layout.addWidget(self.dxvk_widget)
self.layout.addStretch(1)
if name == "default":
self.layout.addStretch(1)
self.setLayout(self.layout)
def save_wineprefix(self):
if not "default" in self.core.lgd.config.sections():
self.core.lgd.config["default"] = dict()
self.core.lgd.config["default"]["wine_prefix"] = self.select_path.text()
if not self.name in self.core.lgd.config.sections():
self.core.lgd.config[self.name] = dict()
self.core.lgd.config[self.name]["wine_prefix"] = self.select_path.text()
if self.select_path.text() == "":
self.core.lgd.config["default"].pop("wine_prefix")
self.core.lgd.config[self.name].pop("wine_prefix")
logger.info("Remove wine_prefix section")
else:
logger.info("Set config of wine_prefix to " + self.select_path.text())
if self.core.lgd.config["default"] == {}:
self.core.lgd.config.remove_section("default")
if self.core.lgd.config[self.name] == {}:
self.core.lgd.config.remove_section(self.name)
self.core.lgd.save_config()
def save_wineexec(self):
if not "default" in self.core.lgd.config.sections():
self.core.lgd.config["default"] = dict()
self.core.lgd.config["default"]["wine_executable"] = self.select_wine_exec.text()
if not self.name in self.core.lgd.config.sections():
self.core.lgd.config[self.name] = dict()
self.core.lgd.config[self.name]["wine_executable"] = self.select_wine_exec.text()
if self.select_wine_exec.text() == "":
self.core.lgd.config["default"].pop("wine_executable")
self.core.lgd.config[self.name].pop("wine_executable")
logger.info("Remove wine executable section")
else:
logger.info("Set config of wine executable to " + self.select_wine_exec.text())
if self.core.lgd.config["default"] == {}:
self.core.lgd.config.remove_section("default")
if self.core.lgd.config[self.name] == {}:
self.core.lgd.config.remove_section(self.name)
self.core.lgd.save_config()