1
0
Fork 0
mirror of synced 2024-07-03 05:31:23 +12:00
Rare/rare/components/tabs/settings/dxvk.py

145 lines
5.3 KiB
Python
Raw Normal View History

2021-02-28 03:54:26 +13:00
from logging import getLogger
2021-02-27 07:28:54 +13:00
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QWidget, QCheckBox, QVBoxLayout, QWidgetAction, QMenu, QToolButton, QHBoxLayout, QGroupBox
2021-03-19 00:45:59 +13:00
from custom_legendary.core import LegendaryCore
2021-02-27 07:28:54 +13:00
2021-02-28 03:54:26 +13:00
logger = getLogger("DXVK Settings")
2021-02-27 07:28:54 +13:00
class DxvkWidget(QGroupBox):
2021-02-27 07:28:54 +13:00
def __init__(self, core: LegendaryCore):
super(DxvkWidget, self).__init__()
self.core = core
2021-04-09 23:30:59 +12:00
self.setObjectName("settings_widget")
self.dxvk_settings = {
2021-04-08 21:09:17 +12:00
"fps": [False, "Fps"],
"gpuload": [False, self.tr("GPU usage")],
"memory": [False, self.tr("Used Memory")],
"devinfo": [False, self.tr("Device info")],
"version": [False, self.tr("DXVK version")],
"api": [False, self.tr("D3D Level of application")],
"frametime": [False, self.tr("Frame time graph")]
}
2021-03-10 09:57:54 +13:00
self.name = "default"
2021-02-27 07:28:54 +13:00
self.layout = QVBoxLayout()
self.child_layout = QHBoxLayout()
self.setTitle(self.tr("dxvk settings"))
2021-02-27 07:28:54 +13:00
self.show_dxvk = QCheckBox("Show Dxvk HUD")
self.more_settings = QToolButton()
2021-03-10 09:57:54 +13:00
dxvk_hud = self.core.lgd.config.get(f"{self.name}.env", "DXVK_HUD", fallback="")
2021-02-27 07:28:54 +13:00
self.more_settings.setDisabled(not dxvk_hud == "")
if dxvk_hud:
for s in dxvk_hud.split(","):
2021-04-08 21:09:17 +12:00
self.dxvk_settings[s][0] = True
2021-02-27 07:28:54 +13:00
self.more_settings.setPopupMode(QToolButton.InstantPopup)
self.more_settings.setMenu(QMenu())
self.more_settings.setText("More DXVK settings")
2021-02-27 07:28:54 +13:00
action = QWidgetAction(self)
self.more_settings_widget = DxvkMoreSettingsWidget(self.dxvk_settings, self.core)
self.more_settings_widget.show_dxvk.connect(lambda x: self.show_dxvk.setChecked(x))
2021-02-27 07:28:54 +13:00
action.setDefaultWidget(self.more_settings_widget)
self.more_settings.menu().addAction(action)
2021-02-27 07:39:02 +13:00
self.show_dxvk.stateChanged.connect(self.update_dxvk_active)
2021-02-27 07:28:54 +13:00
self.show_dxvk.setChecked(not dxvk_hud == "")
self.child_layout.addWidget(self.show_dxvk)
self.child_layout.addWidget(self.more_settings)
self.layout.addLayout(self.child_layout)
self.setLayout(self.layout)
2021-03-10 09:57:54 +13:00
def update_settings(self, app_name):
self.name = app_name
dxvk_hud = self.core.lgd.config.get(f"{self.name}.env", "DXVK_HUD", fallback="")
if dxvk_hud:
self.more_settings.setDisabled(False)
2021-03-10 09:57:54 +13:00
for s in dxvk_hud.split(","):
2021-04-08 21:09:17 +12:00
self.dxvk_settings[s][0] = True
2021-03-10 09:57:54 +13:00
else:
self.show_dxvk.setChecked(False)
self.more_settings.setDisabled(True)
2021-03-10 09:57:54 +13:00
2021-02-27 07:39:02 +13:00
def update_dxvk_active(self):
if self.show_dxvk.isChecked():
2021-03-10 09:57:54 +13:00
if not f"{self.name}.env" in self.core.lgd.config.sections():
print("add section dxvk")
self.core.lgd.config.add_section(f"{self.name}.env")
2021-02-27 07:39:02 +13:00
self.more_settings.setDisabled(False)
for i in self.more_settings_widget.settings:
if i in ["fps", "gpuload"]:
2021-04-08 21:09:17 +12:00
self.more_settings_widget.settings[i][0] = True
2021-03-10 09:57:54 +13:00
self.core.lgd.config[f"{self.name}.env"]["DXVK_HUD"] = "fps,gpuload"
2021-02-27 07:39:02 +13:00
for w in self.more_settings_widget.widgets:
2021-02-27 11:43:34 +13:00
if w.tag == "fps" or w.tag == "gpuload":
2021-02-27 07:39:02 +13:00
w.setChecked(True)
2021-02-27 11:43:34 +13:00
2021-02-27 07:39:02 +13:00
else:
w.setChecked(False)
else:
self.more_settings.setDisabled(True)
2021-03-10 09:57:54 +13:00
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")
2021-02-27 07:39:02 +13:00
self.core.lgd.save_config()
2021-02-27 07:28:54 +13:00
2021-02-27 11:43:34 +13:00
2021-02-27 07:28:54 +13:00
class DxvkMoreSettingsWidget(QWidget):
show_dxvk = pyqtSignal(bool)
2021-04-08 21:09:17 +12:00
2021-02-27 07:28:54 +13:00
def __init__(self, settings: dict, core: LegendaryCore):
super(DxvkMoreSettingsWidget, self).__init__()
self.layout = QVBoxLayout()
2021-03-10 09:57:54 +13:00
self.name = "default"
2021-02-27 07:28:54 +13:00
self.widgets = []
self.core = core
self.settings = settings
for i in settings:
widget = CheckBox(i, settings[i])
widget.signal.connect(self.change)
self.layout.addWidget(widget)
self.widgets.append(widget)
self.setLayout(self.layout)
2021-04-08 21:09:17 +12:00
def change(self, signal: list):
2021-02-27 07:28:54 +13:00
tag, checked = signal
2021-04-08 21:09:17 +12:00
self.settings[tag][0] = checked
2021-02-27 07:28:54 +13:00
sett = []
2021-02-28 03:54:26 +13:00
logger.debug(self.settings)
2021-02-27 07:28:54 +13:00
for i in self.settings:
check, _ = self.settings[i]
if check:
sett.append(i)
2021-04-08 21:09:17 +12:00
if len(sett) > 0:
2021-04-06 21:25:36 +12:00
self.core.lgd.config.set(f"{self.name}.env", "DXVK_HUD", ",".join(sett))
else:
self.core.lgd.config.remove_option(f"{self.name}.env", "DXVK_HUD")
self.show_dxvk.emit(False)
if not self.core.lgd.config.options(f"{self.name}.env"):
self.core.lgd.config.remove_section(f"{self.name}.env")
self.core.lgd.save_config()
2021-02-27 07:28:54 +13:00
class CheckBox(QCheckBox):
signal = pyqtSignal(tuple)
def __init__(self, tag, settings):
checked, text = settings
super(CheckBox, self).__init__(text)
self.setChecked(checked)
self.tag = tag
self.clicked.connect(lambda: self.signal.emit((self.tag, self.isChecked())))