1
0
Fork 0
mirror of synced 2024-05-20 04:22:58 +12:00
Rare/rare/components/tabs/settings/widgets/mangohud.py
loathingKernel af6d7c5055 Various WIP
* Use `vars()` instead of directly accessing `__dict__`
* Remove `auto_update` from RareGame's metadata
* Correct check for updating the Steam App ID (We want to keep any changes from the user)
* Collect both Wine and Proton prefixes when removing overlay registry keys.
* Add few convenience functions in config_helper and paths.
2024-02-12 21:52:07 +02:00

109 lines
5.1 KiB
Python

import shutil
from enum import Enum
from PyQt5.QtCore import QCoreApplication, pyqtSignal
from PyQt5.QtWidgets import QMessageBox
from rare.shared import LegendaryCoreSingleton
from rare.utils import config_helper
from .overlays import OverlaySettings, CustomOption, ActivationStates
position_values = ["default", "top-left", "top-right", "middle-left", "middle-right", "bottom-left",
"bottom-right", "top-center"]
class MangoHudSettings(OverlaySettings):
set_wrapper_activated = pyqtSignal(bool)
def __init__(self, parent=None):
super(MangoHudSettings, self).__init__(
[
("fps", QCoreApplication.translate("MangoSettings", "FPS")),
("frame_timing", QCoreApplication.translate("MangoSettings", "Frame Time")),
("cpu_stats", QCoreApplication.translate("MangoSettings", "CPU Load")),
("gpu_stats", QCoreApplication.translate("MangoSettings", "GPU Load")),
("cpu_temp", QCoreApplication.translate("MangoSettings", "CPU Temp")),
("gpu_temp", QCoreApplication.translate("MangoSettings", "GPU Temp")),
("ram", QCoreApplication.translate("MangoSettings", "Memory usage")),
("vram", QCoreApplication.translate("MangoSettings", "VRAM usage")),
("time", QCoreApplication.translate("MangoSettings", "Local Time")),
("version", QCoreApplication.translate("MangoSettings", "MangoHud Version")),
("arch", QCoreApplication.translate("MangoSettings", "System architecture")),
("histogram", QCoreApplication.translate("MangoSettings", "FPS Graph")),
("gpu_name", QCoreApplication.translate("MangoSettings", "GPU Name")),
("cpu_power", QCoreApplication.translate("MangoSettings", "CPU Power consumption")),
("gpu_power", QCoreApplication.translate("MangoSettings", "GPU Power consumption")),
],
[
(
CustomOption.number_input("font_size", 24, is_float=False),
QCoreApplication.translate("MangoSettings", "Font size")
),
(
CustomOption.select_input("position", position_values),
QCoreApplication.translate("MangoSettings", "Position")
)
],
"MANGOHUD_CONFIG", "no_display", set_activation_state=self.set_activation_state,
parent=parent
)
self.core = LegendaryCoreSingleton()
self.setTitle(self.tr("MangoHud Settings"))
self.gb_options.setTitle(self.tr("Custom options"))
def load_settings(self, name: str):
self.settings_updatable = False
self.name = name
# override
cfg = self.core.lgd.config.get(f"{name}.env", "MANGOHUD_CONFIG", fallback="")
activated = "mangohud" in self.core.lgd.config.get(name, "wrapper", fallback="")
if not activated:
self.settings_updatable = False
self.gb_options.setDisabled(True)
for i, checkbox in enumerate(list(self.checkboxes.values())):
checkbox.setChecked(i < 4)
self.show_overlay_combo.setCurrentIndex(0)
self.settings_updatable = True
return
super(MangoHudSettings, self).load_settings(name)
self.settings_updatable = False
self.show_overlay_combo.setCurrentIndex(2)
self.gb_options.setDisabled(False)
for var_name, checkbox in list(self.checkboxes.items())[:4]:
checkbox.setChecked(f"{var_name}=0" not in cfg)
self.settings_updatable = True
def set_activation_state(self, state: Enum): # pylint: disable=E0202
if state in [ActivationStates.DEFAULT, ActivationStates.HIDDEN]:
self.set_wrapper_activated.emit(False)
self.gb_options.setDisabled(True)
elif state == ActivationStates.ACTIVATED:
if not shutil.which("mangohud"):
self.show_overlay_combo.setCurrentIndex(0)
QMessageBox.warning(self, "Error", self.tr("Mangohud is not installed or not in path"))
return
cfg = self.core.lgd.config.get(f"{self.name}.env", "MANGOHUD_CONFIG", fallback="")
split_config = cfg.split(",")
for name in list(self.checkboxes.keys())[:4]:
if name in split_config:
split_config.remove(name)
cfg = ",".join(split_config)
for var_name, checkbox in list(self.checkboxes.items())[:4]: # first three are by default activated
if not checkbox.isChecked():
if cfg:
cfg += f",{var_name}=0"
else:
cfg = f"{var_name}=0"
if cfg:
config_helper.add_option(f"{self.name}.env", "MANGOHUD_CONFIG", cfg)
self.environ_changed.emit(self.config_env_var_name)
else:
config_helper.remove_option(f"{self.name}.env", "MANGOHUD_CONFIG")
self.environ_changed.emit(self.config_env_var_name)
self.set_wrapper_activated.emit(True)