summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2019-12-09 10:12:12 -0500
committerGitHub <noreply@github.com>2019-12-09 10:12:12 -0500
commit8cf3c4a3678233c37a89be38cebdaf5b8e864cb2 (patch)
tree9017c6df24a70a42b0417062dcfb1741f83fe5c6 /src
parent44084bfa415f906b8ba8b5d19e1be60a7612d692 (diff)
parent37891f29ca6f5935d4148bf5cf1f1d5a4eaa746c (diff)
Merge pull request #931 from isanae/double-click-unhooked
Double click unhooked
Diffstat (limited to 'src')
-rw-r--r--src/mainwindow.cpp182
-rw-r--r--src/mainwindow.h1
-rw-r--r--src/modinfodialogconflicts.cpp76
-rw-r--r--src/modinfodialogconflicts.h5
-rw-r--r--src/modinfodialogfiletree.cpp62
-rw-r--r--src/organizer_en.ts606
-rw-r--r--src/processrunner.cpp70
-rw-r--r--src/processrunner.h8
8 files changed, 553 insertions, 457 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 585be402..f58473e9 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -200,56 +200,6 @@ QString UnmanagedModName()
bool runLoot(QWidget* parent, OrganizerCore& core, bool didUpdateMasterList);
-void setDefaultActivationActionForFile(QAction* open, QAction* preview)
-{
- if (!open && !preview) {
- return;
- }
-
- QFont bold, notBold;
-
- if (open) {
- bold = open->font();
- notBold = open->font();
- } else {
- bold = preview->font();
- notBold = preview->font();
- }
-
- notBold.setBold(false);
- bold.setBold(true);
-
-
- const auto& s = Settings::instance();
- const auto openEnabled = (open && open->isEnabled());
- const auto previewEnabled = (preview && preview->isEnabled());
-
- bool doPreview = false;
-
- // preview is bold if the file is previewable and [the preview on double-click
- // option is enabled or the file can't be opened]; open is bold if the file
- // can be opened and cannot be previewed
- if (previewEnabled && s.interface().doubleClicksOpenPreviews()) {
- doPreview = true;
- } else if (openEnabled) {
- doPreview = false;
- } else if (previewEnabled) {
- doPreview = true;
- } else {
- // shouldn't happen, checked above
- return;
- }
-
- if (open) {
- open->setFont(doPreview ? notBold : bold);
- }
-
- if (preview) {
- preview->setFont(doPreview ? bold : notBold);
- }
-}
-
-
MainWindow::MainWindow(Settings &settings
, OrganizerCore &organizerCore
, PluginContainer &pluginContainer
@@ -1829,27 +1779,6 @@ void MainWindow::expandDataTreeItem(QTreeWidgetItem *item)
}
}
-void MainWindow::activateDataTreeItem(QTreeWidgetItem *item, int column)
-{
- const auto isArchive = item->data(0, Qt::UserRole + 1).toBool();
- const auto isDirectory = item->data(0, Qt::UserRole + 3).toBool();
-
- if (isArchive || isDirectory) {
- return;
- }
-
- const QString path = item->data(0, Qt::UserRole).toString();
- const QFileInfo targetInfo(path);
-
- const auto tryPreview = m_OrganizerCore.settings().interface().doubleClicksOpenPreviews();
-
- if (tryPreview && m_PluginContainer.previewGenerator().previewSupported(targetInfo.suffix())) {
- previewDataFile(item);
- } else {
- openDataFile(item);
- }
-}
-
bool MainWindow::refreshProfiles(bool selectProfile)
{
QComboBox* profileBox = findChild<QComboBox*>("profileBox");
@@ -5384,19 +5313,25 @@ void MainWindow::disableSelectedMods_clicked()
}
-void MainWindow::previewDataFile()
+void MainWindow::activateDataTreeItem(QTreeWidgetItem *item, int column)
{
- if (m_ContextItem == nullptr) {
+ const auto isArchive = item->data(0, Qt::UserRole + 1).toBool();
+ const auto isDirectory = item->data(0, Qt::UserRole + 3).toBool();
+
+ if (isArchive || isDirectory) {
return;
}
- previewDataFile(m_ContextItem);
-}
+ const QString path = item->data(0, Qt::UserRole).toString();
+ const QFileInfo targetInfo(path);
-void MainWindow::previewDataFile(QTreeWidgetItem* item)
-{
- QString fileName = QDir::fromNativeSeparators(item->data(0, Qt::UserRole).toString());
- m_OrganizerCore.previewFileWithAlternatives(this, fileName);
+ const auto tryPreview = m_OrganizerCore.settings().interface().doubleClicksOpenPreviews();
+
+ if (tryPreview && m_PluginContainer.previewGenerator().previewSupported(targetInfo.suffix())) {
+ previewDataFile(item);
+ } else {
+ openDataFile(item);
+ }
}
void MainWindow::openDataFile()
@@ -5422,6 +5357,7 @@ void MainWindow::openDataFile(QTreeWidgetItem* item)
m_OrganizerCore.processRunner()
.setFromFile(this, targetInfo)
+ .setHooked(false)
.setWaitForCompletion(ProcessRunner::Refresh)
.run();
}
@@ -5432,15 +5368,43 @@ void MainWindow::runDataFileHooked()
return;
}
- const QString path = m_ContextItem->data(0, Qt::UserRole).toString();
+ runDataFileHooked(m_ContextItem);
+}
+
+void MainWindow::runDataFileHooked(QTreeWidgetItem* item)
+{
+ const auto isArchive = item->data(0, Qt::UserRole + 1).toBool();
+ const auto isDirectory = item->data(0, Qt::UserRole + 3).toBool();
+
+ if (isArchive || isDirectory) {
+ return;
+ }
+
+ const QString path = item->data(0, Qt::UserRole).toString();
const QFileInfo targetInfo(path);
m_OrganizerCore.processRunner()
- .setFromFile(this, targetInfo, true)
+ .setFromFile(this, targetInfo)
+ .setHooked(true)
.setWaitForCompletion(ProcessRunner::Refresh)
.run();
}
+void MainWindow::previewDataFile()
+{
+ if (m_ContextItem == nullptr) {
+ return;
+ }
+
+ previewDataFile(m_ContextItem);
+}
+
+void MainWindow::previewDataFile(QTreeWidgetItem* item)
+{
+ QString fileName = QDir::fromNativeSeparators(item->data(0, Qt::UserRole).toString());
+ m_OrganizerCore.previewFileWithAlternatives(this, fileName);
+}
+
void MainWindow::openDataOriginExplorer_clicked()
{
if (m_ContextItem == nullptr) {
@@ -5521,21 +5485,57 @@ void MainWindow::on_dataTree_customContextMenuRequested(const QPoint &pos)
const auto isDirectory = m_ContextItem->data(0, Qt::UserRole + 3).toBool();
QAction* open = nullptr;
+ QAction* runHooked = nullptr;
QAction* preview = nullptr;
if (canRunFile(isArchive, fileName)) {
- open = menu.addAction(tr("&Execute"), this, SLOT(openDataFile()));
+ open = new QAction(tr("&Execute"), ui->dataTree);
+ runHooked = new QAction(tr("Execute with &VFS"), ui->dataTree);
} else if (canOpenFile(isArchive, fileName)) {
- open = menu.addAction(tr("&Open"), this, SLOT(openDataFile()));
- menu.addAction(tr("Open with &VFS"), this, SLOT(runDataFileHooked()));
+ open = new QAction(tr("&Open"), ui->dataTree);
+ runHooked = new QAction(tr("Open with &VFS"), ui->dataTree);
}
- menu.addAction(tr("&Add as Executable"), this, SLOT(addAsExecutable()));
-
if (m_PluginContainer.previewGenerator().previewSupported(QFileInfo(fileName).suffix())) {
- preview = menu.addAction(tr("Preview"), this, SLOT(previewDataFile()));
+ preview = new QAction(tr("Preview"), ui->dataTree);
+ }
+
+ if (open) {
+ connect(open, &QAction::triggered, [&]{ openDataFile(); });
+ }
+
+ if (runHooked) {
+ connect(runHooked, &QAction::triggered, [&]{ runDataFileHooked(); });
+ }
+
+ if (preview) {
+ connect(preview, &QAction::triggered, [&]{ previewDataFile(); });
+ }
+
+ if (open && preview) {
+ if (m_OrganizerCore.settings().interface().doubleClicksOpenPreviews()) {
+ menu.addAction(preview);
+ menu.addAction(open);
+ } else {
+ menu.addAction(open);
+ menu.addAction(preview);
+ }
+ } else {
+ if (open) {
+ menu.addAction(open);
+ }
+
+ if (preview) {
+ menu.addAction(preview);
+ }
+ }
+
+ if (runHooked) {
+ menu.addAction(runHooked);
}
+ menu.addAction(tr("&Add as Executable"), this, SLOT(addAsExecutable()));
+
if (!isArchive && !isDirectory) {
menu.addAction("Open Origin in Explorer", this, SLOT(openDataOriginExplorer_clicked()));
}
@@ -5553,7 +5553,13 @@ void MainWindow::on_dataTree_customContextMenuRequested(const QPoint &pos)
}
}
- setDefaultActivationActionForFile(open, preview);
+ if (open || preview || runHooked) {
+ // bold the first option
+ auto* top = menu.actions()[0];
+ auto f = top->font();
+ f.setBold(true);
+ top->setFont(f);
+ }
}
menu.addAction(tr("Write To File..."), this, SLOT(writeDataToFile()));
diff --git a/src/mainwindow.h b/src/mainwindow.h
index fcbbe039..4adab809 100644
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@ -439,6 +439,7 @@ private slots:
void openDataFile();
void openDataFile(QTreeWidgetItem* item);
void runDataFileHooked();
+ void runDataFileHooked(QTreeWidgetItem* item);
void addAsExecutable();
void previewDataFile();
void previewDataFile(QTreeWidgetItem* item);
diff --git a/src/modinfodialogconflicts.cpp b/src/modinfodialogconflicts.cpp
index 9c7ccc8c..0fb8c5a6 100644
--- a/src/modinfodialogconflicts.cpp
+++ b/src/modinfodialogconflicts.cpp
@@ -12,10 +12,6 @@ using namespace MOBase;
// checking whether menu items apply to them, just show all of them
const std::size_t max_small_selection = 50;
-// in mainwindow.cpp
-void setDefaultActivationActionForFile(QAction* open, QAction* preview);
-
-
class ConflictItem
{
public:
@@ -542,45 +538,32 @@ void ConflictsTab::activateItems(QTreeView* tree)
if (tryPreview && canPreviewFile(plugin(), item->isArchive(), path)) {
previewItem(item);
} else {
- openItem(item);
+ openItem(item, false);
}
return true;
});
}
-void ConflictsTab::openItems(QTreeView* tree)
+void ConflictsTab::openItems(QTreeView* tree, bool hooked)
{
// the menu item is only shown for a single selection, but handle all of them
// in case this changes
for_each_in_selection(tree, [&](const ConflictItem* item) {
- openItem(item);
+ openItem(item, hooked);
return true;
});
}
-void ConflictsTab::openItem(const ConflictItem* item)
+void ConflictsTab::openItem(const ConflictItem* item, bool hooked)
{
core().processRunner()
.setFromFile(parentWidget(), item->fileName())
+ .setHooked(hooked)
.setWaitForCompletion()
.run();
}
-void ConflictsTab::runItemsHooked(QTreeView* tree)
-{
- // the menu item is only shown for a single selection, but handle all of them
- // in case this changes
- for_each_in_selection(tree, [&](const ConflictItem* item) {
- core().processRunner()
- .setFromFile(parentWidget(), item->fileName(), true)
- .setWaitForCompletion()
- .run();
-
- return true;
- });
-}
-
void ConflictsTab::previewItems(QTreeView* tree)
{
// the menu item is only shown for a single selection, but handle all of them
@@ -615,30 +598,44 @@ void ConflictsTab::showContextMenu(const QPoint &pos, QTreeView* tree)
// open
if (actions.open) {
connect(actions.open, &QAction::triggered, [&]{
- openItems(tree);
+ openItems(tree, false);
});
+ }
- menu.addAction(actions.open);
+ // preview
+ if (actions.preview) {
+ connect(actions.preview, &QAction::triggered, [&]{
+ previewItems(tree);
+ });
+ }
+
+ if ((actions.open && actions.open->isEnabled()) && (actions.preview && actions.preview->isEnabled())) {
+ if (Settings::instance().interface().doubleClicksOpenPreviews()) {
+ menu.addAction(actions.preview);
+ menu.addAction(actions.open);
+ } else {
+ menu.addAction(actions.open);
+ menu.addAction(actions.preview);
+ }
+ } else {
+ if (actions.open) {
+ menu.addAction(actions.open);
+ }
+
+ if (actions.preview) {
+ menu.addAction(actions.preview);
+ }
}
// run hooked
if (actions.runHooked) {
connect(actions.runHooked, &QAction::triggered, [&]{
- runItemsHooked(tree);
+ openItems(tree, true);
});
menu.addAction(actions.runHooked);
}
- // preview
- if (actions.preview) {
- connect(actions.preview, &QAction::triggered, [&]{
- previewItems(tree);
- });
-
- menu.addAction(actions.preview);
- }
-
// goto
if (actions.gotoMenu) {
menu.addMenu(actions.gotoMenu);
@@ -681,9 +678,15 @@ void ConflictsTab::showContextMenu(const QPoint &pos, QTreeView* tree)
menu.addAction(actions.unhide);
}
- setDefaultActivationActionForFile(actions.open, actions.preview);
-
if (!menu.isEmpty()) {
+ if (actions.open || actions.preview || actions.runHooked) {
+ // bold the first option
+ auto* top = menu.actions()[0];
+ auto f = top->font();
+ f.setBold(true);
+ top->setFont(f);
+ }
+
menu.exec(tree->viewport()->mapToGlobal(pos));
}
}
@@ -769,6 +772,7 @@ ConflictsTab::Actions ConflictsTab::createMenuActions(QTreeView* tree)
if (enableRun) {
actions.open = new QAction(tr("&Execute"), parentWidget());
+ actions.runHooked = new QAction(tr("Execute with &VFS"), parentWidget());
} else if (enableOpen) {
actions.open = new QAction(tr("&Open"), parentWidget());
actions.runHooked = new QAction(tr("Open with &VFS"), parentWidget());
diff --git a/src/modinfodialogconflicts.h b/src/modinfodialogconflicts.h
index 3ac8de23..1297e536 100644
--- a/src/modinfodialogconflicts.h
+++ b/src/modinfodialogconflicts.h
@@ -108,12 +108,11 @@ public:
bool canHandleUnmanaged() const override;
void activateItems(QTreeView* tree);
- void openItems(QTreeView* tree);
- void runItemsHooked(QTreeView* tree);
+ void openItems(QTreeView* tree, bool hooked);
void previewItems(QTreeView* tree);
void exploreItems(QTreeView* tree);
- void openItem(const ConflictItem* item);
+ void openItem(const ConflictItem* item, bool hooked);
void previewItem(const ConflictItem* item);
void changeItemsVisibility(QTreeView* tree, bool visible);
diff --git a/src/modinfodialogfiletree.cpp b/src/modinfodialogfiletree.cpp
index d1ae3823..2c33a7f1 100644
--- a/src/modinfodialogfiletree.cpp
+++ b/src/modinfodialogfiletree.cpp
@@ -14,9 +14,6 @@ namespace shell = MOBase::shell;
// checking whether menu items apply to them, just show all of them
const int max_scan_for_context_menu = 50;
-// in mainwindow.cpp
-void setDefaultActivationActionForFile(QAction* open, QAction* preview);
-
FileTreeTab::FileTreeTab(ModInfoDialogTabContext cx)
: ModInfoDialogTab(std::move(cx)), m_fs(nullptr)
{
@@ -171,6 +168,7 @@ void FileTreeTab::onOpen()
const auto path = m_fs->filePath(selection);
core().processRunner()
.setFromFile(parentWidget(), path)
+ .setHooked(false)
.setWaitForCompletion()
.run();
}
@@ -182,8 +180,10 @@ void FileTreeTab::onRunHooked()
return;
}
+ const auto path = m_fs->filePath(selection);
core().processRunner()
- .setFromFile(parentWidget(), m_fs->filePath(selection), true)
+ .setFromFile(parentWidget(), path)
+ .setHooked(true)
.setWaitForCompletion()
.run();
}
@@ -450,19 +450,52 @@ void FileTreeTab::onContextMenu(const QPoint &pos)
}
}
+ bool enableRunHooked = false;
+
+ if (enableRun || enableOpen) {
+ if (auto* p=core().currentProfile()) {
+ if (mod().canBeEnabled()) {
+ const auto index = ModInfo::getIndex(mod().name());
+ if (index == UINT_MAX) {
+ log::error("mod '{}' not found (filetree)", mod().name());
+ } else {
+ enableRunHooked = p->modEnabled(index);
+ }
+ }
+ }
+ }
+
if (enableRun) {
m_actions.open->setText(tr("&Execute"));
- menu.addAction(m_actions.open);
+ m_actions.runHooked->setText(tr("Execute with &VFS"));
} else if (enableOpen) {
m_actions.open->setText(tr("&Open"));
- menu.addAction(m_actions.open);
- menu.addAction(m_actions.runHooked);
+ m_actions.runHooked->setText(tr("Open with &VFS"));
}
- menu.addAction(m_actions.preview);
m_actions.preview->setEnabled(enablePreview);
- setDefaultActivationActionForFile(m_actions.open, m_actions.preview);
+ if ((enableRun || enableOpen) && enablePreview) {
+ if (Settings::instance().interface().doubleClicksOpenPreviews()) {
+ menu.addAction(m_actions.preview);
+ menu.addAction(m_actions.open);
+ } else {
+ menu.addAction(m_actions.open);
+ menu.addAction(m_actions.preview);
+ }
+ } else {
+ if (enableOpen || enableRun) {
+ menu.addAction(m_actions.open);
+ }
+
+ if (enablePreview) {
+ menu.addAction(m_actions.preview);
+ }
+ }
+
+ if (enableRunHooked) {
+ menu.addAction(m_actions.runHooked);
+ }
menu.addAction(m_actions.explore);
m_actions.explore->setEnabled(enableExplore);
@@ -486,5 +519,16 @@ void FileTreeTab::onContextMenu(const QPoint &pos)
menu.addAction(m_actions.unhide);
m_actions.unhide->setEnabled(enableUnhide);
+ if (enableOpen || enableRun || enablePreview) {
+ // bold the first option, unbold all the others
+ for (int i=0; i<menu.actions().size(); ++i) {
+ if (auto* a=menu.actions()[i]) {
+ auto f = a->font();
+ f.setBold(i == 0);
+ a->setFont(f);
+ }
+ }
+ }
+
menu.exec(ui->filetree->viewport()->mapToGlobal(pos));
}
diff --git a/src/organizer_en.ts b/src/organizer_en.ts
index faff25ac..31612360 100644
--- a/src/organizer_en.ts
+++ b/src/organizer_en.ts
@@ -178,17 +178,17 @@ p, li { white-space: pre-wrap; }
<context>
<name>AdvancedConflictListModel</name>
<message>
- <location filename="modinfodialogconflicts.cpp" line="341"/>
+ <location filename="modinfodialogconflicts.cpp" line="337"/>
<source>Overwrites</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialogconflicts.cpp" line="342"/>
+ <location filename="modinfodialogconflicts.cpp" line="338"/>
<source>File</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialogconflicts.cpp" line="343"/>
+ <location filename="modinfodialogconflicts.cpp" line="339"/>
<source>Overwritten By</source>
<translation type="unfinished"></translation>
</message>
@@ -294,42 +294,47 @@ p, li { white-space: pre-wrap; }
<context>
<name>ConflictsTab</name>
<message>
- <location filename="modinfodialogconflicts.cpp" line="771"/>
+ <location filename="modinfodialogconflicts.cpp" line="774"/>
<source>&amp;Execute</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialogconflicts.cpp" line="773"/>
+ <location filename="modinfodialogconflicts.cpp" line="775"/>
+ <source>Execute with &amp;VFS</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialogconflicts.cpp" line="777"/>
<source>&amp;Open</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialogconflicts.cpp" line="774"/>
+ <location filename="modinfodialogconflicts.cpp" line="778"/>
<source>Open with &amp;VFS</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialogconflicts.cpp" line="777"/>
+ <location filename="modinfodialogconflicts.cpp" line="781"/>
<source>&amp;Preview</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialogconflicts.cpp" line="780"/>
+ <location filename="modinfodialogconflicts.cpp" line="784"/>
<source>&amp;Go to...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialogconflicts.cpp" line="783"/>
+ <location filename="modinfodialogconflicts.cpp" line="787"/>
<source>Open in &amp;Explorer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialogconflicts.cpp" line="786"/>
+ <location filename="modinfodialogconflicts.cpp" line="790"/>
<source>&amp;Hide</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialogconflicts.cpp" line="791"/>
+ <location filename="modinfodialogconflicts.cpp" line="795"/>
<source>&amp;Unhide</source>
<translation type="unfinished"></translation>
</message>
@@ -1267,58 +1272,59 @@ Right now the only case I know of where this needs to be overwritten is for the
<context>
<name>FileTreeTab</name>
<message>
- <location filename="modinfodialogfiletree.cpp" line="28"/>
+ <location filename="modinfodialogfiletree.cpp" line="25"/>
<source>&amp;New Folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialogfiletree.cpp" line="29"/>
+ <location filename="modinfodialogfiletree.cpp" line="26"/>
<source>&amp;Open/Execute</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialogfiletree.cpp" line="30"/>
+ <location filename="modinfodialogfiletree.cpp" line="27"/>
+ <location filename="modinfodialogfiletree.cpp" line="473"/>
<source>Open with &amp;VFS</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialogfiletree.cpp" line="31"/>
+ <location filename="modinfodialogfiletree.cpp" line="28"/>
<source>&amp;Preview</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialogfiletree.cpp" line="32"/>
+ <location filename="modinfodialogfiletree.cpp" line="29"/>
<source>Open in &amp;Explorer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialogfiletree.cpp" line="33"/>
+ <location filename="modinfodialogfiletree.cpp" line="30"/>
<source>&amp;Rename</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialogfiletree.cpp" line="34"/>
+ <location filename="modinfodialogfiletree.cpp" line="31"/>
<source>&amp;Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialogfiletree.cpp" line="35"/>
+ <location filename="modinfodialogfiletree.cpp" line="32"/>
<source>&amp;Hide</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialogfiletree.cpp" line="36"/>
+ <location filename="modinfodialogfiletree.cpp" line="33"/>
<source>&amp;Unhide</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialogfiletree.cpp" line="127"/>
- <location filename="modinfodialogfiletree.cpp" line="133"/>
+ <location filename="modinfodialogfiletree.cpp" line="124"/>
+ <location filename="modinfodialogfiletree.cpp" line="130"/>
<source>New Folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialogfiletree.cpp" line="139"/>
+ <location filename="modinfodialogfiletree.cpp" line="136"/>
<source>Failed to create &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
@@ -1343,12 +1349,17 @@ 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="modinfodialogfiletree.cpp" line="454"/>
+ <location filename="modinfodialogfiletree.cpp" line="469"/>
<source>&amp;Execute</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialogfiletree.cpp" line="457"/>
+ <location filename="modinfodialogfiletree.cpp" line="470"/>
+ <source>Execute with &amp;VFS</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialogfiletree.cpp" line="472"/>
<source>&amp;Open</source>
<translation type="unfinished"></translation>
</message>
@@ -1851,7 +1862,7 @@ p, li { white-space: pre-wrap; }
<message>
<location filename="mainwindow.ui" line="332"/>
<location filename="mainwindow.ui" line="839"/>
- <location filename="mainwindow.cpp" line="4776"/>
+ <location filename="mainwindow.cpp" line="4705"/>
<source>Create Backup</source>
<translation type="unfinished"></translation>
</message>
@@ -2027,8 +2038,8 @@ p, li { white-space: pre-wrap; }
<message>
<location filename="mainwindow.ui" line="1061"/>
<location filename="mainwindow.ui" line="1201"/>
- <location filename="mainwindow.cpp" line="4649"/>
- <location filename="mainwindow.cpp" line="5549"/>
+ <location filename="mainwindow.cpp" line="4578"/>
+ <location filename="mainwindow.cpp" line="5555"/>
<source>Refresh</source>
<translation type="unfinished"></translation>
</message>
@@ -2313,7 +2324,7 @@ p, li { white-space: pre-wrap; }
<message>
<location filename="mainwindow.ui" line="1653"/>
<location filename="mainwindow.ui" line="1656"/>
- <location filename="mainwindow.cpp" line="5575"/>
+ <location filename="mainwindow.cpp" line="5581"/>
<source>Endorse Mod Organizer</source>
<translation type="unfinished"></translation>
</message>
@@ -2391,814 +2402,814 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="361"/>
+ <location filename="mainwindow.cpp" line="311"/>
<source>Toolbar and Menu</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="362"/>
+ <location filename="mainwindow.cpp" line="312"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="363"/>
+ <location filename="mainwindow.cpp" line="313"/>
<source>Start Menu</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="388"/>
+ <location filename="mainwindow.cpp" line="338"/>
<source>There is no supported sort mechanism for this game. You will probably have to use a third-party tool.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="677"/>
+ <location filename="mainwindow.cpp" line="627"/>
<source>Crash on exit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="678"/>
+ <location filename="mainwindow.cpp" line="628"/>
<source>MO crashed while exiting. Some settings may not be saved.
Error: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1010"/>
+ <location filename="mainwindow.cpp" line="960"/>
<source>There are notifications to read</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1029"/>
+ <location filename="mainwindow.cpp" line="979"/>
<source>There are no notifications</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1116"/>
- <location filename="mainwindow.cpp" line="4786"/>
- <location filename="mainwindow.cpp" line="4790"/>
+ <location filename="mainwindow.cpp" line="1066"/>
+ <location filename="mainwindow.cpp" line="4715"/>
+ <location filename="mainwindow.cpp" line="4719"/>
<source>Endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1120"/>
+ <location filename="mainwindow.cpp" line="1070"/>
<source>Won&apos;t Endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1137"/>
+ <location filename="mainwindow.cpp" line="1087"/>
<source>Help on UI</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1141"/>
+ <location filename="mainwindow.cpp" line="1091"/>
<source>Documentation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1145"/>
+ <location filename="mainwindow.cpp" line="1095"/>
<source>Chat on Discord</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1149"/>
+ <location filename="mainwindow.cpp" line="1099"/>
<source>Report Issue</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1153"/>
+ <location filename="mainwindow.cpp" line="1103"/>
<source>Tutorials</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1192"/>
+ <location filename="mainwindow.cpp" line="1142"/>
<source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1193"/>
+ <location filename="mainwindow.cpp" line="1143"/>
<source>About Qt</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1252"/>
+ <location filename="mainwindow.cpp" line="1202"/>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1253"/>
+ <location filename="mainwindow.cpp" line="1203"/>
<source>Please enter a name for the new profile</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1261"/>
+ <location filename="mainwindow.cpp" line="1211"/>
<source>failed to create profile: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1316"/>
+ <location filename="mainwindow.cpp" line="1266"/>
<source>Show tutorial?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1317"/>
+ <location filename="mainwindow.cpp" line="1267"/>
<source>You are starting Mod Organizer for the first time. Do you want to show a tutorial of its basic features? If you choose no you can always start the tutorial from the &quot;Help&quot;-menu.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1380"/>
+ <location filename="mainwindow.cpp" line="1330"/>
<source>Downloads in progress</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1381"/>
+ <location filename="mainwindow.cpp" line="1331"/>
<source>There are still downloads in progress, do you really want to quit?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1492"/>
+ <location filename="mainwindow.cpp" line="1442"/>
<source>Plugin &quot;%1&quot; failed: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1494"/>
+ <location filename="mainwindow.cpp" line="1444"/>
<source>Plugin &quot;%1&quot; failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1574"/>
+ <location filename="mainwindow.cpp" line="1524"/>
<source>Browse Mod Page</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1778"/>
+ <location filename="mainwindow.cpp" line="1728"/>
<source>Also in: &lt;br&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1789"/>
+ <location filename="mainwindow.cpp" line="1739"/>
<source>No conflict</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1914"/>
+ <location filename="mainwindow.cpp" line="1843"/>
<source>&lt;Edit...&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1925"/>
+ <location filename="mainwindow.cpp" line="1854"/>
<source>(no executables)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2199"/>
+ <location filename="mainwindow.cpp" line="2128"/>
<source>This bsa is enabled in the ini file so it may be required!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2252"/>
+ <location filename="mainwindow.cpp" line="2181"/>
<source>Activating Network Proxy</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2342"/>
+ <location filename="mainwindow.cpp" line="2271"/>
<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>
- <location filename="mainwindow.cpp" line="2418"/>
+ <location filename="mainwindow.cpp" line="2347"/>
<source>Choose Mod</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2419"/>
+ <location filename="mainwindow.cpp" line="2348"/>
<source>Mod Archive</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2513"/>
+ <location filename="mainwindow.cpp" line="2442"/>
<source>Start Tutorial?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2514"/>
+ <location filename="mainwindow.cpp" line="2443"/>
<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="2720"/>
+ <location filename="mainwindow.cpp" line="2649"/>
<source>failed to change origin name: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2744"/>
+ <location filename="mainwindow.cpp" line="2673"/>
<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="2757"/>
+ <location filename="mainwindow.cpp" line="2686"/>
<source>failed to rename mod: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2770"/>
+ <location filename="mainwindow.cpp" line="2699"/>
<source>Overwrite?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2771"/>
+ <location filename="mainwindow.cpp" line="2700"/>
<source>This will replace the existing mod &quot;%1&quot;. Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2774"/>
+ <location filename="mainwindow.cpp" line="2703"/>
<source>failed to remove mod &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2778"/>
- <location filename="mainwindow.cpp" line="5296"/>
- <location filename="mainwindow.cpp" line="5320"/>
+ <location filename="mainwindow.cpp" line="2707"/>
+ <location filename="mainwindow.cpp" line="5225"/>
+ <location filename="mainwindow.cpp" line="5249"/>
<source>failed to rename &quot;%1&quot; to &quot;%2&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2866"/>
- <location filename="mainwindow.cpp" line="4352"/>
- <location filename="mainwindow.cpp" line="4360"/>
- <location filename="mainwindow.cpp" line="4886"/>
+ <location filename="mainwindow.cpp" line="2795"/>
+ <location filename="mainwindow.cpp" line="4281"/>
+ <location filename="mainwindow.cpp" line="4289"/>
+ <location filename="mainwindow.cpp" line="4815"/>
<source>Confirm</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2867"/>
+ <location filename="mainwindow.cpp" line="2796"/>
<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="2882"/>
+ <location filename="mainwindow.cpp" line="2811"/>
<source>failed to remove mod: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2914"/>
- <location filename="mainwindow.cpp" line="2917"/>
- <location filename="mainwindow.cpp" line="2927"/>
+ <location filename="mainwindow.cpp" line="2843"/>
+ <location filename="mainwindow.cpp" line="2846"/>
+ <location filename="mainwindow.cpp" line="2856"/>
<source>Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2914"/>
+ <location filename="mainwindow.cpp" line="2843"/>
<source>Installation file no longer exists</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2918"/>
+ <location filename="mainwindow.cpp" line="2847"/>
<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="2928"/>
+ <location filename="mainwindow.cpp" line="2857"/>
<source>Failed to create backup.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2956"/>
+ <location filename="mainwindow.cpp" line="2885"/>
<source>Endorsing multiple mods will take a while. Please wait...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2992"/>
+ <location filename="mainwindow.cpp" line="2921"/>
<source>Unendorsing multiple mods will take a while. Please wait...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3069"/>
+ <location filename="mainwindow.cpp" line="2998"/>
<source>Failed to display overwrite dialog: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3260"/>
+ <location filename="mainwindow.cpp" line="3189"/>
<source>Opening Nexus Links</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3261"/>
+ <location filename="mainwindow.cpp" line="3190"/>
<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="3288"/>
+ <location filename="mainwindow.cpp" line="3217"/>
<source>Nexus ID for this mod is unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3299"/>
+ <location filename="mainwindow.cpp" line="3228"/>
<source>Opening Web Pages</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3300"/>
+ <location filename="mainwindow.cpp" line="3229"/>
<source>You are trying to open %1 Web Pages. Are you sure you want to do this?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3506"/>
+ <location filename="mainwindow.cpp" line="3435"/>
<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="3561"/>
+ <location filename="mainwindow.cpp" line="3490"/>
<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="3593"/>
- <location filename="mainwindow.cpp" line="3737"/>
- <location filename="mainwindow.cpp" line="4711"/>
+ <location filename="mainwindow.cpp" line="3522"/>
+ <location filename="mainwindow.cpp" line="3666"/>
+ <location filename="mainwindow.cpp" line="4640"/>
<source>Create Mod...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3594"/>
+ <location filename="mainwindow.cpp" line="3523"/>
<source>This will create an empty mod.
Please enter a name:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3603"/>
- <location filename="mainwindow.cpp" line="3747"/>
+ <location filename="mainwindow.cpp" line="3532"/>
+ <location filename="mainwindow.cpp" line="3676"/>
<source>A mod with this name already exists</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3631"/>
+ <location filename="mainwindow.cpp" line="3560"/>
<source>Create Separator...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3632"/>
+ <location filename="mainwindow.cpp" line="3561"/>
<source>This will create a new separator.
Please enter a name:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3639"/>
+ <location filename="mainwindow.cpp" line="3568"/>
<source>A separator with this name already exists</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3738"/>
+ <location filename="mainwindow.cpp" line="3667"/>
<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="3811"/>
+ <location filename="mainwindow.cpp" line="3740"/>
<source>Move successful.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3833"/>
- <location filename="mainwindow.cpp" line="6206"/>
+ <location filename="mainwindow.cpp" line="3762"/>
+ <location filename="mainwindow.cpp" line="6212"/>
<source>Are you sure?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3834"/>
+ <location filename="mainwindow.cpp" line="3763"/>
<source>About to recursively delete:
</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4234"/>
+ <location filename="mainwindow.cpp" line="4163"/>
<source>Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4235"/>
+ <location filename="mainwindow.cpp" line="4164"/>
<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="4255"/>
+ <location filename="mainwindow.cpp" line="4184"/>
<source>Sorry</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4256"/>
+ <location filename="mainwindow.cpp" line="4185"/>
<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="4352"/>
+ <location filename="mainwindow.cpp" line="4281"/>
<source>Really enable all visible mods?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4360"/>
+ <location filename="mainwindow.cpp" line="4289"/>
<source>Really disable all visible mods?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4442"/>
+ <location filename="mainwindow.cpp" line="4371"/>
<source>Export to csv</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4445"/>
+ <location filename="mainwindow.cpp" line="4374"/>
<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="4448"/>
+ <location filename="mainwindow.cpp" line="4377"/>
<source>Select what mods you want export:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4449"/>
+ <location filename="mainwindow.cpp" line="4378"/>
<source>All installed mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4450"/>
+ <location filename="mainwindow.cpp" line="4379"/>
<source>Only active (checked) mods from your current profile</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4451"/>
+ <location filename="mainwindow.cpp" line="4380"/>
<source>All currently visible mods in the mod list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4472"/>
+ <location filename="mainwindow.cpp" line="4401"/>
<source>Choose what Columns to export:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4475"/>
+ <location filename="mainwindow.cpp" line="4404"/>
<source>Mod_Priority</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4477"/>
+ <location filename="mainwindow.cpp" line="4406"/>
<source>Mod_Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4479"/>
+ <location filename="mainwindow.cpp" line="4408"/>
<source>Notes_column</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4480"/>
+ <location filename="mainwindow.cpp" line="4409"/>
<source>Mod_Status</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4482"/>
+ <location filename="mainwindow.cpp" line="4411"/>
<source>Primary_Category</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4483"/>
+ <location filename="mainwindow.cpp" line="4412"/>
<source>Nexus_ID</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4484"/>
+ <location filename="mainwindow.cpp" line="4413"/>
<source>Mod_Nexus_URL</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4485"/>
+ <location filename="mainwindow.cpp" line="4414"/>
<source>Mod_Version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4486"/>
+ <location filename="mainwindow.cpp" line="4415"/>
<source>Install_Date</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4487"/>
+ <location filename="mainwindow.cpp" line="4416"/>
<source>Download_File_Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4595"/>
+ <location filename="mainwindow.cpp" line="4524"/>
<source>export failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4614"/>
+ <location filename="mainwindow.cpp" line="4543"/>
<source>Open Game folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4615"/>
+ <location filename="mainwindow.cpp" line="4544"/>
<source>Open MyGames folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4616"/>
+ <location filename="mainwindow.cpp" line="4545"/>
<source>Open INIs folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4621"/>
+ <location filename="mainwindow.cpp" line="4550"/>
<source>Open Instance folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4622"/>
+ <location filename="mainwindow.cpp" line="4551"/>
<source>Open Mods folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4623"/>
+ <location filename="mainwindow.cpp" line="4552"/>
<source>Open Profile folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4624"/>
+ <location filename="mainwindow.cpp" line="4553"/>
<source>Open Downloads folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4630"/>
+ <location filename="mainwindow.cpp" line="4559"/>
<source>Open MO2 Install folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4631"/>
+ <location filename="mainwindow.cpp" line="4560"/>
<source>Open MO2 Plugins folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4632"/>
+ <location filename="mainwindow.cpp" line="4561"/>
<source>Open MO2 Stylesheets folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4633"/>
+ <location filename="mainwindow.cpp" line="4562"/>
<source>Open MO2 Logs folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4640"/>
+ <location filename="mainwindow.cpp" line="4569"/>
<source>Install Mod...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4641"/>
+ <location filename="mainwindow.cpp" line="4570"/>
<source>Create empty mod</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4642"/>
+ <location filename="mainwindow.cpp" line="4571"/>
<source>Create Separator</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4646"/>
+ <location filename="mainwindow.cpp" line="4575"/>
<source>Enable all visible</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4647"/>
+ <location filename="mainwindow.cpp" line="4576"/>
<source>Disable all visible</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4648"/>
+ <location filename="mainwindow.cpp" line="4577"/>
<source>Check for updates</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4650"/>
+ <location filename="mainwindow.cpp" line="4579"/>
<source>Export to csv...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4659"/>
- <location filename="mainwindow.cpp" line="4675"/>
+ <location filename="mainwindow.cpp" line="4588"/>
+ <location filename="mainwindow.cpp" line="4604"/>
<source>Send to</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4660"/>
- <location filename="mainwindow.cpp" line="4676"/>
+ <location filename="mainwindow.cpp" line="4589"/>
+ <location filename="mainwindow.cpp" line="4605"/>
<source>Top</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4661"/>
- <location filename="mainwindow.cpp" line="4677"/>
+ <location filename="mainwindow.cpp" line="4590"/>
+ <location filename="mainwindow.cpp" line="4606"/>
<source>Bottom</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4662"/>
- <location filename="mainwindow.cpp" line="4678"/>
+ <location filename="mainwindow.cpp" line="4591"/>
+ <location filename="mainwindow.cpp" line="4607"/>
<source>Priority...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4663"/>
+ <location filename="mainwindow.cpp" line="4592"/>
<source>Separator...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4702"/>
+ <location filename="mainwindow.cpp" line="4631"/>
<source>All Mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4710"/>
+ <location filename="mainwindow.cpp" line="4639"/>
<source>Sync to Mods...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4712"/>
+ <location filename="mainwindow.cpp" line="4641"/>
<source>Move content to Mod...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4713"/>
+ <location filename="mainwindow.cpp" line="4642"/>
<source>Clear Overwrite...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4715"/>
- <location filename="mainwindow.cpp" line="4838"/>
+ <location filename="mainwindow.cpp" line="4644"/>
+ <location filename="mainwindow.cpp" line="4767"/>
<source>Open in Explorer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4717"/>
+ <location filename="mainwindow.cpp" line="4646"/>
<source>Restore Backup</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4718"/>
+ <location filename="mainwindow.cpp" line="4647"/>
<source>Remove Backup...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4721"/>
- <location filename="mainwindow.cpp" line="4740"/>
+ <location filename="mainwindow.cpp" line="4650"/>
+ <location filename="mainwindow.cpp" line="4669"/>
<source>Change Categories</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4725"/>
- <location filename="mainwindow.cpp" line="4745"/>
+ <location filename="mainwindow.cpp" line="4654"/>
+ <location filename="mainwindow.cpp" line="4674"/>
<source>Primary Category</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4729"/>
+ <location filename="mainwindow.cpp" line="4658"/>
<source>Rename Separator...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4730"/>
+ <location filename="mainwindow.cpp" line="4659"/>
<source>Remove Separator...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4733"/>
+ <location filename="mainwindow.cpp" line="4662"/>
<source>Select Color...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4735"/>
+ <location filename="mainwindow.cpp" line="4664"/>
<source>Reset Color</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4752"/>
+ <location filename="mainwindow.cpp" line="4681"/>
<source>Change versioning scheme</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4756"/>
+ <location filename="mainwindow.cpp" line="4685"/>
<source>Force-check updates</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4758"/>
+ <location filename="mainwindow.cpp" line="4687"/>
<source>Un-ignore update</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4761"/>
+ <location filename="mainwindow.cpp" line="4690"/>
<source>Ignore update</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4766"/>
- <location filename="mainwindow.cpp" line="6364"/>
+ <location filename="mainwindow.cpp" line="4695"/>
+ <location filename="mainwindow.cpp" line="6370"/>
<source>Enable selected</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4767"/>
- <location filename="mainwindow.cpp" line="6365"/>
+ <location filename="mainwindow.cpp" line="4696"/>
+ <location filename="mainwindow.cpp" line="6371"/>
<source>Disable selected</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4773"/>
+ <location filename="mainwindow.cpp" line="4702"/>
<source>Rename Mod...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4774"/>
+ <location filename="mainwindow.cpp" line="4703"/>
<source>Reinstall Mod</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4775"/>
+ <location filename="mainwindow.cpp" line="4704"/>
<source>Remove Mod...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4783"/>
+ <location filename="mainwindow.cpp" line="4712"/>
<source>Un-Endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4787"/>
+ <location filename="mainwindow.cpp" line="4716"/>
<source>Won&apos;t endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4793"/>
+ <location filename="mainwindow.cpp" line="4722"/>
<source>Endorsement state unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4803"/>
+ <location filename="mainwindow.cpp" line="4732"/>
<source>Start tracking</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4806"/>
+ <location filename="mainwindow.cpp" line="4735"/>
<source>Stop tracking</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4809"/>
+ <location filename="mainwindow.cpp" line="4738"/>
<source>Tracked state unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4820"/>
+ <location filename="mainwindow.cpp" line="4749"/>
<source>Ignore missing data</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4824"/>
+ <location filename="mainwindow.cpp" line="4753"/>
<source>Mark as converted/working</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4828"/>
+ <location filename="mainwindow.cpp" line="4757"/>
<source>Visit on Nexus</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4834"/>
+ <location filename="mainwindow.cpp" line="4763"/>
<source>Visit on %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4842"/>
+ <location filename="mainwindow.cpp" line="4771"/>
<source>Information...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4849"/>
- <location filename="mainwindow.cpp" line="6417"/>
+ <location filename="mainwindow.cpp" line="4778"/>
+ <location filename="mainwindow.cpp" line="6423"/>
<source>Exception: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4851"/>
- <location filename="mainwindow.cpp" line="6419"/>
+ <location filename="mainwindow.cpp" line="4780"/>
+ <location filename="mainwindow.cpp" line="6425"/>
<source>Unknown exception</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4883"/>
+ <location filename="mainwindow.cpp" line="4812"/>
<source>%1 more</source>
<translation type="unfinished"></translation>
</message>
<message numerus="yes">
- <location filename="mainwindow.cpp" line="4887"/>
+ <location filename="mainwindow.cpp" line="4816"/>
<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>
@@ -3206,12 +3217,12 @@ You can also use online editors and converters instead.</source>
</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4932"/>
+ <location filename="mainwindow.cpp" line="4861"/>
<source>Enable Mods...</source>
<translation type="unfinished"></translation>
</message>
<message numerus="yes">
- <location filename="mainwindow.cpp" line="4947"/>
+ <location filename="mainwindow.cpp" line="4876"/>
<source>Delete %n save(s)</source>
<translation type="unfinished">
<numerusform></numerusform>
@@ -3219,131 +3230,136 @@ You can also use online editors and converters instead.</source>
</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5027"/>
+ <location filename="mainwindow.cpp" line="4956"/>
<source>Restart Mod Organizer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5029"/>
+ <location filename="mainwindow.cpp" line="4958"/>
<source>Mod Organizer must restart to finish configuration changes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5031"/>
+ <location filename="mainwindow.cpp" line="4960"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5032"/>
+ <location filename="mainwindow.cpp" line="4961"/>
<source>Continue</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5032"/>
+ <location filename="mainwindow.cpp" line="4961"/>
<source>Some things might be weird.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5053"/>
+ <location filename="mainwindow.cpp" line="4982"/>
<source>Can&apos;t change download directory while downloads are in progress!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5210"/>
+ <location filename="mainwindow.cpp" line="5139"/>
<source>failed to write to file %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5216"/>
+ <location filename="mainwindow.cpp" line="5145"/>
<source>%1 written</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5234"/>
+ <location filename="mainwindow.cpp" line="5163"/>
<source>Enter Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5235"/>
+ <location filename="mainwindow.cpp" line="5164"/>
<source>Enter a name for the executable</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5257"/>
+ <location filename="mainwindow.cpp" line="5186"/>
<source>Not an executable</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5258"/>
+ <location filename="mainwindow.cpp" line="5187"/>
<source>This is not a recognized executable.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5281"/>
- <location filename="mainwindow.cpp" line="5306"/>
+ <location filename="mainwindow.cpp" line="5210"/>
+ <location filename="mainwindow.cpp" line="5235"/>
<source>Replace file?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5281"/>
+ <location filename="mainwindow.cpp" line="5210"/>
<source>There already is a hidden version of this file. Replace it?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5284"/>
- <location filename="mainwindow.cpp" line="5309"/>
+ <location filename="mainwindow.cpp" line="5213"/>
+ <location filename="mainwindow.cpp" line="5238"/>
<source>File operation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5284"/>
- <location filename="mainwindow.cpp" line="5309"/>
+ <location filename="mainwindow.cpp" line="5213"/>
+ <location filename="mainwindow.cpp" line="5238"/>
<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="5306"/>
+ <location filename="mainwindow.cpp" line="5235"/>
<source>There already is a visible version of this file. Replace it?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5350"/>
- <location filename="mainwindow.cpp" line="6756"/>
+ <location filename="mainwindow.cpp" line="5279"/>
+ <location filename="mainwindow.cpp" line="6762"/>
<source>Set Priority</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5350"/>
+ <location filename="mainwindow.cpp" line="5279"/>
<source>Set the priority of the selected plugins</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5482"/>
+ <location filename="mainwindow.cpp" line="5446"/>
<source>Update available</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5516"/>
+ <location filename="mainwindow.cpp" line="5481"/>
<source>&amp;Execute</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5518"/>
+ <location filename="mainwindow.cpp" line="5482"/>
+ <source>Execute with &amp;VFS</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="5484"/>
<source>&amp;Open</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5519"/>
+ <location filename="mainwindow.cpp" line="5485"/>
<source>Open with &amp;VFS</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5522"/>
+ <location filename="mainwindow.cpp" line="5526"/>
<source>&amp;Add as Executable</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5525"/>
+ <location filename="mainwindow.cpp" line="5489"/>
<source>Preview</source>
<translation type="unfinished"></translation>
</message>
@@ -3358,191 +3374,191 @@ You can also use online editors and converters instead.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5548"/>
+ <location filename="mainwindow.cpp" line="5554"/>
<source>Write To File...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5576"/>
+ <location filename="mainwindow.cpp" line="5582"/>
<source>Do you want to endorse Mod Organizer on %1 now?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5590"/>
+ <location filename="mainwindow.cpp" line="5596"/>
<source>Abstain from Endorsing Mod Organizer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5591"/>
+ <location filename="mainwindow.cpp" line="5597"/>
<source>Are you sure you want to abstain from endorsing Mod Organizer 2?
You will have to visit the mod page on the %1 Nexus site to change your mind.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5682"/>
+ <location filename="mainwindow.cpp" line="5688"/>
<source>Thank you for endorsing MO2! :)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5688"/>
+ <location filename="mainwindow.cpp" line="5694"/>
<source>Please reconsider endorsing MO2 on Nexus!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5952"/>
+ <location filename="mainwindow.cpp" line="5958"/>
<source>Thank you!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="5952"/>
+ <location filename="mainwindow.cpp" line="5958"/>
<source>Thank you for your endorsement!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6044"/>
+ <location filename="mainwindow.cpp" line="6050"/>
<source>Mod ID %1 no longer seems to be available on Nexus.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6046"/>
+ <location filename="mainwindow.cpp" line="6052"/>
<source>Request to Nexus failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6062"/>
- <location filename="mainwindow.cpp" line="6124"/>
+ <location filename="mainwindow.cpp" line="6068"/>
+ <location filename="mainwindow.cpp" line="6130"/>
<source>failed to read %1: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6074"/>
+ <location filename="mainwindow.cpp" line="6080"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6074"/>
+ <location filename="mainwindow.cpp" line="6080"/>
<source>failed to extract %1 (errorcode %2)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6106"/>
+ <location filename="mainwindow.cpp" line="6112"/>
<source>Extract BSA</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6135"/>
+ <location filename="mainwindow.cpp" line="6141"/>
<source>This archive contains invalid hashes. Some files may be broken.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6181"/>
+ <location filename="mainwindow.cpp" line="6187"/>
<source>Extract...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6206"/>
+ <location filename="mainwindow.cpp" line="6212"/>
<source>This will restart MO, continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6284"/>
+ <location filename="mainwindow.cpp" line="6290"/>
<source>&lt;Multiple&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6348"/>
+ <location filename="mainwindow.cpp" line="6354"/>
<source>Remove &apos;%1&apos; from the toolbar</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6369"/>
+ <location filename="mainwindow.cpp" line="6375"/>
<source>Enable all</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6370"/>
+ <location filename="mainwindow.cpp" line="6376"/>
<source>Disable all</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6391"/>
+ <location filename="mainwindow.cpp" line="6397"/>
<source>Unlock load order</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6394"/>
+ <location filename="mainwindow.cpp" line="6400"/>
<source>Lock load order</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6404"/>
+ <location filename="mainwindow.cpp" line="6410"/>
<source>Open Origin in Explorer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6409"/>
+ <location filename="mainwindow.cpp" line="6415"/>
<source>Open Origin Info...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6517"/>
+ <location filename="mainwindow.cpp" line="6523"/>
<source>Backup of load order created</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6527"/>
+ <location filename="mainwindow.cpp" line="6533"/>
<source>Choose backup to restore</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6540"/>
+ <location filename="mainwindow.cpp" line="6546"/>
<source>No Backups</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6540"/>
+ <location filename="mainwindow.cpp" line="6546"/>
<source>There are no backups to restore</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6565"/>
- <location filename="mainwindow.cpp" line="6590"/>
+ <location filename="mainwindow.cpp" line="6571"/>
+ <location filename="mainwindow.cpp" line="6596"/>
<source>Restore failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6566"/>
- <location filename="mainwindow.cpp" line="6591"/>
+ <location filename="mainwindow.cpp" line="6572"/>
+ <location filename="mainwindow.cpp" line="6597"/>
<source>Failed to restore the backup. Errorcode: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6578"/>
+ <location filename="mainwindow.cpp" line="6584"/>
<source>Backup of mod list created</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6661"/>
+ <location filename="mainwindow.cpp" line="6667"/>
<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="6663"/>
+ <location filename="mainwindow.cpp" line="6669"/>
<source>Overwrite</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6664"/>
+ <location filename="mainwindow.cpp" line="6670"/>
<source>Rename new file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6665"/>
+ <location filename="mainwindow.cpp" line="6671"/>
<source>Ignore file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="6756"/>
+ <location filename="mainwindow.cpp" line="6762"/>
<source>Set the priority of the selected mods</source>
<translation type="unfinished"></translation>
</message>
@@ -4538,7 +4554,7 @@ p, li { white-space: pre-wrap; }
<context>
<name>NoConflictListModel</name>
<message>
- <location filename="modinfodialogconflicts.cpp" line="329"/>
+ <location filename="modinfodialogconflicts.cpp" line="325"/>
<source>File</source>
<translation type="unfinished"></translation>
</message>
@@ -4754,12 +4770,12 @@ Continue?</source>
<context>
<name>OverwriteConflictListModel</name>
<message>
- <location filename="modinfodialogconflicts.cpp" line="303"/>
+ <location filename="modinfodialogconflicts.cpp" line="299"/>
<source>File</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialogconflicts.cpp" line="304"/>
+ <location filename="modinfodialogconflicts.cpp" line="300"/>
<source>Overwritten Mods</source>
<translation type="unfinished"></translation>
</message>
@@ -4846,12 +4862,12 @@ Continue?</source>
<context>
<name>OverwrittenConflictListModel</name>
<message>
- <location filename="modinfodialogconflicts.cpp" line="316"/>
+ <location filename="modinfodialogconflicts.cpp" line="312"/>
<source>File</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialogconflicts.cpp" line="317"/>
+ <location filename="modinfodialogconflicts.cpp" line="313"/>
<source>Providing Mod</source>
<translation type="unfinished"></translation>
</message>
@@ -6093,18 +6109,18 @@ If the folder was still in use, restart MO and try again.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1329"/>
+ <location filename="mainwindow.cpp" line="1279"/>
<source>Please use &quot;Help&quot; from the toolbar to get usage instructions to all elements</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1859"/>
- <location filename="mainwindow.cpp" line="5165"/>
+ <location filename="mainwindow.cpp" line="1788"/>
+ <location filename="mainwindow.cpp" line="5094"/>
<source>&lt;Manage...&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1871"/>
+ <location filename="mainwindow.cpp" line="1800"/>
<source>failed to parse profile %1: %2</source>
<translation type="unfinished"></translation>
</message>
@@ -6263,9 +6279,9 @@ If the folder was still in use, restart MO and try again.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="processrunner.cpp" line="532"/>
- <location filename="processrunner.cpp" line="585"/>
- <location filename="processrunner.cpp" line="699"/>
+ <location filename="processrunner.cpp" line="522"/>
+ <location filename="processrunner.cpp" line="575"/>
+ <location filename="processrunner.cpp" line="721"/>
<source>No profile set</source>
<translation type="unfinished"></translation>
</message>
@@ -6940,12 +6956,14 @@ Select Show Details option to see the full change-log.</source>
</message>
<message>
<location filename="settingsdialog.ui" line="105"/>
- <source>https://www.transifex.com/tannin/mod-organizer/</source>
+ <source>https://www.transifex.com/mod-organizer-2-team/mod-organizer-2/</source>
+ <oldsource>https://www.transifex.com/tannin/mod-organizer/</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="settingsdialog.ui" line="108"/>
- <source>&lt;a href=&quot;https://www.transifex.com/tannin/mod-organizer/&quot;&gt;Help translate Mod Organizer&lt;/a&gt;</source>
+ <source>&lt;a href=&quot;https://www.transifex.com/mod-organizer-2-team/mod-organizer-2/&quot;&gt;Help translate Mod Organizer&lt;/a&gt;</source>
+ <oldsource>&lt;a href=&quot;https://www.transifex.com/tannin/mod-organizer/&quot;&gt;Help translate Mod Organizer&lt;/a&gt;</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
diff --git a/src/processrunner.cpp b/src/processrunner.cpp
index 46065d69..19aae632 100644
--- a/src/processrunner.cpp
+++ b/src/processrunner.cpp
@@ -421,8 +421,8 @@ ProcessRunner::ProcessRunner(OrganizerCore& core, IUserInterface* ui) :
m_core(core), m_ui(ui), m_lockReason(UILocker::NoReason),
m_waitFlags(NoFlags), m_handle(INVALID_HANDLE_VALUE), m_exitCode(-1)
{
- // all processes started in ProcessRunner are hooked
- m_sp.hooked = true;
+ // all processes started in ProcessRunner are hooked by default
+ setHooked(true);
}
ProcessRunner& ProcessRunner::setBinary(const QFileInfo &binary)
@@ -475,8 +475,14 @@ ProcessRunner& ProcessRunner::setWaitForCompletion(
return *this;
}
+ProcessRunner& ProcessRunner::setHooked(bool b)
+{
+ m_sp.hooked = b;
+ return *this;
+}
+
ProcessRunner& ProcessRunner::setFromFile(
- QWidget* parent, const QFileInfo& targetInfo, bool forceHook)
+ QWidget* parent, const QFileInfo& targetInfo)
{
if (!parent && m_ui) {
parent = m_ui->qtWidget();
@@ -500,24 +506,8 @@ ProcessRunner& ProcessRunner::setFromFile(
case spawn::FileExecutionTypes::Other: // fall-through
default:
{
- if (forceHook) {
- auto assoc = env::getAssociation(targetInfo);
- if (!assoc.executable.filePath().isEmpty()) {
- setBinary(assoc.executable);
- setArguments(assoc.formattedCommandLine);
- setCurrentDirectory(assoc.executable.absoluteDir());
-
- return *this;
- }
-
- // if it fails, just use the regular shell open
- }
-
- m_shellOpen = targetInfo.absoluteFilePath();
-
- // picked up by postRun()
- m_sp.hooked = false;
-
+ m_shellOpen = targetInfo;
+ setHooked(false);
break;
}
}
@@ -649,11 +639,41 @@ ProcessRunner& ProcessRunner::setFromFileOrExecutable(
return *this;
}
+bool ProcessRunner::shouldRunShell() const
+{
+ return !m_shellOpen.filePath().isEmpty();
+}
+
ProcessRunner::Results ProcessRunner::run()
{
+ // check if setHooked() was called after setFromFile(); this needs to
+ // modify the settings to run the associated executable instead of using
+ // shell::Open()
+
+ if (shouldRunShell() && m_sp.hooked) {
+ // this is a non-executable file, but it should be hooked; the associated
+ // executable needs to be retrieved and run instead
+ auto assoc = env::getAssociation(m_shellOpen);
+ if (!assoc.executable.filePath().isEmpty()) {
+ setBinary(assoc.executable);
+ setArguments(assoc.formattedCommandLine);
+ setCurrentDirectory(assoc.executable.absoluteDir());
+ m_shellOpen = {};
+ } else {
+ // if it fails, just use the regular shell open
+ log::error("failed to get the associated executable, running unhooked");
+ m_sp.hooked = false;
+ }
+ } else if (!shouldRunShell() && !m_sp.hooked) {
+ // this is an executable that should not be hooked; just run it through
+ // the shell
+ m_shellOpen = m_sp.binary;
+ }
+
+
std::optional<Results> r;
- if (!m_shellOpen.isEmpty()) {
+ if (shouldRunShell()) {
r = runShell();
} else {
r = runBinary();
@@ -669,9 +689,11 @@ ProcessRunner::Results ProcessRunner::run()
std::optional<ProcessRunner::Results> ProcessRunner::runShell()
{
- log::debug("executing from shell: '{}'", m_shellOpen);
+ const auto file = m_shellOpen.absoluteFilePath();
+
+ log::debug("executing from shell: '{}'", file);
- auto r = shell::Open(m_shellOpen);
+ auto r = shell::Open(file);
if (!r.success()) {
return Error;
}
diff --git a/src/processrunner.h b/src/processrunner.h
index d576216a..1bfdc465 100644
--- a/src/processrunner.h
+++ b/src/processrunner.h
@@ -67,6 +67,7 @@ public:
ProcessRunner& setProfileName(const QString& profileName);
ProcessRunner& setWaitForCompletion(
WaitFlags flags=NoFlags, UILocker::Reasons reason=UILocker::LockUI);
+ ProcessRunner& setHooked(bool b);
// - if the target is an executable file, runs it hooked
// - if the target is a file:
@@ -74,8 +75,7 @@ public:
// - if forceHook is true, gets the executable associated with the file
// and runs that hooked by passing the file as an argument
//
- ProcessRunner& setFromFile(
- QWidget* parent, const QFileInfo& targetInfo, bool forceHook = false);
+ ProcessRunner& setFromFile(QWidget* parent, const QFileInfo& targetInfo);
ProcessRunner& setFromExecutable(const Executable& exe);
ProcessRunner& setFromShortcut(const MOShortcut& shortcut);
@@ -150,11 +150,13 @@ private:
QString m_profileName;
UILocker::Reasons m_lockReason;
WaitFlags m_waitFlags;
- QString m_shellOpen;
+ QFileInfo m_shellOpen;
env::HandlePtr m_handle;
DWORD m_exitCode;
+ bool shouldRunShell() const;
+
// runs the command in m_shellOpen; returns empty if it can be waited for
//
std::optional<Results> runShell();