diff options
| author | isanae <14251494+isanae@users.noreply.github.com> | 2019-12-09 10:12:12 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-12-09 10:12:12 -0500 |
| commit | 8cf3c4a3678233c37a89be38cebdaf5b8e864cb2 (patch) | |
| tree | 9017c6df24a70a42b0417062dcfb1741f83fe5c6 /src | |
| parent | 44084bfa415f906b8ba8b5d19e1be60a7612d692 (diff) | |
| parent | 37891f29ca6f5935d4148bf5cf1f1d5a4eaa746c (diff) | |
Merge pull request #931 from isanae/double-click-unhooked
Double click unhooked
Diffstat (limited to 'src')
| -rw-r--r-- | src/mainwindow.cpp | 182 | ||||
| -rw-r--r-- | src/mainwindow.h | 1 | ||||
| -rw-r--r-- | src/modinfodialogconflicts.cpp | 76 | ||||
| -rw-r--r-- | src/modinfodialogconflicts.h | 5 | ||||
| -rw-r--r-- | src/modinfodialogfiletree.cpp | 62 | ||||
| -rw-r--r-- | src/organizer_en.ts | 606 | ||||
| -rw-r--r-- | src/processrunner.cpp | 70 | ||||
| -rw-r--r-- | src/processrunner.h | 8 |
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>&Execute</source> <translation type="unfinished"></translation> </message> <message> - <location filename="modinfodialogconflicts.cpp" line="773"/> + <location filename="modinfodialogconflicts.cpp" line="775"/> + <source>Execute with &VFS</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="modinfodialogconflicts.cpp" line="777"/> <source>&Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="modinfodialogconflicts.cpp" line="774"/> + <location filename="modinfodialogconflicts.cpp" line="778"/> <source>Open with &VFS</source> <translation type="unfinished"></translation> </message> <message> - <location filename="modinfodialogconflicts.cpp" line="777"/> + <location filename="modinfodialogconflicts.cpp" line="781"/> <source>&Preview</source> <translation type="unfinished"></translation> </message> <message> - <location filename="modinfodialogconflicts.cpp" line="780"/> + <location filename="modinfodialogconflicts.cpp" line="784"/> <source>&Go to...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="modinfodialogconflicts.cpp" line="783"/> + <location filename="modinfodialogconflicts.cpp" line="787"/> <source>Open in &Explorer</source> <translation type="unfinished"></translation> </message> <message> - <location filename="modinfodialogconflicts.cpp" line="786"/> + <location filename="modinfodialogconflicts.cpp" line="790"/> <source>&Hide</source> <translation type="unfinished"></translation> </message> <message> - <location filename="modinfodialogconflicts.cpp" line="791"/> + <location filename="modinfodialogconflicts.cpp" line="795"/> <source>&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>&New Folder</source> <translation type="unfinished"></translation> </message> <message> - <location filename="modinfodialogfiletree.cpp" line="29"/> + <location filename="modinfodialogfiletree.cpp" line="26"/> <source>&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 &VFS</source> <translation type="unfinished"></translation> </message> <message> - <location filename="modinfodialogfiletree.cpp" line="31"/> + <location filename="modinfodialogfiletree.cpp" line="28"/> <source>&Preview</source> <translation type="unfinished"></translation> </message> <message> - <location filename="modinfodialogfiletree.cpp" line="32"/> + <location filename="modinfodialogfiletree.cpp" line="29"/> <source>Open in &Explorer</source> <translation type="unfinished"></translation> </message> <message> - <location filename="modinfodialogfiletree.cpp" line="33"/> + <location filename="modinfodialogfiletree.cpp" line="30"/> <source>&Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="modinfodialogfiletree.cpp" line="34"/> + <location filename="modinfodialogfiletree.cpp" line="31"/> <source>&Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="modinfodialogfiletree.cpp" line="35"/> + <location filename="modinfodialogfiletree.cpp" line="32"/> <source>&Hide</source> <translation type="unfinished"></translation> </message> <message> - <location filename="modinfodialogfiletree.cpp" line="36"/> + <location filename="modinfodialogfiletree.cpp" line="33"/> <source>&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 "%1"</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>&Execute</source> <translation type="unfinished"></translation> </message> <message> - <location filename="modinfodialogfiletree.cpp" line="457"/> + <location filename="modinfodialogfiletree.cpp" line="470"/> + <source>Execute with &VFS</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="modinfodialogfiletree.cpp" line="472"/> <source>&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'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 "Help"-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 "%1" failed: %2</source> <translation type="unfinished"></translation> </message> <message> - <location filename="mainwindow.cpp" line="1494"/> + <location filename="mainwindow.cpp" line="1444"/> <source>Plugin "%1" 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: <br></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><Edit...></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're about to start a tutorial. For technical reasons it'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 "%1" from mod "%2" to "%3": %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 "%1". 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 "%1"</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 "%1" to "%2"</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?<br><ul>%1</ul></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'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><table cellspacing="5"><tr><th>Type</th><th>All</th><th>Visible</th><tr><td>Enabled mods:&emsp;</td><td align=right>%1 / %2</td><td align=right>%3 / %4</td></tr><tr><td>Unmanaged/DLCs:&emsp;</td><td align=right>%5</td><td align=right>%6</td></tr><tr><td>Mod backups:&emsp;</td><td align=right>%7</td><td align=right>%8</td></tr><tr><td>Separators:&emsp;</td><td align=right>%9</td><td align=right>%10</td></tr></table></source> <translation type="unfinished"></translation> </message> <message> - <location filename="mainwindow.cpp" line="3561"/> + <location filename="mainwindow.cpp" line="3490"/> <source><table cellspacing="6"><tr><th>Type</th><th>Active </th><th>Total</th></tr><tr><td>All plugins:</td><td align=right>%1 </td><td align=right>%2</td></tr><tr><td>ESMs:</td><td align=right>%3 </td><td align=right>%4</td></tr><tr><td>ESPs:</td><td align=right>%7 </td><td align=right>%8</td></tr><tr><td>ESMs+ESPs:</td><td align=right>%9 </td><td align=right>%10</td></tr><tr><td>ESLs:</td><td align=right>%5 </td><td align=right>%6</td></tr></table></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'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'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)?<br><ul>%1</ul><br>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'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 "%1". 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>&Execute</source> <translation type="unfinished"></translation> </message> <message> - <location filename="mainwindow.cpp" line="5518"/> + <location filename="mainwindow.cpp" line="5482"/> + <source>Execute with &VFS</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="mainwindow.cpp" line="5484"/> <source>&Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="mainwindow.cpp" line="5519"/> + <location filename="mainwindow.cpp" line="5485"/> <source>Open with &VFS</source> <translation type="unfinished"></translation> </message> <message> - <location filename="mainwindow.cpp" line="5522"/> + <location filename="mainwindow.cpp" line="5526"/> <source>&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><Multiple></source> <translation type="unfinished"></translation> </message> <message> - <location filename="mainwindow.cpp" line="6348"/> + <location filename="mainwindow.cpp" line="6354"/> <source>Remove '%1' 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 "Help" 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><Manage...></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><a href="https://www.transifex.com/tannin/mod-organizer/">Help translate Mod Organizer</a></source> + <source><a href="https://www.transifex.com/mod-organizer-2-team/mod-organizer-2/">Help translate Mod Organizer</a></source> + <oldsource><a href="https://www.transifex.com/tannin/mod-organizer/">Help translate Mod Organizer</a></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(); |
