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)