diff --git a/Rare/Tabs/GamesInstalled/GameSettingsDialog.py b/Rare/Tabs/GamesInstalled/GameSettingsDialog.py index 968e450b..8ff84c92 100644 --- a/Rare/Tabs/GamesInstalled/GameSettingsDialog.py +++ b/Rare/Tabs/GamesInstalled/GameSettingsDialog.py @@ -3,7 +3,7 @@ import os from PyQt5.QtWidgets import * from Rare.Dialogs import AcceptDialog -from Rare.SettingsForm import SettingsForm +from Rare.Tabs.GamesInstalled.SettingsForm import SettingsForm class GameSettingsDialog(QDialog): diff --git a/Rare/SettingsForm.py b/Rare/Tabs/GamesInstalled/SettingsForm.py similarity index 69% rename from Rare/SettingsForm.py rename to Rare/Tabs/GamesInstalled/SettingsForm.py index b1ad3d57..398896ce 100644 --- a/Rare/SettingsForm.py +++ b/Rare/Tabs/GamesInstalled/SettingsForm.py @@ -2,7 +2,7 @@ import os from logging import getLogger from PyQt5.QtWidgets import QTableWidget, QTableWidgetItem, QFormLayout, QGroupBox, QLineEdit, QPushButton, \ - QLabel + QLabel, QCheckBox from Rare.utils import legendaryConfig @@ -14,7 +14,7 @@ class SettingsForm(QGroupBox): self.app_name = app_name self.logger = getLogger(f"{app_name} Settings") config: dict - super(SettingsForm, self).__init__(f"{'Legendary Settings' if app_name=='Legendary' else f'Settings for Game {self.app_name}'}") + super(SettingsForm, self).__init__(f'Settings for Game {self.app_name}') self.config = legendaryConfig.get_config() if not self.config.get(self.app_name): self.config[self.app_name] = {} @@ -22,8 +22,10 @@ class SettingsForm(QGroupBox): self.config[self.app_name]["wine_executable"] = "" if not self.config[self.app_name].get("wine_prefix"): self.config[self.app_name]["wine_prefix"] = "" - if not self.config[self.app_name].get("locale"): - self.config[self.app_name]["locale"] = "" + if not self.config[self.app_name].get("language"): + self.config[self.app_name]["language"] = "" + if not self.config["Legendary"].get("offline"): + self.config["Legendary"]["offline"] = "" env_vars = self.config.get(f"{self.app_name}.env") if env_vars: @@ -39,12 +41,15 @@ class SettingsForm(QGroupBox): self.form = QFormLayout() - self._conf_wine_prefix = QLineEdit(self.config[self.app_name]["wine_prefix"]) - self._conf_wine_prefix.setPlaceholderText("Default") - self._conf_wine_exec = QLineEdit(self.config[self.app_name]["wine_executable"]) - self._conf_wine_exec.setPlaceholderText("Default") - self._conf_locale = QLineEdit(self.config[self.app_name]["locale"]) - self._conf_locale.setPlaceholderText("Default") + self.game_conf_wine_prefix = QLineEdit(self.config[self.app_name]["wine_prefix"]) + self.game_conf_wine_prefix.setPlaceholderText("Default") + self.game_conf_wine_exec = QLineEdit(self.config[self.app_name]["wine_executable"]) + self.game_conf_wine_exec.setPlaceholderText("Default") + self.language = QLineEdit(self.config[self.app_name]["language"]) + self.language.setPlaceholderText("Default") + + self.offline = QCheckBox(self.config["offline"] == "false") + self.add_button = QPushButton("Add Environment Variable") self.delete_env_var = QPushButton("Delete selected Variable") @@ -52,12 +57,13 @@ class SettingsForm(QGroupBox): self.add_button.clicked.connect(self.add_variable) if os.name != "nt": - self.form.addRow(QLabel("Default Wineprefix"), self._conf_wine_prefix) - self.form.addRow(QLabel("Wine executable"), self._conf_wine_exec) + self.form.addRow(QLabel("Default Wineprefix"), self.game_conf_wine_prefix) + self.form.addRow(QLabel("Wine executable"), self.game_conf_wine_exec) + # self.form.addRow(QLabel("Offline"), self.offline) self.form.addRow(QLabel("Environment Variables"), self.table) self.form.addRow(QLabel("Add Variable"), self.add_button) self.form.addRow(QLabel("Delete Variable"), self.delete_env_var) - self.form.addRow(QLabel("Locale"), self._conf_locale) + self.form.addRow(QLabel("language"), self.language) self.submit_button = QPushButton("Update") self.submit_button.clicked.connect(self.update_legendary_settings) self.form.addRow(self.submit_button) @@ -78,22 +84,22 @@ class SettingsForm(QGroupBox): # Wine exec if not self.config.get(self.app_name): self.config[self.app_name] = {} - if self._conf_wine_exec.text() != "": - self.config[self.app_name]["wine_executable"] = self._conf_wine_exec.text() + if self.game_conf_wine_exec.text() != "": + self.config[self.app_name]["wine_executable"] = self.game_conf_wine_exec.text() elif "wine_executable" in self.config[self.app_name]: self.config[self.app_name].pop("wine_executable") # Wineprefix - if self._conf_wine_prefix.text() != '': - self.config[self.app_name]["wine_prefix"] = self._conf_wine_prefix.text() + if self.game_conf_wine_prefix.text() != '': + self.config[self.app_name]["wine_prefix"] = self.game_conf_wine_prefix.text() elif "wine_prefix" in self.config[self.app_name]: self.config[self.app_name].pop("wine_prefix") - # Locale - if self._conf_locale.text() != "": - self.config[self.app_name]["locale"] = self._conf_locale.text() - elif "locale" in self.config[self.app_name]: - self.config[self.app_name].pop("locale") + # language + if self.language.text() != "": + self.config[self.app_name]["language"] = self.language.text() + elif "language" in self.config[self.app_name]: + self.config[self.app_name].pop("language") # Env vars if self.table.rowCount() > 0: diff --git a/Rare/Tabs/Settings/LegendarySettingsForm.py b/Rare/Tabs/Settings/LegendarySettingsForm.py new file mode 100644 index 00000000..aa6aa5d2 --- /dev/null +++ b/Rare/Tabs/Settings/LegendarySettingsForm.py @@ -0,0 +1,147 @@ +import os +from logging import getLogger + +from PyQt5.QtGui import QIntValidator +from PyQt5.QtWidgets import QTableWidget, QTableWidgetItem, QFormLayout, QGroupBox, QLineEdit, QPushButton, \ + QLabel + +from Rare.utils import legendaryConfig + + +class SettingsForm(QGroupBox): + config: dict + + def __init__(self): + self.logger = getLogger(f"Legendary Settings") + config: dict + super(SettingsForm, self).__init__('Legendary Settings') + self.config = legendaryConfig.get_config() + if not self.config.get("Legendary"): + self.config["Legendary"] = {} + if not self.config["Legendary"].get("wine_executable"): + self.config["Legendary"]["wine_executable"] = "" + if not self.config["Legendary"].get("wine_prefix"): + self.config["Legendary"]["wine_prefix"] = "" + if not self.config["Legendary"].get("locale"): + self.config["Legendary"]["locale"] = "" + if not self.config["Legendary"].get("max_workers"): + self.config["Legendary"]["max_workers"] = "" + if not self.config["Legendary"].get("install_dir"): + self.config["Legendary"]["install_dir"] = "" + if not self.config["Legendary"].get("max_memory"): + self.config["Legendary"]["max_memory"] = "" + + env_vars = self.config.get(f"default.env") + if env_vars: + self.table = QTableWidget(len(env_vars), 2) + for i, label in enumerate(env_vars): + self.table.setItem(i, 0, QTableWidgetItem(label)) + self.table.setItem(i, 1, QTableWidgetItem(env_vars[label])) + + else: + self.table = QTableWidget(0, 2) + + self.table.setHorizontalHeaderLabels(["Variable", "Value"]) + + self.form = QFormLayout() + + self.lgd_conf_wine_prefix = QLineEdit(self.config["Legendary"]["wine_prefix"]) + self.lgd_conf_wine_prefix.setPlaceholderText("Default") + self.lgd_conf_wine_exec = QLineEdit(self.config["Legendary"]["wine_executable"]) + self.lgd_conf_wine_exec.setPlaceholderText("Default") + self.lgd_conf_locale = QLineEdit(self.config["Legendary"]["locale"]) + self.lgd_conf_locale.setPlaceholderText("Default") + + only_int = QIntValidator() + self.max_workers = QLineEdit(self.config["Legendary"]["max_workers"]) + self.max_workers.setPlaceholderText("Default") + self.max_workers.setValidator(only_int) + + self.default_install_dir = QLineEdit(self.config["Legendary"]["install_dir"]) + self.default_install_dir.setPlaceholderText("Default") + + self.max_mem = QLineEdit(self.config["Legendary"]["max_memory"]) + self.max_mem.setPlaceholderText("Default") + self.max_mem.setValidator(only_int) + + self.add_button = QPushButton("Add Environment Variable") + self.delete_env_var = QPushButton("Delete selected Variable") + self.delete_env_var.clicked.connect(self.delete_var) + self.add_button.clicked.connect(self.add_variable) + + if os.name != "nt": + self.form.addRow(QLabel("Default Wineprefix"), self.lgd_conf_wine_prefix) + self.form.addRow(QLabel("Wine executable"), self.lgd_conf_wine_exec) + self.form.addRow(QLabel("Max Workers"), self.max_workers) + self.form.addRow(QLabel("Default install dir"), self.default_install_dir) + self.form.addRow(QLabel("Max memory"), self.max_mem) + self.form.addRow(QLabel("Environment Variables"), self.table) + self.form.addRow(QLabel("Add Variable"), self.add_button) + self.form.addRow(QLabel("Delete Variable"), self.delete_env_var) + self.form.addRow(QLabel("Locale"), self.lgd_conf_locale) + self.submit_button = QPushButton("Update") + self.submit_button.clicked.connect(self.update_legendary_settings) + self.form.addRow(self.submit_button) + self.setLayout(self.form) + + def add_variable(self): + print("add row") + self.table.insertRow(self.table.rowCount()) + self.table.setItem(self.table.rowCount(), 0, QTableWidgetItem("")) + self.table.setItem(self.table.rowCount(), 1, QTableWidgetItem("")) + + def delete_var(self): + self.table.removeRow(self.table.currentRow()) + + def update_legendary_settings(self): + self.logger.info("Updating Game Settings") + + # Wine exec + if not self.config.get("Legendary"): + self.config["Legendary"] = {} + if self.lgd_conf_wine_exec.text() != "": + self.config["Legendary"]["wine_executable"] = self.lgd_conf_wine_exec.text() + elif "wine_executable" in self.config["Legendary"]: + self.config["Legendary"].pop("wine_executable") + + # Wineprefix + if self.lgd_conf_wine_prefix.text() != '': + self.config["Legendary"]["wine_prefix"] = self.lgd_conf_wine_prefix.text() + elif "wine_prefix" in self.config["Legendary"]: + self.config["Legendary"].pop("wine_prefix") + + # Locale + if self.lgd_conf_locale.text() != "": + self.config["Legendary"]["locale"] = self.lgd_conf_locale.text() + elif "locale" in self.config["Legendary"]: + self.config["Legendary"].pop("locale") + + # Max Workers + if self.max_workers.text() != "": + self.config["Legendary"]["max_workers"] = self.max_workers.text() + elif "max_workers" in self.config["Legendary"]: + self.config["Legendary"].pop("max_workers") + + # default installdir + if self.default_install_dir.text() != "": + self.config["Legendary"]["install_dir"] = self.default_install_dir.text() + elif "install_dir" in self.config["Legendary"]: + self.config["Legendary"].pop("install_dir") + + # max mem + if self.max_mem.text() != "": + self.config["Legendary"]["max_memory"] = self.max_mem.text() + elif "max_memory" in self.config["Legendary"]: + self.config["Legendary"].pop("max_memory") + + # Env vars + if self.table.rowCount() > 0: + self.config[f"default.env"] = {} + for row in range(self.table.rowCount()): + self.config[f"default.env"][self.table.item(row, 0).text()] = self.table.item(row, 1).text() + elif "default.env" in self.config: + self.config.pop("default.env") + + if self.config.get("Legendary") == {}: + self.config.pop("Legendary") + legendaryConfig.set_config(self.config) diff --git a/Rare/Tabs/Settings/SettingsTab.py b/Rare/Tabs/Settings/SettingsTab.py index 09d388f0..7119fdca 100644 --- a/Rare/Tabs/Settings/SettingsTab.py +++ b/Rare/Tabs/Settings/SettingsTab.py @@ -3,8 +3,8 @@ from logging import getLogger from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QVBoxLayout, QLabel, QPushButton, QScrollArea -from Rare.SettingsForm import SettingsForm from Rare.Tabs.Settings.Rare import RareSettingsForm +from Rare.Tabs.Settings.LegendarySettingsForm import SettingsForm from Rare.utils.legendaryUtils import get_name from legendary.core import LegendaryCore @@ -21,7 +21,7 @@ class SettingsTab(QScrollArea): self.layout = QVBoxLayout() self.layout.addWidget(QLabel("

Rare Settings

")) self.logged_in_as = QLabel(f"Logged in as {get_name()}") - self.legendary_form = SettingsForm("Legendary") + self.legendary_form =SettingsForm() self.rare_form = RareSettingsForm() self.logout_button = QPushButton("Logout")