Change Linux settings to default game settings
This commit is contained in:
parent
49c68917a7
commit
81da5faec9
|
@ -1,5 +1,4 @@
|
|||
import os
|
||||
import time
|
||||
from logging import getLogger
|
||||
|
||||
from PyQt5.QtCore import Qt, QSettings, QTimer, QSize
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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")
|
||||
|
|
122
rare/components/tabs/settings/game_settings.py
Normal file
122
rare/components/tabs/settings/game_settings.py
Normal 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)
|
|
@ -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(
|
|
@ -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)
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in a new issue