1
0
Fork 0
mirror of synced 2024-06-26 10:11:19 +12:00

Change Linux settings to default game settings

This commit is contained in:
Dummerle 2022-03-20 22:18:36 +01:00
parent 49c68917a7
commit 81da5faec9
No known key found for this signature in database
GPG key ID: AB68CC59CA39F2F1
8 changed files with 160 additions and 161 deletions

View file

@ -1,5 +1,4 @@
import os
import time
from logging import getLogger
from PyQt5.QtCore import Qt, QSettings, QTimer, QSize

View file

@ -18,7 +18,7 @@ class GameInfoTabs(SideTabWidget):
self.info = GameInfo(self, game_utils)
self.addTab(self.info, self.tr("Information"))
self.settings = GameSettings(self.core, self)
self.settings = GameSettings(self)
self.addTab(self.settings, self.tr("Settings"))
self.dlc_list = dlcs
@ -30,12 +30,12 @@ class GameInfoTabs(SideTabWidget):
def update_game(self, app_name: str):
self.setCurrentIndex(1)
self.info.update_game(app_name)
self.settings.update_game(app_name)
self.settings.load_settings(app_name)
# DLC Tab: Disable if no dlcs available
if (
len(self.dlc_list.get(self.core.get_game(app_name).catalog_item_id, []))
== 0
len(self.dlc_list.get(self.core.get_game(app_name).catalog_item_id, []))
== 0
):
self.setTabEnabled(3, False)
else:

View file

