diff --git a/Rare/Components/Tabs/Settings/About.py b/Rare/Components/Tabs/Settings/About.py
index d5d61b0a..b6620361 100644
--- a/Rare/Components/Tabs/Settings/About.py
+++ b/Rare/Components/Tabs/Settings/About.py
@@ -1,4 +1,4 @@
-from PyQt5.QtWidgets import QWidget, QVBoxLayout, QFormLayout, QLabel
+from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel
class About(QWidget):
@@ -9,4 +9,22 @@ class About(QWidget):
self.title = QLabel("
About
")
self.layout.addWidget(self.title)
- self.setLayout(self.layout)
\ No newline at end of file
+ self.dev = QLabel("Developer: Dummerle")
+ self.dev.setToolTip("Github")
+ self.dev.setOpenExternalLinks(True)
+ self.dev.setWordWrap(True)
+ self.layout.addWidget(self.dev)
+ self.lgd_dev = QLabel("Legendary developer: derrod")
+ self.lgd_dev.setOpenExternalLinks(True)
+ self.lgd_dev.setToolTip("Github")
+ self.layout.addWidget(self.lgd_dev)
+ self.license = QLabel("License: GNU General Public License v3.0")
+ self.layout.addWidget(self.license)
+ self.info_text = QLabel(
+ "This is a beta version, so you can get bugs. If you get a bug, please report it by creating a Issue on Github. You can also contact me on Discord (Dummerle#7419). If you have a feature request, please contact me")
+ self.info_text.setWordWrap(True)
+ self.info_text.setOpenExternalLinks(True)
+ self.layout.addWidget(self.info_text)
+
+ self.layout.addStretch()
+ self.setLayout(self.layout)
diff --git a/Rare/Components/Tabs/Settings/Legendary.py b/Rare/Components/Tabs/Settings/Legendary.py
index a3378386..b5ced93a 100644
--- a/Rare/Components/Tabs/Settings/Legendary.py
+++ b/Rare/Components/Tabs/Settings/Legendary.py
@@ -1,12 +1,60 @@
-from PyQt5.QtWidgets import QWidget, QVBoxLayout, QFormLayout, QLabel
+from logging import getLogger
+
+from PyQt5.QtGui import QIntValidator
+from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QFileDialog, QPushButton, QLineEdit
+from legendary.core import LegendaryCore
+
+from Rare.Components.Tabs.Settings.SettingsWidget import SettingsWidget
+from Rare.utils.QtExtensions import PathEdit
+
+logger = getLogger("LegendarySettings")
class LegendarySettings(QWidget):
- def __init__(self):
+ def __init__(self, core: LegendaryCore):
super(LegendarySettings, self).__init__()
self.layout = QVBoxLayout()
-
+ self.core = core
self.title = QLabel("Legendary settings
")
self.layout.addWidget(self.title)
-
- self.setLayout(self.layout)
\ No newline at end of file
+
+ # Default installation directory
+ self.select_path = PathEdit(core.get_default_install_dir(), type_of_file=QFileDialog.DirectoryOnly,
+ infotext="Default")
+ self.select_path.text_edit.textChanged.connect(lambda t: self.save_path_button.setDisabled(False))
+ self.save_path_button = QPushButton("Save")
+ self.save_path_button.clicked.connect(self.save_path)
+ self.install_dir_widget = SettingsWidget("Default installation directory", self.select_path, self.save_path_button)
+ self.layout.addWidget(self.install_dir_widget)
+
+ # Max Workers
+ self.max_worker_select = QLineEdit(self.core.lgd.config["Legendary"].get("max_workers"))
+ self.max_worker_select.setValidator(QIntValidator())
+ self.max_worker_select.setPlaceholderText("Default")
+ self.max_worker_select.textChanged.connect(self.max_worker_save)
+ self.max_worker_widget = SettingsWidget("Max workers for Download (Less: slower download)(0: Default)",
+ self.max_worker_select)
+ self.layout.addWidget(self.max_worker_widget)
+
+ self.layout.addStretch(1)
+ self.setLayout(self.layout)
+
+ def save_path(self):
+ self.core.lgd.config["Legendary"]["install_dir"] = self.select_path.text()
+ if self.select_path.text() == "" and "install_dir" in self.core.lgd.config["Legendary"].keys():
+ self.core.lgd.config["Legendary"].pop("install_dir")
+ logger.info("Remove install_dir section")
+ else:
+ logger.info("Set config install_dir to " + self.select_path.text())
+ self.core.lgd.save_config()
+
+ def max_worker_save(self, num_workers: str):
+ self.core.lgd.config["Legendary"]["max_workers"] = num_workers
+ if num_workers == "":
+ self.core.lgd.config["Legendary"].pop("max_workers")
+ return
+ num_workers = int(num_workers)
+ if num_workers == 0:
+ self.core.lgd.config["Legendary"].pop("max_workers")
+ logger.info("Updating config for max_workers")
+ self.core.lgd.save_config()
diff --git a/Rare/Components/Tabs/Settings/Linux.py b/Rare/Components/Tabs/Settings/Linux.py
index 55049e4c..86c59f99 100644
--- a/Rare/Components/Tabs/Settings/Linux.py
+++ b/Rare/Components/Tabs/Settings/Linux.py
@@ -1,12 +1,101 @@
-from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel
+from logging import getLogger
+
+from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QPushButton, QFileDialog, QCheckBox, QHBoxLayout, QToolButton
+from legendary.core import LegendaryCore
+
+from Rare.Components.Tabs.Settings.SettingsWidget import SettingsWidget
+from Rare.utils.QtExtensions import PathEdit
+
+logger = getLogger("LinuxSettings")
class LinuxSettings(QWidget):
- def __init__(self):
+ def __init__(self, core: LegendaryCore):
super(LinuxSettings, self).__init__()
self.layout = QVBoxLayout()
-
- self.title = QLabel("Linux settings (Wine, dxvk)
")
+ self.core = core
+ self.title = QLabel("Linux settings
")
self.layout.addWidget(self.title)
+ # Wineprefix
+ self.select_path = PathEdit(self.core.lgd.config.get("default", "wine_prefix", fallback=""),
+ type_of_file=QFileDialog.DirectoryOnly,
+ infotext="Default")
+ self.select_path.text_edit.textChanged.connect(lambda t: self.save_path_button.setDisabled(False))
+ self.save_path_button = QPushButton("Save")
+ self.save_path_button.clicked.connect(self.save_wineprefix)
+ self.install_dir_widget = SettingsWidget("Default Wine Prefix", self.select_path, self.save_path_button)
+ self.layout.addWidget(self.install_dir_widget)
+
+ # Wine executable
+ self.select_wine_exec = PathEdit(self.core.lgd.config.get("default", "wine_executable", fallback=""),
+ type_of_file=QFileDialog.DirectoryOnly,
+ infotext="Default")
+ self.select_wine_exec.text_edit.textChanged.connect(lambda t: self.save_path_button.setDisabled(False))
+ self.save_wine_exec = QPushButton("Save")
+ self.save_wine_exec.clicked.connect(self.save_wineexec)
+ self.install_dir_widget = SettingsWidget("Default Wine executable", self.select_wine_exec, self.save_wine_exec)
+ self.layout.addWidget(self.install_dir_widget)
+
+ # dxvk
+ self.dxvk_widget = DxvkWidget(core)
+ self.layout.addWidget(self.dxvk_widget)
+
+ self.layout.addStretch(1)
self.setLayout(self.layout)
+
+ def save_wineprefix(self):
+ if not "default" in self.core.lgd.config.sections():
+ self.core.lgd.config["default"] = dict()
+ self.core.lgd.config["default"]["wine_prefix"] = self.select_path.text()
+ if self.select_path.text() == "":
+ self.core.lgd.config["default"].pop("wine_prefix")
+ logger.info("Remove wine_prefix section")
+ else:
+ logger.info("Set config of wine_prefix to " + self.select_path.text())
+ if self.core.lgd.config["default"] == {}:
+ self.core.lgd.config.remove_section("default")
+ self.core.lgd.save_config()
+
+ def save_wineexec(self):
+ if not "default" in self.core.lgd.config.sections():
+ self.core.lgd.config["default"] = dict()
+ self.core.lgd.config["default"]["wine_executable"] = self.select_wine_exec.text()
+ if self.select_wine_exec.text() == "":
+ self.core.lgd.config["default"].pop("wine_executable")
+ logger.info("Remove wine executable section")
+ else:
+ logger.info("Set config of wine executable to " + self.select_wine_exec.text())
+ if self.core.lgd.config["default"] == {}:
+ self.core.lgd.config.remove_section("default")
+ self.core.lgd.save_config()
+
+
+
+class DxvkWidget(QWidget):
+ def __init__(self, core: LegendaryCore):
+ super(DxvkWidget, self).__init__()
+ self.core = core
+ self.layout = QVBoxLayout()
+ self.child_layout = QHBoxLayout()
+ self.title = QLabel("dxvk settings")
+ self.show_dxvk = QCheckBox("Show Dxvk HUD")
+ self.more_settings = QPushButton()
+ self.more_settings.clicked.connect(self.show_more_settings)
+ active = not self.core.lgd.config.get("default.env", "DXVK_HUD", fallback="") == ""
+ self.more_settings.setDisabled(active)
+ self.show_dxvk.stateChanged.connect(lambda x: self.more_settings.setDisabled(x == 0))
+ self.show_dxvk.setChecked(active)
+ self.layout.addWidget(self.title)
+ self.child_layout.addWidget(self.show_dxvk)
+
+ self.child_layout.addWidget(self.more_settings)
+ self.layout.addLayout(self.child_layout)
+
+ self.setLayout(self.layout)
+
+ def update_dettings(self):
+ pass
+
+ def show_more_settings(self):
+ pass
\ No newline at end of file
diff --git a/Rare/Components/Tabs/Settings/Rare.py b/Rare/Components/Tabs/Settings/Rare.py
index 50e88818..da46ec21 100644
--- a/Rare/Components/Tabs/Settings/Rare.py
+++ b/Rare/Components/Tabs/Settings/Rare.py
@@ -2,13 +2,16 @@ import os
import shutil
from logging import getLogger
-from PyQt5.QtCore import QSettings, QTranslator
-from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QFileDialog, QComboBox, QApplication, QPushButton
+from PyQt5.QtCore import QSettings
+from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QFileDialog, QComboBox, QPushButton
+from Rare.Components.Tabs.Settings.SettingsWidget import SettingsWidget
from Rare.utils.QtExtensions import PathEdit
from Rare.utils.utils import get_lang, get_possible_langs
logger = getLogger("RareSettings")
+
+
class RareSettings(QWidget):
def __init__(self):
super(RareSettings, self).__init__()
@@ -76,20 +79,3 @@ class RareSettings(QWidget):
os.makedirs(new_path)
logger.info("Move Images")
shutil.move(old_path, new_path)
-
-
-
-
-
-class SettingsWidget(QWidget):
- def __init__(self, text: str, widget: QWidget, accept_button: QPushButton=None):
- super(SettingsWidget, self).__init__()
- self.setObjectName("settings_widget")
- self.layout = QVBoxLayout()
- self.info_text = QLabel("")
- self.layout.addWidget(QLabel(text))
- self.layout.addWidget(widget)
- if accept_button:
- self.layout.addWidget(accept_button)
- self.layout.addWidget(self.info_text)
- self.setLayout(self.layout)
diff --git a/Rare/Components/Tabs/Settings/SettingsTab.py b/Rare/Components/Tabs/Settings/SettingsTab.py
index d542aad8..401d1ee0 100644
--- a/Rare/Components/Tabs/Settings/SettingsTab.py
+++ b/Rare/Components/Tabs/Settings/SettingsTab.py
@@ -16,9 +16,9 @@ class SettingsTab(QTabWidget):
self.setTabBar(TabBar())
self.setTabPosition(QTabWidget.West)
self.addTab(RareSettings(), "Rare")
- self.addTab(LegendarySettings(), "Legendary")
+ self.addTab(LegendarySettings(core), "Legendary")
if os.name != "nt":
- self.addTab(LinuxSettings(), "Linux")
+ self.addTab(LinuxSettings(core), "Linux")
self.addTab(About(), "About")
diff --git a/Rare/Components/Tabs/Settings/SettingsWidget.py b/Rare/Components/Tabs/Settings/SettingsWidget.py
new file mode 100644
index 00000000..6f841e18
--- /dev/null
+++ b/Rare/Components/Tabs/Settings/SettingsWidget.py
@@ -0,0 +1,15 @@
+from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QPushButton
+
+
+class SettingsWidget(QWidget):
+ def __init__(self, text: str, widget: QWidget, accept_button: QPushButton=None):
+ super(SettingsWidget, self).__init__()
+ self.setObjectName("settings_widget")
+ self.layout = QVBoxLayout()
+ self.info_text = QLabel("")
+ self.layout.addWidget(QLabel(text))
+ self.layout.addWidget(widget)
+ if accept_button:
+ self.layout.addWidget(accept_button)
+ self.layout.addWidget(self.info_text)
+ self.setLayout(self.layout)