81 lines
2.7 KiB
Python
81 lines
2.7 KiB
Python
import platform as pf
|
|
from typing import Type
|
|
|
|
from PyQt5.QtCore import QSettings, Qt
|
|
from PyQt5.QtGui import QHideEvent
|
|
from PyQt5.QtWidgets import (
|
|
QWidget,
|
|
QVBoxLayout
|
|
)
|
|
|
|
from rare.shared import LegendaryCoreSingleton
|
|
from rare.utils import config_helper as config
|
|
from rare.widgets.side_tab import SideTabContents
|
|
from .env_vars import EnvVars
|
|
from .launch import LaunchSettingsType
|
|
from .overlay import DxvkSettings
|
|
|
|
if pf.system() != "Windows":
|
|
from .wine import WineSettings
|
|
|
|
if pf.system() in {"Linux", "FreeBSD"}:
|
|
from .proton import ProtonSettings
|
|
from .overlay import MangoHudSettings
|
|
|
|
|
|
class GameSettingsBase(QWidget, SideTabContents):
|
|
|
|
def __init__(
|
|
self,
|
|
launch_widget: Type[LaunchSettingsType],
|
|
dxvk_widget: Type[DxvkSettings],
|
|
envvar_widget: Type[EnvVars],
|
|
wine_widget: Type['WineSettings'] = None,
|
|
proton_widget: Type['ProtonSettings'] = None,
|
|
mangohud_widget: Type['MangoHudSettings'] = None,
|
|
parent=None
|
|
):
|
|
super(GameSettingsBase, self).__init__(parent=parent)
|
|
|
|
self.core = LegendaryCoreSingleton()
|
|
self.settings = QSettings(self)
|
|
self.app_name: str = "default"
|
|
|
|
self.launch = launch_widget(self)
|
|
self.env_vars = envvar_widget(self)
|
|
|
|
if pf.system() != "Windows":
|
|
self.wine = wine_widget(self)
|
|
self.wine.environ_changed.connect(self.env_vars.reset_model)
|
|
|
|
if pf.system() in {"Linux", "FreeBSD"}:
|
|
self.proton_tool = proton_widget(self)
|
|
self.proton_tool.environ_changed.connect(self.env_vars.reset_model)
|
|
self.proton_tool.tool_enabled.connect(self.wine.tool_enabled)
|
|
self.proton_tool.tool_enabled.connect(self.launch.tool_enabled)
|
|
|
|
self.dxvk = dxvk_widget(self)
|
|
self.dxvk.environ_changed.connect(self.env_vars.reset_model)
|
|
|
|
if pf.system() in {"Linux", "FreeBSD"}:
|
|
self.mangohud = mangohud_widget(self)
|
|
self.mangohud.environ_changed.connect(self.env_vars.reset_model)
|
|
|
|
self.main_layout = QVBoxLayout(self)
|
|
self.main_layout.addWidget(self.launch)
|
|
if pf.system() != "Windows":
|
|
self.main_layout.addWidget(self.wine)
|
|
if pf.system() in {"Linux", "FreeBSD"}:
|
|
self.main_layout.addWidget(self.proton_tool)
|
|
self.main_layout.addWidget(self.dxvk)
|
|
if pf.system() in {"Linux", "FreeBSD"}:
|
|
self.main_layout.addWidget(self.mangohud)
|
|
self.main_layout.addWidget(self.env_vars)
|
|
|
|
self.main_layout.setAlignment(Qt.AlignTop)
|
|
|
|
def hideEvent(self, a0: QHideEvent):
|
|
if a0.spontaneous():
|
|
return super().hideEvent(a0)
|
|
config.save_config()
|
|
return super().hideEvent(a0)
|