summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt6
-rw-r--r--src/aboutdialog.ui8
-rw-r--r--src/editexecutablesdialog.cpp47
-rw-r--r--src/editexecutablesdialog.h6
-rw-r--r--src/editexecutablesdialog.ui37
-rw-r--r--src/forcedloaddialog.cpp76
-rw-r--r--src/forcedloaddialog.h32
-rw-r--r--src/forcedloaddialog.ui117
-rw-r--r--src/forcedloaddialogwidget.cpp87
-rw-r--r--src/forcedloaddialogwidget.h38
-rw-r--r--src/forcedloaddialogwidget.ui104
-rw-r--r--src/mainwindow.cpp21
-rw-r--r--src/organizer.pro12
-rw-r--r--src/organizer_en.ts893
-rw-r--r--src/organizercore.cpp34
-rw-r--r--src/organizercore.h8
-rw-r--r--src/profile.cpp118
-rw-r--r--src/profile.h13
-rw-r--r--src/settings.cpp4
-rw-r--r--src/settings.h4
-rw-r--r--src/settingsdialog.cpp6
-rw-r--r--src/usvfsconnector.cpp18
-rw-r--r--src/usvfsconnector.h3
23 files changed, 1260 insertions, 432 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 4c883cf5..5cbd5aa9 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -92,6 +92,8 @@ SET(organizer_SRCS
moshortcut.cpp
listdialog.cpp
lcdnumber.cpp
+ forcedloaddialog.cpp
+ forcedloaddialogwidget.cpp
shared/windows_error.cpp
shared/error_report.cpp
@@ -187,6 +189,8 @@ SET(organizer_HDRS
moshortcut.h
listdialog.h
lcdnumber.h
+ forcedloaddialog.h
+ forcedloaddialogwidget.h
shared/windows_error.h
shared/error_report.h
@@ -226,6 +230,8 @@ SET(organizer_UIS
browserdialog.ui
aboutdialog.ui
listdialog.ui
+ forcedloaddialog.ui
+ forcedloaddialogwidget.ui
)
SET(organizer_QRCS
diff --git a/src/aboutdialog.ui b/src/aboutdialog.ui
index 98a76061..ac7db1fc 100644
--- a/src/aboutdialog.ui
+++ b/src/aboutdialog.ui
@@ -161,7 +161,7 @@
</property>
<layout class="QVBoxLayout" name="verticalLayout_6">
<item>
- <widget class="QListWidget" name="listWidget_2">
+ <widget class="QListWidget" name="listWidget_3">
<property name="selectionMode">
<enum>QAbstractItemView::NoSelection</enum>
</property>
@@ -202,7 +202,7 @@
</property>
<layout class="QVBoxLayout" name="verticalLayout_7" stretch="0">
<item>
- <widget class="QListWidget" name="listWidget_2">
+ <widget class="QListWidget" name="listWidget_4">
<property name="selectionMode">
<enum>QAbstractItemView::NoSelection</enum>
</property>
@@ -231,7 +231,7 @@
<property name="title">
<string>Translators</string>
</property>
- <layout class="QVBoxLayout" name="verticalLayout_6">
+ <layout class="QVBoxLayout" name="verticalLayout_8">
<item>
<widget class="QListWidget" name="listWidget_2">
<property name="selectionMode">
@@ -363,7 +363,7 @@
<property name="title">
<string>Other Supporters &amp;&amp; Contributors</string>
</property>
- <layout class="QVBoxLayout" name="verticalLayout_7">
+ <layout class="QVBoxLayout" name="verticalLayout_9">
<item>
<widget class="QListWidget" name="listWidget">
<property name="selectionMode">
diff --git a/src/editexecutablesdialog.cpp b/src/editexecutablesdialog.cpp
index be2ee127..212993f1 100644
--- a/src/editexecutablesdialog.cpp
+++ b/src/editexecutablesdialog.cpp
@@ -25,7 +25,8 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <QMessageBox>
#include <Shellapi.h>
#include <utility.h>
-
+#include "forcedloaddialog.h"
+#include <algorithm>
using namespace MOBase;
using namespace MOShared;
@@ -44,6 +45,8 @@ EditExecutablesDialog::EditExecutablesDialog(
refreshExecutablesWidget();
ui->newFilesModBox->addItems(modList.allMods());
+
+ m_ForcedLibraries = m_Profile->determineForcedLibraries(ui->titleEdit->text());
}
EditExecutablesDialog::~EditExecutablesDialog()
@@ -93,6 +96,7 @@ void EditExecutablesDialog::resetInput()
ui->overwriteAppIDBox->setChecked(false);
ui->useAppIconCheckBox->setChecked(false);
ui->newFilesModCheckBox->setChecked(false);
+ ui->forceLoadCheckBox->setChecked(false);
m_CurrentItem = nullptr;
}
@@ -118,6 +122,9 @@ void EditExecutablesDialog::saveExecutable()
else {
m_Profile->removeSetting("custom_overwrites", ui->titleEdit->text());
}
+
+ m_Profile->saveForcedLibraries(ui->titleEdit->text(), m_ForcedLibraries);
+ m_Profile->setForcedLibrariesEnabled(ui->titleEdit->text(), ui->forceLoadCheckBox->isChecked());
}
@@ -130,6 +137,21 @@ void EditExecutablesDialog::delayedRefresh()
}
+void EditExecutablesDialog::on_forceLoadButton_clicked()
+{
+ ForcedLoadDialog dialog(this);
+ dialog.setValues(m_ForcedLibraries);
+ if (dialog.exec() == QDialog::Accepted) {
+ m_ForcedLibraries = dialog.values();
+ }
+}
+
+void EditExecutablesDialog::on_forceLoadCheckBox_toggled()
+{
+ ui->forceLoadButton->setEnabled(ui->forceLoadCheckBox->isChecked());
+}
+
+
void EditExecutablesDialog::on_addButton_clicked()
{
if (executableChanged()) {
@@ -231,6 +253,20 @@ bool EditExecutablesDialog::executableChanged()
QString storedCustomOverwrite = m_Profile->setting("custom_overwrites", selectedExecutable.m_Title).toString();
+ bool forcedLibrariesDirty = false;
+ auto forcedLibaries = m_Profile->determineForcedLibraries(selectedExecutable.m_Title);
+ forcedLibrariesDirty |= !std::equal(forcedLibaries.begin(), forcedLibaries.end(),
+ m_ForcedLibraries.begin(), m_ForcedLibraries.end(),
+ [](const ExecutableForcedLoadSetting &lhs, const ExecutableForcedLoadSetting &rhs)
+ {
+ return lhs.enabled() == rhs.enabled() &&
+ lhs.forced() == rhs.forced() &&
+ lhs.library() == rhs.library() &&
+ lhs.process() == rhs.process();
+ });
+ forcedLibrariesDirty |= m_Profile->setting("forced_libraries", ui->titleEdit->text() + "/enabled", false).toBool() !=
+ ui->forceLoadCheckBox->isChecked();
+
return selectedExecutable.m_Title != ui->titleEdit->text()
|| selectedExecutable.m_Arguments != ui->argumentsEdit->text()
|| selectedExecutable.m_SteamAppID != ui->appIDOverwriteEdit->text()
@@ -238,7 +274,9 @@ bool EditExecutablesDialog::executableChanged()
|| !storedCustomOverwrite.isEmpty() && (storedCustomOverwrite != ui->newFilesModBox->currentText())
|| selectedExecutable.m_WorkingDirectory != QDir::fromNativeSeparators(ui->workingDirEdit->text())
|| selectedExecutable.m_BinaryInfo.absoluteFilePath() != QDir::fromNativeSeparators(ui->binaryEdit->text())
- || selectedExecutable.usesOwnIcon() != ui->useAppIconCheckBox->isChecked();
+ || selectedExecutable.usesOwnIcon() != ui->useAppIconCheckBox->isChecked()
+ || forcedLibrariesDirty
+ ;
} else {
QFileInfo fileInfo(ui->binaryEdit->text());
return !ui->binaryEdit->text().isEmpty()
@@ -331,6 +369,11 @@ void EditExecutablesDialog::on_executablesListBox_clicked(const QModelIndex &cur
if (index != -1) {
ui->newFilesModBox->setCurrentIndex(index);
}
+
+ m_ForcedLibraries = m_Profile->determineForcedLibraries(ui->titleEdit->text());
+ bool forcedLibraries = m_Profile->forcedLibrariesEnabled(ui->titleEdit->text());
+ ui->forceLoadButton->setEnabled(forcedLibraries);
+ ui->forceLoadCheckBox->setChecked(forcedLibraries);
}
}
diff --git a/src/editexecutablesdialog.h b/src/editexecutablesdialog.h
index 0f3dbaff..82e63e15 100644
--- a/src/editexecutablesdialog.h
+++ b/src/editexecutablesdialog.h
@@ -92,6 +92,10 @@ private slots:
void on_executablesListBox_clicked(const QModelIndex &index);
+ void on_forceLoadButton_clicked();
+
+ void on_forceLoadCheckBox_toggled();
+
private:
void resetInput();
@@ -108,6 +112,8 @@ private:
ExecutablesList m_ExecutablesList;
Profile *m_Profile;
+
+ QList<MOBase::ExecutableForcedLoadSetting> m_ForcedLibraries;
};
#endif // EDITEXECUTABLESDIALOG_H
diff --git a/src/editexecutablesdialog.ui b/src/editexecutablesdialog.ui
index bdbb8bd1..4f9223d5 100644
--- a/src/editexecutablesdialog.ui
+++ b/src/editexecutablesdialog.ui
@@ -192,6 +192,43 @@ Right now the only case I know of where this needs to be overwritten is for the
</layout>
</item>
<item>
+ <layout class="QHBoxLayout" name="horizontalLayout_8">
+ <item>
+ <widget class="QCheckBox" name="forceLoadCheckBox">
+ <property name="toolTip">
+ <string>If this is enabled, the configured libraries will be automatically loaded when this executable is launched.</string>
+ </property>
+ <property name="text">
+ <string>Force Load Libraries (*)</string>
+ </property>
+ </widget>
+ </item>
+ <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>
+ <item>
+ <widget class="QPushButton" name="forceLoadButton">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Configure Libraries</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
<widget class="QCheckBox" name="useAppIconCheckBox">
<property name="text">
<string>Use Application's Icon for shortcuts</string>
diff --git a/src/forcedloaddialog.cpp b/src/forcedloaddialog.cpp
new file mode 100644
index 00000000..ad30a58c
--- /dev/null
+++ b/src/forcedloaddialog.cpp
@@ -0,0 +1,76 @@
+#include "forcedloaddialog.h"
+#include "ui_forcedloaddialog.h"
+
+#include "forcedloaddialogwidget.h"
+
+#include <QComboBox>
+#include <QLabel>
+
+using namespace MOBase;
+
+ForcedLoadDialog::ForcedLoadDialog(QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::ForcedLoadDialog)
+{
+ ui->setupUi(this);
+}
+
+ForcedLoadDialog::~ForcedLoadDialog()
+{
+ delete ui;
+}
+
+void ForcedLoadDialog::setValues(QList<MOBase::ExecutableForcedLoadSetting> &values)
+{
+ ui->tableWidget->clearContents();
+
+ for (int i = 0; i < values.count(); i++) {
+ ForcedLoadDialogWidget *item = new ForcedLoadDialogWidget(this);
+ item->setEnabled(values[i].enabled());
+ item->setProcess(values[i].process());
+ item->setLibraryPath(values[i].library());
+ item->setForced(values[i].forced());
+
+ ui->tableWidget->insertRow(i);
+ ui->tableWidget->setCellWidget(i, 0, item);
+ }
+
+ ui->tableWidget->resizeRowsToContents();
+}
+
+QList<MOBase::ExecutableForcedLoadSetting> ForcedLoadDialog::values()
+{
+ QList<MOBase::ExecutableForcedLoadSetting> results;
+ for (int row = 0; row < ui->tableWidget->rowCount(); row++) {
+ auto widget = (ForcedLoadDialogWidget*)ui->tableWidget->cellWidget(row, 0);
+ results.append(
+ ExecutableForcedLoadSetting(
+ widget->getProcess(),
+ widget->getLibraryPath()
+ ).withEnabled(widget->getEnabled())
+ .withForced(widget->getForced())
+ );
+ }
+ return results;
+}
+
+
+void ForcedLoadDialog::on_addRowButton_clicked()
+{
+ int row = ui->tableWidget->rowCount();
+ ui->tableWidget->insertRow(row);
+ ForcedLoadDialogWidget *item = new ForcedLoadDialogWidget(this);
+ ui->tableWidget->setCellWidget(row, 0, item);
+ ui->tableWidget->resizeRowsToContents();
+}
+
+void ForcedLoadDialog::on_deleteRowButton_clicked()
+{
+ for (auto rowIndex: ui->tableWidget->selectionModel()->selectedRows()) {
+ int row = rowIndex.row();
+ auto widget = (ForcedLoadDialogWidget*)ui->tableWidget->cellWidget(row, 0);
+ if (!widget->getForced()){
+ ui->tableWidget->removeRow(row);
+ }
+ }
+}
diff --git a/src/forcedloaddialog.h b/src/forcedloaddialog.h
new file mode 100644
index 00000000..68460d91
--- /dev/null
+++ b/src/forcedloaddialog.h
@@ -0,0 +1,32 @@
+#ifndef FORCEDLOADDIALOG_H
+#define FORCEDLOADDIALOG_H
+
+#include <QDialog>
+#include <QPushButton>
+
+#include "executableinfo.h"
+
+namespace Ui {
+class ForcedLoadDialog;
+}
+
+class ForcedLoadDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ explicit ForcedLoadDialog(QWidget *parent = nullptr);
+ ~ForcedLoadDialog();
+
+ void setValues(QList<MOBase::ExecutableForcedLoadSetting> &values);
+ QList<MOBase::ExecutableForcedLoadSetting> values();
+
+private slots:
+ void on_addRowButton_clicked();
+ void on_deleteRowButton_clicked();
+
+private:
+ Ui::ForcedLoadDialog *ui;
+};
+
+#endif // FORCEDLOADDIALOG_H
diff --git a/src/forcedloaddialog.ui b/src/forcedloaddialog.ui
new file mode 100644
index 00000000..9c5b2d10
--- /dev/null
+++ b/src/forcedloaddialog.ui
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ForcedLoadDialog</class>
+ <widget class="QDialog" name="ForcedLoadDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>700</width>
+ <height>400</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Forced Load Settings</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QTableWidget" name="tableWidget">
+ <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="columnCount">
+ <number>1</number>
+ </property>
+ <attribute name="horizontalHeaderVisible">
+ <bool>false</bool>
+ </attribute>
+ <attribute name="horizontalHeaderStretchLastSection">
+ <bool>true</bool>
+ </attribute>
+ <column/>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QPushButton" name="addRowButton">
+ <property name="toolTip">
+ <string>Adds a row to the table.</string>
+ </property>
+ <property name="whatsThis">
+ <string>Adds a row to the table.</string>
+ </property>
+ <property name="text">
+ <string>Add Row</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="deleteRowButton">
+ <property name="toolTip">
+ <string>Deletes the selected row from the table.</string>
+ </property>
+ <property name="whatsThis">
+ <string>Deletes the selected row from the table.</string>
+ </property>
+ <property name="text">
+ <string>Delete Row</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>accepted()</signal>
+ <receiver>ForcedLoadDialog</receiver>
+ <slot>accept()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>248</x>
+ <y>254</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>157</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>rejected()</signal>
+ <receiver>ForcedLoadDialog</receiver>
+ <slot>reject()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>316</x>
+ <y>260</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>286</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/src/forcedloaddialogwidget.cpp b/src/forcedloaddialogwidget.cpp
new file mode 100644
index 00000000..61805068
--- /dev/null
+++ b/src/forcedloaddialogwidget.cpp
@@ -0,0 +1,87 @@
+#include "forcedloaddialogwidget.h"
+#include "ui_forcedloaddialogwidget.h"
+
+#include <QFileDialog>
+
+#include "executableinfo.h"
+
+ForcedLoadDialogWidget::ForcedLoadDialogWidget(QWidget *parent) :
+ QWidget(parent),
+ ui(new Ui::ForcedLoadDialogWidget)
+{
+ ui->setupUi(this);
+}
+
+ForcedLoadDialogWidget::~ForcedLoadDialogWidget()
+{
+ delete ui;
+}
+
+bool ForcedLoadDialogWidget::getEnabled()
+{
+ return ui->enabledBox->isChecked();
+}
+
+bool ForcedLoadDialogWidget::getForced()
+{
+ return m_Forced;
+}
+
+QString ForcedLoadDialogWidget::getLibraryPath()
+{
+ return ui->libraryPathEdit->text();
+}
+
+QString ForcedLoadDialogWidget::getProcess()
+{
+ return ui->processEdit->text();
+}
+
+void ForcedLoadDialogWidget::setEnabled(bool enabled)
+{
+ ui->enabledBox->setChecked(enabled);
+}
+
+void ForcedLoadDialogWidget::setForced(bool forced)
+{
+ m_Forced = forced;
+ ui->libraryPathBrowseButton->setEnabled(!forced);
+ ui->libraryPathEdit->setEnabled(!forced);
+ ui->processBrowseButton->setEnabled(!forced);
+ ui->processEdit->setEnabled(!forced);
+}
+
+void ForcedLoadDialogWidget::setLibraryPath(QString &path)
+{
+ ui->libraryPathEdit->setText(path);
+}
+
+void ForcedLoadDialogWidget::setProcess(QString &name)
+{
+ ui->processEdit->setText(name);
+}
+
+void ForcedLoadDialogWidget::on_enabledBox_toggled()
+{
+ // anything to do?
+}
+
+void ForcedLoadDialogWidget::on_libraryPathBrowseButton_clicked()
+{
+ QDir gameDir("D:/Games/Steam Library/steamapps/common/Fallout 4");
+ QString startPath = gameDir.absolutePath();
+ QString result = QFileDialog::getOpenFileName(nullptr, "Select a library...", startPath, "Dynamic link library (*.dll)", nullptr, QFileDialog::ReadOnly);
+ if (!result.isEmpty()) {
+ ui->libraryPathEdit->setText(result);
+ }
+}
+
+void ForcedLoadDialogWidget::on_processBrowseButton_clicked()
+{
+ QDir gameDir("D:/Games/Steam Library/steamapps/common/Fallout 4");
+ QString startPath = gameDir.absolutePath();
+ QString result = QFileDialog::getOpenFileName(nullptr, "Select a process...", startPath, "Executable (*.exe)", nullptr, QFileDialog::ReadOnly);
+ if (!result.isEmpty()) {
+ ui->processEdit->setText(QFile(result).fileName());
+ }
+}
diff --git a/src/forcedloaddialogwidget.h b/src/forcedloaddialogwidget.h
new file mode 100644
index 00000000..06ad0009
--- /dev/null
+++ b/src/forcedloaddialogwidget.h
@@ -0,0 +1,38 @@
+#ifndef FORCEDLOADDIALOGWIDGET_H
+#define FORCEDLOADDIALOGWIDGET_H
+
+#include <QWidget>
+
+namespace Ui {
+class ForcedLoadDialogWidget;
+}
+
+class ForcedLoadDialogWidget : public QWidget
+{
+ Q_OBJECT
+
+public:
+ explicit ForcedLoadDialogWidget(QWidget *parent = nullptr);
+ ~ForcedLoadDialogWidget();
+
+ bool getEnabled();
+ bool getForced();
+ QString getLibraryPath();
+ QString getProcess();
+
+ void setEnabled(bool enabled);
+ void setForced(bool forced);
+ void setLibraryPath(QString &path);
+ void setProcess(QString &name);
+
+private slots:
+ void on_enabledBox_toggled();
+ void on_libraryPathBrowseButton_clicked();
+ void on_processBrowseButton_clicked();
+
+private:
+ Ui::ForcedLoadDialogWidget *ui;
+ bool m_Forced;
+};
+
+#endif // FORCEDLOADDIALOGWIDGET_H
diff --git a/src/forcedloaddialogwidget.ui b/src/forcedloaddialogwidget.ui
new file mode 100644
index 00000000..4df78beb
--- /dev/null
+++ b/src/forcedloaddialogwidget.ui
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ForcedLoadDialogWidget</class>
+ <widget class="QWidget" name="ForcedLoadDialogWidget">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>400</width>
+ <height>41</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="windowTitle">
+ <string>Form</string>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout" stretch="0,1,0,2,0">
+ <item>
+ <widget class="QCheckBox" name="enabledBox">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="processEdit">
+ <property name="toolTip">
+ <string>The name of the process that should be forced to load a library.</string>
+ </property>
+ <property name="whatsThis">
+ <string>The name of the process that should be forced to load a library.</string>
+ </property>
+ <property name="placeholderText">
+ <string>Process name</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="processBrowseButton">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>32</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>32</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Browse for a process.</string>
+ </property>
+ <property name="whatsThis">
+ <string>Browse for a process.</string>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="libraryPathEdit">
+ <property name="placeholderText">
+ <string>Library to load</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="libraryPathBrowseButton">
+ <property name="maximumSize">
+ <size>
+ <width>32</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Browse for a library.</string>
+ </property>
+ <property name="whatsThis">
+ <string>Browse for a library.</string>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index c6dc145d..0ebad6ae 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -1162,15 +1162,20 @@ void MainWindow::startExeAction()
{
QAction *action = qobject_cast<QAction*>(sender());
if (action != nullptr) {
- const Executable &selectedExecutable(
- m_OrganizerCore.executablesList()->find(action->text()));
- QString customOverwrite= m_OrganizerCore.currentProfile()->setting("custom_overwrites", selectedExecutable.m_Title).toString();
+ const Executable &selectedExecutable(m_OrganizerCore.executablesList()->find(action->text()));
+ QString customOverwrite = m_OrganizerCore.currentProfile()->setting("custom_overwrites", selectedExecutable.m_Title).toString();
+ auto forcedLibraries = m_OrganizerCore.currentProfile()->determineForcedLibraries(selectedExecutable.m_Title);
+ if (!m_OrganizerCore.currentProfile()->forcedLibrariesEnabled(selectedExecutable.m_Title)) {
+ forcedLibraries.clear();
+ }
m_OrganizerCore.spawnBinary(
selectedExecutable.m_BinaryInfo, selectedExecutable.m_Arguments,
selectedExecutable.m_WorkingDirectory.length() != 0
? selectedExecutable.m_WorkingDirectory
: selectedExecutable.m_BinaryInfo.absolutePath(),
- selectedExecutable.m_SteamAppID, customOverwrite);
+ selectedExecutable.m_SteamAppID,
+ customOverwrite,
+ forcedLibraries);
} else {
qCritical("not an action?");
}
@@ -1957,12 +1962,18 @@ void MainWindow::on_startButton_clicked() {
try {
const Executable &selectedExecutable(getSelectedExecutable());
QString customOverwrite = m_OrganizerCore.currentProfile()->setting("custom_overwrites", selectedExecutable.m_Title).toString();
+ auto forcedLibraries = m_OrganizerCore.currentProfile()->determineForcedLibraries(selectedExecutable.m_Title);
+ if (!m_OrganizerCore.currentProfile()->forcedLibrariesEnabled(selectedExecutable.m_Title)) {
+ forcedLibraries.clear();
+ }
m_OrganizerCore.spawnBinary(
selectedExecutable.m_BinaryInfo, selectedExecutable.m_Arguments,
selectedExecutable.m_WorkingDirectory.length() != 0
? selectedExecutable.m_WorkingDirectory
: selectedExecutable.m_BinaryInfo.absolutePath(),
- selectedExecutable.m_SteamAppID, customOverwrite);
+ selectedExecutable.m_SteamAppID,
+ customOverwrite,
+ forcedLibraries);
} catch (...) {
ui->startButton->setEnabled(true);
throw;
diff --git a/src/organizer.pro b/src/organizer.pro
index b8e79e0c..ddf676f2 100644
--- a/src/organizer.pro
+++ b/src/organizer.pro
@@ -92,7 +92,9 @@ SOURCES += \
modinfooverwrite.cpp \
modinfoforeign.cpp \
listdialog.cpp \
- lcdnumber.cpp
+ lcdnumber.cpp \
+ forcedloaddialog.cpp \
+ forcedloaddialogwidget.cpp
HEADERS += \
@@ -169,7 +171,9 @@ HEADERS += \
modinfooverwrite.h \
modinfoforeign.h \
listdialog.h \
- lcdnumber.h
+ lcdnumber.h \
+ forcedloaddialog.h \
+ forcedloaddialogwidget.h
FORMS += \
transfersavesdialog.ui \
@@ -197,7 +201,9 @@ FORMS += \
previewdialog.ui \
browserdialog.ui \
aboutdialog.ui \
- listdialog.ui
+ listdialog.ui \
+ forcedloaddialog.ui \
+ forcedloaddialogwidget.ui
RESOURCES += \
resources.qrc \
diff --git a/src/organizer_en.ts b/src/organizer_en.ts
index 299ffe6a..4291f3ae 100644
--- a/src/organizer_en.ts
+++ b/src/organizer_en.ts
@@ -27,7 +27,6 @@
<message>
<location filename="aboutdialog.ui" line="160"/>
<source>Lead Developers/ Maintainers</source>
- <oldsource>Current Maintainers</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
@@ -116,7 +115,12 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="aboutdialog.ui" line="486"/>
+ <location filename="aboutdialog.ui" line="374"/>
+ <source>Tannin (Original Creator)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="491"/>
<source>Close</source>
<translation type="unfinished"></translation>
</message>
@@ -980,92 +984,107 @@ Right now the only case I know of where this needs to be overwritten is for the
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.ui" line="197"/>
+ <location filename="editexecutablesdialog.ui" line="199"/>
+ <source>If this is enabled, the configured libraries will be automatically loaded when this executable is launched.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="editexecutablesdialog.ui" line="202"/>
+ <source>Force Load Libraries (*)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="editexecutablesdialog.ui" line="225"/>
+ <source>Configure Libraries</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="editexecutablesdialog.ui" line="234"/>
<source>Use Application&apos;s Icon for shortcuts</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.ui" line="204"/>
+ <location filename="editexecutablesdialog.ui" line="241"/>
<source>(*) This setting is profile-specific</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.ui" line="213"/>
- <location filename="editexecutablesdialog.ui" line="216"/>
+ <location filename="editexecutablesdialog.ui" line="250"/>
+ <location filename="editexecutablesdialog.ui" line="253"/>
<source>Add an executable</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.ui" line="219"/>
- <location filename="editexecutablesdialog.cpp" line="217"/>
+ <location filename="editexecutablesdialog.ui" line="256"/>
+ <location filename="editexecutablesdialog.cpp" line="295"/>
<source>Add</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.ui" line="230"/>
- <location filename="editexecutablesdialog.ui" line="233"/>
+ <location filename="editexecutablesdialog.ui" line="267"/>
+ <location filename="editexecutablesdialog.ui" line="270"/>
<source>Remove the selected executable</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.ui" line="236"/>
+ <location filename="editexecutablesdialog.ui" line="273"/>
<source>Remove</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.ui" line="264"/>
+ <location filename="editexecutablesdialog.ui" line="301"/>
<source>Close</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="146"/>
+ <location filename="editexecutablesdialog.cpp" line="224"/>
<source>Select a binary</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="147"/>
+ <location filename="editexecutablesdialog.cpp" line="225"/>
<source>Executable (%1)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="172"/>
+ <location filename="editexecutablesdialog.cpp" line="250"/>
<source>Java (32-bit) required</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="173"/>
+ <location filename="editexecutablesdialog.cpp" line="251"/>
<source>MO requires 32-bit java to run this application. If you already have it installed, select javaw.exe from that installation as the binary.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="189"/>
+ <location filename="editexecutablesdialog.cpp" line="267"/>
<source>Select a directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="196"/>
+ <location filename="editexecutablesdialog.cpp" line="274"/>
<source>Confirm</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="196"/>
+ <location filename="editexecutablesdialog.cpp" line="274"/>
<source>Really remove &quot;%1&quot; from executables?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="221"/>
+ <location filename="editexecutablesdialog.cpp" line="299"/>
<source>Modify</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="267"/>
- <location filename="editexecutablesdialog.cpp" line="287"/>
+ <location filename="editexecutablesdialog.cpp" line="361"/>
+ <location filename="editexecutablesdialog.cpp" line="381"/>
<source>Save Changes?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="268"/>
- <location filename="editexecutablesdialog.cpp" line="288"/>
+ <location filename="editexecutablesdialog.cpp" line="362"/>
+ <location filename="editexecutablesdialog.cpp" line="382"/>
<source>You made changes to the current executable, do you want to save them?</source>
<translation type="unfinished"></translation>
</message>
@@ -1118,6 +1137,78 @@ Right now the only case I know of where this needs to be overwritten is for the
</message>
</context>
<context>
+ <name>ForcedLoadDialog</name>
+ <message>
+ <location filename="forcedloaddialog.ui" line="14"/>
+ <source>Forced Load Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="forcedloaddialog.ui" line="45"/>
+ <location filename="forcedloaddialog.ui" line="48"/>
+ <source>Adds a row to the table.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="forcedloaddialog.ui" line="51"/>
+ <source>Add Row</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="forcedloaddialog.ui" line="58"/>
+ <location filename="forcedloaddialog.ui" line="61"/>
+ <source>Deletes the selected row from the table.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="forcedloaddialog.ui" line="64"/>
+ <source>Delete Row</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ForcedLoadDialogWidget</name>
+ <message>
+ <location filename="forcedloaddialogwidget.ui" line="20"/>
+ <source>Form</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="forcedloaddialogwidget.ui" line="33"/>
+ <location filename="forcedloaddialogwidget.ui" line="36"/>
+ <source>The name of the process that should be forced to load a library.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="forcedloaddialogwidget.ui" line="39"/>
+ <source>Process name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="forcedloaddialogwidget.ui" line="64"/>
+ <location filename="forcedloaddialogwidget.ui" line="67"/>
+ <source>Browse for a process.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="forcedloaddialogwidget.ui" line="70"/>
+ <location filename="forcedloaddialogwidget.ui" line="96"/>
+ <source>...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="forcedloaddialogwidget.ui" line="77"/>
+ <source>Library to load</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="forcedloaddialogwidget.ui" line="90"/>
+ <location filename="forcedloaddialogwidget.ui" line="93"/>
+ <source>Browse for a library.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>InstallDialog</name>
<message>
<location filename="installdialog.ui" line="20"/>
@@ -1457,7 +1548,7 @@ p, li { white-space: pre-wrap; }
<message>
<location filename="mainwindow.ui" line="287"/>
<location filename="mainwindow.ui" line="908"/>
- <location filename="mainwindow.cpp" line="4346"/>
+ <location filename="mainwindow.cpp" line="4349"/>
<source>Create Backup</source>
<translation type="unfinished"></translation>
</message>
@@ -1486,7 +1577,7 @@ p, li { white-space: pre-wrap; }
<location filename="mainwindow.ui" line="523"/>
<location filename="mainwindow.ui" line="644"/>
<location filename="mainwindow.ui" line="1060"/>
- <location filename="mainwindow.ui" line="1369"/>
+ <location filename="mainwindow.ui" line="1375"/>
<source>Filter</source>
<translation type="unfinished"></translation>
</message>
@@ -1633,8 +1724,8 @@ p, li { white-space: pre-wrap; }
<message>
<location filename="mainwindow.ui" line="1172"/>
<location filename="mainwindow.ui" line="1295"/>
- <location filename="mainwindow.cpp" line="4221"/>
- <location filename="mainwindow.cpp" line="5128"/>
+ <location filename="mainwindow.cpp" line="4224"/>
+ <location filename="mainwindow.cpp" line="5131"/>
<source>Refresh</source>
<translation type="unfinished"></translation>
</message>
@@ -1696,145 +1787,145 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1349"/>
+ <location filename="mainwindow.ui" line="1355"/>
<source>Show Hidden</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1414"/>
+ <location filename="mainwindow.ui" line="1420"/>
<source>Tool Bar</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1457"/>
+ <location filename="mainwindow.ui" line="1463"/>
<source>Install Mod</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1460"/>
+ <location filename="mainwindow.ui" line="1466"/>
<source>Install &amp;Mod</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1463"/>
+ <location filename="mainwindow.ui" line="1469"/>
<source>Install a new mod from an archive</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1466"/>
+ <location filename="mainwindow.ui" line="1472"/>
<source>Ctrl+M</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1475"/>
+ <location filename="mainwindow.ui" line="1481"/>
<source>Profiles</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1478"/>
+ <location filename="mainwindow.ui" line="1484"/>
<source>&amp;Profiles</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1481"/>
+ <location filename="mainwindow.ui" line="1487"/>
<source>Configure Profiles</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1484"/>
+ <location filename="mainwindow.ui" line="1490"/>
<source>Ctrl+P</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1493"/>
+ <location filename="mainwindow.ui" line="1499"/>
<source>Executables</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1496"/>
+ <location filename="mainwindow.ui" line="1502"/>
<source>&amp;Executables</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1499"/>
+ <location filename="mainwindow.ui" line="1505"/>
<source>Configure the executables that can be started through Mod Organizer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1502"/>
+ <location filename="mainwindow.ui" line="1508"/>
<source>Ctrl+E</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1511"/>
<location filename="mainwindow.ui" line="1517"/>
+ <location filename="mainwindow.ui" line="1523"/>
<source>Tools</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1514"/>
+ <location filename="mainwindow.ui" line="1520"/>
<source>&amp;Tools</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1520"/>
+ <location filename="mainwindow.ui" line="1526"/>
<source>Ctrl+I</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1529"/>
+ <location filename="mainwindow.ui" line="1535"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1532"/>
+ <location filename="mainwindow.ui" line="1538"/>
<source>&amp;Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1535"/>
+ <location filename="mainwindow.ui" line="1541"/>
<source>Configure settings and workarounds</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1538"/>
+ <location filename="mainwindow.ui" line="1544"/>
<source>Ctrl+S</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1547"/>
+ <location filename="mainwindow.ui" line="1553"/>
<source>Nexus</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1550"/>
+ <location filename="mainwindow.ui" line="1556"/>
<source>Search nexus network for more mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1553"/>
+ <location filename="mainwindow.ui" line="1559"/>
<source>Ctrl+N</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1565"/>
- <location filename="mainwindow.cpp" line="5059"/>
+ <location filename="mainwindow.ui" line="1571"/>
+ <location filename="mainwindow.cpp" line="5062"/>
<source>Update</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1568"/>
+ <location filename="mainwindow.ui" line="1574"/>
<source>Mod Organizer is up-to-date</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1580"/>
+ <location filename="mainwindow.ui" line="1586"/>
<location filename="mainwindow.cpp" line="661"/>
<source>No Problems</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1583"/>
+ <location filename="mainwindow.ui" line="1589"/>
<source>This button will be highlighted if MO discovered potential problems in your setup and provide tips on how to fix them.
!Work in progress!
@@ -1842,39 +1933,39 @@ Right now this has very limited functionality</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1595"/>
- <location filename="mainwindow.ui" line="1598"/>
+ <location filename="mainwindow.ui" line="1601"/>
+ <location filename="mainwindow.ui" line="1604"/>
<source>Help</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1601"/>
+ <location filename="mainwindow.ui" line="1607"/>
<source>Ctrl+H</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1610"/>
+ <location filename="mainwindow.ui" line="1616"/>
<source>Endorse MO</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1613"/>
- <location filename="mainwindow.cpp" line="5151"/>
+ <location filename="mainwindow.ui" line="1619"/>
+ <location filename="mainwindow.cpp" line="5154"/>
<source>Endorse Mod Organizer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1618"/>
+ <location filename="mainwindow.ui" line="1624"/>
<source>Copy Log to Clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1627"/>
+ <location filename="mainwindow.ui" line="1633"/>
<source>Change Game</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1630"/>
+ <location filename="mainwindow.ui" line="1636"/>
<source>Open the Instance selection dialog to manage a different Game</source>
<translation type="unfinished"></translation>
</message>
@@ -1927,8 +2018,8 @@ Error: %1</source>
</message>
<message>
<location filename="mainwindow.cpp" line="724"/>
- <location filename="mainwindow.cpp" line="4356"/>
- <location filename="mainwindow.cpp" line="4360"/>
+ <location filename="mainwindow.cpp" line="4359"/>
+ <location filename="mainwindow.cpp" line="4363"/>
<source>Endorse</source>
<translation type="unfinished"></translation>
</message>
@@ -2044,7 +2135,7 @@ Error: %1</source>
</message>
<message>
<location filename="mainwindow.cpp" line="1837"/>
- <source>Notice: Your current MO version (%1) is lower than the previous version (%2).&lt;br&gt;The GUI may not downgrade gracefully, so you may experience oddities.&lt;br&gt;However, there should be no serious issues.</source>
+ <source>Notice: Your current MO version (%1) is lower than the previously used one (%2). The GUI may not downgrade gracefully, so you may experience oddities. However, there should be no serious issues.</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -2058,676 +2149,676 @@ Error: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2117"/>
+ <location filename="mainwindow.cpp" line="2118"/>
<source>Start Tutorial?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2118"/>
+ <location filename="mainwindow.cpp" line="2119"/>
<source>You&apos;re about to start a tutorial. For technical reasons it&apos;s not possible to end the tutorial early. Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2277"/>
+ <location filename="mainwindow.cpp" line="2278"/>
<source>failed to spawn notepad.exe: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2317"/>
+ <location filename="mainwindow.cpp" line="2318"/>
<source>failed to change origin name: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2341"/>
+ <location filename="mainwindow.cpp" line="2342"/>
<source>failed to move &quot;%1&quot; from mod &quot;%2&quot; to &quot;%3&quot;: %4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2365"/>
+ <location filename="mainwindow.cpp" line="2366"/>
<source>&lt;Contains %1&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2400"/>
+ <location filename="mainwindow.cpp" line="2401"/>
<source>&lt;Checked&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2401"/>
+ <location filename="mainwindow.cpp" line="2402"/>
<source>&lt;Unchecked&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2402"/>
+ <location filename="mainwindow.cpp" line="2403"/>
<source>&lt;Update&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2403"/>
+ <location filename="mainwindow.cpp" line="2404"/>
<source>&lt;Mod Backup&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2404"/>
+ <location filename="mainwindow.cpp" line="2405"/>
<source>&lt;Managed by MO&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2405"/>
+ <location filename="mainwindow.cpp" line="2406"/>
<source>&lt;Managed outside MO&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2406"/>
+ <location filename="mainwindow.cpp" line="2407"/>
<source>&lt;No category&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2407"/>
+ <location filename="mainwindow.cpp" line="2408"/>
<source>&lt;Conflicted&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2408"/>
+ <location filename="mainwindow.cpp" line="2409"/>
<source>&lt;Not Endorsed&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2454"/>
+ <location filename="mainwindow.cpp" line="2455"/>
<source>failed to rename mod: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2467"/>
+ <location filename="mainwindow.cpp" line="2468"/>
<source>Overwrite?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2468"/>
+ <location filename="mainwindow.cpp" line="2469"/>
<source>This will replace the existing mod &quot;%1&quot;. Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2471"/>
+ <location filename="mainwindow.cpp" line="2472"/>
<source>failed to remove mod &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2475"/>
- <location filename="mainwindow.cpp" line="4891"/>
- <location filename="mainwindow.cpp" line="4915"/>
+ <location filename="mainwindow.cpp" line="2476"/>
+ <location filename="mainwindow.cpp" line="4894"/>
+ <location filename="mainwindow.cpp" line="4918"/>
<source>failed to rename &quot;%1&quot; to &quot;%2&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2542"/>
- <location filename="mainwindow.cpp" line="3919"/>
- <location filename="mainwindow.cpp" line="3927"/>
- <location filename="mainwindow.cpp" line="4469"/>
+ <location filename="mainwindow.cpp" line="2543"/>
+ <location filename="mainwindow.cpp" line="3922"/>
+ <location filename="mainwindow.cpp" line="3930"/>
+ <location filename="mainwindow.cpp" line="4472"/>
<source>Confirm</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2543"/>
+ <location filename="mainwindow.cpp" line="2544"/>
<source>Remove the following mods?&lt;br&gt;&lt;ul&gt;%1&lt;/ul&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2556"/>
+ <location filename="mainwindow.cpp" line="2559"/>
<source>failed to remove mod: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2588"/>
<location filename="mainwindow.cpp" line="2591"/>
- <location filename="mainwindow.cpp" line="2601"/>
+ <location filename="mainwindow.cpp" line="2594"/>
+ <location filename="mainwindow.cpp" line="2604"/>
<source>Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2588"/>
+ <location filename="mainwindow.cpp" line="2591"/>
<source>Installation file no longer exists</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2592"/>
+ <location filename="mainwindow.cpp" line="2595"/>
<source>Mods installed with old versions of MO can&apos;t be reinstalled in this way.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2602"/>
+ <location filename="mainwindow.cpp" line="2605"/>
<source>Failed to create backup.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2619"/>
+ <location filename="mainwindow.cpp" line="2622"/>
<source>You need to be logged in with Nexus to resume a download</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2635"/>
- <location filename="mainwindow.cpp" line="2661"/>
- <location filename="mainwindow.cpp" line="2695"/>
- <location filename="mainwindow.cpp" line="2721"/>
+ <location filename="mainwindow.cpp" line="2638"/>
+ <location filename="mainwindow.cpp" line="2664"/>
+ <location filename="mainwindow.cpp" line="2698"/>
+ <location filename="mainwindow.cpp" line="2724"/>
<source>You need to be logged in with Nexus to endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2646"/>
- <location filename="mainwindow.cpp" line="2654"/>
+ <location filename="mainwindow.cpp" line="2649"/>
+ <location filename="mainwindow.cpp" line="2657"/>
<source>Endorsing multiple mods will take a while. Please wait...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2706"/>
- <location filename="mainwindow.cpp" line="2714"/>
+ <location filename="mainwindow.cpp" line="2709"/>
+ <location filename="mainwindow.cpp" line="2717"/>
<source>Unendorsing multiple mods will take a while. Please wait...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2782"/>
+ <location filename="mainwindow.cpp" line="2785"/>
<source>Failed to display overwrite dialog: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2969"/>
+ <location filename="mainwindow.cpp" line="2972"/>
<source>Opening Nexus Links</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2970"/>
+ <location filename="mainwindow.cpp" line="2973"/>
<source>You are trying to open %1 links to Nexus Mods. Are you sure you want to do this?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2990"/>
+ <location filename="mainwindow.cpp" line="2993"/>
<source>Nexus ID for this Mod is unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3001"/>
+ <location filename="mainwindow.cpp" line="3004"/>
<source>Web page for this mod is unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3183"/>
+ <location filename="mainwindow.cpp" line="3186"/>
<source>&lt;table cellspacing=&quot;5&quot;&gt;&lt;tr&gt;&lt;th&gt;Type&lt;/th&gt;&lt;th&gt;All&lt;/th&gt;&lt;th&gt;Visible&lt;/th&gt;&lt;tr&gt;&lt;td&gt;Enabled mods:&amp;emsp;&lt;/td&gt;&lt;td align=right&gt;%1 / %2&lt;/td&gt;&lt;td align=right&gt;%3 / %4&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Unmanaged/DLCs:&amp;emsp;&lt;/td&gt;&lt;td align=right&gt;%5&lt;/td&gt;&lt;td align=right&gt;%6&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Mod backups:&amp;emsp;&lt;/td&gt;&lt;td align=right&gt;%7&lt;/td&gt;&lt;td align=right&gt;%8&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Separators:&amp;emsp;&lt;/td&gt;&lt;td align=right&gt;%9&lt;/td&gt;&lt;td align=right&gt;%10&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3238"/>
- <source>&lt;table cellspacing=&quot;4&quot;&gt;&lt;tr&gt;&lt;th&gt;Type&lt;/th&gt;&lt;th&gt;Active&lt;/th&gt;&lt;th&gt;Total&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Active plugins:&lt;/td&gt;&lt;td align=right&gt;%1&lt;/td&gt;&lt;td align=right&gt;%2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Active ESMs:&lt;/td&gt;&lt;td align=right&gt;%3&lt;/td&gt;&lt;td align=right&gt;%4&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Active ESPs:&lt;/td&gt;&lt;td align=right&gt;%7&lt;/td&gt;&lt;td align=right&gt;%8&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Active ESMs+ESPs:&lt;/td&gt;&lt;td align=right&gt;%9&lt;/td&gt;&lt;td align=right&gt;%10&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Active ESLs:&lt;/td&gt;&lt;td align=right&gt;%5&lt;/td&gt;&lt;td align=right&gt;%6&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+ <location filename="mainwindow.cpp" line="3241"/>
+ <source>&lt;table cellspacing=&quot;6&quot;&gt;&lt;tr&gt;&lt;th&gt;Type&lt;/th&gt;&lt;th&gt;Active &lt;/th&gt;&lt;th&gt;Total&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;All plugins:&lt;/td&gt;&lt;td align=right&gt;%1 &lt;/td&gt;&lt;td align=right&gt;%2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ESMs:&lt;/td&gt;&lt;td align=right&gt;%3 &lt;/td&gt;&lt;td align=right&gt;%4&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ESPs:&lt;/td&gt;&lt;td align=right&gt;%7 &lt;/td&gt;&lt;td align=right&gt;%8&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ESMs+ESPs:&lt;/td&gt;&lt;td align=right&gt;%9 &lt;/td&gt;&lt;td align=right&gt;%10&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ESLs:&lt;/td&gt;&lt;td align=right&gt;%5 &lt;/td&gt;&lt;td align=right&gt;%6&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3270"/>
- <location filename="mainwindow.cpp" line="3408"/>
- <location filename="mainwindow.cpp" line="4283"/>
+ <location filename="mainwindow.cpp" line="3273"/>
+ <location filename="mainwindow.cpp" line="3411"/>
+ <location filename="mainwindow.cpp" line="4286"/>
<source>Create Mod...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3271"/>
+ <location filename="mainwindow.cpp" line="3274"/>
<source>This will create an empty mod.
Please enter a name:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3280"/>
- <location filename="mainwindow.cpp" line="3418"/>
+ <location filename="mainwindow.cpp" line="3283"/>
+ <location filename="mainwindow.cpp" line="3421"/>
<source>A mod with this name already exists</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3308"/>
+ <location filename="mainwindow.cpp" line="3311"/>
<source>Create Separator...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3309"/>
+ <location filename="mainwindow.cpp" line="3312"/>
<source>This will create a new separator.
Please enter a name:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3316"/>
+ <location filename="mainwindow.cpp" line="3319"/>
<source>A separator with this name already exists</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3409"/>
+ <location filename="mainwindow.cpp" line="3412"/>
<source>This will move all files from overwrite into a new, regular mod.
Please enter a name:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3450"/>
- <location filename="mainwindow.cpp" line="5482"/>
+ <location filename="mainwindow.cpp" line="3453"/>
+ <location filename="mainwindow.cpp" line="5485"/>
<source>Are you sure?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3451"/>
+ <location filename="mainwindow.cpp" line="3454"/>
<source>About to recursively delete:
</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3813"/>
+ <location filename="mainwindow.cpp" line="3816"/>
<source>Not logged in, endorsement information will be wrong</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3821"/>
+ <location filename="mainwindow.cpp" line="3824"/>
<source>Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3822"/>
+ <location filename="mainwindow.cpp" line="3825"/>
<source>The versioning scheme decides which version is considered newer than another.
This function will guess the versioning scheme under the assumption that the installed version is outdated.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3842"/>
- <location filename="mainwindow.cpp" line="5027"/>
+ <location filename="mainwindow.cpp" line="3845"/>
+ <location filename="mainwindow.cpp" line="5030"/>
<source>Sorry</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3843"/>
+ <location filename="mainwindow.cpp" line="3846"/>
<source>I don&apos;t know a versioning scheme where %1 is newer than %2.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3919"/>
+ <location filename="mainwindow.cpp" line="3922"/>
<source>Really enable all visible mods?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3927"/>
+ <location filename="mainwindow.cpp" line="3930"/>
<source>Really disable all visible mods?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4007"/>
+ <location filename="mainwindow.cpp" line="4010"/>
<source>Export to csv</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4010"/>
+ <location filename="mainwindow.cpp" line="4013"/>
<source>CSV (Comma Separated Values) is a format that can be imported in programs like Excel to create a spreadsheet.
You can also use online editors and converters instead.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4013"/>
+ <location filename="mainwindow.cpp" line="4016"/>
<source>Select what mods you want export:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4014"/>
+ <location filename="mainwindow.cpp" line="4017"/>
<source>All installed mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4015"/>
+ <location filename="mainwindow.cpp" line="4018"/>
<source>Only active (checked) mods from your current profile</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4016"/>
+ <location filename="mainwindow.cpp" line="4019"/>
<source>All currently visible mods in the mod list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4037"/>
+ <location filename="mainwindow.cpp" line="4040"/>
<source>Choose what Columns to export:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4040"/>
+ <location filename="mainwindow.cpp" line="4043"/>
<source>Mod_Priority</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4042"/>
+ <location filename="mainwindow.cpp" line="4045"/>
<source>Mod_Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4044"/>
+ <location filename="mainwindow.cpp" line="4047"/>
<source>Notes_column</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4045"/>
+ <location filename="mainwindow.cpp" line="4048"/>
<source>Mod_Status</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4046"/>
+ <location filename="mainwindow.cpp" line="4049"/>
<source>Primary_Category</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4047"/>
+ <location filename="mainwindow.cpp" line="4050"/>
<source>Nexus_ID</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4048"/>
+ <location filename="mainwindow.cpp" line="4051"/>
<source>Mod_Nexus_URL</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4049"/>
+ <location filename="mainwindow.cpp" line="4052"/>
<source>Mod_Version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4050"/>
+ <location filename="mainwindow.cpp" line="4053"/>
<source>Install_Date</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4051"/>
+ <location filename="mainwindow.cpp" line="4054"/>
<source>Download_File_Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4158"/>
+ <location filename="mainwindow.cpp" line="4161"/>
<source>export failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4177"/>
+ <location filename="mainwindow.cpp" line="4180"/>
<source>Open Game folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4179"/>
+ <location filename="mainwindow.cpp" line="4182"/>
<source>Open MyGames folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4181"/>
+ <location filename="mainwindow.cpp" line="4184"/>
<source>Open INIs folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4185"/>
+ <location filename="mainwindow.cpp" line="4188"/>
<source>Open Instance folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4187"/>
+ <location filename="mainwindow.cpp" line="4190"/>
<source>Open Mods folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4189"/>
+ <location filename="mainwindow.cpp" line="4192"/>
<source>Open Profile folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4191"/>
+ <location filename="mainwindow.cpp" line="4194"/>
<source>Open Downloads folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4195"/>
+ <location filename="mainwindow.cpp" line="4198"/>
<source>Open MO2 Install folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4197"/>
+ <location filename="mainwindow.cpp" line="4200"/>
<source>Open MO2 Plugins folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4199"/>
+ <location filename="mainwindow.cpp" line="4202"/>
<source>Open MO2 Logs folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4208"/>
+ <location filename="mainwindow.cpp" line="4211"/>
<source>Install Mod...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4210"/>
+ <location filename="mainwindow.cpp" line="4213"/>
<source>Create empty mod</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4212"/>
+ <location filename="mainwindow.cpp" line="4215"/>
<source>Create Separator</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4216"/>
+ <location filename="mainwindow.cpp" line="4219"/>
<source>Enable all visible</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4217"/>
+ <location filename="mainwindow.cpp" line="4220"/>
<source>Disable all visible</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4219"/>
+ <location filename="mainwindow.cpp" line="4222"/>
<source>Check all for update</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4223"/>
+ <location filename="mainwindow.cpp" line="4226"/>
<source>Export to csv...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4235"/>
- <location filename="mainwindow.cpp" line="4251"/>
+ <location filename="mainwindow.cpp" line="4238"/>
+ <location filename="mainwindow.cpp" line="4254"/>
<source>Send to</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4236"/>
- <location filename="mainwindow.cpp" line="4252"/>
+ <location filename="mainwindow.cpp" line="4239"/>
+ <location filename="mainwindow.cpp" line="4255"/>
<source>Top</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4237"/>
- <location filename="mainwindow.cpp" line="4253"/>
+ <location filename="mainwindow.cpp" line="4240"/>
+ <location filename="mainwindow.cpp" line="4256"/>
<source>Bottom</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4238"/>
- <location filename="mainwindow.cpp" line="4254"/>
+ <location filename="mainwindow.cpp" line="4241"/>
+ <location filename="mainwindow.cpp" line="4257"/>
<source>Priority...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4239"/>
+ <location filename="mainwindow.cpp" line="4242"/>
<source>Separator...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4275"/>
+ <location filename="mainwindow.cpp" line="4278"/>
<source>All Mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4282"/>
+ <location filename="mainwindow.cpp" line="4285"/>
<source>Sync to Mods...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4284"/>
+ <location filename="mainwindow.cpp" line="4287"/>
<source>Clear Overwrite...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4286"/>
- <location filename="mainwindow.cpp" line="4387"/>
+ <location filename="mainwindow.cpp" line="4289"/>
+ <location filename="mainwindow.cpp" line="4390"/>
<source>Open in Explorer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4288"/>
+ <location filename="mainwindow.cpp" line="4291"/>
<source>Restore Backup</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4289"/>
+ <location filename="mainwindow.cpp" line="4292"/>
<source>Remove Backup...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4292"/>
- <location filename="mainwindow.cpp" line="4311"/>
+ <location filename="mainwindow.cpp" line="4295"/>
+ <location filename="mainwindow.cpp" line="4314"/>
<source>Change Categories</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4296"/>
- <location filename="mainwindow.cpp" line="4316"/>
+ <location filename="mainwindow.cpp" line="4299"/>
+ <location filename="mainwindow.cpp" line="4319"/>
<source>Primary Category</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4300"/>
+ <location filename="mainwindow.cpp" line="4303"/>
<source>Rename Separator...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4301"/>
+ <location filename="mainwindow.cpp" line="4304"/>
<source>Remove Separator...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4304"/>
+ <location filename="mainwindow.cpp" line="4307"/>
<source>Select Color...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4306"/>
+ <location filename="mainwindow.cpp" line="4309"/>
<source>Reset Color</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4323"/>
+ <location filename="mainwindow.cpp" line="4326"/>
<source>Change versioning scheme</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4327"/>
+ <location filename="mainwindow.cpp" line="4330"/>
<source>Un-ignore update</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4331"/>
+ <location filename="mainwindow.cpp" line="4334"/>
<source>Ignore update</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4336"/>
- <location filename="mainwindow.cpp" line="5593"/>
+ <location filename="mainwindow.cpp" line="4339"/>
+ <location filename="mainwindow.cpp" line="5596"/>
<source>Enable selected</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4337"/>
- <location filename="mainwindow.cpp" line="5594"/>
+ <location filename="mainwindow.cpp" line="4340"/>
+ <location filename="mainwindow.cpp" line="5597"/>
<source>Disable selected</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4343"/>
+ <location filename="mainwindow.cpp" line="4346"/>
<source>Rename Mod...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4344"/>
+ <location filename="mainwindow.cpp" line="4347"/>
<source>Reinstall Mod</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4345"/>
+ <location filename="mainwindow.cpp" line="4348"/>
<source>Remove Mod...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4353"/>
+ <location filename="mainwindow.cpp" line="4356"/>
<source>Un-Endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4357"/>
+ <location filename="mainwindow.cpp" line="4360"/>
<source>Won&apos;t endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4363"/>
+ <location filename="mainwindow.cpp" line="4366"/>
<source>Endorsement state unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4374"/>
+ <location filename="mainwindow.cpp" line="4377"/>
<source>Ignore missing data</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4378"/>
+ <location filename="mainwindow.cpp" line="4381"/>
<source>Mark as converted/working</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4382"/>
+ <location filename="mainwindow.cpp" line="4385"/>
<source>Visit on Nexus</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4384"/>
+ <location filename="mainwindow.cpp" line="4387"/>
<source>Visit web page</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4391"/>
+ <location filename="mainwindow.cpp" line="4394"/>
<source>Information...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4398"/>
- <location filename="mainwindow.cpp" line="5641"/>
+ <location filename="mainwindow.cpp" line="4401"/>
+ <location filename="mainwindow.cpp" line="5644"/>
<source>Exception: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4400"/>
- <location filename="mainwindow.cpp" line="5643"/>
+ <location filename="mainwindow.cpp" line="4403"/>
+ <location filename="mainwindow.cpp" line="5646"/>
<source>Unknown exception</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4429"/>
+ <location filename="mainwindow.cpp" line="4432"/>
<source>&lt;All&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4431"/>
+ <location filename="mainwindow.cpp" line="4434"/>
<source>&lt;Multiple&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4466"/>
+ <location filename="mainwindow.cpp" line="4469"/>
<source>%1 more</source>
<translation type="unfinished"></translation>
</message>
<message numerus="yes">
- <location filename="mainwindow.cpp" line="4470"/>
+ <location filename="mainwindow.cpp" line="4473"/>
<source>Are you sure you want to remove the following %n save(s)?&lt;br&gt;&lt;ul&gt;%1&lt;/ul&gt;&lt;br&gt;Removed saves will be sent to the Recycle Bin.</source>
<translation type="unfinished">
<numerusform></numerusform>
@@ -2735,12 +2826,12 @@ You can also use online editors and converters instead.</source>
</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4515"/>
+ <location filename="mainwindow.cpp" line="4518"/>
<source>Enable Mods...</source>
<translation type="unfinished"></translation>
</message>
<message numerus="yes">
- <location filename="mainwindow.cpp" line="4530"/>
+ <location filename="mainwindow.cpp" line="4533"/>
<source>Delete %n save(s)</source>
<translation type="unfinished">
<numerusform></numerusform>
@@ -2748,22 +2839,22 @@ You can also use online editors and converters instead.</source>
</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4572"/>
+ <location filename="mainwindow.cpp" line="4575"/>
<source>failed to remove %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4594"/>
+ <location filename="mainwindow.cpp" line="4597"/>
<source>failed to create %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4624"/>
+ <location filename="mainwindow.cpp" line="4627"/>
<source>Restarting MO</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4625"/>
+ <location filename="mainwindow.cpp" line="4628"/>
<source>Changing the managed game directory requires restarting MO.
Any pending downloads will be paused.
@@ -2771,335 +2862,335 @@ Click OK to restart MO now.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4645"/>
+ <location filename="mainwindow.cpp" line="4648"/>
<source>Can&apos;t change download directory while downloads are in progress!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4763"/>
+ <location filename="mainwindow.cpp" line="4766"/>
<source>failed to write to file %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4769"/>
+ <location filename="mainwindow.cpp" line="4772"/>
<source>%1 written</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4810"/>
+ <location filename="mainwindow.cpp" line="4813"/>
<source>Select binary</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4810"/>
+ <location filename="mainwindow.cpp" line="4813"/>
<source>Binary</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4836"/>
+ <location filename="mainwindow.cpp" line="4839"/>
<source>Enter Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4837"/>
+ <location filename="mainwindow.cpp" line="4840"/>
<source>Please enter a name for the executable</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4851"/>
+ <location filename="mainwindow.cpp" line="4854"/>
<source>Not an executable</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4851"/>
+ <location filename="mainwindow.cpp" line="4854"/>
<source>This is not a recognized executable.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4876"/>
- <location filename="mainwindow.cpp" line="4901"/>
+ <location filename="mainwindow.cpp" line="4879"/>
+ <location filename="mainwindow.cpp" line="4904"/>
<source>Replace file?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4876"/>
+ <location filename="mainwindow.cpp" line="4879"/>
<source>There already is a hidden version of this file. Replace it?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4879"/>
- <location filename="mainwindow.cpp" line="4904"/>
+ <location filename="mainwindow.cpp" line="4882"/>
+ <location filename="mainwindow.cpp" line="4907"/>
<source>File operation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4879"/>
- <location filename="mainwindow.cpp" line="4904"/>
+ <location filename="mainwindow.cpp" line="4882"/>
+ <location filename="mainwindow.cpp" line="4907"/>
<source>Failed to remove &quot;%1&quot;. Maybe you lack the required file permissions?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4901"/>
+ <location filename="mainwindow.cpp" line="4904"/>
<source>There already is a visible version of this file. Replace it?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4945"/>
- <location filename="mainwindow.cpp" line="6255"/>
+ <location filename="mainwindow.cpp" line="4948"/>
+ <location filename="mainwindow.cpp" line="6258"/>
<source>Set Priority</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4945"/>
+ <location filename="mainwindow.cpp" line="4948"/>
<source>Set the priority of the selected plugins</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4994"/>
+ <location filename="mainwindow.cpp" line="4997"/>
<source>file not found: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5007"/>
+ <location filename="mainwindow.cpp" line="5010"/>
<source>failed to generate preview for %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5027"/>
+ <location filename="mainwindow.cpp" line="5030"/>
<source>Sorry, can&apos;t preview anything. This function currently does not support extracting from bsas.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5061"/>
+ <location filename="mainwindow.cpp" line="5064"/>
<source>Update available</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5108"/>
+ <location filename="mainwindow.cpp" line="5111"/>
<source>Open/Execute</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5109"/>
+ <location filename="mainwindow.cpp" line="5112"/>
<source>Add as Executable</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5113"/>
+ <location filename="mainwindow.cpp" line="5116"/>
<source>Preview</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5119"/>
+ <location filename="mainwindow.cpp" line="5122"/>
<source>Un-Hide</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5121"/>
+ <location filename="mainwindow.cpp" line="5124"/>
<source>Hide</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5127"/>
+ <location filename="mainwindow.cpp" line="5130"/>
<source>Write To File...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5152"/>
+ <location filename="mainwindow.cpp" line="5155"/>
<source>Do you want to endorse Mod Organizer on %1 now?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5291"/>
+ <location filename="mainwindow.cpp" line="5294"/>
<source>Thank you!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5291"/>
+ <location filename="mainwindow.cpp" line="5294"/>
<source>Thank you for your endorsement!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5326"/>
+ <location filename="mainwindow.cpp" line="5329"/>
<source>Request to Nexus failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5341"/>
- <location filename="mainwindow.cpp" line="5403"/>
+ <location filename="mainwindow.cpp" line="5344"/>
+ <location filename="mainwindow.cpp" line="5406"/>
<source>failed to read %1: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5353"/>
- <location filename="mainwindow.cpp" line="5831"/>
+ <location filename="mainwindow.cpp" line="5356"/>
+ <location filename="mainwindow.cpp" line="5834"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5353"/>
+ <location filename="mainwindow.cpp" line="5356"/>
<source>failed to extract %1 (errorcode %2)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5385"/>
+ <location filename="mainwindow.cpp" line="5388"/>
<source>Extract BSA</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5414"/>
+ <location filename="mainwindow.cpp" line="5417"/>
<source>This archive contains invalid hashes. Some files may be broken.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5460"/>
+ <location filename="mainwindow.cpp" line="5463"/>
<source>Extract...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5483"/>
+ <location filename="mainwindow.cpp" line="5486"/>
<source>This will restart MO, continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5530"/>
+ <location filename="mainwindow.cpp" line="5533"/>
<source>Edit Categories...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5531"/>
+ <location filename="mainwindow.cpp" line="5534"/>
<source>Deselect filter</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5582"/>
+ <location filename="mainwindow.cpp" line="5585"/>
<source>Remove</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5598"/>
+ <location filename="mainwindow.cpp" line="5601"/>
<source>Enable all</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5599"/>
+ <location filename="mainwindow.cpp" line="5602"/>
<source>Disable all</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5620"/>
+ <location filename="mainwindow.cpp" line="5623"/>
<source>Unlock load order</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5623"/>
+ <location filename="mainwindow.cpp" line="5626"/>
<source>Lock load order</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5627"/>
+ <location filename="mainwindow.cpp" line="5630"/>
<source>Open Origin in Explorer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5634"/>
+ <location filename="mainwindow.cpp" line="5637"/>
<source>Open Origin Info...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5777"/>
+ <location filename="mainwindow.cpp" line="5780"/>
<source>depends on missing &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5781"/>
+ <location filename="mainwindow.cpp" line="5784"/>
<source>incompatible with &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5807"/>
+ <location filename="mainwindow.cpp" line="5810"/>
<source>Please wait while LOOT is running</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5904"/>
+ <location filename="mainwindow.cpp" line="5907"/>
<source>loot failed. Exit code was: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5926"/>
+ <location filename="mainwindow.cpp" line="5929"/>
<source>failed to start loot</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5929"/>
+ <location filename="mainwindow.cpp" line="5932"/>
<source>failed to run loot: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5933"/>
+ <location filename="mainwindow.cpp" line="5936"/>
<source>Errors occured</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5980"/>
+ <location filename="mainwindow.cpp" line="5983"/>
<source>Backup of load order created</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5990"/>
+ <location filename="mainwindow.cpp" line="5993"/>
<source>Choose backup to restore</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6003"/>
+ <location filename="mainwindow.cpp" line="6006"/>
<source>No Backups</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6003"/>
+ <location filename="mainwindow.cpp" line="6006"/>
<source>There are no backups to restore</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6024"/>
- <location filename="mainwindow.cpp" line="6046"/>
+ <location filename="mainwindow.cpp" line="6027"/>
+ <location filename="mainwindow.cpp" line="6049"/>
<source>Restore failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6025"/>
- <location filename="mainwindow.cpp" line="6047"/>
+ <location filename="mainwindow.cpp" line="6028"/>
+ <location filename="mainwindow.cpp" line="6050"/>
<source>Failed to restore the backup. Errorcode: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6036"/>
+ <location filename="mainwindow.cpp" line="6039"/>
<source>Backup of modlist created</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6142"/>
+ <location filename="mainwindow.cpp" line="6145"/>
<source>A file with the same name has already been downloaded. What would you like to do?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6144"/>
+ <location filename="mainwindow.cpp" line="6147"/>
<source>Overwrite</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6145"/>
+ <location filename="mainwindow.cpp" line="6148"/>
<source>Rename new file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6146"/>
+ <location filename="mainwindow.cpp" line="6149"/>
<source>Ignore file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6255"/>
+ <location filename="mainwindow.cpp" line="6258"/>
<source>Set the priority of the selected mods</source>
<translation type="unfinished"></translation>
</message>
@@ -4007,123 +4098,123 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="1026"/>
+ <location filename="modlist.cpp" line="1030"/>
<source>drag&amp;drop failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="1105"/>
+ <location filename="modlist.cpp" line="1109"/>
<source>Confirm</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="1106"/>
+ <location filename="modlist.cpp" line="1110"/>
<source>Are you sure you want to remove &quot;%1&quot;?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="1169"/>
+ <location filename="modlist.cpp" line="1173"/>
<source>Flags</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="1170"/>
+ <location filename="modlist.cpp" line="1174"/>
<source>Content</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="1171"/>
+ <location filename="modlist.cpp" line="1175"/>
<source>Mod Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="1172"/>
+ <location filename="modlist.cpp" line="1176"/>
<source>Version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="1173"/>
+ <location filename="modlist.cpp" line="1177"/>
<source>Priority</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="1174"/>
+ <location filename="modlist.cpp" line="1178"/>
<source>Category</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="1175"/>
+ <location filename="modlist.cpp" line="1179"/>
<source>Source Game</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="1176"/>
+ <location filename="modlist.cpp" line="1180"/>
<source>Nexus ID</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="1177"/>
+ <location filename="modlist.cpp" line="1181"/>
<source>Installation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="1178"/>
+ <location filename="modlist.cpp" line="1182"/>
<source>Notes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="1179"/>
- <location filename="modlist.cpp" line="1215"/>
+ <location filename="modlist.cpp" line="1183"/>
+ <location filename="modlist.cpp" line="1219"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="1187"/>
+ <location filename="modlist.cpp" line="1191"/>
<source>Name of your mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="1188"/>
+ <location filename="modlist.cpp" line="1192"/>
<source>Version of the mod (if available)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="1189"/>
+ <location filename="modlist.cpp" line="1193"/>
<source>Installation priority of your mod. The higher, the more &quot;important&quot; it is and thus overwrites files from mods with lower priority.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="1191"/>
+ <location filename="modlist.cpp" line="1195"/>
<source>Category of the mod.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="1192"/>
+ <location filename="modlist.cpp" line="1196"/>
<source>The source game which was the origin of this mod.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="1193"/>
+ <location filename="modlist.cpp" line="1197"/>
<source>Id of the mod as used on Nexus.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="1194"/>
+ <location filename="modlist.cpp" line="1198"/>
<source>Emblemes to highlight things that might require attention.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="1195"/>
+ <location filename="modlist.cpp" line="1199"/>
<source>Depicts the content of the mod:&lt;br&gt;&lt;table cellspacing=7&gt;&lt;tr&gt;&lt;td&gt;&lt;img src=&quot;:/MO/gui/content/plugin&quot; width=32/&gt;&lt;/td&gt;&lt;td&gt;Game plugins (esp/esm/esl)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;img src=&quot;:/MO/gui/content/interface&quot; width=32/&gt;&lt;/td&gt;&lt;td&gt;Interface&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;img src=&quot;:/MO/gui/content/mesh&quot; width=32/&gt;&lt;/td&gt;&lt;td&gt;Meshes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;img src=&quot;:/MO/gui/content/bsa&quot; width=32/&gt;&lt;/td&gt;&lt;td&gt;BSA&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;img src=&quot;:/MO/gui/content/texture&quot; width=32/&gt;&lt;/td&gt;&lt;td&gt;Textures&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;img src=&quot;:/MO/gui/content/sound&quot; width=32/&gt;&lt;/td&gt;&lt;td&gt;Sounds&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;img src=&quot;:/MO/gui/content/music&quot; width=32/&gt;&lt;/td&gt;&lt;td&gt;Music&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;img src=&quot;:/MO/gui/content/string&quot; width=32/&gt;&lt;/td&gt;&lt;td&gt;Strings&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;img src=&quot;:/MO/gui/content/script&quot; width=32/&gt;&lt;/td&gt;&lt;td&gt;Scripts (Papyrus)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;img src=&quot;:/MO/gui/content/skse&quot; width=32/&gt;&lt;/td&gt;&lt;td&gt;Script Extender plugins&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;img src=&quot;:/MO/gui/content/skyproc&quot; width=32/&gt;&lt;/td&gt;&lt;td&gt;SkyProc Patcher&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;img src=&quot;:/MO/gui/content/menu&quot; width=32/&gt;&lt;/td&gt;&lt;td&gt;Mod Configuration Menu&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;img src=&quot;:/MO/gui/content/inifile&quot; width=32/&gt;&lt;/td&gt;&lt;td&gt;INI files&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;img src=&quot;:/MO/gui/content/modgroup&quot; width=32/&gt;&lt;/td&gt;&lt;td&gt;ModGroup files&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="1213"/>
+ <location filename="modlist.cpp" line="1217"/>
<source>Time this mod was installed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="1214"/>
+ <location filename="modlist.cpp" line="1218"/>
<source>User notes about the mod</source>
<translation type="unfinished"></translation>
</message>
@@ -4131,7 +4222,7 @@ p, li { white-space: pre-wrap; }
<context>
<name>ModListSortProxy</name>
<message>
- <location filename="modlistsortproxy.cpp" line="461"/>
+ <location filename="modlistsortproxy.cpp" line="465"/>
<source>Drag&amp;Drop is only supported when sorting by priority</source>
<translation type="unfinished"></translation>
</message>
@@ -4351,81 +4442,81 @@ Continue launching %1?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="organizercore.cpp" line="1824"/>
+ <location filename="organizercore.cpp" line="1830"/>
<source>Multiple esps/esls activated, please check that they don&apos;t conflict.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="organizercore.cpp" line="1899"/>
+ <location filename="organizercore.cpp" line="1907"/>
<source>Download?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="organizercore.cpp" line="1900"/>
+ <location filename="organizercore.cpp" line="1908"/>
<source>A download has been started but no installed page plugin recognizes it.
If you download anyway no information (i.e. version) will be associated with the download.
Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="organizercore.cpp" line="2034"/>
+ <location filename="organizercore.cpp" line="2041"/>
<source>failed to update mod list: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="organizercore.cpp" line="2041"/>
- <location filename="organizercore.cpp" line="2058"/>
+ <location filename="organizercore.cpp" line="2048"/>
+ <location filename="organizercore.cpp" line="2065"/>
<source>login successful</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="organizercore.cpp" line="2065"/>
+ <location filename="organizercore.cpp" line="2072"/>
<source>Login failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="organizercore.cpp" line="2066"/>
+ <location filename="organizercore.cpp" line="2073"/>
<source>Login failed, try again?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="organizercore.cpp" line="2075"/>
+ <location filename="organizercore.cpp" line="2082"/>
<source>login failed: %1. Download will not be associated with an account</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="organizercore.cpp" line="2083"/>
+ <location filename="organizercore.cpp" line="2090"/>
<source>login failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="organizercore.cpp" line="2093"/>
+ <location filename="organizercore.cpp" line="2100"/>
<source>login failed: %1. You need to log-in with Nexus to update MO.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="organizercore.cpp" line="2146"/>
+ <location filename="organizercore.cpp" line="2153"/>
<source>MO1 &quot;Script Extender&quot; load mechanism has left hook.dll in your game folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="organizercore.cpp" line="2149"/>
- <location filename="organizercore.cpp" line="2165"/>
+ <location filename="organizercore.cpp" line="2156"/>
+ <location filename="organizercore.cpp" line="2172"/>
<source>Description missing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="organizercore.cpp" line="2158"/>
+ <location filename="organizercore.cpp" line="2165"/>
<source>&lt;a href=&quot;%1&quot;&gt;hook.dll&lt;/a&gt; has been found in your game folder (right click to copy the full path). This is most likely a leftover of setting the ModOrganizer 1 load mechanism to &quot;Script Extender&quot;, in which case you must remove this file either by changing the load mechanism in ModOrganizer 1 or manually removing the file, otherwise the game is likely to crash and burn.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="organizercore.cpp" line="2192"/>
+ <location filename="organizercore.cpp" line="2199"/>
<source>failed to save load order: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="organizercore.cpp" line="2264"/>
+ <location filename="organizercore.cpp" line="2271"/>
<source>The designated write target &quot;%1&quot; is not enabled.</source>
<translation type="unfinished"></translation>
</message>
@@ -4531,135 +4622,135 @@ Continue?</source>
<context>
<name>PluginList</name>
<message>
- <location filename="pluginlist.cpp" line="103"/>
+ <location filename="pluginlist.cpp" line="104"/>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="104"/>
+ <location filename="pluginlist.cpp" line="105"/>
<source>Priority</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="105"/>
+ <location filename="pluginlist.cpp" line="106"/>
<source>Mod Index</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="106"/>
+ <location filename="pluginlist.cpp" line="107"/>
<source>Flags</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="107"/>
- <location filename="pluginlist.cpp" line="119"/>
+ <location filename="pluginlist.cpp" line="108"/>
+ <location filename="pluginlist.cpp" line="120"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="115"/>
+ <location filename="pluginlist.cpp" line="116"/>
<source>Name of your mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="116"/>
+ <location filename="pluginlist.cpp" line="117"/>
<source>Load priority of your mod. The higher, the more &quot;important&quot; it is and thus overwrites data from plugins with lower priority.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="118"/>
+ <location filename="pluginlist.cpp" line="119"/>
<source>The modindex determines the formids of objects originating from this mods.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="224"/>
+ <location filename="pluginlist.cpp" line="246"/>
<source>failed to update esp info for file %1 (source id: %2), error: %3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="297"/>
+ <location filename="pluginlist.cpp" line="319"/>
<source>esp not found: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="345"/>
- <location filename="pluginlist.cpp" line="357"/>
+ <location filename="pluginlist.cpp" line="367"/>
+ <location filename="pluginlist.cpp" line="379"/>
<source>Confirm</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="345"/>
+ <location filename="pluginlist.cpp" line="367"/>
<source>Really enable all plugins?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="357"/>
+ <location filename="pluginlist.cpp" line="379"/>
<source>Really disable all plugins?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="462"/>
+ <location filename="pluginlist.cpp" line="484"/>
<source>The file containing locked plugin indices is broken</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="959"/>
- <location filename="pluginlist.cpp" line="963"/>
+ <location filename="pluginlist.cpp" line="981"/>
+ <location filename="pluginlist.cpp" line="985"/>
<source>&lt;b&gt;Origin&lt;/b&gt;: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="960"/>
+ <location filename="pluginlist.cpp" line="982"/>
<source>&lt;br&gt;&lt;b&gt;&lt;i&gt;This plugin can&apos;t be disabled (enforced by the game).&lt;/i&gt;&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="965"/>
+ <location filename="pluginlist.cpp" line="987"/>
<source>Author</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="968"/>
+ <location filename="pluginlist.cpp" line="990"/>
<source>Description</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="971"/>
+ <location filename="pluginlist.cpp" line="993"/>
<source>Missing Masters</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="978"/>
+ <location filename="pluginlist.cpp" line="1000"/>
<source>Enabled Masters</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="981"/>
+ <location filename="pluginlist.cpp" line="1003"/>
<source>Loads Archives</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="982"/>
+ <location filename="pluginlist.cpp" line="1004"/>
<source>There are Archives connected to this plugin. Their assets will be added to your game, overwriting in case of conflicts following the plugin order. Loose files will always overwrite assets from Archives. (This flag only checks for Archives from the same mod as the plugin)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="987"/>
+ <location filename="pluginlist.cpp" line="1009"/>
<source>Loads INI settings</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="988"/>
+ <location filename="pluginlist.cpp" line="1010"/>
<source>There is an ini file connected to this plugin. Its settings will be added to your game settings, overwriting in case of conflicts.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="992"/>
+ <location filename="pluginlist.cpp" line="1014"/>
<source>This ESP is flagged as an ESL. It will adhere to the ESP load order but the records will be loaded in ESL space.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="1167"/>
+ <location filename="pluginlist.cpp" line="1189"/>
<source>failed to restore load order for %1</source>
<translation type="unfinished"></translation>
</message>
@@ -4721,76 +4812,76 @@ p, li { white-space: pre-wrap; }
<context>
<name>Profile</name>
<message>
- <location filename="profile.cpp" line="80"/>
+ <location filename="profile.cpp" line="81"/>
<source>invalid profile name %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="84"/>
+ <location filename="profile.cpp" line="85"/>
<source>failed to create %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="258"/>
+ <location filename="profile.cpp" line="259"/>
<source>failed to write mod list: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="269"/>
+ <location filename="profile.cpp" line="270"/>
<source>failed to update tweaked ini file, wrong settings may be used: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="289"/>
+ <location filename="profile.cpp" line="290"/>
<source>failed to create tweaked ini: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="314"/>
+ <location filename="profile.cpp" line="315"/>
<source>failed to open %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="373"/>
+ <location filename="profile.cpp" line="374"/>
<source>&quot;%1&quot; is missing or inaccessible</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="418"/>
- <location filename="profile.cpp" line="457"/>
- <location filename="profile.cpp" line="554"/>
- <location filename="profile.cpp" line="573"/>
- <location filename="profile.cpp" line="583"/>
+ <location filename="profile.cpp" line="419"/>
+ <location filename="profile.cpp" line="458"/>
+ <location filename="profile.cpp" line="555"/>
+ <location filename="profile.cpp" line="574"/>
+ <location filename="profile.cpp" line="584"/>
<source>invalid index %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="535"/>
+ <location filename="profile.cpp" line="536"/>
<source>Overwrite directory couldn&apos;t be parsed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="546"/>
+ <location filename="profile.cpp" line="547"/>
<source>invalid priority %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="753"/>
+ <location filename="profile.cpp" line="755"/>
<source>Delete profile-specific save games?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="754"/>
+ <location filename="profile.cpp" line="756"/>
<source>Do you want to delete the profile-specific save games? (If you select &quot;No&quot;, the save games will show up again if you re-enable profile-specific save games)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="785"/>
+ <location filename="profile.cpp" line="786"/>
<source>Missing profile-specific game INI files!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="786"/>
+ <location filename="profile.cpp" line="787"/>
<source>Some of your profile-specific game INI files were missing. They will now be copied from the vanilla game folder. You might want double-check your settings.
Missing files:
@@ -4798,12 +4889,12 @@ Missing files:
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="801"/>
+ <location filename="profile.cpp" line="803"/>
<source>Delete profile-specific game INI files?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="802"/>
+ <location filename="profile.cpp" line="804"/>
<source>Do you want to delete the profile-specific game INI files? (If you select &quot;No&quot;, the INI files will be used again if you re-enable profile-specific game INI files.)</source>
<translation type="unfinished"></translation>
</message>
@@ -5322,7 +5413,7 @@ If the folder was still in use, restart MO and try again.</source>
</message>
<message>
<location filename="instancemanager.cpp" line="267"/>
- <location filename="profile.cpp" line="68"/>
+ <location filename="profile.cpp" line="69"/>
<source>failed to create %1</source>
<translation type="unfinished"></translation>
</message>
@@ -5465,7 +5556,7 @@ If the folder was still in use, restart MO and try again.</source>
</message>
<message>
<location filename="mainwindow.cpp" line="1400"/>
- <location filename="mainwindow.cpp" line="4721"/>
+ <location filename="mainwindow.cpp" line="4724"/>
<source>&lt;Manage...&gt;</source>
<translation type="unfinished"></translation>
</message>
@@ -5506,12 +5597,12 @@ If the folder was still in use, restart MO and try again.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="538"/>
+ <location filename="pluginlist.cpp" line="560"/>
<source>failed to access %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="552"/>
+ <location filename="pluginlist.cpp" line="574"/>
<source>failed to set file time %1</source>
<translation type="unfinished"></translation>
</message>
@@ -6714,7 +6805,7 @@ On Windows XP:
<context>
<name>UsvfsConnector</name>
<message>
- <location filename="usvfsconnector.cpp" line="161"/>
+ <location filename="usvfsconnector.cpp" line="163"/>
<source>Preparing vfs</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src/organizercore.cpp b/src/organizercore.cpp
index c4029a6d..39cb4d13 100644
--- a/src/organizercore.cpp
+++ b/src/organizercore.cpp
@@ -1199,10 +1199,15 @@ QStringList OrganizerCore::modsSortedByProfilePriority() const
return res;
}
-void OrganizerCore::spawnBinary(const QFileInfo &binary, const QString &arguments, const QDir &currentDirectory, const QString &steamAppID, const QString &customOverwrite)
+void OrganizerCore::spawnBinary(const QFileInfo &binary,
+ const QString &arguments,
+ const QDir &currentDirectory,
+ const QString &steamAppID,
+ const QString &customOverwrite,
+ const QList<MOBase::ExecutableForcedLoadSetting> &forcedLibraries)
{
DWORD processExitCode = 0;
- HANDLE processHandle = spawnBinaryDirect(binary, arguments, m_CurrentProfile->name(), currentDirectory, steamAppID, customOverwrite, &processExitCode);
+ HANDLE processHandle = spawnBinaryDirect(binary, arguments, m_CurrentProfile->name(), currentDirectory, steamAppID, customOverwrite, forcedLibraries, &processExitCode);
if (processHandle != INVALID_HANDLE_VALUE) {
refreshDirectoryStructure();
// need to remove our stored load order because it may be outdated if a foreign tool changed the
@@ -1227,9 +1232,10 @@ HANDLE OrganizerCore::spawnBinaryDirect(const QFileInfo &binary,
const QDir &currentDirectory,
const QString &steamAppID,
const QString &customOverwrite,
+ const QList<MOBase::ExecutableForcedLoadSetting> &forcedLibraries,
LPDWORD exitCode)
{
- HANDLE processHandle = spawnBinaryProcess(binary, arguments, profileName, currentDirectory, steamAppID, customOverwrite);
+ HANDLE processHandle = spawnBinaryProcess(binary, arguments, profileName, currentDirectory, steamAppID, customOverwrite, forcedLibraries);
if (Settings::instance().lockGUI() && processHandle != INVALID_HANDLE_VALUE) {
std::unique_ptr<LockedDialog> dlg;
ILockedWaitingForProcess* uilock = nullptr;
@@ -1264,7 +1270,8 @@ HANDLE OrganizerCore::spawnBinaryProcess(const QFileInfo &binary,
const QString &profileName,
const QDir &currentDirectory,
const QString &steamAppID,
- const QString &customOverwrite)
+ const QString &customOverwrite,
+ const QList<MOBase::ExecutableForcedLoadSetting> &forcedLibraries)
{
prepareStart();
@@ -1324,6 +1331,8 @@ HANDLE OrganizerCore::spawnBinaryProcess(const QFileInfo &binary,
if (m_AboutToRun(binary.absoluteFilePath())) {
try {
m_USVFS.updateMapping(fileMapping(profileName, customOverwrite));
+ m_USVFS.updateForcedLibraries(forcedLibraries);
+
} catch (const UsvfsConnectorException &e) {
qDebug(e.what());
return INVALID_HANDLE_VALUE;
@@ -1416,6 +1425,10 @@ HANDLE OrganizerCore::runShortcut(const MOShortcut& shortcut)
.toLocal8Bit().constData());
Executable& exe = m_ExecutablesList.find(shortcut.executable());
+ auto forcedLibaries = m_CurrentProfile->determineForcedLibraries(shortcut.executable());
+ if (!m_CurrentProfile->forcedLibrariesEnabled(exe.m_BinaryInfo.fileName())) {
+ forcedLibaries.clear();
+ }
return spawnBinaryDirect(
exe.m_BinaryInfo, exe.m_Arguments,
@@ -1423,7 +1436,9 @@ HANDLE OrganizerCore::runShortcut(const MOShortcut& shortcut)
exe.m_WorkingDirectory.length() != 0
? exe.m_WorkingDirectory
: exe.m_BinaryInfo.absolutePath(),
- exe.m_SteamAppID, "");
+ exe.m_SteamAppID,
+ "",
+ forcedLibaries);
}
HANDLE OrganizerCore::startApplication(const QString &executable,
@@ -1444,6 +1459,7 @@ HANDLE OrganizerCore::startApplication(const QString &executable,
}
QString steamAppID;
QString customOverwrite;
+ QList<ExecutableForcedLoadSetting> forcedLibraries;
if (executable.contains('\\') || executable.contains('/')) {
// file path
@@ -1462,6 +1478,9 @@ HANDLE OrganizerCore::startApplication(const QString &executable,
customOverwrite
= m_CurrentProfile->setting("custom_overwrites", exe.m_Title)
.toString();
+ if (m_CurrentProfile->forcedLibrariesEnabled(exe.m_Title)) {
+ forcedLibraries = m_CurrentProfile->determineForcedLibraries(exe.m_Title);
+ }
} catch (const std::runtime_error &) {
// nop
}
@@ -1473,6 +1492,9 @@ HANDLE OrganizerCore::startApplication(const QString &executable,
customOverwrite
= m_CurrentProfile->setting("custom_overwrites", exe.m_Title)
.toString();
+ if (m_CurrentProfile->forcedLibrariesEnabled(exe.m_Title)) {
+ forcedLibraries = m_CurrentProfile->determineForcedLibraries(exe.m_Title);
+ }
if (arguments == "") {
arguments = exe.m_Arguments;
}
@@ -1487,7 +1509,7 @@ HANDLE OrganizerCore::startApplication(const QString &executable,
}
}
- return spawnBinaryDirect(binary, arguments, profileName, currentDirectory, steamAppID, customOverwrite);
+ return spawnBinaryDirect(binary, arguments, profileName, currentDirectory, steamAppID, customOverwrite, forcedLibraries);
}
bool OrganizerCore::waitForApplication(HANDLE handle, LPDWORD exitCode)
diff --git a/src/organizercore.h b/src/organizercore.h
index 086fa11d..61020acd 100644
--- a/src/organizercore.h
+++ b/src/organizercore.h
@@ -20,6 +20,7 @@
#include <versioninfo.h>
#include <delayedfilewriter.h>
#include <boost/signals2.hpp>
+#include "executableinfo.h"
class ModListSortProxy;
class PluginListSortProxy;
@@ -141,20 +142,23 @@ public:
void spawnBinary(const QFileInfo &binary, const QString &arguments = "",
const QDir &currentDirectory = QDir(),
const QString &steamAppID = "",
- const QString &customOverwrite = "");
+ const QString &customOverwrite = "",
+ const QList<MOBase::ExecutableForcedLoadSetting> &forcedLibraries = QList<MOBase::ExecutableForcedLoadSetting>());
HANDLE spawnBinaryDirect(const QFileInfo &binary, const QString &arguments,
const QString &profileName,
const QDir &currentDirectory,
const QString &steamAppID,
const QString &customOverwrite,
+ const QList<MOBase::ExecutableForcedLoadSetting> &forcedLibraries = QList<MOBase::ExecutableForcedLoadSetting>(),
LPDWORD exitCode = nullptr);
HANDLE spawnBinaryProcess(const QFileInfo &binary, const QString &arguments,
const QString &profileName,
const QDir &currentDirectory,
const QString &steamAppID,
- const QString &customOverwrite);
+ const QString &customOverwrite,
+ const QList<MOBase::ExecutableForcedLoadSetting> &forcedLibraries = QList<MOBase::ExecutableForcedLoadSetting>());
void loginSuccessfulUpdate(bool necessary);
void loginFailedUpdate(const QString &message);
diff --git a/src/profile.cpp b/src/profile.cpp
index 09c2a5f5..02257de9 100644
--- a/src/profile.cpp
+++ b/src/profile.cpp
@@ -884,7 +884,6 @@ QVariant Profile::setting(const QString &section, const QString &name,
return m_Settings->value(section + "/" + name, fallback);
}
-
void Profile::storeSetting(const QString &section, const QString &name,
const QVariant &value)
{
@@ -906,7 +905,124 @@ void Profile::removeSetting(const QString &name)
removeSetting("", name);
}
+QVariantMap Profile::settingsByGroup(const QString &section) const
+{
+ QVariantMap results;
+ m_Settings->beginGroup(section);
+ for (auto key : m_Settings->childKeys()) {
+ results[key] = m_Settings->value(key);
+ }
+ m_Settings->endGroup();
+ return results;
+}
+
+void Profile::storeSettingsByGroup(const QString &section, const QVariantMap &values)
+{
+ m_Settings->beginGroup(section);
+ for (auto key : values.keys()) {
+ m_Settings->setValue(key, values[key]);
+ }
+ m_Settings->endGroup();
+}
+
+QList<QVariantMap> Profile::settingsByArray(const QString &prefix) const
+{
+ QList<QVariantMap> results;
+ int size = m_Settings->beginReadArray(prefix);
+ for (int i = 0; i < size; i++) {
+ m_Settings->setArrayIndex(i);
+ QVariantMap item;
+ for (auto key : m_Settings->childKeys()) {
+ item[key] = m_Settings->value(key);
+ }
+ results.append(item);
+ }
+ m_Settings->endArray();
+ return results;
+}
+
+void Profile::storeSettingsByArray(const QString &prefix, const QList<QVariantMap> &values)
+{
+ m_Settings->beginWriteArray(prefix);
+ for (int i = 0; i < values.length(); i++) {
+ m_Settings->setArrayIndex(i);
+ for (auto key : values.at(i).keys()) {
+ m_Settings->setValue(key, values.at(i)[key]);
+ }
+ }
+ m_Settings->endArray();
+}
+
int Profile::getPriorityMinimum() const
{
return m_ModIndexByPriority.begin()->first;
}
+
+bool Profile::forcedLibrariesEnabled(const QString &executable)
+{
+ return setting("forced_libraries", executable + "/enabled", false).toBool();
+}
+
+void Profile::setForcedLibrariesEnabled(const QString &executable, bool enabled)
+{
+ storeSetting("forced_libraries", executable + "/enabled", enabled);
+}
+
+QList<ExecutableForcedLoadSetting> Profile::determineForcedLibraries(const QString &executable)
+{
+ QList<ExecutableForcedLoadSetting> results;
+
+ auto rawSettings = settingsByArray("forced_libraries/" + executable);
+ auto forcedLoads = m_GamePlugin->executableForcedLoads();
+
+ // look for enabled status on forced loads and add those
+ for (auto forcedLoad : forcedLoads) {
+ bool found = false;
+ for (auto rawSetting : rawSettings) {
+ if ((rawSetting.value("process").toString().compare(forcedLoad.process(), Qt::CaseInsensitive) == 0)
+ && (rawSetting.value("library").toString().compare(forcedLoad.library(), Qt::CaseInsensitive) == 0))
+ {
+ results.append(forcedLoad.withEnabled(rawSetting.value("enabled", false).toBool()));
+ found = true;
+ }
+ }
+ if (!found) {
+ results.append(forcedLoad);
+ }
+ }
+
+ // add everything else
+ for (auto rawSetting : rawSettings) {
+ bool add = true;
+ for (auto forcedLoad : forcedLoads) {
+ if ((rawSetting.value("process").toString().compare(forcedLoad.process(), Qt::CaseInsensitive) == 0)
+ && (rawSetting.value("library").toString().compare(forcedLoad.library(), Qt::CaseInsensitive) == 0))
+ {
+ add = false;
+ }
+ }
+ if (add) {
+ results.append(
+ ExecutableForcedLoadSetting(
+ rawSetting.value("process").toString(),
+ rawSetting.value("library").toString()
+ ).withEnabled(rawSetting.value("enabled", false).toBool())
+ );
+ }
+ }
+
+ return results;
+}
+
+void Profile::saveForcedLibraries(const QString &executable, const QList<ExecutableForcedLoadSetting> &values)
+{
+ QList<QVariantMap> rawSettings;
+ for (auto setting : values) {
+ QVariantMap rawSetting;
+ rawSetting["enabled"] = setting.enabled();
+ rawSetting["process"] = setting.process();
+ rawSetting["library"] = setting.library();
+ rawSettings.append(rawSetting);
+ }
+ storeSettingsByArray("forced_libraries/" + executable, rawSettings);
+}
diff --git a/src/profile.h b/src/profile.h
index 95a5c59d..d7fb7785 100644
--- a/src/profile.h
+++ b/src/profile.h
@@ -24,12 +24,14 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "modinfo.h"
#include <iprofile.h>
#include <delayedfilewriter.h>
+#include "executableinfo.h"
#include <QByteArray>
#include <QDir>
#include <QObject>
#include <QString>
#include <QSettings>
+#include <QList>
#include <boost/shared_ptr.hpp>
@@ -310,8 +312,19 @@ public:
void removeSetting(const QString &section, const QString &name = QString());
void removeSetting(const QString &name);
+ QVariantMap settingsByGroup(const QString &section) const;
+ void storeSettingsByGroup(const QString &section, const QVariantMap &values);
+
+ QList<QVariantMap> settingsByArray(const QString &prefix) const;
+ void storeSettingsByArray(const QString &prefix, const QList<QVariantMap> &values);
+
int getPriorityMinimum() const;
+ bool forcedLibrariesEnabled(const QString &executable);
+ void setForcedLibrariesEnabled(const QString &executable, bool enabled);
+ QList<MOBase::ExecutableForcedLoadSetting> determineForcedLibraries(const QString &executable);
+ void saveForcedLibraries(const QString &executable, const QList<MOBase::ExecutableForcedLoadSetting> &values);
+
signals:
/**
diff --git a/src/settings.cpp b/src/settings.cpp
index 5cfe427b..f981f811 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -161,8 +161,8 @@ void Settings::managedGameChanged(IPluginGame const *gamePlugin)
void Settings::registerPlugin(IPlugin *plugin)
{
m_Plugins.push_back(plugin);
- m_PluginSettings.insert(plugin->name(), QMap<QString, QVariant>());
- m_PluginDescriptions.insert(plugin->name(), QMap<QString, QVariant>());
+ m_PluginSettings.insert(plugin->name(), QVariantMap());
+ m_PluginDescriptions.insert(plugin->name(), QVariantMap());
for (const PluginSetting &setting : plugin->settings()) {
QVariant temp = m_Settings.value("Plugins/" + plugin->name() + "/" + setting.key, setting.defaultValue);
if (!temp.convert(setting.defaultValue.type())) {
diff --git a/src/settings.h b/src/settings.h
index 25f22911..a47c255c 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -543,8 +543,8 @@ private:
std::vector<MOBase::IPlugin*> m_Plugins;
- QMap<QString, QMap<QString, QVariant>> m_PluginSettings;
- QMap<QString, QMap<QString, QVariant>> m_PluginDescriptions;
+ QMap<QString, QVariantMap> m_PluginSettings;
+ QMap<QString, QVariantMap> m_PluginDescriptions;
QSet<QString> m_PluginBlacklist;
diff --git a/src/settingsdialog.cpp b/src/settingsdialog.cpp
index b975fa75..3032a6c6 100644
--- a/src/settingsdialog.cpp
+++ b/src/settingsdialog.cpp
@@ -307,7 +307,7 @@ void SettingsDialog::on_resetDialogsButton_clicked()
void SettingsDialog::storeSettings(QListWidgetItem *pluginItem)
{
if (pluginItem != nullptr) {
- QMap<QString, QVariant> settings = pluginItem->data(Qt::UserRole + 1).toMap();
+ QVariantMap settings = pluginItem->data(Qt::UserRole + 1).toMap();
for (int i = 0; i < ui->pluginSettingsList->topLevelItemCount(); ++i) {
const QTreeWidgetItem *item = ui->pluginSettingsList->topLevelItem(i);
@@ -328,8 +328,8 @@ void SettingsDialog::on_pluginsList_currentItemChanged(QListWidgetItem *current,
ui->versionLabel->setText(plugin->version().canonicalString());
ui->descriptionLabel->setText(plugin->description());
- QMap<QString, QVariant> settings = current->data(Qt::UserRole + 1).toMap();
- QMap<QString, QVariant> descriptions = current->data(Qt::UserRole + 2).toMap();
+ QVariantMap settings = current->data(Qt::UserRole + 1).toMap();
+ QVariantMap descriptions = current->data(Qt::UserRole + 2).toMap();
ui->pluginSettingsList->setEnabled(settings.count() != 0);
for (auto iter = settings.begin(); iter != settings.end(); ++iter) {
QTreeWidgetItem *newItem = new QTreeWidgetItem(QStringList(iter.key()));
diff --git a/src/usvfsconnector.cpp b/src/usvfsconnector.cpp
index ef7314c0..5ad19fb0 100644
--- a/src/usvfsconnector.cpp
+++ b/src/usvfsconnector.cpp
@@ -138,6 +138,8 @@ UsvfsConnector::UsvfsConnector()
BlacklistExecutable(buf.data());
}
+ ClearLibraryForceLoads();
+
m_LogWorker.moveToThread(&m_WorkerThread);
connect(&m_WorkerThread, SIGNAL(started()), &m_LogWorker, SLOT(process()));
@@ -203,7 +205,8 @@ void UsvfsConnector::updateMapping(const MappingType &mapping)
*/
}
-void UsvfsConnector::updateParams(int logLevel, int crashDumpsType, QString executableBlacklist) {
+void UsvfsConnector::updateParams(int logLevel, int crashDumpsType, QString executableBlacklist)
+{
USVFSUpdateParams(::logLevel(logLevel), ::crashDumpsType(crashDumpsType));
ClearExecutableBlacklist();
for (auto exec : executableBlacklist.split(";")) {
@@ -211,3 +214,16 @@ void UsvfsConnector::updateParams(int logLevel, int crashDumpsType, QString exec
BlacklistExecutable(buf.data());
}
}
+
+void UsvfsConnector::updateForcedLibraries(const QList<MOBase::ExecutableForcedLoadSetting> &forcedLibraries)
+{
+ ClearLibraryForceLoads();
+ for (auto setting : forcedLibraries) {
+ if (setting.enabled()) {
+ ForceLoadLibrary(
+ setting.process().toStdWString().data(),
+ setting.library().toStdWString().data()
+ );
+ }
+ }
+}
diff --git a/src/usvfsconnector.h b/src/usvfsconnector.h
index 3aefb703..8a88bde5 100644
--- a/src/usvfsconnector.h
+++ b/src/usvfsconnector.h
@@ -27,7 +27,9 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <QThread>
#include <QFile>
#include <QDebug>
+#include <QList>
#include <usvfsparameters.h>
+#include "executableinfo.h"
class LogWorker : public QThread {
@@ -83,6 +85,7 @@ public:
void updateMapping(const MappingType &mapping);
void updateParams(int logLevel, int crashDumpsType, QString executableBlacklist);
+ void updateForcedLibraries(const QList<MOBase::ExecutableForcedLoadSetting> &forcedLibraries);
private: