summaryrefslogtreecommitdiff
path: root/src/mainwindow.cpp
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2020-07-20 19:26:33 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2020-07-20 19:26:33 -0400
commit4adfeac9b79318a49f99b978a9f3cf160f1b9afd (patch)
tree85f6b04283c4371d160b377abdb9aeb4ef84bbea /src/mainwindow.cpp
parentc7a90f9506c4711176808f4aeb0b0380a9496fc7 (diff)
shift+ and ctrl+double-click in mod list will now only open one mod instead of the whole selection
since these modifiers are also used for selecting, this is too error prone and users have reported opening a crapload of tabs in their browser or explorer windows
Diffstat (limited to 'src/mainwindow.cpp')
-rw-r--r--src/mainwindow.cpp66
1 files changed, 32 insertions, 34 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index dfe0fbde..962e401e 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -3309,6 +3309,29 @@ void MainWindow::visitWebPage_clicked()
}
}
+void MainWindow::visitNexusOrWebPage(const QModelIndex& idx)
+{
+ int row_idx = idx.data(Qt::UserRole + 1).toInt();
+
+ ModInfo::Ptr info = ModInfo::getByIndex(row_idx);
+ if (!info) {
+ log::error("mod {} not found", row_idx);
+ return;
+ }
+
+ int modID = info->getNexusID();
+ QString gameName = info->getGameName();
+ const auto url = info->parseCustomURL();
+
+ if (modID > 0) {
+ linkClicked(NexusInterface::instance(&m_PluginContainer)->getModURL(modID, gameName));
+ } else if (url.isValid()) {
+ linkClicked(url.toString());
+ } else {
+ log::error("mod '{}' has no valid link", info->name());
+ }
+}
+
void MainWindow::visitNexusOrWebPage_clicked() {
QItemSelectionModel* selection = ui->modList->selectionModel();
if (selection->hasSelection() && selection->selectedRows().count() > 1) {
@@ -3320,43 +3343,14 @@ void MainWindow::visitNexusOrWebPage_clicked() {
return;
}
}
- int row_idx;
- ModInfo::Ptr info;
- QString gameName;
for (QModelIndex idx : selection->selectedRows()) {
- row_idx = idx.data(Qt::UserRole + 1).toInt();
- info = ModInfo::getByIndex(row_idx);
- int modID = info->getNexusID();
- gameName = info->getGameName();
- const auto url = info->parseCustomURL();
- if (modID > 0) {
- linkClicked(NexusInterface::instance(&m_PluginContainer)->getModURL(modID, gameName));
- }
- else if (url.isValid()) {
- linkClicked(url.toString());
- }
- else {
- log::error("mod '{}' has no valid link", info->name());
- }
+ visitNexusOrWebPage(idx);
}
}
else {
- int modID = m_OrganizerCore.modList()->data(m_OrganizerCore.modList()->index(m_ContextRow, 0), Qt::UserRole).toInt();
- QString gameName = m_OrganizerCore.modList()->data(m_OrganizerCore.modList()->index(m_ContextRow, 0), Qt::UserRole + 4).toString();
- if (modID > 0) {
- linkClicked(NexusInterface::instance(&m_PluginContainer)->getModURL(modID, gameName));
- }
- else {
- ModInfo::Ptr info = ModInfo::getByIndex(m_ContextRow);
- const auto url = info->parseCustomURL();
- if (url.isValid()) {
- linkClicked(url.toString());
- }
- else {
- MessageDialog::showMessage(tr("No valid Web Page for this mod"), this);
- }
- }
+ QModelIndex idx = m_OrganizerCore.modList()->index(m_ContextRow, 0);
+ visitNexusOrWebPage(idx);
}
}
@@ -3865,7 +3859,10 @@ void MainWindow::on_modList_doubleClicked(const QModelIndex &index)
if (modifiers.testFlag(Qt::ControlModifier)) {
try {
m_ContextRow = m_ModListSortProxy->mapToSource(index).row();
- openExplorer_clicked();
+
+ ModInfo::Ptr modInfo = ModInfo::getByIndex(m_ContextRow);
+ shell::Explore(modInfo->absolutePath());
+
// workaround to cancel the editor that might have opened because of
// selection-click
ui->modList->closePersistentEditor(index);
@@ -3877,7 +3874,8 @@ void MainWindow::on_modList_doubleClicked(const QModelIndex &index)
else if (modifiers.testFlag(Qt::ShiftModifier)) {
try {
m_ContextRow = m_ModListSortProxy->mapToSource(index).row();
- visitNexusOrWebPage_clicked();
+ QModelIndex idx = m_OrganizerCore.modList()->index(m_ContextRow, 0);
+ visitNexusOrWebPage(idx);
ui->modList->closePersistentEditor(index);
}
catch (const std::exception & e) {