diff --git a/application/GuiUtil.cpp b/application/GuiUtil.cpp index fb42b9bc..7ce00115 100644 --- a/application/GuiUtil.cpp +++ b/application/GuiUtil.cpp @@ -3,11 +3,15 @@ #include #include #include +#include #include "dialogs/ProgressDialog.h" #include "net/PasteUpload.h" #include "dialogs/CustomMessageBox.h" +#include "MultiMC.h" +#include + void GuiUtil::uploadPaste(const QString &text, QWidget *parentWidget) { ProgressDialog dialog(parentWidget); @@ -46,3 +50,52 @@ void GuiUtil::setClipboardText(const QString &text) { QApplication::clipboard()->setText(text); } + +QStringList GuiUtil::BrowseForMods(QString context, QString caption, QString filter, + QWidget *parentWidget) +{ + static QMap savedPaths; + + QFileDialog w(parentWidget, caption); + QSet locations; + QString modsFolder = MMC->settings()->get("CentralModsDir").toString(); + auto f = [&](QStandardPaths::StandardLocation l) + { + QString location = QStandardPaths::writableLocation(l); + QFileInfo finfo(location); + if (!finfo.exists()) + return; + locations.insert(location); + }; + f(QStandardPaths::DesktopLocation); + f(QStandardPaths::DocumentsLocation); + f(QStandardPaths::DownloadLocation); + f(QStandardPaths::HomeLocation); + QList urls; + for (auto location : locations) + { + urls.append(QUrl::fromLocalFile(location)); + } + urls.append(QUrl::fromLocalFile(modsFolder)); + + w.setFileMode(QFileDialog::ExistingFiles); + w.setAcceptMode(QFileDialog::AcceptOpen); + w.setNameFilter(filter); + if(savedPaths.contains(context)) + { + w.setDirectory(savedPaths[context]); + } + else + { + w.setDirectory(modsFolder); + } + w.setSidebarUrls(urls); + + if (w.exec()) + { + savedPaths[context] = w.directory().absolutePath(); + return w.getOpenFileNames(); + } + savedPaths[context] = w.directory().absolutePath(); + return {}; +} diff --git a/application/GuiUtil.h b/application/GuiUtil.h index 9f872f75..4c8bdaa7 100644 --- a/application/GuiUtil.h +++ b/application/GuiUtil.h @@ -6,4 +6,5 @@ namespace GuiUtil { void uploadPaste(const QString &text, QWidget *parentWidget); void setClipboardText(const QString &text); +QStringList BrowseForMods(QString context, QString caption, QString filter, QWidget *parentWidget); } diff --git a/application/pages/LegacyJarModPage.cpp b/application/pages/LegacyJarModPage.cpp index b403aa8a..60f1057a 100644 --- a/application/pages/LegacyJarModPage.cpp +++ b/application/pages/LegacyJarModPage.cpp @@ -29,6 +29,7 @@ #include "minecraft/LegacyInstance.h" #include "Env.h" #include "MultiMC.h" +#include LegacyJarModPage::LegacyJarModPage(LegacyInstance *inst, QWidget *parent) : QWidget(parent), ui(new Ui::LegacyJarModPage), m_inst(inst) @@ -98,53 +99,16 @@ bool LegacyJarModPage::eventFilter(QObject *obj, QEvent *ev) return QWidget::eventFilter(obj, ev); } -void LegacyJarModPage::on_addForgeBtn_clicked() -{ - //FIXME: dead. clean up. - /* - VersionSelectDialog vselect(MMC->forgelist().get(), tr("Select Forge version"), this); - vselect.setExactFilter(1, m_inst->intendedVersionId()); - if (vselect.exec() && vselect.selectedVersion()) - { - ForgeVersionPtr forge = - std::dynamic_pointer_cast(vselect.selectedVersion()); - if (!forge) - return; - auto entry = Env::getInstance().metacache()->resolveEntry("minecraftforge", forge->filename()); - if (entry->stale) - { - NetJob *fjob = new NetJob("Forge download"); - auto cacheDl = CacheDownload::make(forge->universal_url, entry); - fjob->addNetAction(cacheDl); - ProgressDialog dlg(this); - dlg.exec(fjob); - if (dlg.result() == QDialog::Accepted) - { - m_jarmods->stopWatching(); - m_jarmods->installMod(QFileInfo(entry->getFullPath())); - m_jarmods->startWatching(); - } - else - { - // failed to download forge :/ - } - } - else - { - m_jarmods->stopWatching(); - m_jarmods->installMod(QFileInfo(entry->getFullPath())); - m_jarmods->startWatching(); - } - }*/ -} void LegacyJarModPage::on_addJarBtn_clicked() { - //: Title of jar mod selection dialog - QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("Select Jar Mods")); - for (auto filename : fileNames) + auto list = GuiUtil::BrowseForMods("jarmod", tr("Select jar mods"), tr("Minecraft.jar mods (*.zip *.jar)"), this->parentWidget()); + if(!list.empty()) { m_jarmods->stopWatching(); - m_jarmods->installMod(QFileInfo(filename)); + for (auto filename : list) + { + m_jarmods->installMod(QFileInfo(filename)); + } m_jarmods->startWatching(); } } diff --git a/application/pages/LegacyJarModPage.h b/application/pages/LegacyJarModPage.h index d1e31a0c..9ca862ff 100644 --- a/application/pages/LegacyJarModPage.h +++ b/application/pages/LegacyJarModPage.h @@ -59,7 +59,6 @@ slots: void on_addJarBtn_clicked(); void on_rmJarBtn_clicked(); - void on_addForgeBtn_clicked(); void on_moveJarUpBtn_clicked(); void on_moveJarDownBtn_clicked(); void on_viewJarBtn_clicked(); diff --git a/application/pages/LegacyJarModPage.ui b/application/pages/LegacyJarModPage.ui index e99fac9a..059d08dd 100644 --- a/application/pages/LegacyJarModPage.ui +++ b/application/pages/LegacyJarModPage.ui @@ -101,13 +101,6 @@ - - - - Install Forge - - - diff --git a/application/pages/ModFolderPage.cpp b/application/pages/ModFolderPage.cpp index 94575e10..dbedbc25 100644 --- a/application/pages/ModFolderPage.cpp +++ b/application/pages/ModFolderPage.cpp @@ -28,6 +28,7 @@ #include "MultiMC.h" #include "dialogs/CustomMessageBox.h" #include "dialogs/ModEditDialogCommon.h" +#include #include "minecraft/ModList.h" #include "minecraft/Mod.h" #include "minecraft/VersionFilterData.h" @@ -121,14 +122,22 @@ bool ModFolderPage::eventFilter(QObject *obj, QEvent *ev) void ModFolderPage::on_addModBtn_clicked() { - QStringList fileNames = QFileDialog::getOpenFileNames( - this, QApplication::translate("ModFolderPage", "Select Loader Mods"), MMC->settings()->get("CentralModsDir").toString()); - for (auto filename : fileNames) + auto list = GuiUtil::BrowseForMods( + m_helpName, + tr("Select %1", + "Select whatever type of files the page contains. Example: 'Loader Mods'") + .arg(m_displayName), + tr("%1 (*.zip *.jar)").arg(m_displayName), this->parentWidget()); + if (!list.empty()) { m_mods->stopWatching(); - m_mods->installMod(QFileInfo(filename)); + for (auto filename : list) + { + m_mods->installMod(QFileInfo(filename)); + } m_mods->startWatching(); } + } void ModFolderPage::on_rmModBtn_clicked() { diff --git a/application/pages/VersionPage.cpp b/application/pages/VersionPage.cpp index 7cb99763..2fb50f0b 100644 --- a/application/pages/VersionPage.cpp +++ b/application/pages/VersionPage.cpp @@ -30,6 +30,7 @@ #include "dialogs/ModEditDialogCommon.h" #include "dialogs/ProgressDialog.h" +#include #include #include @@ -145,36 +146,11 @@ void VersionPage::on_removeLibraryBtn_clicked() void VersionPage::on_jarmodBtn_clicked() { - QFileDialog w; - QSet locations; - QString modsFolder = MMC->settings()->get("CentralModsDir").toString(); - auto f = [&](QStandardPaths::StandardLocation l) + auto list = GuiUtil::BrowseForMods("jarmod", tr("Select jar mods"), tr("Minecraft.jar mods (*.zip *.jar)"), this->parentWidget()); + if(!list.empty()) { - QString location = QStandardPaths::writableLocation(l); - QFileInfo finfo(location); - if (!finfo.exists()) - return; - locations.insert(location); - }; - f(QStandardPaths::DesktopLocation); - f(QStandardPaths::DocumentsLocation); - f(QStandardPaths::DownloadLocation); - f(QStandardPaths::HomeLocation); - QList urls; - for (auto location : locations) - { - urls.append(QUrl::fromLocalFile(location)); + m_version->installJarMods(list); } - urls.append(QUrl::fromLocalFile(modsFolder)); - - w.setFileMode(QFileDialog::ExistingFiles); - w.setAcceptMode(QFileDialog::AcceptOpen); - w.setNameFilter(tr("Minecraft jar mods (*.zip *.jar)")); - w.setDirectory(modsFolder); - w.setSidebarUrls(urls); - - if (w.exec()) - m_version->installJarMods(w.selectedFiles()); } void VersionPage::on_resetLibraryOrderBtn_clicked()