diff options
| author | Mikaƫl Capelle <capelle.mikael@gmail.com> | 2021-01-30 18:21:56 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-01-30 18:21:56 +0100 |
| commit | 3b360162e1d16f0f54e4163a16efe56fb50152c7 (patch) | |
| tree | 7c4184886251cf91ac0a6ad18d4a6641e6535b07 /src | |
| parent | f53e5406d4292f484257178ec5733f6ceb116673 (diff) | |
| parent | 76989e2b8f6dc3cea2c2e90813feb86af2ecad14 (diff) | |
Merge pull request #1386 from Holt59/update-settings-dialog
Update settings dialog.
Diffstat (limited to 'src')
| -rw-r--r-- | src/CMakeLists.txt | 5 | ||||
| -rw-r--r-- | src/loadmechanism.cpp | 64 | ||||
| -rw-r--r-- | src/loadmechanism.h | 61 | ||||
| -rw-r--r-- | src/organizercore.cpp | 6 | ||||
| -rw-r--r-- | src/pluginlist.cpp | 20 | ||||
| -rw-r--r-- | src/pluginlist.h | 6 | ||||
| -rw-r--r-- | src/profile.cpp | 5 | ||||
| -rw-r--r-- | src/profile.h | 6 | ||||
| -rw-r--r-- | src/settings.cpp | 56 | ||||
| -rw-r--r-- | src/settings.h | 18 | ||||
| -rw-r--r-- | src/settingsdialog.cpp | 8 | ||||
| -rw-r--r-- | src/settingsdialog.ui | 2144 | ||||
| -rw-r--r-- | src/settingsdialoggeneral.cpp | 74 | ||||
| -rw-r--r-- | src/settingsdialoggeneral.h | 4 | ||||
| -rw-r--r-- | src/settingsdialogmodlist.cpp (renamed from src/settingsdialoguserinterface.cpp) | 30 | ||||
| -rw-r--r-- | src/settingsdialogmodlist.h (renamed from src/settingsdialoguserinterface.h) | 8 | ||||
| -rw-r--r-- | src/settingsdialognexus.cpp | 8 | ||||
| -rw-r--r-- | src/settingsdialogsteam.cpp | 17 | ||||
| -rw-r--r-- | src/settingsdialogsteam.h | 14 | ||||
| -rw-r--r-- | src/settingsdialogtheme.cpp | 82 | ||||
| -rw-r--r-- | src/settingsdialogtheme.h | 24 | ||||
| -rw-r--r-- | src/settingsdialogworkarounds.cpp | 50 |
22 files changed, 1279 insertions, 1431 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e8c52721..9b00cc5c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -29,7 +29,6 @@ add_filter(NAME src/core GROUPS categories archivefiletree installationmanager - loadmechanism nexusinterface nxmaccessmanager organizercore @@ -202,9 +201,9 @@ add_filter(NAME src/settingsdialog GROUPS settingsdialognexus settingsdialogpaths settingsdialogplugins - settingsdialogsteam settingsdialogworkarounds - settingsdialoguserinterface + settingsdialogmodlist + settingsdialogtheme disableproxyplugindialog ) diff --git a/src/loadmechanism.cpp b/src/loadmechanism.cpp deleted file mode 100644 index e05ec584..00000000 --- a/src/loadmechanism.cpp +++ /dev/null @@ -1,64 +0,0 @@ -/*
-Copyright (C) 2012 Sebastian Herbord. All rights reserved.
-
-This file is part of Mod Organizer.
-
-Mod Organizer is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-Mod Organizer is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "loadmechanism.h"
-#include "utility.h"
-#include "shared/util.h"
-#include <iplugingame.h>
-#include <scriptextender.h>
-#include "shared/appconfig.h"
-#include <log.h>
-#include <QFile>
-#include <QFileInfo>
-#include <QDir>
-#include <QString>
-#include <QMessageBox>
-#include <QCryptographicHash>
-#include <QCoreApplication>
-
-using namespace MOBase;
-using namespace MOShared;
-
-LoadMechanism::LoadMechanism()
- : m_SelectedMechanism(LOAD_MODORGANIZER)
-{
-}
-
-bool LoadMechanism::isDirectLoadingSupported() const
-{
- return true;
-}
-
-void LoadMechanism::activate(EMechanism)
-{
- // no-op
-}
-
-
-QString toString(LoadMechanism::EMechanism e)
-{
- switch (e)
- {
- case LoadMechanism::LOAD_MODORGANIZER:
- return "ModOrganizer";
-
- default:
- return QString("unknown (%1)").arg(static_cast<int>(e));
- }
-}
diff --git a/src/loadmechanism.h b/src/loadmechanism.h deleted file mode 100644 index 151e804f..00000000 --- a/src/loadmechanism.h +++ /dev/null @@ -1,61 +0,0 @@ -/*
-Copyright (C) 2012 Sebastian Herbord. All rights reserved.
-
-This file is part of Mod Organizer.
-
-Mod Organizer is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-Mod Organizer is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef LOADMECHANISM_H
-#define LOADMECHANISM_H
-
-
-#include <QDir>
-#include <QString>
-
-
-/**
- * @brief manages the various load mechanisms supported by Mod Organizer
- **/
-class LoadMechanism
-{
-public:
- enum EMechanism {
- LOAD_MODORGANIZER = 0,
- };
-
- LoadMechanism();
-
- /**
- * activate the specified mechanism. This automatically disables any other mechanism active
- *
- * @param mechanism the mechanism to activate
- **/
- void activate(EMechanism mechanism);
-
- /**
- * @brief test whether the "Mod Organizer" load mechanism is supported for the current game
- *
- * @return true
- **/
- bool isDirectLoadingSupported() const;
-
-private:
- EMechanism m_SelectedMechanism;
-};
-
-
-QString toString(LoadMechanism::EMechanism e);
-
-#endif // LOADMECHANISM_H
diff --git a/src/organizercore.cpp b/src/organizercore.cpp index df4cfe5e..3874560b 100644 --- a/src/organizercore.cpp +++ b/src/organizercore.cpp @@ -5,7 +5,6 @@ #include "imoinfo.h" #include "iplugingame.h" #include "iuserinterface.h" -#include "loadmechanism.h" #include "messagedialog.h" #include "modlistsortproxy.h" #include "modrepositoryfileinfo.h" @@ -1863,9 +1862,7 @@ void OrganizerCore::savePluginList() }); return; } - m_PluginList.saveTo(m_CurrentProfile->getLockedOrderFileName(), - m_CurrentProfile->getDeleterFileName(), - m_Settings.game().hideUncheckedPlugins()); + m_PluginList.saveTo(m_CurrentProfile->getLockedOrderFileName()); m_PluginList.saveLoadOrder(*m_DirectoryStructure); } @@ -1878,7 +1875,6 @@ void OrganizerCore::saveCurrentProfile() m_CurrentProfile->writeModlist(); m_CurrentProfile->createTweakedIniFile(); saveCurrentLists(); - m_Settings.game().loadMechanism().activate(m_Settings.game().loadMechanismType()); storeSettings(); } diff --git a/src/pluginlist.cpp b/src/pluginlist.cpp index 1c86a4a7..9733d4f3 100644 --- a/src/pluginlist.cpp +++ b/src/pluginlist.cpp @@ -583,9 +583,7 @@ void PluginList::writeLockedOrder(const QString &fileName) const file.commit();
}
-void PluginList::saveTo(const QString &lockedOrderFileName
- , const QString& deleterFileName
- , bool hideUnchecked) const
+void PluginList::saveTo(const QString &lockedOrderFileName) const
{
GamePlugins *gamePlugins = m_GamePlugin->feature<GamePlugins>();
if (gamePlugins) {
@@ -593,22 +591,6 @@ void PluginList::saveTo(const QString &lockedOrderFileName }
writeLockedOrder(lockedOrderFileName);
-
- if (hideUnchecked) {
- SafeWriteFile deleterFile(deleterFileName);
- deleterFile->write(QString("# This file was automatically generated by Mod Organizer.\r\n").toUtf8());
-
- for (size_t i = 0; i < m_ESPs.size(); ++i) {
- int priority = m_ESPsByPriority[i];
- if (!m_ESPs[priority].enabled) {
- deleterFile->write(m_ESPs[priority].name.toUtf8());
- deleterFile->write("\r\n");
- }
- }
- deleterFile.commitIfDifferent(m_LastSaveHash[deleterFileName]);
- } else if (QFile::exists(deleterFileName)) {
- shellDelete(QStringList() << deleterFileName);
- }
}
diff --git a/src/pluginlist.h b/src/pluginlist.h index c16bfc98..e12a8798 100644 --- a/src/pluginlist.h +++ b/src/pluginlist.h @@ -180,12 +180,8 @@ public: * @brief save the plugin status to the specified file
*
* @param lockedOrderFileName path of the lockedorder.txt to write to
- * @param deleterFileName file to receive a list of files to hide from the virtual data tree. This is used to hide unchecked plugins if "hideUnchecked" is true
- * @param hideUnchecked if true, plugins that aren't enabled will be hidden from the virtual data directory
**/
- void saveTo(const QString &lockedOrderFileName
- , const QString &deleterFileName
- , bool hideUnchecked) const;
+ void saveTo(const QString &lockedOrderFileName) const;
/**
* @brief save the current load order
diff --git a/src/profile.cpp b/src/profile.cpp index 2546661b..f43ac3a1 100644 --- a/src/profile.cpp +++ b/src/profile.cpp @@ -934,11 +934,6 @@ QString Profile::getArchivesFileName() const return QDir::cleanPath(m_Directory.absoluteFilePath("archives.txt")); } -QString Profile::getDeleterFileName() const -{ - return QDir::cleanPath(m_Directory.absoluteFilePath("hide_plugins.txt")); -} - QString Profile::getIniFileName() const { auto iniFiles = m_GamePlugin->iniFiles(); diff --git a/src/profile.h b/src/profile.h index 672a2c13..457d8015 100644 --- a/src/profile.h +++ b/src/profile.h @@ -190,12 +190,6 @@ public: QString getArchivesFileName() const; /** - * @return the path of the delete file in this profile - * @note the deleter file lists plugins that should be hidden from the game and other tools - **/ - QString getDeleterFileName() const; - - /** * @return the path of the ini file in this profile * @todo since the game can contain multiple ini files (i.e. skyrim.ini skyrimprefs.ini) * the concept of this function is somewhat broken diff --git a/src/settings.cpp b/src/settings.cpp index 142d3f39..20745873 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -612,62 +612,6 @@ void GameSettings::setSelectedProfileName(const QString& name) set(m_Settings, "General", "selected_profile", name.toUtf8()); } -LoadMechanism::EMechanism GameSettings::loadMechanismType() const -{ - const auto def = LoadMechanism::LOAD_MODORGANIZER; - - const auto i = get<LoadMechanism::EMechanism>(m_Settings, - "Settings", "load_mechanism", def); - - switch (i) - { - // ok - case LoadMechanism::LOAD_MODORGANIZER: // fall-through - { - break; - } - - default: - { - log::error( - "invalid load mechanism {}, reverting to {}", - static_cast<int>(i), toString(def)); - - set(m_Settings, "Settings", "load_mechanism", def); - - return def; - } - } - - return i; -} - -void GameSettings::setLoadMechanism(LoadMechanism::EMechanism m) -{ - set(m_Settings, "Settings", "load_mechanism", m); -} - -const LoadMechanism& GameSettings::loadMechanism() const -{ - return m_LoadMechanism; -} - -LoadMechanism& GameSettings::loadMechanism() -{ - return m_LoadMechanism; -} - -bool GameSettings::hideUncheckedPlugins() const -{ - return get<bool>(m_Settings, "Settings", "hide_unchecked_plugins", false); -} - -void GameSettings::setHideUncheckedPlugins(bool b) -{ - set(m_Settings, "Settings", "hide_unchecked_plugins", b); -} - - GeometrySettings::GeometrySettings(QSettings& s) : m_Settings(s), m_Reset(false) { diff --git a/src/settings.h b/src/settings.h index 96290f55..6ddee308 100644 --- a/src/settings.h +++ b/src/settings.h @@ -20,7 +20,6 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>. #ifndef SETTINGS_H #define SETTINGS_H -#include "loadmechanism.h" #include "envdump.h" #include <filterwidget.h> #include <lootcli/lootcli.h> @@ -83,26 +82,9 @@ public: std::optional<QString> selectedProfileName() const; void setSelectedProfileName(const QString& name); - // load mechanism type - // - LoadMechanism::EMechanism loadMechanismType() const; - void setLoadMechanism(LoadMechanism::EMechanism m); - - // load mechanism object - // - const LoadMechanism& loadMechanism() const; - LoadMechanism& loadMechanism(); - - // whether the user wants unchecked plugins (esp, esm) to be hidden from - // the virtual data directory - // - bool hideUncheckedPlugins() const; - void setHideUncheckedPlugins(bool b); - private: QSettings& m_Settings; const MOBase::IPluginGame* m_GamePlugin; - LoadMechanism m_LoadMechanism; }; diff --git a/src/settingsdialog.cpp b/src/settingsdialog.cpp index d6b7ceec..b14deafa 100644 --- a/src/settingsdialog.cpp +++ b/src/settingsdialog.cpp @@ -24,8 +24,8 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>. #include "settingsdialognexus.h" #include "settingsdialogpaths.h" #include "settingsdialogplugins.h" -#include "settingsdialogsteam.h" -#include "settingsdialoguserinterface.h" +#include "settingsdialogmodlist.h" +#include "settingsdialogtheme.h" #include "settingsdialogworkarounds.h" using namespace MOBase; @@ -40,11 +40,11 @@ SettingsDialog::SettingsDialog(PluginContainer *pluginContainer, Settings& setti ui->setupUi(this); m_tabs.push_back(std::unique_ptr<SettingsTab>(new GeneralSettingsTab(settings, *this))); - m_tabs.push_back(std::unique_ptr<SettingsTab>(new UserInterfaceSettingsTab(settings, *this))); + m_tabs.push_back(std::unique_ptr<SettingsTab>(new ThemeSettingsTab(settings, *this))); + m_tabs.push_back(std::unique_ptr<SettingsTab>(new ModListSettingsTab(settings, *this))); m_tabs.push_back(std::unique_ptr<SettingsTab>(new PathsSettingsTab(settings, *this))); m_tabs.push_back(std::unique_ptr<SettingsTab>(new DiagnosticsSettingsTab(settings, *this))); m_tabs.push_back(std::unique_ptr<SettingsTab>(new NexusSettingsTab(settings, *this))); - m_tabs.push_back(std::unique_ptr<SettingsTab>(new SteamSettingsTab(settings, *this))); m_tabs.push_back(std::unique_ptr<SettingsTab>(new PluginsSettingsTab(settings, m_pluginContainer, *this))); m_tabs.push_back(std::unique_ptr<SettingsTab>(new WorkaroundsSettingsTab(settings, *this))); } diff --git a/src/settingsdialog.ui b/src/settingsdialog.ui index a223d628..3ea7b735 100644 --- a/src/settingsdialog.ui +++ b/src/settingsdialog.ui @@ -23,36 +23,29 @@ <attribute name="title"> <string>General</string> </attribute> - <layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0,0,0,0,0,0,0"> + <layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0,0,0,0"> <item row="5" column="0"> - <widget class="QPushButton" name="resetDialogsButton"> - <property name="maximumSize"> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> <size> - <width>16777215</width> - <height>16777215</height> + <width>0</width> + <height>0</height> </size> </property> - <property name="toolTip"> - <string>Reset all choices made in dialogs.</string> - </property> - <property name="whatsThis"> - <string>Reset all choices made in dialogs.</string> - </property> - <property name="text"> - <string>Reset Dialog Choices</string> - </property> - </widget> + </spacer> </item> <item row="3" column="0"> - <widget class="QCheckBox" name="changeGameConfirmation"> - <property name="text"> - <string>Show confirmation when changing instance</string> + <widget class="QWidget" name="widget_8" native="true"> + <property name="minimumSize"> + <size> + <width>0</width> + <height>200</height> + </size> </property> - </widget> - </item> - <item row="0" column="0"> - <widget class="QWidget" name="widget_6" native="true"> - <layout class="QGridLayout" name="gridLayout_5" columnstretch="0,1,0"> + <layout class="QVBoxLayout" name="verticalLayout_27"> <property name="leftMargin"> <number>0</number> </property> @@ -65,38 +58,238 @@ <property name="bottomMargin"> <number>0</number> </property> - <item row="0" column="0"> - <widget class="QLabel" name="label_5"> - <property name="text"> - <string>Language</string> + <item> + <widget class="QGroupBox" name="groupBox_5"> + <property name="title"> + <string>Download List</string> </property> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <widget class="QCheckBox" name="showMetaBox"> + <property name="toolTip"> + <string>Show meta information instead of file names in the download list.</string> + </property> + <property name="whatsThis"> + <string>Show meta information instead of file names in the download list.</string> + </property> + <property name="text"> + <string>Show meta information</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="compactBox"> + <property name="toolTip"> + <string>Make the download list more compact.</string> + </property> + <property name="whatsThis"> + <string>Make the download list more compact.</string> + </property> + <property name="text"> + <string>Compact list</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="hideDownloadInstallBox"> + <property name="toolTip"> + <string>Automatically hide downloads after successful installation.</string> + </property> + <property name="whatsThis"> + <string>Automatically hide downloads after successful installation.</string> + </property> + <property name="text"> + <string>Hide downloads after installation</string> + </property> + </widget> + </item> + </layout> </widget> </item> - <item row="2" column="0"> - <widget class="QLabel" name="label_10"> - <property name="text"> - <string>Style</string> + <item> + <widget class="QGroupBox" name="groupBox_6"> + <property name="title"> + <string>Updates</string> </property> + <layout class="QVBoxLayout" name="verticalLayout_3" stretch="0,0"> + <item> + <widget class="QCheckBox" name="checkForUpdates"> + <property name="toolTip"> + <string>Check for Mod Organizer updates on Github on startup.</string> + </property> + <property name="whatsThis"> + <string>Check for Mod Organizer updates on Github on startup.</string> + </property> + <property name="text"> + <string>Check for updates</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="usePrereleaseBox"> + <property name="toolTip"> + <string>Update to non-stable releases.</string> + </property> + <property name="whatsThis"> + <string>Update to non-stable releases.</string> + </property> + <property name="text"> + <string>Update to beta versions</string> + </property> + </widget> + </item> + </layout> </widget> </item> - <item row="2" column="1"> - <widget class="QComboBox" name="styleBox"> + <item> + <widget class="QGroupBox" name="groupBox_9"> + <property name="title"> + <string>Miscellaneous</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_14"> + <property name="leftMargin"> + <number>9</number> + </property> + <property name="topMargin"> + <number>9</number> + </property> + <property name="rightMargin"> + <number>9</number> + </property> + <property name="bottomMargin"> + <number>9</number> + </property> + <item> + <widget class="QCheckBox" name="centerDialogs"> + <property name="toolTip"> + <string>Dialogs will always be centered on the main window, but will remember their size.</string> + </property> + <property name="whatsThis"> + <string>Dialogs will always be centered on the main window, but will remember their size.</string> + </property> + <property name="text"> + <string>Always center dialogs</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="changeGameConfirmation"> + <property name="text"> + <string>Show confirmation when changing instance</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="doubleClickPreviews"> + <property name="toolTip"> + <string>Whether double-clicking on a file opens the preview window or launches the program associated with it. This applies to the Data tab as well as the Conflicts and Filetree tabs in the mod info window.</string> + </property> + <property name="text"> + <string>Open previews on double-click</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + </item> + <item row="4" column="0"> + <widget class="QWidget" name="widget_10" native="true"> + <layout class="QHBoxLayout" name="horizontalLayout_12"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QPushButton" name="resetDialogsButton"> + <property name="maximumSize"> + <size> + <width>16777215</width> + <height>16777215</height> + </size> + </property> <property name="toolTip"> - <string>Visual theme of the user interface.</string> + <string>Reset all choices made in dialogs.</string> </property> <property name="whatsThis"> - <string>Visual theme of the user interface.</string> + <string>Reset all choices made in dialogs.</string> + </property> + <property name="text"> + <string>Reset Dialog Choices</string> </property> </widget> </item> - <item row="2" column="2"> - <widget class="QPushButton" name="exploreStyles"> + <item> + <widget class="QPushButton" name="categoriesBtn"> + <property name="toolTip"> + <string>Modify the categories available to arrange your mods.</string> + </property> + <property name="whatsThis"> + <string>Modify the categories available to arrange your mods.</string> + </property> <property name="text"> - <string>Explore...</string> + <string>Configure Mod Categories</string> </property> </widget> </item> - <item row="0" column="1" colspan="2"> + <item> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </item> + <item row="0" column="0"> + <widget class="QGroupBox" name="groupBox_6"> + <property name="title"> + <string>Language</string> + </property> + <layout class="QGridLayout" name="gridLayout_3"> + <property name="leftMargin"> + <number>9</number> + </property> + <property name="topMargin"> + <number>9</number> + </property> + <property name="rightMargin"> + <number>9</number> + </property> + <property name="bottomMargin"> + <number>9</number> + </property> + <item row="0" column="2"> + <spacer name="horizontalSpacer_4"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="0" column="0"> <widget class="QComboBox" name="languageBox"> <property name="toolTip"> <string>The language of the user interface.</string> @@ -106,13 +299,13 @@ </property> </widget> </item> - <item row="1" column="1" colspan="2"> + <item row="0" column="1"> <widget class="LinkLabel" name="label_33"> <property name="toolTip"> - <string>https://www.transifex.com/mod-organizer-2-team/mod-organizer-2/</string> + <string>https://discord.gg/NRGqdt5suP</string> </property> <property name="text"> - <string><a href="https://www.transifex.com/mod-organizer-2-team/mod-organizer-2/">Help translate Mod Organizer</a></string> + <string><a href="https://discord.gg/NRGqdt5suP">Help translate Mod Organizer on Discord</a></string> </property> <property name="openExternalLinks"> <bool>true</bool> @@ -122,90 +315,130 @@ </layout> </widget> </item> - <item row="6" column="0"> - <widget class="QPushButton" name="categoriesBtn"> - <property name="toolTip"> - <string>Modify the categories available to arrange your mods.</string> - </property> - <property name="whatsThis"> - <string>Modify the categories available to arrange your mods.</string> - </property> - <property name="text"> - <string>Configure Mod Categories</string> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QCheckBox" name="centerDialogs"> - <property name="toolTip"> - <string>Dialogs will always be centered on the main window, but will remember their size.</string> - </property> - <property name="whatsThis"> - <string>Dialogs will always be centered on the main window, but will remember their size.</string> - </property> - <property name="text"> - <string>Always center dialogs</string> - </property> - </widget> - </item> - <item row="8" column="0" colspan="2"> - <spacer name="verticalSpacer"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>0</width> - <height>0</height> - </size> - </property> - </spacer> - </item> - <item row="4" column="0"> - <widget class="QCheckBox" name="doubleClickPreviews"> - <property name="toolTip"> - <string>Whether double-clicking on a file opens the preview window or launches the program associated with it. This applies to the Data tab as well as the Conflicts and Filetree tabs in the mod info window.</string> - </property> - <property name="text"> - <string>Open previews on double-click</string> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QGroupBox" name="groupBox_6"> + </layout> + </widget> + <widget class="QWidget" name="tab"> + <attribute name="title"> + <string>Theme</string> + </attribute> + <layout class="QVBoxLayout" name="verticalLayout_20"> + <item> + <widget class="QGroupBox" name="groupBox_11"> <property name="title"> - <string>Updates</string> + <string>Style</string> </property> - <layout class="QVBoxLayout" name="verticalLayout_3"> + <property name="alignment"> + <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_13"> <item> - <widget class="QCheckBox" name="checkForUpdates"> + <widget class="QComboBox" name="styleBox"> <property name="toolTip"> - <string>Check for Mod Organizer updates on Github on startup.</string> + <string>Visual theme of the user interface.</string> </property> <property name="whatsThis"> - <string>Check for Mod Organizer updates on Github on startup.</string> + <string>Visual theme of the user interface.</string> </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="exploreStyles"> <property name="text"> - <string>Check for updates</string> + <string>Explore...</string> </property> </widget> </item> <item> - <widget class="QCheckBox" name="usePrereleaseBox"> - <property name="toolTip"> - <string>Update to non-stable releases.</string> - </property> - <property name="whatsThis"> - <string>Update to non-stable releases.</string> + <spacer name="horizontalSpacer_5"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> </property> - <property name="text"> - <string>Install Pre-releases (Betas)</string> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> </property> - </widget> + </spacer> </item> </layout> </widget> </item> + <item> + <layout class="QVBoxLayout" name="verticalLayout_18"> + <item> + <widget class="QGroupBox" name="ModlistGroupBox"> + <property name="title"> + <string>Colors</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_13"> + <item> + <widget class="ColorTable" name="colorTable"> + <property name="editTriggers"> + <set>QAbstractItemView::NoEditTriggers</set> + </property> + <property name="selectionMode"> + <enum>QAbstractItemView::SingleSelection</enum> + </property> + <property name="selectionBehavior"> + <enum>QAbstractItemView::SelectRows</enum> + </property> + <property name="verticalScrollMode"> + <enum>QAbstractItemView::ScrollPerPixel</enum> + </property> + <property name="cornerButtonEnabled"> + <bool>false</bool> + </property> + <attribute name="horizontalHeaderVisible"> + <bool>false</bool> + </attribute> + <attribute name="horizontalHeaderHighlightSections"> + <bool>false</bool> + </attribute> + <attribute name="horizontalHeaderStretchLastSection"> + <bool>true</bool> + </attribute> + <attribute name="verticalHeaderVisible"> + <bool>false</bool> + </attribute> + </widget> + </item> + <item> + <widget class="QWidget" name="widget_5" native="true"> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QPushButton" name="resetColorsBtn"> + <property name="toolTip"> + <string>Reset all colors to their default value.</string> + </property> + <property name="whatsThis"> + <string>Reset all colors to their default value.</string> + </property> + <property name="text"> + <string>Reset Colors</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + </item> + </layout> + </item> </layout> </widget> <widget class="QWidget" name="uiTab"> @@ -213,415 +446,213 @@ <string/> </property> <attribute name="title"> - <string>User Interface</string> + <string>Mod List</string> </attribute> <layout class="QVBoxLayout" name="verticalLayout_19"> <item> - <layout class="QHBoxLayout" name="horizontalLayout_11"> - <property name="bottomMargin"> - <number>0</number> + <widget class="QWidget" name="widget_11" native="true"> + <layout class="QVBoxLayout" name="verticalLayout_21"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QCheckBox" name="colorSeparatorsBox"> + <property name="toolTip"> + <string>Colors set on separators will also be shown in the mod list scrollbar at the location of the separator. This can be useful for quickly navigating to a specific separator.</string> + </property> + <property name="whatsThis"> + <string>Colors set on separators will also be shown in the mod list scrollbar at the location of the separator. This can be useful for quickly navigating to a specific separator.</string> + </property> + <property name="text"> + <string>Show mod list separator colors on the scrollbar</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="displayForeignBox"> + <property name="toolTip"> + <string>Disable this to no longer display mods installed outside MO in the mod list (left pane). Assets from those mods will then be treated as having lowest mod priority together with the original game content.</string> + </property> + <property name="whatsThis"> + <string>By default Mod Organizer will display esp+bsa bundles installed with foreign tools as mods (left pane). This allows you to control their priority in relation to other mods. This is particularly useful if you also use Steam Workshop to install mods. +However, if you installed loose file mods outside MO which conflict with BSAs also installed outside MO those conflicts can't be resolved correctly. + +If you disable this feature, MO will only display official DLCs this way. Please note that plugins (esps, esms, and esls) displayed in the right pane are completely unaffected by this feature.</string> + </property> + <property name="text"> + <string>Display mods installed outside MO</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="saveFiltersBox"> + <property name="toolTip"> + <string>Save the current filters when closing MO2 and restore them on startup.</string> + </property> + <property name="whatsThis"> + <string>Save the current filters when closing MO2 and restore them on startup.</string> + </property> + <property name="text"> + <string>Remember selected filters after restarting MO</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="checkUpdateInstallBox"> + <property name="toolTip"> + <string>Check if updates are available for mods after installing them.</string> + </property> + <property name="whatsThis"> + <string>Check if updates are available for mods after installing them.</string> + </property> + <property name="text"> + <string>Check for updates when installing mods</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="autoCollapseDelayBox"> + <property name="toolTip"> + <string>Automatically collapse separators, categories or nexus ids after a delay when hovering them during drag.</string> + </property> + <property name="whatsThis"> + <string>Automatically collapse separators, categories or nexus ids after a delay when hovering them during drag.</string> + </property> + <property name="text"> + <string>Automatically collapse items during drag on hover</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <spacer name="verticalSpacer_5"> + <property name="orientation"> + <enum>Qt::Vertical</enum> </property> - <item> - <widget class="QGroupBox" name="groupBox_4"> - <property name="minimumSize"> - <size> - <width>0</width> - <height>0</height> - </size> - </property> - <property name="title"> - <string>Mod List</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout_17"> - <item> - <widget class="QCheckBox" name="colorSeparatorsBox"> + <property name="sizeType"> + <enum>QSizePolicy::Fixed</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>10</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QGroupBox" name="collapsibleSeparatorsWidget"> + <property name="title"> + <string>Collapsible Separators</string> + </property> + <property name="flat"> + <bool>false</bool> + </property> + <property name="checkable"> + <bool>false</bool> + </property> + <property name="checked"> + <bool>false</bool> + </property> + <layout class="QVBoxLayout" name="verticalLayout_17"> + <item> + <layout class="QGridLayout" name="gridLayout_9"> + <property name="verticalSpacing"> + <number>9</number> + </property> + <item row="5" column="1"> + <widget class="QCheckBox" name="collapsibleSeparatorsHighlightToBox"> <property name="toolTip"> - <string>Colors set on separators will also be shown in the mod list scrollbar at the location of the separator. This can be useful for quickly navigating to a specific separator.</string> + <string>Highlight collapsed separators based on conflicts and plugins from mods inside them.</string> </property> <property name="whatsThis"> - <string>Colors set on separators will also be shown in the mod list scrollbar at the location of the separator. This can be useful for quickly navigating to a specific separator.</string> + <string>Highlight collapsed separators based on conflicts and plugins from mods inside them.</string> </property> <property name="text"> - <string>Show mod list separator colors on the scrollbar</string> + <string>on separators</string> </property> <property name="checked"> <bool>true</bool> </property> </widget> </item> - <item> - <widget class="QCheckBox" name="displayForeignBox"> - <property name="toolTip"> - <string>Disable this to no longer display mods installed outside MO in the mod list (left pane). Assets from those mods will then be treated as having lowest mod priority together with the original game content.</string> - </property> - <property name="whatsThis"> - <string>By default Mod Organizer will display esp+bsa bundles installed with foreign tools as mods (left pane). This allows you to control their priority in relation to other mods. This is particularly useful if you also use Steam Workshop to install mods. -However, if you installed loose file mods outside MO which conflict with BSAs also installed outside MO those conflicts can't be resolved correctly. - -If you disable this feature, MO will only display official DLCs this way. Please note that plugins (esps, esms, and esls) displayed in the right pane are completely unaffected by this feature.</string> - </property> + <item row="1" column="0"> + <widget class="QLabel" name="collapsibleSeparatorsLabel"> <property name="text"> - <string>Display mods installed outside MO</string> - </property> - <property name="checked"> - <bool>true</bool> + <string>Enable when sorting by</string> </property> </widget> </item> - <item> - <widget class="QCheckBox" name="saveFiltersBox"> - <property name="toolTip"> - <string>Save the current filters when closing MO2 and restore them on startup.</string> - </property> - <property name="whatsThis"> - <string>Save the current filters when closing MO2 and restore them on startup.</string> - </property> + <item row="5" column="0"> + <widget class="QLabel" name="label_34"> <property name="text"> - <string>Remember selected filters after restarting MO</string> + <string>Show conflicts and plugins </string> </property> </widget> </item> - <item> - <widget class="QCheckBox" name="checkUpdateInstallBox"> + <item row="5" column="2"> + <widget class="QCheckBox" name="collapsibleSeparatorsHighlightFromBox"> <property name="toolTip"> - <string>Check if updates are available for mods after installing them.</string> + <string>When selecting a collapsed separator, highlight conflicting mods and plugins from mods inside the separator.</string> </property> <property name="whatsThis"> - <string>Check if updates are available for mods after installing them.</string> + <string>When selecting a collapsed separator, highlight conflicting mods and plugins from mods inside the separator.</string> </property> <property name="text"> - <string>Check for updates when installing mods</string> + <string>from separators</string> </property> <property name="checked"> <bool>true</bool> </property> </widget> </item> - <item> - <widget class="QCheckBox" name="autoCollapseDelayBox"> - <property name="toolTip"> - <string>Automatically collapse separators, categories or nexus ids after a delay when hovering them during drag.</string> - </property> - <property name="whatsThis"> - <string>Automatically collapse separators, categories or nexus ids after a delay when hovering them during drag.</string> - </property> + <item row="1" column="1"> + <widget class="QCheckBox" name="collapsibleSeparatorsAscBox"> <property name="text"> - <string>Automatically collapse items during drag on hover</string> - </property> - </widget> - </item> - <item> - <spacer name="verticalSpacer_9"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeType"> - <enum>QSizePolicy::Fixed</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>0</width> - <height>5</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QGroupBox" name="collapsibleSeparatorsBox"> - <property name="title"> - <string>Collapsible Separators</string> - </property> - <property name="flat"> - <bool>false</bool> - </property> - <property name="checkable"> - <bool>false</bool> + <string>ascending priority</string> </property> <property name="checked"> - <bool>false</bool> + <bool>true</bool> </property> - <layout class="QGridLayout" name="gridLayout_7"> - <item row="0" column="0"> - <widget class="QWidget" name="collapsibleSeparatorsWidget" native="true"> - <property name="minimumSize"> - <size> - <width>0</width> - <height>50</height> - </size> - </property> - <layout class="QGridLayout" name="gridLayout_10"> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item row="0" column="0"> - <layout class="QGridLayout" name="gridLayout_9"> - <property name="verticalSpacing"> - <number>9</number> - </property> - <item row="0" column="0"> - <widget class="QLabel" name="collapsibleSeparatorsLabel"> - <property name="text"> - <string>When sorting by</string> - </property> - </widget> - </item> - <item row="3" column="0"> - <widget class="QLabel" name="label_35"> - <property name="text"> - <string>Show icons on separators</string> - </property> - </widget> - </item> - <item row="3" column="2"> - <widget class="QCheckBox" name="collapsibleSeparatorsIconsFlagsBox"> - <property name="text"> - <string>flags</string> - </property> - <property name="checked"> - <bool>true</bool> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="label_34"> - <property name="text"> - <string>Show conflicts and plugins </string> - </property> - </widget> - </item> - <item row="3" column="1"> - <widget class="QCheckBox" name="collapsibleSeparatorsIconsConflictsBox"> - <property name="text"> - <string>conflicts</string> - </property> - <property name="checked"> - <bool>true</bool> - </property> - </widget> - </item> - <item row="3" column="3"> - <widget class="QCheckBox" name="collapsibleSeparatorsIconsContentsBox"> - <property name="text"> - <string>content</string> - </property> - <property name="checked"> - <bool>true</bool> - </property> - </widget> - </item> - <item row="3" column="4"> - <widget class="QCheckBox" name="collapsibleSeparatorsIconsVersionBox"> - <property name="text"> - <string>version</string> - </property> - <property name="checked"> - <bool>true</bool> - </property> - </widget> - </item> - <item row="0" column="1" colspan="2"> - <widget class="QCheckBox" name="collapsibleSeparatorsAscBox"> - <property name="text"> - <string>ascending priority</string> - </property> - <property name="checked"> - <bool>true</bool> - </property> - </widget> - </item> - <item row="0" column="3" colspan="2"> - <widget class="QCheckBox" name="collapsibleSeparatorsDscBox"> - <property name="text"> - <string>descending priority</string> - </property> - </widget> - </item> - <item row="2" column="1" colspan="2"> - <widget class="QCheckBox" name="collapsibleSeparatorsHighlightToBox"> - <property name="toolTip"> - <string>Highlight collapsed separators based on conflicts and plugins from mods inside them.</string> - </property> - <property name="whatsThis"> - <string>Highlight collapsed separators based on conflicts and plugins from mods inside them.</string> - </property> - <property name="text"> - <string>on separators</string> - </property> - <property name="checked"> - <bool>true</bool> - </property> - </widget> - </item> - <item row="2" column="3" colspan="2"> - <widget class="QCheckBox" name="collapsibleSeparatorsHighlightFromBox"> - <property name="toolTip"> - <string>When selecting a collapsed separator, highlight conflicting mods and plugins from mods inside the separator.</string> - </property> - <property name="whatsThis"> - <string>When selecting a collapsed separator, highlight conflicting mods and plugins from mods inside the separator.</string> - </property> - <property name="text"> - <string>from separators</string> - </property> - <property name="checked"> - <bool>true</bool> - </property> - </widget> - </item> - <item row="1" column="0" colspan="5"> - <widget class="QCheckBox" name="collapsibleSeparatorsPerProfileBox"> - <property name="toolTip"> - <string>Do not share the collapse/expanded state of separators between profiles.</string> - </property> - <property name="whatsThis"> - <string>Do not share the collapse/expanded state of separators between profiles.</string> - </property> - <property name="text"> - <string>Profile-specific collapse states for separators</string> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </widget> - </item> - </layout> </widget> </item> - <item> - <spacer name="verticalSpacer_12"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeType"> - <enum>QSizePolicy::Expanding</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>0</width> - <height>0</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="groupBox_5"> - <property name="title"> - <string>Download List</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <item> - <widget class="QCheckBox" name="showMetaBox"> - <property name="toolTip"> - <string>Show meta information instead of file names in the download list.</string> - </property> - <property name="whatsThis"> - <string>Show meta information instead of file names in the download list.</string> - </property> + <item row="1" column="2"> + <widget class="QCheckBox" name="collapsibleSeparatorsDscBox"> <property name="text"> - <string>Show Meta Information</string> + <string>descending priority</string> </property> </widget> </item> - <item> - <widget class="QCheckBox" name="compactBox"> - <property name="toolTip"> - <string>Make the download list more compact.</string> - </property> - <property name="whatsThis"> - <string>Make the download list more compact.</string> - </property> + <item row="8" column="0"> + <widget class="QLabel" name="label_35"> <property name="text"> - <string>Compact List</string> + <string>Show icons on separators</string> </property> </widget> </item> - <item> - <widget class="QCheckBox" name="hideDownloadInstallBox"> - <property name="toolTip"> - <string>Automatically hide downloads after successful installation.</string> - </property> - <property name="whatsThis"> - <string>Automatically hide downloads after successful installation.</string> - </property> - <property name="text"> - <string>Hide downloads after installation</string> - </property> - </widget> - </item> - <item> - <spacer name="verticalSpacer_5"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>0</width> - <height>0</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - </item> - </layout> - </item> - <item> - <layout class="QVBoxLayout" name="verticalLayout_18"> - <item> - <widget class="QGroupBox" name="ModlistGroupBox"> - <property name="title"> - <string>Colors</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout_13"> - <item> - <widget class="ColorTable" name="colorTable"> - <property name="editTriggers"> - <set>QAbstractItemView::NoEditTriggers</set> - </property> - <property name="selectionMode"> - <enum>QAbstractItemView::SingleSelection</enum> - </property> - <property name="selectionBehavior"> - <enum>QAbstractItemView::SelectRows</enum> - </property> - <property name="verticalScrollMode"> - <enum>QAbstractItemView::ScrollPerPixel</enum> - </property> - <property name="cornerButtonEnabled"> - <bool>false</bool> - </property> - <attribute name="horizontalHeaderVisible"> - <bool>false</bool> - </attribute> - <attribute name="horizontalHeaderHighlightSections"> - <bool>false</bool> - </attribute> - <attribute name="horizontalHeaderStretchLastSection"> - <bool>true</bool> - </attribute> - <attribute name="verticalHeaderVisible"> - <bool>false</bool> - </attribute> - </widget> - </item> - <item> - <widget class="QWidget" name="widget_5" native="true"> - <layout class="QHBoxLayout" name="horizontalLayout_3"> + <item row="8" column="1" colspan="2"> + <widget class="QWidget" name="widget_4" native="true"> + <layout class="QHBoxLayout" name="horizontalLayout_7"> <property name="leftMargin"> <number>0</number> </property> @@ -635,25 +666,78 @@ If you disable this feature, MO will only display official DLCs this way. Please <number>0</number> </property> <item> - <widget class="QPushButton" name="resetColorsBtn"> - <property name="toolTip"> - <string>Reset all colors to their default value.</string> + <widget class="QCheckBox" name="collapsibleSeparatorsIconsConflictsBox"> + <property name="text"> + <string>conflicts</string> </property> - <property name="whatsThis"> - <string>Reset all colors to their default value.</string> + <property name="checked"> + <bool>true</bool> </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="collapsibleSeparatorsIconsFlagsBox"> <property name="text"> - <string>Reset Colors</string> + <string>flags</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="collapsibleSeparatorsIconsContentsBox"> + <property name="text"> + <string>content</string> + </property> + <property name="checked"> + <bool>true</bool> </property> </widget> </item> + <item> + <widget class="QCheckBox" name="collapsibleSeparatorsIconsVersionBox"> + <property name="text"> + <string>version</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_3"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> </layout> </widget> </item> </layout> - </widget> - </item> - </layout> + </item> + <item> + <widget class="QCheckBox" name="collapsibleSeparatorsPerProfileBox"> + <property name="toolTip"> + <string>Do not share the collapse/expanded state of separators between profiles.</string> + </property> + <property name="whatsThis"> + <string>Do not share the collapse/expanded state of separators between profiles.</string> + </property> + <property name="text"> + <string>Profile-specific collapse states for separators</string> + </property> + </widget> + </item> + </layout> + </widget> </item> <item> <spacer name="verticalSpacer_13"> @@ -874,7 +958,7 @@ If you disable this feature, MO will only display official DLCs this way. Please <item> <widget class="QLabel" name="label_23"> <property name="text"> - <string>Important: All directories have to be writable!</string> + <string> All directories must be writable.</string> </property> </widget> </item> @@ -884,7 +968,7 @@ If you disable this feature, MO will only display official DLCs this way. Please <attribute name="title"> <string>Nexus</string> </attribute> - <layout class="QVBoxLayout" name="verticalLayout_4" stretch="0,1,0,0,0,1"> + <layout class="QVBoxLayout" name="verticalLayout_4" stretch="0,1,0,0"> <item> <widget class="QWidget" name="widget" native="true"> <layout class="QHBoxLayout" name="horizontalLayout_5"> @@ -922,7 +1006,7 @@ If you disable this feature, MO will only display official DLCs this way. Please <item row="0" column="1"> <widget class="QLabel" name="nexusUserID"> <property name="text"> - <string>id</string> + <string notr="true">id</string> </property> </widget> </item> @@ -936,7 +1020,7 @@ If you disable this feature, MO will only display official DLCs this way. Please <item row="1" column="1"> <widget class="QLabel" name="nexusName"> <property name="text"> - <string>name</string> + <string notr="true">name</string> </property> </widget> </item> @@ -950,7 +1034,7 @@ If you disable this feature, MO will only display official DLCs this way. Please <item row="2" column="1"> <widget class="QLabel" name="nexusAccount"> <property name="text"> - <string>account</string> + <string notr="true">account</string> </property> </widget> </item> @@ -976,7 +1060,7 @@ If you disable this feature, MO will only display official DLCs this way. Please <item row="0" column="1"> <widget class="QLabel" name="nexusDailyRequests"> <property name="text"> - <string>daily requests</string> + <string notr="true">daily requests</string> </property> </widget> </item> @@ -990,7 +1074,7 @@ If you disable this feature, MO will only display official DLCs this way. Please <item row="1" column="1"> <widget class="QLabel" name="nexusHourlyRequests"> <property name="text"> - <string>hourly requests</string> + <string notr="true">hourly requests</string> </property> </widget> </item> @@ -1097,282 +1181,176 @@ If you disable this feature, MO will only display official DLCs this way. Please </widget> </item> <item> - <widget class="QWidget" name="widget_4" native="true"> - <layout class="QHBoxLayout" name="horizontalLayout_10"> + <widget class="QGroupBox" name="settingsBox"> + <property name="title"> + <string>Options</string> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_2"> <property name="leftMargin"> - <number>0</number> + <number>9</number> </property> <property name="topMargin"> - <number>0</number> + <number>9</number> </property> <property name="rightMargin"> - <number>0</number> + <number>9</number> </property> <property name="bottomMargin"> - <number>0</number> + <number>9</number> </property> + <item> + <widget class="QWidget" name="widget_13" native="true"> + <layout class="QVBoxLayout" name="verticalLayout_25"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QCheckBox" name="endorsementBox"> + <property name="text"> + <string>Endorsement Integration</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="trackedBox"> + <property name="text"> + <string>Tracked Integration</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="hideAPICounterBox"> + <property name="toolTip"> + <string><html><head/><body><p>By default, a counter is displayed in the bottom right corner. This informs the user of their remaining API requests. The Nexus API becomes unusable once these API requests run out. Checking this option will hide that counter.</p></body></html></string> + </property> + <property name="whatsThis"> + <string><html><head/><body><p>By default, a counter is displayed in the bottom right corner. This informs the user of their remaining API requests. The Nexus API becomes unusable once these API requests run out. Checking this option will hide that counter.</p></body></html></string> + </property> + <property name="text"> + <string>Hide API Request Counter</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QWidget" name="widget_14" native="true"> + <layout class="QVBoxLayout" name="verticalLayout_26"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QPushButton" name="associateButton"> + <property name="text"> + <string>Associate with "Download with manager" links</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="clearCacheButton"> + <property name="toolTip"> + <string>Remove cache and cookies.</string> + </property> + <property name="text"> + <string>Clear Cache</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> </layout> </widget> </item> <item> - <layout class="QGridLayout" name="gridLayout_8" columnstretch="1,1"> - <item row="1" column="0"> - <widget class="QCheckBox" name="proxyBox"> - <property name="statusTip"> - <string>Use a proxy for network connections.</string> - </property> - <property name="whatsThis"> - <string>Use a proxy for network connections. This uses the system-wide settings which can be configured in Internet Explorer. Please note that MO will start up a few seconds slower on some systems when using a proxy.</string> - </property> - <property name="text"> - <string>Use HTTP Proxy (Uses System Settings)</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QCheckBox" name="trackedBox"> - <property name="text"> - <string>Tracked Integration</string> - </property> - <property name="checked"> - <bool>true</bool> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QCheckBox" name="endorsementBox"> - <property name="text"> - <string>Endorsement Integration</string> - </property> - <property name="checked"> - <bool>true</bool> - </property> - </widget> - </item> - <item row="0" column="0"> - <widget class="QCheckBox" name="offlineBox"> - <property name="statusTip"> - <string>Disable automatic internet features</string> - </property> - <property name="whatsThis"> - <string>Disable automatic internet features. This does not affect features that are explicitly invoked by the user (like checking mods for updates, endorsing, opening the web browser)</string> - </property> - <property name="text"> - <string>Offline Mode</string> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QCheckBox" name="hideAPICounterBox"> - <property name="toolTip"> - <string><html><head/><body><p>By default, a counter is displayed in the bottom right corner. This informs the user of their remaining API requests. The Nexus API becomes unusable once these API requests run out. Checking this option will hide that counter.</p></body></html></string> - </property> - <property name="whatsThis"> - <string><html><head/><body><p>By default, a counter is displayed in the bottom right corner. This informs the user of their remaining API requests. The Nexus API becomes unusable once these API requests run out. Checking this option will hide that counter.</p></body></html></string> - </property> - <property name="text"> - <string>Hide API Request Counter</string> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="QWidget" name="widget_7" native="true"> - <layout class="QHBoxLayout" name="horizontalLayout_9"> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> + <widget class="QGroupBox" name="serversBox"> + <property name="title"> + <string>Servers</string> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_8" stretch="0,0"> + <property name="spacing"> + <number>4</number> + </property> + <property name="leftMargin"> + <number>9</number> + </property> + <property name="topMargin"> + <number>9</number> + </property> + <property name="rightMargin"> + <number>9</number> + </property> + <property name="bottomMargin"> + <number>9</number> + </property> + <item> + <layout class="QVBoxLayout" name="verticalLayout_6"> <item> - <widget class="QCheckBox" name="useCustomBrowser"> - <property name="toolTip"> - <string>Use "%1" as a placeholder for the URL.</string> - </property> - <property name="statusTip"> - <string>Use "%1" as a placeholder for the URL.</string> - </property> - <property name="whatsThis"> - <string>Use "%1" as a placeholder for the URL.</string> - </property> + <widget class="QLabel" name="label_16"> <property name="text"> - <string>Custom browser</string> + <string>Known Servers (updated on download)</string> </property> </widget> </item> <item> - <widget class="QLineEdit" name="browserCommand"> - <property name="toolTip"> - <string>Use "%1" as a placeholder for the URL.</string> + <widget class="QListWidget" name="knownServersList"> + <property name="dragDropMode"> + <enum>QAbstractItemView::DragDrop</enum> </property> - <property name="statusTip"> - <string>Use "%1" as a placeholder for the URL.</string> - </property> - <property name="whatsThis"> - <string>Use "%1" as a placeholder for the URL.</string> + <property name="defaultDropAction"> + <enum>Qt::MoveAction</enum> </property> </widget> </item> + </layout> + </item> + <item> + <layout class="QVBoxLayout" name="verticalLayout_8"> <item> - <widget class="QToolButton" name="browseCustomBrowser"> + <widget class="QLabel" name="label_17"> <property name="text"> - <string>...</string> + <string>Preferred Servers (Drag & Drop)</string> + </property> + </widget> + </item> + <item> + <widget class="QListWidget" name="preferredServersList"> + <property name="dragDropMode"> + <enum>QAbstractItemView::DragDrop</enum> + </property> + <property name="defaultDropAction"> + <enum>Qt::MoveAction</enum> </property> </widget> </item> </layout> - </widget> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_7"> - <item> - <widget class="QPushButton" name="associateButton"> - <property name="text"> - <string>Associate with "Download with manager" links</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="clearCacheButton"> - <property name="toolTip"> - <string>Remove cache and cookies.</string> - </property> - <property name="text"> - <string>Clear Cache</string> - </property> - <property name="icon"> - <iconset resource="resources.qrc"> - <normaloff>:/MO/gui/edit_clear</normaloff>:/MO/gui/edit_clear</iconset> - </property> - </widget> - </item> - <item> - <spacer name="horizontalSpacer_4"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_8" stretch="0,0"> - <property name="spacing"> - <number>4</number> - </property> - <item> - <layout class="QVBoxLayout" name="verticalLayout_6"> - <item> - <widget class="QLabel" name="label_16"> - <property name="text"> - <string>Known Servers (updated on download)</string> - </property> - </widget> - </item> - <item> - <widget class="QListWidget" name="knownServersList"> - <property name="dragDropMode"> - <enum>QAbstractItemView::DragDrop</enum> - </property> - <property name="defaultDropAction"> - <enum>Qt::MoveAction</enum> - </property> - </widget> - </item> - </layout> - </item> - <item> - <layout class="QVBoxLayout" name="verticalLayout_8"> - <item> - <widget class="QLabel" name="label_17"> - <property name="text"> - <string>Preferred Servers (Drag & Drop)</string> - </property> - </widget> - </item> - <item> - <widget class="QListWidget" name="preferredServersList"> - <property name="dragDropMode"> - <enum>QAbstractItemView::DragDrop</enum> - </property> - <property name="defaultDropAction"> - <enum>Qt::MoveAction</enum> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </item> - </layout> - </widget> - <widget class="QWidget" name="steamTab"> - <attribute name="title"> - <string>Steam</string> - </attribute> - <layout class="QGridLayout" name="gridLayout_3"> - <item row="1" column="0"> - <widget class="QLabel" name="label_19"> - <property name="text"> - <string>Username</string> - </property> - </widget> - </item> - <item row="4" column="0"> - <spacer name="verticalSpacer_4"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeType"> - <enum>QSizePolicy::Expanding</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>232</height> - </size> - </property> - </spacer> - </item> - <item row="1" column="1"> - <widget class="QLineEdit" name="steamUserEdit"/> - </item> - <item row="0" column="0" colspan="2"> - <widget class="QLabel" name="label_21"> - <property name="text"> - <string><html><head/><body><p>If you save your steam user ID and password here, they will be used when logging into steam.</p></body></html></string> - </property> - <property name="wordWrap"> - <bool>true</bool> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="label_20"> - <property name="text"> - <string>Password</string> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="QLineEdit" name="steamPassEdit"> - <property name="echoMode"> - <enum>QLineEdit::Password</enum> - </property> + </item> + </layout> </widget> </item> </layout> @@ -1624,34 +1602,119 @@ If you disable this feature, MO will only display official DLCs this way. Please </attribute> <layout class="QVBoxLayout" name="verticalLayout_5"> <item> - <layout class="QHBoxLayout" name="horizontalLayout_2" stretch="0,0,0"> - <item> - <widget class="QLabel" name="label_4"> - <property name="text"> - <string>Steam App ID</string> - </property> - </widget> - </item> - <item> - <spacer name="horizontalSpacer"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QLineEdit" name="appIDEdit"> - <property name="toolTip"> - <string>The Steam AppID for your game</string> - </property> - <property name="whatsThis"> - <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + <widget class="QGroupBox" name="workaroundsOptionsBox"> + <property name="title"> + <string>Options</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_23"> + <property name="leftMargin"> + <number>9</number> + </property> + <property name="topMargin"> + <number>9</number> + </property> + <property name="rightMargin"> + <number>9</number> + </property> + <property name="bottomMargin"> + <number>9</number> + </property> + <item> + <widget class="QCheckBox" name="forceEnableBox"> + <property name="toolTip"> + <string>If checked, files (i.e. esps, esms and bsas) belonging to the core game can not be disabled in the UI. (default: on)</string> + </property> + <property name="whatsThis"> + <string>If checked, files (i.e. esps, esms and bsas) belonging to the core game can not be disabled in the UI. (default: on) +Uncheck this if you want to use Mod Organizer with total conversions (like Nehrim) but be aware that the game will crash if required files are not enabled.</string> + </property> + <property name="text"> + <string>Force-enable game files</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="enableArchiveParsingBox"> + <property name="toolTip"> + <string>Enable parsing of Archives. This is an Experimental Feature. Has negative effects on performance and known incorrectness.</string> + </property> + <property name="whatsThis"> + <string><html><head/><body><p>By default, MO will parse archive files (BSA, BA2) to calculate conflicts between the contents of the archive files and other loose files. This process has a noticeable cost in performance.</p><p>This feature should not be confused with the archive management feature offered by MO1. MO2 will only show conflicts with archives and will NOT load them into the game or program.</p><p>If you disable this feature, MO will only display conflicts between loose files.</p></body></html></string> + </property> + <property name="text"> + <string>Enable archives parsing (experimental)</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="lockGUIBox"> + <property name="toolTip"> + <string>Disable this to prevent the GUI from being locked when running an executable. This may result in abnormal behavior.</string> + </property> + <property name="whatsThis"> + <string>Disable this to prevent the GUI from being locked when running an executable. This may result in abnormal behavior.</string> + </property> + <property name="text"> + <string>Lock GUI when running executable</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QGroupBox" name="groupBox_12"> + <property name="title"> + <string>Steam</string> + </property> + <layout class="QGridLayout" name="gridLayout_7"> + <item row="1" column="1"> + <widget class="QLineEdit" name="steamUserEdit"/> + </item> + <item row="1" column="2"> + <widget class="QLabel" name="label_20"> + <property name="text"> + <string>Password</string> + </property> + </widget> + </item> + <item row="1" column="3"> + <widget class="QLineEdit" name="steamPassEdit"> + <property name="echoMode"> + <enum>QLineEdit::Password</enum> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_19"> + <property name="text"> + <string>Username</string> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QLabel" name="label_4"> + <property name="text"> + <string>Steam App ID</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLineEdit" name="appIDEdit"> + <property name="toolTip"> + <string>The Steam AppID for your game</string> + </property> + <property name="whatsThis"> + <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> @@ -1663,180 +1726,188 @@ p, li { white-space: pre-wrap; } <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">3. right-click on the newly created shortcut on your desktop and select </span><span style=" font-size:8pt; font-weight:600;">Properties</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">4. in the URL-field you should see something like this: </span><span style=" font-size:8pt; font-style:italic;">steam://rungameid/22380</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">22380 is the id you're looking for.</span></p></body></html></string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout" stretch="0,0,1"> - <property name="spacing"> - <number>7</number> - </property> - <item> - <widget class="QLabel" name="label"> - <property name="maximumSize"> - <size> - <width>16777215</width> - <height>16777215</height> - </size> - </property> - <property name="text"> - <string>Load Mechanism</string> - </property> - </widget> - </item> - <item> - <spacer name="horizontalSpacer_3"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QComboBox" name="mechanismBox"> - <property name="toolTip"> - <string>Select loading mechanism. See help for details.</string> - </property> - <property name="whatsThis"> - <string>Mod Organizer needs a dll to be injected into the game so all mods are visible to it. -There are several means to do this: -*Mod Organizer* (default) In this mode the Mod Organizer itself injects the dll. The disadvantage is that you always have to start the game through MO or a link created by it. -*Script Extender* In this mode, MO is installed as a Script Extender (obse, fose, nvse, skse) plugin. -*Proxy DLL* In this mode, MO replaces one of the game's dlls with one that loads MO (and the original dll of course). This will ONLY work with Steam games and it has only been tested with Skyrim. Please use this only if the other mechanisms don't work. - -If you use the Steam version of Oblivion the default will NOT work. In this case, please install obse and use "Script Extender" as the load mechanism. Also you can then not start Oblivion from MO. Instead, use MO only to set up your mods, then quit and start Oblivion through Steam.</string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <layout class="QGridLayout" name="gridLayout_6"> - <item row="1" column="0"> - <widget class="QCheckBox" name="hideUncheckedBox"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="toolTip"> - <string>Enforces that inactive ESPs and ESMs are never loaded.</string> - </property> - <property name="whatsThis"> - <string>It seems that the Games occasionally load ESP or ESM files even if they haven't been activated as plugins. -I don't yet know what the circumstances are, but user reports imply it is in some cases unwanted. If this is checked, ESPs and ESMs not checked in the List are invisible to the game and can not be loaded.</string> - </property> - <property name="text"> - <string>Hide inactive ESPs/ESMs</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QCheckBox" name="forceEnableBox"> - <property name="toolTip"> - <string>If checked, files (i.e. esps, esms and bsas) belonging to the core game can not be disabled in the UI. (default: on)</string> - </property> - <property name="whatsThis"> - <string>If checked, files (i.e. esps, esms and bsas) belonging to the core game can not be disabled in the UI. (default: on) -Uncheck this if you want to use Mod Organizer with total conversions (like Nehrim) but be aware that the game will crash if required files are not enabled.</string> - </property> - <property name="text"> - <string>Force-enable game files</string> - </property> - <property name="checked"> - <bool>true</bool> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QCheckBox" name="lockGUIBox"> - <property name="toolTip"> - <string>Disable this to prevent the GUI from being locked when running an executable. This may result in abnormal behavior.</string> - </property> - <property name="whatsThis"> - <string>Disable this to prevent the GUI from being locked when running an executable. This may result in abnormal behavior.</string> - </property> - <property name="text"> - <string>Lock GUI when running executable</string> - </property> - <property name="checked"> - <bool>true</bool> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="QCheckBox" name="enableArchiveParsingBox"> - <property name="toolTip"> - <string>Enable parsing of Archives. This is an Experimental Feature. Has negative effects on performance and known incorrectness.</string> - </property> - <property name="whatsThis"> - <string><html><head/><body><p>By default, MO will parse archive files (BSA, BA2) to calculate conflicts between the contents of the archive files and other loose files. This process has a noticeable cost in performance.</p><p>This feature should not be confused with the archive management feature offered by MO1. MO2 will only show conflicts with archives and will NOT load them into the game or program.</p><p>If you disable this feature, MO will only display conflicts between loose files.</p></body></html></string> - </property> - <property name="text"> - <string>Enable parsing of Archives (Experimental Feature)</string> - </property> - <property name="checked"> - <bool>true</bool> - </property> - </widget> - </item> - </layout> + </property> + </widget> + </item> + </layout> + </widget> </item> <item> - <widget class="QPushButton" name="bsaDateBtn"> - <property name="toolTip"> - <string>For Skyrim, this can be used instead of Archive Invalidation. It should make AI redundant for all Profiles. -For the other games this is not a sufficient replacement for AI!</string> - </property> - <property name="whatsThis"> - <string>For Skyrim, this can be used instead of Archive Invalidation. It should make AI redundant for all Profiles. -For the other games this is not a sufficient replacement for AI!</string> - </property> - <property name="text"> - <string>Back-date BSAs</string> + <widget class="QGroupBox" name="groupBox"> + <property name="minimumSize"> + <size> + <width>0</width> + <height>100</height> + </size> </property> - <property name="icon"> - <iconset> - <normaloff>:/MO/gui/resources/emblem-readonly.png</normaloff>:/MO/gui/resources/emblem-readonly.png</iconset> + <property name="title"> + <string>Network</string> </property> + <layout class="QVBoxLayout" name="verticalLayout_22"> + <item> + <widget class="QCheckBox" name="offlineBox"> + <property name="statusTip"> + <string>Disable automatic internet features</string> + </property> + <property name="whatsThis"> + <string>Disable automatic internet features. This does not affect features that are explicitly invoked by the user (like checking mods for updates, endorsing, opening the web browser)</string> + </property> + <property name="text"> + <string>Offline Mode</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="proxyBox"> + <property name="statusTip"> + <string>Use a proxy for network connections.</string> + </property> + <property name="whatsThis"> + <string>Use a proxy for network connections. This uses the system-wide settings which can be configured in Internet Explorer. Please note that MO will start up a few seconds slower on some systems when using a proxy.</string> + </property> + <property name="text"> + <string>Use System HTTP Proxy</string> + </property> + </widget> + </item> + <item> + <widget class="QWidget" name="widget_7" native="true"> + <layout class="QHBoxLayout" name="horizontalLayout_9"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QCheckBox" name="useCustomBrowser"> + <property name="toolTip"> + <string>Use "%1" as a placeholder for the URL.</string> + </property> + <property name="statusTip"> + <string>Use "%1" as a placeholder for the URL.</string> + </property> + <property name="whatsThis"> + <string>Use "%1" as a placeholder for the URL.</string> + </property> + <property name="text"> + <string>Custom browser</string> + </property> + </widget> + </item> + <item> + <widget class="QLineEdit" name="browserCommand"> + <property name="toolTip"> + <string>Use "%1" as a placeholder for the URL.</string> + </property> + <property name="statusTip"> + <string>Use "%1" as a placeholder for the URL.</string> + </property> + <property name="whatsThis"> + <string>Use "%1" as a placeholder for the URL.</string> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="browseCustomBrowser"> + <property name="text"> + <string>...</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + </layout> </widget> </item> <item> - <widget class="QPushButton" name="execBlacklistBtn"> - <property name="toolTip"> - <string>Add executables to the blacklist to prevent them from + <widget class="QWidget" name="widget_12" native="true"> + <layout class="QHBoxLayout" name="horizontalLayout"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QPushButton" name="resetGeometryBtn"> + <property name="toolTip"> + <string>Resets the window geometries for all windows. This can be useful if a window becomes too small or too large, if a column becomes too thin or too wide, and in similar situations.</string> + </property> + <property name="whatsThis"> + <string>Resets the window geometries for all windows. This can be useful if a window becomes too small or too large, if a column becomes too thin or too wide, and in similar situations.</string> + </property> + <property name="text"> + <string>Reset Window Geometries</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="execBlacklistBtn"> + <property name="toolTip"> + <string>Add executables to the blacklist to prevent them from accessing the virtual file system. This is useful to prevent unintended programs from being hooked. Hooking unintended programs may affect the execution of these programs or the programs you are intentionally running.</string> - </property> - <property name="whatsThis"> - <string>Add executables to the blacklist to prevent them from accessing the virtual file system. This is useful to prevent unintended programs from being hooked. Hooking unintended programs may affect the execution of these programs or the programs you are intentionally running.</string> - </property> - <property name="text"> - <string>Configure Executables Blacklist</string> - </property> - <property name="autoDefault"> - <bool>false</bool> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="resetGeometryBtn"> - <property name="toolTip"> - <string>Resets the window geometries for all windows. This can be useful if a window becomes too small or too large, if a column becomes too thin or too wide, and in similar situations.</string> - </property> - <property name="whatsThis"> - <string>Resets the window geometries for all windows. This can be useful if a window becomes too small or too large, if a column becomes too thin or too wide, and in similar situations.</string> - </property> - <property name="text"> - <string>Reset Window Geometries</string> - </property> + </property> + <property name="whatsThis"> + <string>Add executables to the blacklist to prevent them from accessing the virtual file system. This is useful to prevent unintended programs from being hooked. Hooking unintended programs may affect the execution of these programs or the programs you are intentionally running.</string> + </property> + <property name="text"> + <string>Executables Blacklist</string> + </property> + <property name="autoDefault"> + <bool>false</bool> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="bsaDateBtn"> + <property name="toolTip"> + <string>For Skyrim, this can be used instead of Archive Invalidation. It should make AI redundant for all Profiles. +For the other games this is not a sufficient replacement for AI!</string> + </property> + <property name="whatsThis"> + <string>For Skyrim, this can be used instead of Archive Invalidation. It should make AI redundant for all Profiles. +For the other games this is not a sufficient replacement for AI!</string> + </property> + <property name="text"> + <string>Back-date BSAs</string> + </property> + <property name="icon"> + <iconset> + <normaloff>:/MO/gui/resources/emblem-readonly.png</normaloff>:/MO/gui/resources/emblem-readonly.png</iconset> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> </widget> </item> <item> @@ -1868,24 +1939,108 @@ programs you are intentionally running.</string> <attribute name="title"> <string>Diagnostics</string> </attribute> - <layout class="QGridLayout" name="gridLayout_4"> - <item row="3" column="0"> - <spacer name="verticalSpacer_10"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeType"> - <enum>QSizePolicy::Expanding</enum> + <layout class="QVBoxLayout" name="verticalLayout_24"> + <property name="spacing"> + <number>12</number> + </property> + <item> + <widget class="QGroupBox" name="groupBox_4"> + <property name="title"> + <string>Logs and Crashes</string> </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>232</height> - </size> + <layout class="QFormLayout" name="formLayout_4"> + <property name="fieldGrowthPolicy"> + <enum>QFormLayout::FieldsStayAtSizeHint</enum> + </property> + <item row="0" column="0"> + <widget class="QLabel" name="label_12"> + <property name="text"> + <string>Log Level</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QComboBox" name="logLevelBox"> + <property name="toolTip"> + <string>Decides the amount of data printed to "ModOrganizer.log"</string> + </property> + <property name="whatsThis"> + <string> + Decides the amount of data printed to "ModOrganizer.log". + "Debug" produces very useful information for finding problems. There is usually no noteworthy performance impact but the file may become rather large. If this is a problem you may prefer the "Info" level for regular use. On the "Error" level the log file usually remains empty. + </string> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_27"> + <property name="text"> + <string>Crash Dumps</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QComboBox" name="dumpsTypeBox"> + <property name="toolTip"> + <string>Decides which type of crash dumps are collected when injected processes crash.</string> + </property> + <property name="whatsThis"> + <string> + Decides which type of crash dumps are collected when injected processes crash. + "None" Disables the generation of crash dumps by MO. + "Mini" Default level which generates small dumps (only stack traces). + "Data" Much larger dumps with additional information which may be need (also data segments). + "Full" Even larger dumps with a full memory dump of the process. + </string> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="label_28"> + <property name="text"> + <string>Max Dumps To Keep</string> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="QSpinBox" name="dumpsMaxEdit"> + <property name="toolTip"> + <string>Maximum number of crash dumps to keep on disk. Use 0 for unlimited.</string> + </property> + <property name="whatsThis"> + <string> + Maximum number of crash dumps to keep on disk. Use 0 for unlimited. + Set "Crash Dumps" above to None to disable crash dump collection. + </string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QGroupBox" name="groupBox_7"> + <property name="title"> + <string>Integrated LOOT</string> </property> - </spacer> + <layout class="QFormLayout" name="formLayout_2"> + <property name="fieldGrowthPolicy"> + <enum>QFormLayout::FieldsStayAtSizeHint</enum> + </property> + <item row="0" column="0"> + <widget class="QLabel" name="label_32"> + <property name="text"> + <string>LOOT Log Level</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QComboBox" name="lootLogLevel"/> + </item> + </layout> + </widget> </item> - <item row="2" column="0"> + <item> <widget class="LinkLabel" name="diagnosticsExplainedLabel"> <property name="toolTip"> <string>Hint: right click link and copy link location</string> @@ -1906,88 +2061,21 @@ programs you are intentionally running.</string> </property> </widget> </item> - <item row="0" column="0"> - <layout class="QFormLayout" name="formLayout_5"> - <property name="fieldGrowthPolicy"> - <enum>QFormLayout::ExpandingFieldsGrow</enum> + <item> + <spacer name="verticalSpacer_10"> + <property name="orientation"> + <enum>Qt::Vertical</enum> </property> - <property name="horizontalSpacing"> - <number>12</number> + <property name="sizeType"> + <enum>QSizePolicy::Expanding</enum> </property> - <item row="0" column="0"> - <widget class="QLabel" name="label_12"> - <property name="text"> - <string>Log Level</string> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QComboBox" name="logLevelBox"> - <property name="toolTip"> - <string>Decides the amount of data printed to "ModOrganizer.log"</string> - </property> - <property name="whatsThis"> - <string> - Decides the amount of data printed to "ModOrganizer.log". - "Debug" produces very useful information for finding problems. There is usually no noteworthy performance impact but the file may become rather large. If this is a problem you may prefer the "Info" level for regular use. On the "Error" level the log file usually remains empty. - </string> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="label_27"> - <property name="text"> - <string>Crash Dumps</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QComboBox" name="dumpsTypeBox"> - <property name="toolTip"> - <string>Decides which type of crash dumps are collected when injected processes crash.</string> - </property> - <property name="whatsThis"> - <string> - Decides which type of crash dumps are collected when injected processes crash. - "None" Disables the generation of crash dumps by MO. - "Mini" Default level which generates small dumps (only stack traces). - "Data" Much larger dumps with additional information which may be need (also data segments). - "Full" Even larger dumps with a full memory dump of the process. - </string> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="label_28"> - <property name="text"> - <string>Max Dumps To Keep</string> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="QSpinBox" name="dumpsMaxEdit"> - <property name="toolTip"> - <string>Maximum number of crash dumps to keep on disk. Use 0 for unlimited.</string> - </property> - <property name="whatsThis"> - <string> - Maximum number of crash dumps to keep on disk. Use 0 for unlimited. - Set "Crash Dumps" above to None to disable crash dump collection. - </string> - </property> - </widget> - </item> - <item row="3" column="0"> - <widget class="QLabel" name="label_32"> - <property name="text"> - <string>LOOT Log Level</string> - </property> - </widget> - </item> - <item row="3" column="1"> - <widget class="QComboBox" name="lootLogLevel"/> - </item> - </layout> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>232</height> + </size> + </property> + </spacer> </item> </layout> </widget> @@ -2018,9 +2106,7 @@ programs you are intentionally running.</string> </customwidget> </customwidgets> <tabstops> - <tabstop>tabWidget</tabstop> <tabstop>languageBox</tabstop> - <tabstop>styleBox</tabstop> <tabstop>usePrereleaseBox</tabstop> <tabstop>baseDirEdit</tabstop> <tabstop>browseBaseDirBtn</tabstop> @@ -2040,26 +2126,10 @@ programs you are intentionally running.</string> <tabstop>nexusManualKey</tabstop> <tabstop>nexusDisconnect</tabstop> <tabstop>nexusLog</tabstop> - <tabstop>offlineBox</tabstop> - <tabstop>endorsementBox</tabstop> - <tabstop>trackedBox</tabstop> - <tabstop>proxyBox</tabstop> - <tabstop>hideAPICounterBox</tabstop> - <tabstop>associateButton</tabstop> - <tabstop>clearCacheButton</tabstop> <tabstop>knownServersList</tabstop> <tabstop>preferredServersList</tabstop> - <tabstop>steamUserEdit</tabstop> - <tabstop>steamPassEdit</tabstop> <tabstop>pluginSettingsList</tabstop> - <tabstop>appIDEdit</tabstop> - <tabstop>mechanismBox</tabstop> - <tabstop>hideUncheckedBox</tabstop> - <tabstop>forceEnableBox</tabstop> <tabstop>lockGUIBox</tabstop> - <tabstop>bsaDateBtn</tabstop> - <tabstop>execBlacklistBtn</tabstop> - <tabstop>resetGeometryBtn</tabstop> </tabstops> <resources> <include location="resources.qrc"/> diff --git a/src/settingsdialoggeneral.cpp b/src/settingsdialoggeneral.cpp index 11294d2a..30039575 100644 --- a/src/settingsdialoggeneral.cpp +++ b/src/settingsdialoggeneral.cpp @@ -11,19 +11,23 @@ using namespace MOBase; GeneralSettingsTab::GeneralSettingsTab(Settings& s, SettingsDialog& d) : SettingsTab(s, d) { + // language addLanguages(); selectLanguage(); - addStyles(); - selectStyle(); + // download list + ui->compactBox->setChecked(settings().interface().compactDownloads()); + ui->showMetaBox->setChecked(settings().interface().metaDownloads()); + ui->hideDownloadInstallBox->setChecked(settings().interface().hideDownloadsAfterInstallation()); - ui->centerDialogs->setChecked(settings().geometry().centerDialogs()); - ui->changeGameConfirmation->setChecked(settings().interface().showChangeGameConfirmation()); - ui->doubleClickPreviews->setChecked(settings().interface().doubleClicksOpenPreviews()); + // updates ui->checkForUpdates->setChecked(settings().checkForUpdates()); ui->usePrereleaseBox->setChecked(settings().usePrereleases()); - QObject::connect(ui->exploreStyles, &QPushButton::clicked, [&]{ onExploreStyles(); }); + // miscellaneous + ui->centerDialogs->setChecked(settings().geometry().centerDialogs()); + ui->changeGameConfirmation->setChecked(settings().interface().showChangeGameConfirmation()); + ui->doubleClickPreviews->setChecked(settings().interface().doubleClicksOpenPreviews()); QObject::connect( ui->categoriesBtn, &QPushButton::clicked, [&]{ onEditCategories(); }); @@ -34,6 +38,7 @@ GeneralSettingsTab::GeneralSettingsTab(Settings& s, SettingsDialog& d) void GeneralSettingsTab::update() { + // language const QString oldLanguage = settings().interface().language(); const QString newLanguage = ui->languageBox->itemData( ui->languageBox->currentIndex()).toString(); @@ -43,20 +48,19 @@ void GeneralSettingsTab::update() emit settings().languageChanged(newLanguage); } - const QString oldStyle = settings().interface().styleName().value_or(""); - const QString newStyle = ui->styleBox->itemData( - ui->styleBox->currentIndex()).toString(); + // download list + settings().interface().setCompactDownloads(ui->compactBox->isChecked()); + settings().interface().setMetaDownloads(ui->showMetaBox->isChecked()); + settings().interface().setHideDownloadsAfterInstallation(ui->hideDownloadInstallBox->isChecked()); - if (oldStyle != newStyle) { - settings().interface().setStyleName(newStyle); - emit settings().styleChanged(newStyle); - } + // updates + settings().setCheckForUpdates(ui->checkForUpdates->isChecked()); + settings().setUsePrereleases(ui->usePrereleaseBox->isChecked()); + // miscellaneous settings().geometry().setCenterDialogs(ui->centerDialogs->isChecked()); settings().interface().setShowChangeGameConfirmation(ui->changeGameConfirmation->isChecked()); settings().interface().setDoubleClicksOpenPreviews(ui->doubleClickPreviews->isChecked()); - settings().setCheckForUpdates(ui->checkForUpdates->isChecked()); - settings().setUsePrereleases(ui->usePrereleaseBox->isChecked()); } void GeneralSettingsTab::addLanguages() @@ -127,52 +131,12 @@ void GeneralSettingsTab::selectLanguage() } } -void GeneralSettingsTab::addStyles() -{ - ui->styleBox->addItem("None", ""); - for (auto&& key : QStyleFactory::keys()) { - ui->styleBox->addItem(key, key); - } - - ui->styleBox->insertSeparator(ui->styleBox->count()); - - QDirIterator iter( - QCoreApplication::applicationDirPath() + "/" + - QString::fromStdWString(AppConfig::stylesheetsPath()), - QStringList("*.qss"), - QDir::Files); - - while (iter.hasNext()) { - iter.next(); - - ui->styleBox->addItem( - iter.fileInfo().completeBaseName(), - iter.fileName()); - } -} - -void GeneralSettingsTab::selectStyle() -{ - const int currentID = ui->styleBox->findData( - settings().interface().styleName().value_or("")); - - if (currentID != -1) { - ui->styleBox->setCurrentIndex(currentID); - } -} - void GeneralSettingsTab::resetDialogs() { settings().widgets().resetQuestionButtons(); GlobalSettings::resetDialogs(); } -void GeneralSettingsTab::onExploreStyles() -{ - QString ssPath = QCoreApplication::applicationDirPath() + "/" + ToQString(AppConfig::stylesheetsPath()); - shell::Explore(ssPath); -} - void GeneralSettingsTab::onEditCategories() { CategoriesDialog dialog(&dialog()); diff --git a/src/settingsdialoggeneral.h b/src/settingsdialoggeneral.h index 51e0dc72..8d82564d 100644 --- a/src/settingsdialoggeneral.h +++ b/src/settingsdialoggeneral.h @@ -15,12 +15,8 @@ private: void addLanguages(); void selectLanguage(); - void addStyles(); - void selectStyle(); - void resetDialogs(); - void onExploreStyles(); void onEditCategories(); void onResetDialogs(); }; diff --git a/src/settingsdialoguserinterface.cpp b/src/settingsdialogmodlist.cpp index 503e0feb..4c04e3f5 100644 --- a/src/settingsdialoguserinterface.cpp +++ b/src/settingsdialogmodlist.cpp @@ -1,4 +1,4 @@ -#include "settingsdialoguserinterface.h" +#include "settingsdialogmodlist.h" #include "ui_settingsdialog.h" #include "shared/appconfig.h" #include "categoriesdialog.h" @@ -9,7 +9,7 @@ using namespace MOBase; -UserInterfaceSettingsTab::UserInterfaceSettingsTab(Settings& s, SettingsDialog& d) +ModListSettingsTab::ModListSettingsTab(Settings& s, SettingsDialog& d) : SettingsTab(s, d), m_columnToBox{ { ModList::COL_CONFLICTFLAGS, ui->collapsibleSeparatorsIconsConflictsBox }, @@ -18,14 +18,12 @@ UserInterfaceSettingsTab::UserInterfaceSettingsTab(Settings& s, SettingsDialog& { ModList::COL_VERSION, ui->collapsibleSeparatorsIconsVersionBox } } { - // connect before setting to trigger QObject::connect(ui->collapsibleSeparatorsAscBox, &QCheckBox::toggled, [=] { updateCollapsibleSeparatorsGroup(); }); QObject::connect(ui->collapsibleSeparatorsDscBox, &QCheckBox::toggled, [=] { updateCollapsibleSeparatorsGroup(); }); - // mod list - ui->displayForeignBox->setChecked(settings().interface().displayForeign()); ui->colorSeparatorsBox->setChecked(settings().colors().colorSeparatorScrollbar()); + ui->displayForeignBox->setChecked(settings().interface().displayForeign()); ui->collapsibleSeparatorsAscBox->setChecked(settings().interface().collapsibleSeparators(Qt::AscendingOrder)); ui->collapsibleSeparatorsDscBox->setChecked(settings().interface().collapsibleSeparators(Qt::DescendingOrder)); ui->collapsibleSeparatorsHighlightFromBox->setChecked(settings().interface().collapsibleSeparatorsHighlightFrom()); @@ -39,19 +37,9 @@ UserInterfaceSettingsTab::UserInterfaceSettingsTab(Settings& s, SettingsDialog& p.second->setChecked(settings().interface().collapsibleSeparatorsIcons(p.first)); } - // download list - ui->compactBox->setChecked(settings().interface().compactDownloads()); - ui->showMetaBox->setChecked(settings().interface().metaDownloads()); - ui->hideDownloadInstallBox->setChecked(settings().interface().hideDownloadsAfterInstallation()); - - // colors - ui->colorTable->load(s); - - QObject::connect(ui->resetColorsBtn, &QPushButton::clicked, [&] { ui->colorTable->resetColors(); }); - } -void UserInterfaceSettingsTab::update() +void ModListSettingsTab::update() { // mod list settings().colors().setColorSeparatorScrollbar(ui->colorSeparatorsBox->isChecked()); @@ -68,17 +56,9 @@ void UserInterfaceSettingsTab::update() for (auto& p : m_columnToBox) { settings().interface().setCollapsibleSeparatorsIcons(p.first, p.second->isChecked()); } - - // download list - settings().interface().setCompactDownloads(ui->compactBox->isChecked()); - settings().interface().setMetaDownloads(ui->showMetaBox->isChecked()); - settings().interface().setHideDownloadsAfterInstallation(ui->hideDownloadInstallBox->isChecked()); - - // colors - ui->colorTable->commitColors(); } -void UserInterfaceSettingsTab::updateCollapsibleSeparatorsGroup() +void ModListSettingsTab::updateCollapsibleSeparatorsGroup() { const auto checked = ui->collapsibleSeparatorsAscBox->isChecked() || ui->collapsibleSeparatorsDscBox->isChecked(); diff --git a/src/settingsdialoguserinterface.h b/src/settingsdialogmodlist.h index 0c3c7fb7..0c0510b5 100644 --- a/src/settingsdialoguserinterface.h +++ b/src/settingsdialogmodlist.h @@ -1,15 +1,15 @@ -#ifndef SETTINGSDIALOGUSERINTERFACE_H -#define SETTINGSDIALOGUSERINTERFACE_H +#ifndef SETTINGSDIALOGMODLIST_H +#define SETTINGSDIALOGMODLIST_H #include <QCheckBox> #include "settingsdialog.h" #include "settings.h" -class UserInterfaceSettingsTab : public SettingsTab +class ModListSettingsTab : public SettingsTab { public: - UserInterfaceSettingsTab(Settings& settings, SettingsDialog& dialog); + ModListSettingsTab(Settings& settings, SettingsDialog& dialog); void update() override; diff --git a/src/settingsdialognexus.cpp b/src/settingsdialognexus.cpp index 48827a0e..364c6aa7 100644 --- a/src/settingsdialognexus.cpp +++ b/src/settingsdialognexus.cpp @@ -295,13 +295,9 @@ void NexusConnectionUI::updateState() NexusSettingsTab::NexusSettingsTab(Settings& s, SettingsDialog& d) : SettingsTab(s, d) { - ui->offlineBox->setChecked(settings().network().offlineMode()); - ui->proxyBox->setChecked(settings().network().useProxy()); ui->endorsementBox->setChecked(settings().nexus().endorsementIntegration()); ui->trackedBox->setChecked(settings().nexus().trackedIntegration()); ui->hideAPICounterBox->setChecked(settings().interface().hideAPICounter()); - ui->useCustomBrowser->setChecked(settings().network().useCustomBrowser()); - ui->browserCommand->setText(settings().network().customBrowserCommand()); // display server preferences for (const auto& server : s.network().servers()) { @@ -358,13 +354,9 @@ NexusSettingsTab::NexusSettingsTab(Settings& s, SettingsDialog& d) void NexusSettingsTab::update() { - settings().network().setOfflineMode(ui->offlineBox->isChecked()); - settings().network().setUseProxy(ui->proxyBox->isChecked()); settings().nexus().setEndorsementIntegration(ui->endorsementBox->isChecked()); settings().nexus().setTrackedIntegration(ui->trackedBox->isChecked()); settings().interface().setHideAPICounter(ui->hideAPICounterBox->isChecked()); - settings().network().setUseCustomBrowser(ui->useCustomBrowser->isChecked()); - settings().network().setCustomBrowserCommand(ui->browserCommand->text()); auto servers = settings().network().servers(); diff --git a/src/settingsdialogsteam.cpp b/src/settingsdialogsteam.cpp deleted file mode 100644 index 3c4c5de6..00000000 --- a/src/settingsdialogsteam.cpp +++ /dev/null @@ -1,17 +0,0 @@ -#include "settingsdialogsteam.h" -#include "ui_settingsdialog.h" - -SteamSettingsTab::SteamSettingsTab(Settings& s, SettingsDialog& d) - : SettingsTab(s, d) -{ - QString username, password; - settings().steam().login(username, password); - - ui->steamUserEdit->setText(username); - ui->steamPassEdit->setText(password); -} - -void SteamSettingsTab::update() -{ - settings().steam().setLogin(ui->steamUserEdit->text(), ui->steamPassEdit->text()); -} diff --git a/src/settingsdialogsteam.h b/src/settingsdialogsteam.h deleted file mode 100644 index 6a3d75f4..00000000 --- a/src/settingsdialogsteam.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef SETTINGSDIALOGSTEAM_H -#define SETTINGSDIALOGSTEAM_H - -#include "settings.h" -#include "settingsdialog.h" - -class SteamSettingsTab : public SettingsTab -{ -public: - SteamSettingsTab(Settings& settings, SettingsDialog& dialog); - void update(); -}; - -#endif // SETTINGSDIALOGSTEAM_H diff --git a/src/settingsdialogtheme.cpp b/src/settingsdialogtheme.cpp new file mode 100644 index 00000000..9b32773b --- /dev/null +++ b/src/settingsdialogtheme.cpp @@ -0,0 +1,82 @@ +#include "settingsdialogtheme.h" +#include "ui_settingsdialog.h" +#include "shared/appconfig.h" +#include "categoriesdialog.h" +#include "colortable.h" +#include "modlist.h" +#include <utility.h> +#include <questionboxmemory.h> + +using namespace MOBase; + +ThemeSettingsTab::ThemeSettingsTab(Settings& s, SettingsDialog& d) + : SettingsTab(s, d) +{ + // style + addStyles(); + selectStyle(); + + // colors + ui->colorTable->load(s); + + QObject::connect(ui->resetColorsBtn, &QPushButton::clicked, [&] { ui->colorTable->resetColors(); }); + + QObject::connect(ui->exploreStyles, &QPushButton::clicked, [&] { onExploreStyles(); }); +} + +void ThemeSettingsTab::update() +{ + // style + const QString oldStyle = settings().interface().styleName().value_or(""); + const QString newStyle = ui->styleBox->itemData( + ui->styleBox->currentIndex()).toString(); + + if (oldStyle != newStyle) { + settings().interface().setStyleName(newStyle); + emit settings().styleChanged(newStyle); + } + + // colors + ui->colorTable->commitColors(); +} + +void ThemeSettingsTab::addStyles() +{ + ui->styleBox->addItem("None", ""); + for (auto&& key : QStyleFactory::keys()) { + ui->styleBox->addItem(key, key); + } + + ui->styleBox->insertSeparator(ui->styleBox->count()); + + QDirIterator iter( + QCoreApplication::applicationDirPath() + "/" + + QString::fromStdWString(AppConfig::stylesheetsPath()), + QStringList("*.qss"), + QDir::Files); + + while (iter.hasNext()) { + iter.next(); + + ui->styleBox->addItem( + iter.fileInfo().completeBaseName(), + iter.fileName()); + } +} + +void ThemeSettingsTab::selectStyle() +{ + const int currentID = ui->styleBox->findData( + settings().interface().styleName().value_or("")); + + if (currentID != -1) { + ui->styleBox->setCurrentIndex(currentID); + } +} + +void ThemeSettingsTab::onExploreStyles() +{ + QString ssPath = QCoreApplication::applicationDirPath() + "/" + ToQString(AppConfig::stylesheetsPath()); + shell::Explore(ssPath); +} + diff --git a/src/settingsdialogtheme.h b/src/settingsdialogtheme.h new file mode 100644 index 00000000..61334c0b --- /dev/null +++ b/src/settingsdialogtheme.h @@ -0,0 +1,24 @@ +#ifndef SETTINGSDIALOGTHEME_H +#define SETTINGSDIALOGTHEME_H + +#include <QCheckBox> + +#include "settingsdialog.h" +#include "settings.h" + +class ThemeSettingsTab : public SettingsTab +{ +public: + ThemeSettingsTab(Settings& settings, SettingsDialog& dialog); + + void update() override; + +private: + + void addStyles(); + void selectStyle(); + void onExploreStyles(); + +}; + +#endif // SETTINGSDIALOGGENERAL_H diff --git a/src/settingsdialogworkarounds.cpp b/src/settingsdialogworkarounds.cpp index c050c722..17b2259b 100644 --- a/src/settingsdialogworkarounds.cpp +++ b/src/settingsdialogworkarounds.cpp @@ -8,25 +8,26 @@ WorkaroundsSettingsTab::WorkaroundsSettingsTab(Settings& s, SettingsDialog& d) : SettingsTab(s, d) { - ui->appIDEdit->setText(settings().steam().appID()); - - LoadMechanism::EMechanism mechanismID = settings().game().loadMechanismType(); - int index = 0; - - if (settings().game().loadMechanism().isDirectLoadingSupported()) { - ui->mechanismBox->addItem(QObject::tr("Mod Organizer"), LoadMechanism::LOAD_MODORGANIZER); - if (mechanismID == LoadMechanism::LOAD_MODORGANIZER) { - index = ui->mechanismBox->count() - 1; - } - } - - ui->mechanismBox->setCurrentIndex(index); - - ui->hideUncheckedBox->setChecked(settings().game().hideUncheckedPlugins()); + // options ui->forceEnableBox->setChecked(settings().game().forceEnableCoreFiles()); ui->lockGUIBox->setChecked(settings().interface().lockGUI()); ui->enableArchiveParsingBox->setChecked(settings().archiveParsing()); + // steam + QString username, password; + settings().steam().login(username, password); + + ui->appIDEdit->setText(settings().steam().appID()); + ui->steamUserEdit->setText(username); + ui->steamPassEdit->setText(password); + + // network + ui->offlineBox->setChecked(settings().network().offlineMode()); + ui->proxyBox->setChecked(settings().network().useProxy()); + ui->useCustomBrowser->setChecked(settings().network().useCustomBrowser()); + ui->browserCommand->setText(settings().network().customBrowserCommand()); + + // buttons m_ExecutableBlacklist = settings().executablesBlacklist(); QObject::connect(ui->bsaDateBtn, &QPushButton::clicked, [&]{ on_bsaDateBtn_clicked(); }); @@ -36,19 +37,26 @@ WorkaroundsSettingsTab::WorkaroundsSettingsTab(Settings& s, SettingsDialog& d) void WorkaroundsSettingsTab::update() { + // options + settings().game().setForceEnableCoreFiles(ui->forceEnableBox->isChecked()); + settings().interface().setLockGUI(ui->lockGUIBox->isChecked()); + settings().setArchiveParsing(ui->enableArchiveParsingBox->isChecked()); + + // steam if (ui->appIDEdit->text() != settings().game().plugin()->steamAPPId()) { settings().steam().setAppID(ui->appIDEdit->text()); } else { settings().steam().setAppID(""); } + settings().steam().setLogin(ui->steamUserEdit->text(), ui->steamPassEdit->text()); - settings().game().setLoadMechanism(static_cast<LoadMechanism::EMechanism>( - ui->mechanismBox->itemData(ui->mechanismBox->currentIndex()).toInt())); + // network + settings().network().setOfflineMode(ui->offlineBox->isChecked()); + settings().network().setUseProxy(ui->proxyBox->isChecked()); + settings().network().setUseCustomBrowser(ui->useCustomBrowser->isChecked()); + settings().network().setCustomBrowserCommand(ui->browserCommand->text()); - settings().game().setHideUncheckedPlugins(ui->hideUncheckedBox->isChecked()); - settings().game().setForceEnableCoreFiles(ui->forceEnableBox->isChecked()); - settings().interface().setLockGUI(ui->lockGUIBox->isChecked()); - settings().setArchiveParsing(ui->enableArchiveParsingBox->isChecked()); + // buttons settings().setExecutablesBlacklist(m_ExecutableBlacklist); } |
