diff --git a/launcher/ui/dialogs/ResourceDownloadDialog.cpp b/launcher/ui/dialogs/ResourceDownloadDialog.cpp index 41274de08..49f263406 100644 --- a/launcher/ui/dialogs/ResourceDownloadDialog.cpp +++ b/launcher/ui/dialogs/ResourceDownloadDialog.cpp @@ -50,11 +50,12 @@ namespace ResourceDownload { -ResourceDownloadDialog::ResourceDownloadDialog(QWidget* parent, ResourceFolderModel* baseModel) +ResourceDownloadDialog::ResourceDownloadDialog(QWidget* parent, ResourceFolderModel* baseModel, bool suppressInitialSearch) : QDialog(parent) , m_base_model(baseModel) , m_buttons(QDialogButtonBox::Help | QDialogButtonBox::Ok | QDialogButtonBox::Cancel) , m_vertical_layout(this) + , m_suppressInitialSearch(suppressInitialSearch) { setObjectName(QStringLiteral("ResourceDownloadDialog")); @@ -270,6 +271,11 @@ QList ResourceDownloadDialog::getTasks( void ResourceDownloadDialog::selectedPageChanged(BasePage* previous, BasePage* selected) { + // If previous is null (first selection), nothing to sync + if (!previous) { + return; + } + auto* prevPage = dynamic_cast(previous); if (!prevPage) { qCritical() << "Page '" << previous->displayName() << "' in ResourceDownloadDialog is not a ResourcePage!"; @@ -282,8 +288,8 @@ void ResourceDownloadDialog::selectedPageChanged(BasePage* previous, BasePage* s result->setSearchTerm(prevPage->getSearchTerm()); } -ModDownloadDialog::ModDownloadDialog(QWidget* parent, ModFolderModel* mods, BaseInstance* instance) - : ResourceDownloadDialog(parent, mods), m_instance(instance) +ModDownloadDialog::ModDownloadDialog(QWidget* parent, ModFolderModel* mods, BaseInstance* instance, bool suppressInitialSearch) + : ResourceDownloadDialog(parent, mods, suppressInitialSearch), m_instance(instance) { setWindowTitle(dialogTitle()); @@ -302,10 +308,14 @@ QList ModDownloadDialog::getPages() auto loaders = static_cast(m_instance)->getPackProfile()->getSupportedModLoaders().value(); if (ModrinthAPI::validateModLoaders(loaders)) { - pages.append(ModrinthModPage::create(this, *m_instance)); + auto* page = ModrinthModPage::create(this, *m_instance); + page->setSuppressInitialSearch(m_suppressInitialSearch); + pages.append(page); } if (APPLICATION->capabilities() & Application::SupportsFlame && FlameAPI::validateModLoaders(loaders)) { - pages.append(FlameModPage::create(this, *m_instance)); + auto* page = FlameModPage::create(this, *m_instance); + page->setSuppressInitialSearch(m_suppressInitialSearch); + pages.append(page); } return pages; @@ -326,8 +336,11 @@ GetModDependenciesTask::Ptr ModDownloadDialog::getModDependenciesTask() return nullptr; } -ResourcePackDownloadDialog::ResourcePackDownloadDialog(QWidget* parent, ResourcePackFolderModel* resourcePacks, BaseInstance* instance) - : ResourceDownloadDialog(parent, resourcePacks), m_instance(instance) +ResourcePackDownloadDialog::ResourcePackDownloadDialog(QWidget* parent, + ResourcePackFolderModel* resourcePacks, + BaseInstance* instance, + bool suppressInitialSearch) + : ResourceDownloadDialog(parent, resourcePacks, suppressInitialSearch), m_instance(instance) { setWindowTitle(dialogTitle()); @@ -343,16 +356,23 @@ QList ResourcePackDownloadDialog::getPages() { QList pages; - pages.append(ModrinthResourcePackPage::create(this, *m_instance)); + auto* modrinthPage = ModrinthResourcePackPage::create(this, *m_instance); + modrinthPage->setSuppressInitialSearch(m_suppressInitialSearch); + pages.append(modrinthPage); if (APPLICATION->capabilities() & Application::SupportsFlame) { - pages.append(FlameResourcePackPage::create(this, *m_instance)); + auto* flamePage = FlameResourcePackPage::create(this, *m_instance); + flamePage->setSuppressInitialSearch(m_suppressInitialSearch); + pages.append(flamePage); } return pages; } -TexturePackDownloadDialog::TexturePackDownloadDialog(QWidget* parent, TexturePackFolderModel* resourcePacks, BaseInstance* instance) - : ResourceDownloadDialog(parent, resourcePacks), m_instance(instance) +TexturePackDownloadDialog::TexturePackDownloadDialog(QWidget* parent, + TexturePackFolderModel* resourcePacks, + BaseInstance* instance, + bool suppressInitialSearch) + : ResourceDownloadDialog(parent, resourcePacks, suppressInitialSearch), m_instance(instance) { setWindowTitle(dialogTitle()); @@ -368,16 +388,23 @@ QList TexturePackDownloadDialog::getPages() { QList pages; - pages.append(ModrinthTexturePackPage::create(this, *m_instance)); + auto* modrinthPage = ModrinthTexturePackPage::create(this, *m_instance); + modrinthPage->setSuppressInitialSearch(m_suppressInitialSearch); + pages.append(modrinthPage); if (APPLICATION->capabilities() & Application::SupportsFlame) { - pages.append(FlameTexturePackPage::create(this, *m_instance)); + auto* flamePage = FlameTexturePackPage::create(this, *m_instance); + flamePage->setSuppressInitialSearch(m_suppressInitialSearch); + pages.append(flamePage); } return pages; } -ShaderPackDownloadDialog::ShaderPackDownloadDialog(QWidget* parent, ShaderPackFolderModel* shaders, BaseInstance* instance) - : ResourceDownloadDialog(parent, shaders), m_instance(instance) +ShaderPackDownloadDialog::ShaderPackDownloadDialog(QWidget* parent, + ShaderPackFolderModel* shaders, + BaseInstance* instance, + bool suppressInitialSearch) + : ResourceDownloadDialog(parent, shaders, suppressInitialSearch), m_instance(instance) { setWindowTitle(dialogTitle()); @@ -392,9 +419,13 @@ ShaderPackDownloadDialog::ShaderPackDownloadDialog(QWidget* parent, ShaderPackFo QList ShaderPackDownloadDialog::getPages() { QList pages; - pages.append(ModrinthShaderPackPage::create(this, *m_instance)); + auto* modrinthPage = ModrinthShaderPackPage::create(this, *m_instance); + modrinthPage->setSuppressInitialSearch(m_suppressInitialSearch); + pages.append(modrinthPage); if (APPLICATION->capabilities() & Application::SupportsFlame) { - pages.append(FlameShaderPackPage::create(this, *m_instance)); + auto* flamePage = FlameShaderPackPage::create(this, *m_instance); + flamePage->setSuppressInitialSearch(m_suppressInitialSearch); + pages.append(flamePage); } return pages; } @@ -409,6 +440,7 @@ void ResourceDownloadDialog::setResourceMetadata(const std::shared_ptrname)); m_container->hidePageList(); m_buttons.hide(); @@ -416,8 +448,11 @@ void ResourceDownloadDialog::setResourceMetadata(const std::shared_ptropenProject(meta->project_id); } -DataPackDownloadDialog::DataPackDownloadDialog(QWidget* parent, DataPackFolderModel* dataPacks, BaseInstance* instance) - : ResourceDownloadDialog(parent, dataPacks), m_instance(instance) +DataPackDownloadDialog::DataPackDownloadDialog(QWidget* parent, + DataPackFolderModel* dataPacks, + BaseInstance* instance, + bool suppressInitialSearch) + : ResourceDownloadDialog(parent, dataPacks, suppressInitialSearch), m_instance(instance) { setWindowTitle(dialogTitle()); @@ -432,9 +467,13 @@ DataPackDownloadDialog::DataPackDownloadDialog(QWidget* parent, DataPackFolderMo QList DataPackDownloadDialog::getPages() { QList pages; - pages.append(ModrinthDataPackPage::create(this, *m_instance)); + auto* modrinthPage = ModrinthDataPackPage::create(this, *m_instance); + modrinthPage->setSuppressInitialSearch(m_suppressInitialSearch); + pages.append(modrinthPage); if (APPLICATION->capabilities() & Application::SupportsFlame) { - pages.append(FlameDataPackPage::create(this, *m_instance)); + auto* flamePage = FlameDataPackPage::create(this, *m_instance); + flamePage->setSuppressInitialSearch(m_suppressInitialSearch); + pages.append(flamePage); } return pages; } diff --git a/launcher/ui/dialogs/ResourceDownloadDialog.h b/launcher/ui/dialogs/ResourceDownloadDialog.h index dfcebd31e..c9d9e568c 100644 --- a/launcher/ui/dialogs/ResourceDownloadDialog.h +++ b/launcher/ui/dialogs/ResourceDownloadDialog.h @@ -51,7 +51,7 @@ class ResourceDownloadDialog : public QDialog, public BasePageProvider { public: using DownloadTaskPtr = shared_qobject_ptr; - ResourceDownloadDialog(QWidget* parent, ResourceFolderModel* baseModel); + ResourceDownloadDialog(QWidget* parent, ResourceFolderModel* baseModel, bool suppressInitialSearch = false); void initializeContainer(); void connectButtons(); @@ -94,13 +94,16 @@ class ResourceDownloadDialog : public QDialog, public BasePageProvider { QDialogButtonBox m_buttons; QVBoxLayout m_vertical_layout; + + protected: + bool m_suppressInitialSearch = false; }; class ModDownloadDialog final : public ResourceDownloadDialog { Q_OBJECT public: - explicit ModDownloadDialog(QWidget* parent, ModFolderModel* mods, BaseInstance* instance); + explicit ModDownloadDialog(QWidget* parent, ModFolderModel* mods, BaseInstance* instance, bool suppressInitialSearch = false); ~ModDownloadDialog() override = default; //: String that gets appended to the mod download dialog title ("Download " + resourcesString()) @@ -118,7 +121,7 @@ class ResourcePackDownloadDialog final : public ResourceDownloadDialog { Q_OBJECT public: - explicit ResourcePackDownloadDialog(QWidget* parent, ResourcePackFolderModel* resourcePacks, BaseInstance* instance); + explicit ResourcePackDownloadDialog(QWidget* parent, ResourcePackFolderModel* resourcePacks, BaseInstance* instance, bool suppressInitialSearch = false); ~ResourcePackDownloadDialog() override = default; //: String that gets appended to the resource pack download dialog title ("Download " + resourcesString()) @@ -135,7 +138,7 @@ class TexturePackDownloadDialog final : public ResourceDownloadDialog { Q_OBJECT public: - explicit TexturePackDownloadDialog(QWidget* parent, TexturePackFolderModel* resourcePacks, BaseInstance* instance); + explicit TexturePackDownloadDialog(QWidget* parent, TexturePackFolderModel* resourcePacks, BaseInstance* instance, bool suppressInitialSearch = false); ~TexturePackDownloadDialog() override = default; //: String that gets appended to the texture pack download dialog title ("Download " + resourcesString()) @@ -152,7 +155,7 @@ class ShaderPackDownloadDialog final : public ResourceDownloadDialog { Q_OBJECT public: - explicit ShaderPackDownloadDialog(QWidget* parent, ShaderPackFolderModel* shaders, BaseInstance* instance); + explicit ShaderPackDownloadDialog(QWidget* parent, ShaderPackFolderModel* shaders, BaseInstance* instance, bool suppressInitialSearch = false); ~ShaderPackDownloadDialog() override = default; //: String that gets appended to the shader pack download dialog title ("Download " + resourcesString()) @@ -169,7 +172,7 @@ class DataPackDownloadDialog final : public ResourceDownloadDialog { Q_OBJECT public: - explicit DataPackDownloadDialog(QWidget* parent, DataPackFolderModel* dataPacks, BaseInstance* instance); + explicit DataPackDownloadDialog(QWidget* parent, DataPackFolderModel* dataPacks, BaseInstance* instance, bool suppressInitialSearch = false); ~DataPackDownloadDialog() override = default; //: String that gets appended to the data pack download dialog title ("Download " + resourcesString()) diff --git a/launcher/ui/pages/instance/DataPackPage.cpp b/launcher/ui/pages/instance/DataPackPage.cpp index 8c4bd313f..eb59fbb1e 100644 --- a/launcher/ui/pages/instance/DataPackPage.cpp +++ b/launcher/ui/pages/instance/DataPackPage.cpp @@ -242,7 +242,7 @@ void DataPackPage::changeDataPackVersion() return; } - ResourceDownload::DataPackDownloadDialog mdownload(this, m_model, m_instance); + ResourceDownload::DataPackDownloadDialog mdownload(this, m_model, m_instance, true); mdownload.setResourceMetadata(resource.metadata()); if (mdownload.exec() != 0) { auto* tasks = new ConcurrentTask("Download Data Packs", APPLICATION->settings()->get("NumberOfConcurrentDownloads").toInt()); diff --git a/launcher/ui/pages/instance/ModFolderPage.cpp b/launcher/ui/pages/instance/ModFolderPage.cpp index be64cceac..99c78647c 100644 --- a/launcher/ui/pages/instance/ModFolderPage.cpp +++ b/launcher/ui/pages/instance/ModFolderPage.cpp @@ -352,7 +352,7 @@ void ModFolderPage::changeModVersion() return; } - m_downloadDialog = new ResourceDownload::ModDownloadDialog(this, m_model, m_instance); + m_downloadDialog = new ResourceDownload::ModDownloadDialog(this, m_model, m_instance, true); connect(this, &QObject::destroyed, m_downloadDialog, &QDialog::close); connect(m_downloadDialog, &QDialog::finished, this, &ModFolderPage::downloadDialogFinished); diff --git a/launcher/ui/pages/instance/ResourcePackPage.cpp b/launcher/ui/pages/instance/ResourcePackPage.cpp index b9e3a20b8..e4709ab2b 100644 --- a/launcher/ui/pages/instance/ResourcePackPage.cpp +++ b/launcher/ui/pages/instance/ResourcePackPage.cpp @@ -259,7 +259,7 @@ void ResourcePackPage::changeResourcePackVersion() return; } - m_downloadDialog = new ResourceDownload::ResourcePackDownloadDialog(this, m_model, m_instance); + m_downloadDialog = new ResourceDownload::ResourcePackDownloadDialog(this, m_model, m_instance, true); connect(this, &QObject::destroyed, m_downloadDialog, &QDialog::close); connect(m_downloadDialog, &QDialog::finished, this, &ResourcePackPage::downloadDialogFinished); diff --git a/launcher/ui/pages/instance/ShaderPackPage.cpp b/launcher/ui/pages/instance/ShaderPackPage.cpp index c3b463527..a29564abc 100644 --- a/launcher/ui/pages/instance/ShaderPackPage.cpp +++ b/launcher/ui/pages/instance/ShaderPackPage.cpp @@ -256,7 +256,7 @@ void ShaderPackPage::changeShaderPackVersion() return; } - m_downloadDialog = new ResourceDownload::ShaderPackDownloadDialog(this, m_model, m_instance); + m_downloadDialog = new ResourceDownload::ShaderPackDownloadDialog(this, m_model, m_instance, true); connect(this, &QObject::destroyed, m_downloadDialog, &QDialog::close); connect(m_downloadDialog, &QDialog::finished, this, &ShaderPackPage::downloadDialogFinished); diff --git a/launcher/ui/pages/instance/TexturePackPage.cpp b/launcher/ui/pages/instance/TexturePackPage.cpp index a723db4f6..01325e3f6 100644 --- a/launcher/ui/pages/instance/TexturePackPage.cpp +++ b/launcher/ui/pages/instance/TexturePackPage.cpp @@ -264,7 +264,7 @@ void TexturePackPage::changeTexturePackVersion() return; } - m_downloadDialog = new ResourceDownload::TexturePackDownloadDialog(this, m_model, m_instance); + m_downloadDialog = new ResourceDownload::TexturePackDownloadDialog(this, m_model, m_instance, true); connect(this, &QObject::destroyed, m_downloadDialog, &QDialog::close); connect(m_downloadDialog, &QDialog::finished, this, &TexturePackPage::downloadDialogFinished); diff --git a/launcher/ui/pages/modplatform/ResourcePage.cpp b/launcher/ui/pages/modplatform/ResourcePage.cpp index fecb5b1b6..931b4a311 100644 --- a/launcher/ui/pages/modplatform/ResourcePage.cpp +++ b/launcher/ui/pages/modplatform/ResourcePage.cpp @@ -115,10 +115,19 @@ void ResourcePage::openedImpl() m_ui->resourceSelectionButton->setText(tr("Select %1 for download").arg(resourceString())); updateSelectionButton(); - triggerSearch(); + if (!m_suppressInitialSearch) { + triggerSearch(); + } else { + m_suppressInitialSearch = false; + } m_ui->searchEdit->setFocus(); } +void ResourcePage::setSuppressInitialSearch(bool suppress) +{ + m_suppressInitialSearch = suppress; +} + auto ResourcePage::eventFilter(QObject* watched, QEvent* event) -> bool { if (event->type() == QEvent::KeyPress) { diff --git a/launcher/ui/pages/modplatform/ResourcePage.h b/launcher/ui/pages/modplatform/ResourcePage.h index 811503868..c11edb1d7 100644 --- a/launcher/ui/pages/modplatform/ResourcePage.h +++ b/launcher/ui/pages/modplatform/ResourcePage.h @@ -85,7 +85,9 @@ class ResourcePage : public QWidget, public BasePage { QList selectedPacks() { return m_model->selectedPacks(); } bool hasSelectedPacks() { return !(m_model->selectedPacks().isEmpty()); } - virtual void openProject(QVariant projectID); + virtual void openProject(const QVariant& projectID); + + void setSuppressInitialSearch(bool suppress); protected slots: virtual void triggerSearch() = 0; @@ -118,6 +120,9 @@ class ResourcePage : public QWidget, public BasePage { bool m_doNotJumpToMod = false; QSet m_enableQueue; + + private: + bool m_suppressInitialSearch = false; }; } // namespace ResourceDownload