From 7b73c20229316a77ef8ff2ea7f22f4290ce04c61 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Sat, 15 Feb 2025 01:02:22 +0100 Subject: [PATCH] allow to open directory from context menu --- launcher/modManager/cmodlistview_moc.cpp | 19 +++++++++++++++++++ launcher/modManager/cmodlistview_moc.h | 3 +++ 2 files changed, 22 insertions(+) diff --git a/launcher/modManager/cmodlistview_moc.cpp b/launcher/modManager/cmodlistview_moc.cpp index e6448a109..6eccc6f79 100644 --- a/launcher/modManager/cmodlistview_moc.cpp +++ b/launcher/modManager/cmodlistview_moc.cpp @@ -477,6 +477,13 @@ void CModListView::onCustomContextMenu(const QPoint &point) tr("Update"), [this](ModState mod){ doUpdateMod(mod.getID()); } ); +#ifndef VCMI_MOBILE + addContextEntry( + mod.isInstalled(), + tr("Open directory"), + [this](ModState mod){ openModDictionary(mod.getID()); } + ); +#endif contextMenu->exec(ui->allModsView->viewport()->mapToGlobal(point)); } @@ -667,6 +674,18 @@ void CModListView::doUpdateMod(const QString & modName) } } +void CModListView::openModDictionary(const QString & modName) +{ + QString tmp = modName; + tmp.replace(".", "/Mods/"); + + ResourcePath resID(std::string("Mods/") + tmp.toStdString(), EResType::DIRECTORY); + // Get location of the mod, in case-insensitive way + QString modDir = pathToQString(*CResourceHandler::get()->getResourceName(resID)); + + Helper::revealDirectoryInFileBrowser(modDir); +} + void CModListView::on_uninstallButton_clicked() { QString modName = ui->allModsView->currentIndex().data(ModRoles::ModNameRole).toString(); diff --git a/launcher/modManager/cmodlistview_moc.h b/launcher/modManager/cmodlistview_moc.h index e05d15347..b0b297ac6 100644 --- a/launcher/modManager/cmodlistview_moc.h +++ b/launcher/modManager/cmodlistview_moc.h @@ -85,6 +85,9 @@ public: /// update mod by name void doUpdateMod(const QString & modName); + /// open mod dictionary by name + void openModDictionary(const QString & modName); + /// returns true if mod is available in repository and can be installed bool isModAvailable(const QString & modName);