Add UI for DXVK
It is used only in global settings for now. The old `DxvkWidget` was left in the code intact for use in the per game settings. Due to how interconnected the code is, it will require a more in-depth redesign and it is outside the scope of the current PR.
This commit is contained in:
parent
4c0cc0caf9
commit
d05f02d5f4
|
@ -3,11 +3,91 @@ from logging import getLogger
|
||||||
from PyQt5.QtCore import pyqtSignal
|
from PyQt5.QtCore import pyqtSignal
|
||||||
from PyQt5.QtWidgets import QWidget, QCheckBox, QVBoxLayout, QWidgetAction, QMenu, QToolButton, QHBoxLayout, QGroupBox
|
from PyQt5.QtWidgets import QWidget, QCheckBox, QVBoxLayout, QWidgetAction, QMenu, QToolButton, QHBoxLayout, QGroupBox
|
||||||
|
|
||||||
|
from PyQt5.QtWidgets import QGroupBox
|
||||||
|
|
||||||
from custom_legendary.core import LegendaryCore
|
from custom_legendary.core import LegendaryCore
|
||||||
|
from rare.components.tabs.settings.dxvk_ui import Ui_DxvkSettings
|
||||||
|
|
||||||
logger = getLogger("DXVK Settings")
|
logger = getLogger("DXVK Settings")
|
||||||
|
|
||||||
|
|
||||||
|
class DxvkSettings(QGroupBox, Ui_DxvkSettings):
|
||||||
|
|
||||||
|
def __init__(self, core: LegendaryCore, name=None):
|
||||||
|
super(DxvkSettings, self).__init__()
|
||||||
|
self.setupUi(self)
|
||||||
|
|
||||||
|
self.name = name if name is not None else "default"
|
||||||
|
self.core = core
|
||||||
|
|
||||||
|
self.dxvk_options_map = {
|
||||||
|
"devinfo": self.devinfo,
|
||||||
|
"fps": self.fps,
|
||||||
|
"frametime": self.frametime,
|
||||||
|
"memory": self.memory,
|
||||||
|
"gpuload": self.gpuload,
|
||||||
|
"version": self.version,
|
||||||
|
"api": self.api,
|
||||||
|
}
|
||||||
|
|
||||||
|
self.load_settings()
|
||||||
|
self.show_dxvk.currentIndexChanged.connect(self.store_settings)
|
||||||
|
for opt in self.dxvk_options_map:
|
||||||
|
self.dxvk_options_map[opt].stateChanged.connect(self.store_settings)
|
||||||
|
|
||||||
|
# Show HUD ComboBox
|
||||||
|
# System Default, index 0, removes DXVK_HUD to use setting from env
|
||||||
|
# Hidden , index 1, adds DXVK_HUD=0 to override system configuration
|
||||||
|
# Visible , index 2, adds DXVK_HUD=1 to override system configuration
|
||||||
|
# Custom Options, index 3, adds DXVK_HUD=devinfo,fps and enables the customization panel
|
||||||
|
|
||||||
|
def load_settings(self):
|
||||||
|
dxvk_options = self.core.lgd.config.get(f"{self.name}.env", "DXVK_HUD", fallback=None)
|
||||||
|
self.gb_dxvk_options.setDisabled(True)
|
||||||
|
if dxvk_options is not None:
|
||||||
|
if dxvk_options == "0":
|
||||||
|
self.show_dxvk.setCurrentIndex(1)
|
||||||
|
elif dxvk_options == "1":
|
||||||
|
self.show_dxvk.setCurrentIndex(2)
|
||||||
|
else:
|
||||||
|
self.show_dxvk.setCurrentIndex(3)
|
||||||
|
self.gb_dxvk_options.setDisabled(False)
|
||||||
|
for opt in dxvk_options.split(","):
|
||||||
|
try:
|
||||||
|
self.dxvk_options_map[opt].setChecked(True)
|
||||||
|
except KeyError:
|
||||||
|
print("Malformed DXVK Option: " + opt)
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
self.show_dxvk.setCurrentIndex(0)
|
||||||
|
|
||||||
|
def store_settings(self):
|
||||||
|
show_dxvk_index = self.show_dxvk.currentIndex()
|
||||||
|
if show_dxvk_index:
|
||||||
|
if f"{self.name}.env" not in self.core.lgd.config.sections():
|
||||||
|
print("add section dxvk")
|
||||||
|
self.core.lgd.config.add_section(f"{self.name}.env")
|
||||||
|
if show_dxvk_index == 1:
|
||||||
|
self.core.lgd.config[f"{self.name}.env"]["DXVK_HUD"] = "0"
|
||||||
|
if show_dxvk_index == 2:
|
||||||
|
self.core.lgd.config[f"{self.name}.env"]["DXVK_HUD"] = "1"
|
||||||
|
if show_dxvk_index == 3:
|
||||||
|
dxvk_options = []
|
||||||
|
for o in self.dxvk_options_map:
|
||||||
|
if self.dxvk_options_map[o].isChecked():
|
||||||
|
dxvk_options.append(o)
|
||||||
|
if not dxvk_options:
|
||||||
|
dxvk_options = ["devinfo", "fps"]
|
||||||
|
self.core.lgd.config[f"{self.name}.env"]["DXVK_HUD"] = ",".join(dxvk_options)
|
||||||
|
else:
|
||||||
|
if self.core.lgd.config.get(f"{self.name}.env", "DXVK_HUD", fallback=None) is not None:
|
||||||
|
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")
|
||||||
|
self.core.lgd.save_config()
|
||||||
|
self.load_settings()
|
||||||
|
|
||||||
|
|
||||||
class DxvkWidget(QGroupBox):
|
class DxvkWidget(QGroupBox):
|
||||||
|
|
||||||
def __init__(self, core: LegendaryCore):
|
def __init__(self, core: LegendaryCore):
|
||||||
|
|
98
rare/components/tabs/settings/dxvk_ui.py
Normal file
98
rare/components/tabs/settings/dxvk_ui.py
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# Form implementation generated from reading ui file 'resources/ui/components/tabs/settings/dxvk.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_DxvkSettings(object):
|
||||||
|
def setupUi(self, DxvkSettings):
|
||||||
|
DxvkSettings.setObjectName("DxvkSettings")
|
||||||
|
DxvkSettings.resize(598, 182)
|
||||||
|
self.gridLayout = QtWidgets.QGridLayout(DxvkSettings)
|
||||||
|
self.gridLayout.setObjectName("gridLayout")
|
||||||
|
self.gb_dxvk_options = QtWidgets.QGroupBox(DxvkSettings)
|
||||||
|
self.gb_dxvk_options.setObjectName("gb_dxvk_options")
|
||||||
|
self.layout_dxvk_options = QtWidgets.QGridLayout(self.gb_dxvk_options)
|
||||||
|
self.layout_dxvk_options.setObjectName("layout_dxvk_options")
|
||||||
|
self.api = QtWidgets.QCheckBox(self.gb_dxvk_options)
|
||||||
|
self.api.setObjectName("api")
|
||||||
|
self.layout_dxvk_options.addWidget(self.api, 2, 2, 1, 1)
|
||||||
|
self.version = QtWidgets.QCheckBox(self.gb_dxvk_options)
|
||||||
|
self.version.setObjectName("version")
|
||||||
|
self.layout_dxvk_options.addWidget(self.version, 0, 2, 1, 1)
|
||||||
|
self.memory = QtWidgets.QCheckBox(self.gb_dxvk_options)
|
||||||
|
self.memory.setObjectName("memory")
|
||||||
|
self.layout_dxvk_options.addWidget(self.memory, 0, 1, 1, 1)
|
||||||
|
self.devinfo = QtWidgets.QCheckBox(self.gb_dxvk_options)
|
||||||
|
self.devinfo.setObjectName("devinfo")
|
||||||
|
self.layout_dxvk_options.addWidget(self.devinfo, 0, 0, 1, 1)
|
||||||
|
self.frametime = QtWidgets.QCheckBox(self.gb_dxvk_options)
|
||||||
|
self.frametime.setObjectName("frametime")
|
||||||
|
self.layout_dxvk_options.addWidget(self.frametime, 3, 0, 1, 1)
|
||||||
|
self.gpuload = QtWidgets.QCheckBox(self.gb_dxvk_options)
|
||||||
|
self.gpuload.setObjectName("gpuload")
|
||||||
|
self.layout_dxvk_options.addWidget(self.gpuload, 2, 1, 1, 1)
|
||||||
|
self.fps = QtWidgets.QCheckBox(self.gb_dxvk_options)
|
||||||
|
self.fps.setObjectName("fps")
|
||||||
|
self.layout_dxvk_options.addWidget(self.fps, 2, 0, 1, 1)
|
||||||
|
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
||||||
|
self.layout_dxvk_options.addItem(spacerItem, 0, 3, 4, 1)
|
||||||
|
self.gridLayout.addWidget(self.gb_dxvk_options, 2, 0, 1, 3)
|
||||||
|
self.lbl_show_dxvk = QtWidgets.QLabel(DxvkSettings)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Preferred)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.lbl_show_dxvk.sizePolicy().hasHeightForWidth())
|
||||||
|
self.lbl_show_dxvk.setSizePolicy(sizePolicy)
|
||||||
|
self.lbl_show_dxvk.setObjectName("lbl_show_dxvk")
|
||||||
|
self.gridLayout.addWidget(self.lbl_show_dxvk, 0, 0, 1, 1)
|
||||||
|
self.show_dxvk = QtWidgets.QComboBox(DxvkSettings)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.show_dxvk.sizePolicy().hasHeightForWidth())
|
||||||
|
self.show_dxvk.setSizePolicy(sizePolicy)
|
||||||
|
self.show_dxvk.setObjectName("show_dxvk")
|
||||||
|
self.show_dxvk.addItem("")
|
||||||
|
self.show_dxvk.addItem("")
|
||||||
|
self.show_dxvk.addItem("")
|
||||||
|
self.show_dxvk.addItem("")
|
||||||
|
self.gridLayout.addWidget(self.show_dxvk, 0, 1, 1, 2)
|
||||||
|
|
||||||
|
self.retranslateUi(DxvkSettings)
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(DxvkSettings)
|
||||||
|
|
||||||
|
def retranslateUi(self, DxvkSettings):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
DxvkSettings.setWindowTitle(_translate("DxvkSettings", "DxvkSettings"))
|
||||||
|
DxvkSettings.setTitle(_translate("DxvkSettings", "DXVK Settings"))
|
||||||
|
self.gb_dxvk_options.setTitle(_translate("DxvkSettings", "DXVK HUD Options"))
|
||||||
|
self.api.setText(_translate("DxvkSettings", "D3D Version"))
|
||||||
|
self.version.setText(_translate("DxvkSettings", "DXVK Version"))
|
||||||
|
self.memory.setText(_translate("DxvkSettings", "Memory Usage"))
|
||||||
|
self.devinfo.setText(_translate("DxvkSettings", "Device Info"))
|
||||||
|
self.frametime.setText(_translate("DxvkSettings", "Frame Time graph"))
|
||||||
|
self.gpuload.setText(_translate("DxvkSettings", "GPU Usage"))
|
||||||
|
self.fps.setText(_translate("DxvkSettings", "FPS"))
|
||||||
|
self.lbl_show_dxvk.setText(_translate("DxvkSettings", "Show HUD:"))
|
||||||
|
self.show_dxvk.setItemText(0, _translate("DxvkSettings", "System Default"))
|
||||||
|
self.show_dxvk.setItemText(1, _translate("DxvkSettings", "Hidden"))
|
||||||
|
self.show_dxvk.setItemText(2, _translate("DxvkSettings", "Visible"))
|
||||||
|
self.show_dxvk.setItemText(3, _translate("DxvkSettings", "Custom Options"))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import sys
|
||||||
|
app = QtWidgets.QApplication(sys.argv)
|
||||||
|
DxvkSettings = QtWidgets.QGroupBox()
|
||||||
|
ui = Ui_DxvkSettings()
|
||||||
|
ui.setupUi(DxvkSettings)
|
||||||
|
DxvkSettings.show()
|
||||||
|
sys.exit(app.exec_())
|
|
@ -3,19 +3,19 @@ from logging import getLogger
|
||||||
from PyQt5.QtWidgets import QFileDialog, QWidget
|
from PyQt5.QtWidgets import QFileDialog, QWidget
|
||||||
|
|
||||||
from custom_legendary.core import LegendaryCore
|
from custom_legendary.core import LegendaryCore
|
||||||
from rare.components.tabs.settings.dxvk import DxvkWidget
|
from rare.components.tabs.settings.dxvk import DxvkSettings, DxvkWidget
|
||||||
|
from rare.components.tabs.settings.linux_ui import Ui_LinuxSettings
|
||||||
from rare.utils.extra_widgets import PathEdit
|
from rare.utils.extra_widgets import PathEdit
|
||||||
from .linux_ui import Ui_LinuxSettings
|
|
||||||
|
|
||||||
logger = getLogger("LinuxSettings")
|
logger = getLogger("LinuxSettings")
|
||||||
|
|
||||||
|
|
||||||
class LinuxSettings(QWidget, Ui_LinuxSettings):
|
class LinuxSettings(QWidget, Ui_LinuxSettings):
|
||||||
def __init__(self, core: LegendaryCore, name="default"):
|
def __init__(self, core: LegendaryCore, name=None):
|
||||||
super(LinuxSettings, self).__init__()
|
super(LinuxSettings, self).__init__()
|
||||||
self.setupUi(self)
|
self.setupUi(self)
|
||||||
|
|
||||||
self.name = name
|
self.name = name if name is not None else "default"
|
||||||
self.core = core
|
self.core = core
|
||||||
|
|
||||||
# Wineprefix
|
# Wineprefix
|
||||||
|
@ -46,7 +46,11 @@ class LinuxSettings(QWidget, Ui_LinuxSettings):
|
||||||
self.layout_exec.addWidget(self.wine_exec)
|
self.layout_exec.addWidget(self.wine_exec)
|
||||||
|
|
||||||
# dxvk
|
# dxvk
|
||||||
self.dxvk = DxvkWidget(core)
|
# FIXME: Remove this check when done with per game settings
|
||||||
|
if name is None:
|
||||||
|
self.dxvk = DxvkSettings(core, self.name)
|
||||||
|
else:
|
||||||
|
self.dxvk = DxvkWidget(core)
|
||||||
self.layout_dxvk.addWidget(self.dxvk)
|
self.layout_dxvk.addWidget(self.dxvk)
|
||||||
|
|
||||||
def save_setting(self, widget: PathEdit, setting_name: str):
|
def save_setting(self, widget: PathEdit, setting_name: str):
|
||||||
|
|
|
@ -57,7 +57,7 @@ class Ui_LinuxSettings(object):
|
||||||
def retranslateUi(self, LinuxSettings):
|
def retranslateUi(self, LinuxSettings):
|
||||||
_translate = QtCore.QCoreApplication.translate
|
_translate = QtCore.QCoreApplication.translate
|
||||||
LinuxSettings.setWindowTitle(_translate("LinuxSettings", "LinuxSettings"))
|
LinuxSettings.setWindowTitle(_translate("LinuxSettings", "LinuxSettings"))
|
||||||
self.gb_wine.setTitle(_translate("LinuxSettings", "Default Wine Settings"))
|
self.gb_wine.setTitle(_translate("LinuxSettings", "Wine Settings"))
|
||||||
self.lbl_exec.setText(_translate("LinuxSettings", "Wine executable:"))
|
self.lbl_exec.setText(_translate("LinuxSettings", "Wine executable:"))
|
||||||
self.lbl_prefix.setText(_translate("LinuxSettings", "Wine prefix:"))
|
self.lbl_prefix.setText(_translate("LinuxSettings", "Wine prefix:"))
|
||||||
|
|
||||||
|
|
138
resources/ui/components/tabs/settings/dxvk.ui
Normal file
138
resources/ui/components/tabs/settings/dxvk.ui
Normal file
|
@ -0,0 +1,138 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>DxvkSettings</class>
|
||||||
|
<widget class="QGroupBox" name="DxvkSettings">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>598</width>
|
||||||
|
<height>182</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>DxvkSettings</string>
|
||||||
|
</property>
|
||||||
|
<property name="title">
|
||||||
|
<string>DXVK Settings</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="2" column="0" colspan="3">
|
||||||
|
<widget class="QGroupBox" name="gb_dxvk_options">
|
||||||
|
<property name="title">
|
||||||
|
<string>DXVK HUD Options</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="layout_dxvk_options">
|
||||||
|
<item row="2" column="2">
|
||||||
|
<widget class="QCheckBox" name="api">
|
||||||
|
<property name="text">
|
||||||
|
<string>D3D Version</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="2">
|
||||||
|
<widget class="QCheckBox" name="version">
|
||||||
|
<property name="text">
|
||||||
|
<string>DXVK Version</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QCheckBox" name="memory">
|
||||||
|
<property name="text">
|
||||||
|
<string>Memory Usage</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QCheckBox" name="devinfo">
|
||||||
|
<property name="text">
|
||||||
|
<string>Device Info</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
|
<widget class="QCheckBox" name="frametime">
|
||||||
|
<property name="text">
|
||||||
|
<string>Frame Time graph</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QCheckBox" name="gpuload">
|
||||||
|
<property name="text">
|
||||||
|
<string>GPU Usage</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QCheckBox" name="fps">
|
||||||
|
<property name="text">
|
||||||
|
<string>FPS</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="3" rowspan="4">
|
||||||
|
<spacer name="hs_dxvk_options">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="lbl_show_dxvk">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Show HUD:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1" colspan="2">
|
||||||
|
<widget class="QComboBox" name="show_dxvk">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>System Default</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Hidden</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Visible</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Custom Options</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
|
@ -20,7 +20,7 @@
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QGroupBox" name="gb_wine">
|
<widget class="QGroupBox" name="gb_wine">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>Default Wine Settings</string>
|
<string>Wine Settings</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="layout_wine">
|
<layout class="QGridLayout" name="layout_wine">
|
||||||
<item row="1" column="0" alignment="Qt::AlignRight">
|
<item row="1" column="0" alignment="Qt::AlignRight">
|
||||||
|
|
Loading…
Reference in a new issue