@ -2,52 +2,26 @@ import os
import platform
from logging import getLogger
from PyQt5.QtCore import QSettings, QThreadPool, Qt
from PyQt5.QtWidgets import (
QWidget,
QFileDialog,
QMessageBox,
QLabel,
QPushButton,
QSizePolicy
)
from legendary.core import LegendaryCore
from legendary.models.game import InstalledGame, Game
from PyQt5.QtCore import Qt, QThreadPool
from PyQt5.QtWidgets import QSizePolicy, QPushButton, QLabel, QFileDialog, QMessageBox
from legendary.models.game import Game, InstalledGame
from rare.components.tabs.settings.linux import LinuxSettings
from rare.components.tabs.settings.widgets.pre_launch import PreLaunchSettings
from rare.components.tabs.settings.widgets.proton import ProtonSettings
from rare.components.tabs.settings.widgets.wrapper import WrapperSettings
from rare.ui.components.tabs.games.game_info.game_settings import Ui_GameSettings
from rare.components.tabs.settings import DefaultGameSettings
from rare.components.tabs.settings.widgets.env_vars import EnvVars
from rare.components.tabs.settings.widgets.pre_launch import PreLaunchSettings
from rare.utils import config_helper
from rare.utils.extra_widgets import PathEdit
from rare.utils.utils import WineResolver, get_raw_save_path
from rare.utils.utils import icon
from rare.utils.utils import icon, WineResolver, get_raw_save_path
logger = getLogger("GameSettings")
class GameSettings(QWidget, Ui_GameSettings):
class GameSettings(DefaultGameSettings):
game: Game
igame: InstalledGame
# variable to no update when changing game
change = False
def __init__(self, core: LegendaryCore, parent):
super(GameSettings, self).__init__(parent=parent)
self.setupUi(self)
self.core = core
self.settings = QSettings()
self.wrapper_settings = WrapperSettings()
self.launch_settings_group.layout().addRow(
QLabel("Wrapper"), self.wrapper_settings
)
def __init__(self, parent=None):
super(GameSettings, self).__init__(False, parent)
self.pre_launch_settings = PreLaunchSettings()
self.launch_settings_group.layout().addRow(
QLabel("pre launch"), self.pre_launch_settings
@ -88,26 +62,6 @@ class GameSettings(QWidget, Ui_GameSettings):
lambda x: self.save_line_edit("start_params", x)
)
if platform.system() != "Windows":
self.linux_settings = LinuxAppSettings()
self.proton_settings = ProtonSettings(self.linux_settings, self.wrapper_settings)
self.game_settings_contents_layout.insertWidget(self.game_settings_contents_layout.count() - 1, self.proton_settings)
# FIXME: Remove the spacerItem and margins from the linux settings
# FIXME: This should be handled differently at soem point in the future
self.linux_settings.layout().setContentsMargins(0, 0, 0, 0)
for item in [
self.linux_settings.layout().itemAt(idx)
for idx in range(self.linux_settings.layout().count())
]:
if item.spacerItem():
self.linux_settings.layout().removeItem(item)
del item
# FIXME: End of FIXME
self.linux_settings_layout.addWidget(self.linux_settings)
self.linux_settings_layout.setAlignment(Qt.AlignTop)
else:
self.linux_settings_widget.setVisible(False)
self.game_settings_layout.setAlignment(Qt.AlignTop)
self.linux_settings.mangohud.set_wrapper_activated.connect(
@ -115,7 +69,7 @@ class GameSettings(QWidget, Ui_GameSettings):
if active else self.wrapper_settings.delete_wrapper("mangohud"))
self.env_vars = EnvVars(self)
self.game_settings_contents_layout.addWidget(self.env_vars)
self.game_settings_layout.addWidget(self.env_vars)
def compute_save_path(self):
if (
@ -199,8 +153,9 @@ class GameSettings(QWidget, Ui_GameSettings):
config_helper.remove_option(self.game.app_name, option)
config_helper.save_config()
def update_game(self, app_name: str):
def load_settings(self, app_name):
self.change = False
super(GameSettings, self).load_settings(app_name)
self.game = self.core.get_game(app_name)
self.igame = self.core.get_installed_game(self.game.app_name)
if self.igame:
@ -232,24 +187,12 @@ class GameSettings(QWidget, Ui_GameSettings):
self.skip_update.setCurrentIndex(0)
self.title.setTitle(self.game.app_title)
self.wrapper_settings.load_settings(app_name)
if platform.system() != "Windows":
self.linux_settings.update_game(app_name)
if self.igame and self.igame.platform == "Mac":
self.linux_settings_widget.setVisible(False)
else:
self.linux_settings_widget.setVisible(True)
proton = self.wrapper_settings.wrappers.get("proton", "")
if proton:
proton = proton.text
self.proton_settings.load_settings(app_name, proton)
if proton:
self.linux_settings.wine_groupbox.setEnabled(False)
else:
self.linux_settings.wine_groupbox.setEnabled(True)
if not self.game.supports_cloud_saves:
self.cloud_group.setEnabled(False)
self.cloud_save_path_edit.setText("")
@ -274,20 +217,3 @@ class GameSettings(QWidget, Ui_GameSettings):
self.pre_launch_settings.load_settings(app_name)
self.change = True
self.env_vars.update_game(app_name)
class LinuxAppSettings(LinuxSettings):
def __init__(self):
super(LinuxAppSettings, self).__init__()
def update_game(self, app_name):
self.name = app_name
self.wine_prefix.setText(self.load_prefix())
self.wine_exec.setText(self.load_setting(self.name, "wine_executable"))
self.dxvk.load_settings(self.name)
self.mangohud.load_settings(self.name)

View file

@ -3,22 +3,21 @@ import platform
from rare.utils.extra_widgets import SideTabWidget
from .about import About
from .legendary import LegendarySettings
from .linux import LinuxSettings
from rare.components.tabs.settings.widgets.linux import LinuxSettings
from .rare import RareSettings
from .game_settings import DefaultGameSettings
class SettingsTab(SideTabWidget):
def __init__(self, parent=None):
super(SettingsTab, self).__init__(parent=parent)
about_tab = 2
about_tab = 3
self.rare_settings = RareSettings()
self.addTab(self.rare_settings, "Rare")
self.addTab(LegendarySettings(), "Legendary")
if platform.system() != "Windows":
self.addTab(LinuxSettings(), "Linux")
about_tab = 3
self.addTab(DefaultGameSettings(True, self), self.tr("Games"), self.tr("Default game settings"))
self.about = About()
self.addTab(self.about, "About", "About")

View file

@ -0,0 +1,122 @@
import platform
from logging import getLogger
from PyQt5.QtCore import QSettings, Qt
from PyQt5.QtWidgets import (
QWidget,
QLabel
)
from rare.components.tabs.settings.widgets.linux import LinuxSettings
from rare.components.tabs.settings.widgets.proton import ProtonSettings
from rare.components.tabs.settings.widgets.wrapper import WrapperSettings
from rare.shared import LegendaryCoreSingleton
from rare.ui.components.tabs.games.game_info.game_settings import Ui_GameSettings
from rare.utils import config_helper
logger = getLogger("GameSettings")
class DefaultGameSettings(QWidget, Ui_GameSettings):
# variable to no update when changing game
change = False
app_name: str
def __init__(self, is_default, parent=None):
super(DefaultGameSettings, self).__init__(parent=parent)
self.setupUi(self)
self.core = LegendaryCoreSingleton()
self.settings = QSettings()
self.wrapper_settings = WrapperSettings()
self.launch_settings_group.layout().addRow(
QLabel("Wrapper"), self.wrapper_settings
)
if platform.system() != "Windows":
self.linux_settings = LinuxAppSettings()
self.proton_settings = ProtonSettings(self.linux_settings, self.wrapper_settings)
self.game_settings_layout.replaceWidget(self.proton_placeholder, self.proton_settings)
self.proton_placeholder.deleteLater()
# FIXME: Remove the spacerItem and margins from the linux settings
# FIXME: This should be handled differently at soem point in the future
self.linux_settings.layout().setContentsMargins(0, 0, 0, 0)
for item in [
self.linux_settings.layout().itemAt(idx)
for idx in range(self.linux_settings.layout().count())
]:
if item.spacerItem():
self.linux_settings.layout().removeItem(item)
del item
# FIXME: End of FIXME
self.linux_settings_layout.addWidget(self.linux_settings)
self.linux_settings_layout.setAlignment(Qt.AlignTop)
self.game_settings_layout.setAlignment(Qt.AlignTop)
self.linux_settings.mangohud.set_wrapper_activated.connect(
lambda active: self.wrapper_settings.add_wrapper("mangohud")
if active else self.wrapper_settings.delete_wrapper("mangohud"))
else:
self.linux_settings_widget.setVisible(False)
if is_default:
for i in range(4): # remove some entries which are not supported by default
self.launch_settings_layout.removeRow(0)
self.cloud_group.deleteLater()
self.load_settings("default")
def save_line_edit(self, option, value):
if value:
config_helper.add_option(self.game.app_name, option, value)
else:
config_helper.remove_option(self.game.app_name, option)
config_helper.save_config()
if option == "wine_prefix":
if self.game.supports_cloud_saves:
self.compute_save_path()
def update_combobox(self, i, option):
if self.change:
# remove section
if i:
if i == 1:
config_helper.add_option(self.game.app_name, option, "true")
if i == 2:
config_helper.add_option(self.game.app_name, option, "false")
else:
config_helper.remove_option(self.game.app_name, option)
config_helper.save_config()
def load_settings(self, app_name):
self.app_name = app_name
if platform.system() != "Windows":
self.linux_settings.update_game(app_name)
proton = self.wrapper_settings.wrappers.get("proton", "")
if proton:
proton = proton.text
self.proton_settings.load_settings("default", proton)
if proton:
self.linux_settings.wine_groupbox.setEnabled(False)
else:
self.linux_settings.wine_groupbox.setEnabled(True)
self.wrapper_settings.load_settings(app_name)
class LinuxAppSettings(LinuxSettings):
def __init__(self):
super(LinuxAppSettings, self).__init__()
def update_game(self, app_name):
self.name = app_name
self.wine_prefix.setText(self.load_prefix())
self.wine_exec.setText(self.load_setting(self.name, "wine_executable"))
self.dxvk.load_settings(self.name)
self.mangohud.load_settings(self.name)

View file

@ -46,9 +46,11 @@ class LinuxSettings(QWidget, Ui_LinuxSettings):
# dxvk
self.dxvk = DxvkSettings()
self.overlay_layout.addWidget(self.dxvk)
self.dxvk.load_settings(self.name)
self.mangohud = MangoHudSettings()
self.overlay_layout.addWidget(self.mangohud)
self.mangohud.load_settings(self.name)
def load_prefix(self) -> str:
return self.load_setting(

View file

@ -14,28 +14,10 @@ from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_GameSettings(object):
def setupUi(self, GameSettings):
GameSettings.setObjectName("GameSettings")
GameSettings.resize(759, 617)
GameSettings.resize(558, 357)
self.game_settings_layout = QtWidgets.QVBoxLayout(GameSettings)
self.game_settings_layout.setObjectName("game_settings_layout")
self.game_title = QtWidgets.QLabel(GameSettings)
self.game_title.setText("error")
self.game_title.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
self.game_title.setObjectName("game_title")
self.game_settings_layout.addWidget(self.game_title, 0, QtCore.Qt.AlignTop)
self.game_settings_scroll = QtWidgets.QScrollArea(GameSettings)
self.game_settings_scroll.setFrameShape(QtWidgets.QFrame.NoFrame)
self.game_settings_scroll.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.game_settings_scroll.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContents)
self.game_settings_scroll.setWidgetResizable(True)
self.game_settings_scroll.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
self.game_settings_scroll.setObjectName("game_settings_scroll")
self.game_settings_contents = QtWidgets.QWidget()
self.game_settings_contents.setGeometry(QtCore.QRect(0, 0, 741, 576))
self.game_settings_contents.setObjectName("game_settings_contents")
self.game_settings_contents_layout = QtWidgets.QVBoxLayout(self.game_settings_contents)
self.game_settings_contents_layout.setContentsMargins(0, 0, 9, 0)
self.game_settings_contents_layout.setObjectName("game_settings_contents_layout")
self.launch_settings_group = QtWidgets.QGroupBox(self.game_settings_contents)
self.launch_settings_group = QtWidgets.QGroupBox(GameSettings)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Maximum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
@ -86,8 +68,8 @@ class Ui_GameSettings(object):
self.override_exe_edit = QtWidgets.QLineEdit(self.launch_settings_group)
self.override_exe_edit.setObjectName("override_exe_edit")
self.launch_settings_layout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.override_exe_edit)
self.game_settings_contents_layout.addWidget(self.launch_settings_group)
self.cloud_group = QtWidgets.QGroupBox(self.game_settings_contents)
self.game_settings_layout.addWidget(self.launch_settings_group)
self.cloud_group = QtWidgets.QGroupBox(GameSettings)
self.cloud_group.setObjectName("cloud_group")
self.cloud_layout = QtWidgets.QFormLayout(self.cloud_group)
self.cloud_layout.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
@ -99,15 +81,19 @@ class Ui_GameSettings(object):
self.cloud_sync.setText("")
self.cloud_sync.setObjectName("cloud_sync")
self.cloud_layout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.cloud_sync)
self.game_settings_contents_layout.addWidget(self.cloud_group)
self.linux_settings_widget = QtWidgets.QWidget(self.game_settings_contents)
self.game_settings_layout.addWidget(self.cloud_group)
self.proton_placeholder = QtWidgets.QWidget(GameSettings)
self.proton_placeholder.setObjectName("proton_placeholder")
self.proton_layout = QtWidgets.QFormLayout(self.proton_placeholder)
self.proton_layout.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.proton_layout.setObjectName("proton_layout")
self.game_settings_layout.addWidget(self.proton_placeholder)
self.linux_settings_widget = QtWidgets.QWidget(GameSettings)
self.linux_settings_widget.setObjectName("linux_settings_widget")
self.linux_settings_layout = QtWidgets.QVBoxLayout(self.linux_settings_widget)
self.linux_settings_layout.setContentsMargins(0, 0, 0, 0)
self.linux_settings_layout.setObjectName("linux_settings_layout")
self.game_settings_contents_layout.addWidget(self.linux_settings_widget)
self.game_settings_scroll.setWidget(self.game_settings_contents)
self.game_settings_layout.addWidget(self.game_settings_scroll)
self.game_settings_layout.addWidget(self.linux_settings_widget)
self.retranslateUi(GameSettings)
QtCore.QMetaObject.connectSlotsByName(GameSettings)

View file

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>545</width>
<height>348</height>
<width>558</width>
<height>357</height>
</rect>
</property>
<property name="windowTitle">
@ -157,46 +157,11 @@
</widget>
</item>
<item>
<widget class="QGroupBox" name="proton_group">
<property name="title">
<string>Proton Settings</string>
</property>
<widget class="QWidget" name="proton_placeholder" native="true">
<layout class="QFormLayout" name="proton_layout">
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<item row="1" column="0">
<widget class="QLabel" name="proton_wrapper_label">
<property name="text">
<string>Proton</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="proton_wrapper">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>Don't use Proton</string>
</property>
</item>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="proton_prefix_label">
<property name="text">
<string>Prefix</string>
</property>
</widget>
</item>
<item row="2" column="1">
<layout class="QVBoxLayout" name="proton_prefix_layout"/>
</item>
</layout>
</widget>
</item>