Settings added (but with small bug)
This commit is contained in:
parent
f33153af3a
commit
c3515feaec
|
@ -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):
|
||||
|
|
128
Rare/Components/Tabs/Games/GameInfo/GameSettings.py
Normal file
128
Rare/Components/Tabs/Games/GameInfo/GameSettings.py
Normal 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
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in a new issue