Replace deprecated unique_qobject_ptr::swap with unique_ptr (#3746)

This commit is contained in:
Alexandru Ionut Tripon 2025-05-07 19:18:33 +03:00 committed by GitHub
commit 198fbd19cf
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 42 additions and 41 deletions

View File

@ -61,24 +61,22 @@ ModPage::ModPage(ModDownloadDialog* dialog, BaseInstance& instance) : ResourcePa
connect(m_ui->resourceFilterButton, &QPushButton::clicked, this, &ModPage::filterMods); connect(m_ui->resourceFilterButton, &QPushButton::clicked, this, &ModPage::filterMods);
} }
void ModPage::setFilterWidget(ModFilterWidget* widget) void ModPage::setFilterWidget(std::unique_ptr<ModFilterWidget>& widget)
{ {
if (m_filter_widget) if (m_filter_widget)
disconnect(m_filter_widget, nullptr, nullptr, nullptr); disconnect(m_filter_widget.get(), nullptr, nullptr, nullptr);
auto old = m_ui->splitter->replaceWidget(0, widget); auto old = m_ui->splitter->replaceWidget(0, widget.get());
// because we replaced the widget we also need to delete it // because we replaced the widget we also need to delete it
if (old) { if (old) {
old->deleteLater(); delete old;
} }
m_filter_widget = widget; m_filter_widget.swap(widget);
if (m_filter_widget) {
m_filter_widget->deleteLater();
}
m_filter = m_filter_widget->getFilter(); m_filter = m_filter_widget->getFilter();
connect(m_filter_widget, &ModFilterWidget::filterChanged, this, &ModPage::triggerSearch); connect(m_filter_widget.get(), &ModFilterWidget::filterChanged, this, &ModPage::triggerSearch);
prepareProviderCategories(); prepareProviderCategories();
} }

View File

@ -51,11 +51,11 @@ class ModPage : public ResourcePage {
void addResourceToPage(ModPlatform::IndexedPack::Ptr, ModPlatform::IndexedVersion&, std::shared_ptr<ResourceFolderModel>) override; void addResourceToPage(ModPlatform::IndexedPack::Ptr, ModPlatform::IndexedVersion&, std::shared_ptr<ResourceFolderModel>) override;
virtual ModFilterWidget* createFilterWidget() = 0; virtual std::unique_ptr<ModFilterWidget> createFilterWidget() = 0;
[[nodiscard]] bool supportsFiltering() const override { return true; }; [[nodiscard]] bool supportsFiltering() const override { return true; };
auto getFilter() const -> const std::shared_ptr<ModFilterWidget::Filter> { return m_filter; } auto getFilter() const -> const std::shared_ptr<ModFilterWidget::Filter> { return m_filter; }
void setFilterWidget(ModFilterWidget*); void setFilterWidget(std::unique_ptr<ModFilterWidget>&);
protected: protected:
ModPage(ModDownloadDialog* dialog, BaseInstance& instance); ModPage(ModDownloadDialog* dialog, BaseInstance& instance);
@ -67,7 +67,7 @@ class ModPage : public ResourcePage {
void triggerSearch() override; void triggerSearch() override;
protected: protected:
ModFilterWidget* m_filter_widget = nullptr; std::unique_ptr<ModFilterWidget> m_filter_widget;
std::shared_ptr<ModFilterWidget::Filter> m_filter; std::shared_ptr<ModFilterWidget::Filter> m_filter;
}; };

View File

@ -341,20 +341,17 @@ void FlamePage::setSearchTerm(QString term)
void FlamePage::createFilterWidget() void FlamePage::createFilterWidget()
{ {
auto widget = new ModFilterWidget(nullptr, false, this); auto widget = ModFilterWidget::create(nullptr, false);
if (m_filterWidget) { m_filterWidget.swap(widget);
m_filterWidget->deleteLater(); auto old = ui->splitter->replaceWidget(0, m_filterWidget.get());
}
m_filterWidget = (widget);
auto old = ui->splitter->replaceWidget(0, m_filterWidget);
// because we replaced the widget we also need to delete it // because we replaced the widget we also need to delete it
if (old) { if (old) {
old->deleteLater(); delete old;
} }
connect(ui->filterButton, &QPushButton::clicked, this, [this] { m_filterWidget->setHidden(!m_filterWidget->isHidden()); }); connect(ui->filterButton, &QPushButton::clicked, this, [this] { m_filterWidget->setHidden(!m_filterWidget->isHidden()); });
connect(m_filterWidget, &ModFilterWidget::filterChanged, this, &FlamePage::triggerSearch); connect(m_filterWidget.get(), &ModFilterWidget::filterChanged, this, &FlamePage::triggerSearch);
auto response = std::make_shared<QByteArray>(); auto response = std::make_shared<QByteArray>();
m_categoriesTask = FlameAPI::getCategories(response, ModPlatform::ResourceType::MODPACK); m_categoriesTask = FlameAPI::getCategories(response, ModPlatform::ResourceType::MODPACK);
QObject::connect(m_categoriesTask.get(), &Task::succeeded, [this, response]() { QObject::connect(m_categoriesTask.get(), &Task::succeeded, [this, response]() {

View File

@ -100,6 +100,6 @@ class FlamePage : public QWidget, public ModpackProviderBasePage {
// Used to do instant searching with a delay to cache quick changes // Used to do instant searching with a delay to cache quick changes
QTimer m_search_timer; QTimer m_search_timer;
ModFilterWidget* m_filterWidget; std::unique_ptr<ModFilterWidget> m_filterWidget;
Task::Ptr m_categoriesTask; Task::Ptr m_categoriesTask;
}; };

View File

@ -207,9 +207,9 @@ auto FlameShaderPackPage::shouldDisplay() const -> bool
return true; return true;
} }
ModFilterWidget* FlameModPage::createFilterWidget() std::unique_ptr<ModFilterWidget> FlameModPage::createFilterWidget()
{ {
return new ModFilterWidget(&static_cast<MinecraftInstance&>(m_baseInstance), false, this); return ModFilterWidget::create(&static_cast<MinecraftInstance&>(m_baseInstance), false);
} }
void FlameModPage::prepareProviderCategories() void FlameModPage::prepareProviderCategories()

View File

@ -96,7 +96,7 @@ class FlameModPage : public ModPage {
[[nodiscard]] inline auto helpPage() const -> QString override { return "Mod-platform"; } [[nodiscard]] inline auto helpPage() const -> QString override { return "Mod-platform"; }
void openUrl(const QUrl& url) override; void openUrl(const QUrl& url) override;
ModFilterWidget* createFilterWidget() override; std::unique_ptr<ModFilterWidget> createFilterWidget() override;
protected: protected:
virtual void prepareProviderCategories() override; virtual void prepareProviderCategories() override;

View File

@ -391,19 +391,17 @@ QString ModrinthPage::getSerachTerm() const
void ModrinthPage::createFilterWidget() void ModrinthPage::createFilterWidget()
{ {
auto widget = new ModFilterWidget(nullptr, true, this); auto widget = ModFilterWidget::create(nullptr, true);
if (m_filterWidget) m_filterWidget.swap(widget);
m_filterWidget->deleteLater(); auto old = ui->splitter->replaceWidget(0, m_filterWidget.get());
m_filterWidget = widget;
auto old = ui->splitter->replaceWidget(0, m_filterWidget);
// because we replaced the widget we also need to delete it // because we replaced the widget we also need to delete it
if (old) { if (old) {
old->deleteLater(); delete old;
} }
connect(ui->filterButton, &QPushButton::clicked, this, [this] { m_filterWidget->setHidden(!m_filterWidget->isHidden()); }); connect(ui->filterButton, &QPushButton::clicked, this, [this] { m_filterWidget->setHidden(!m_filterWidget->isHidden()); });
connect(m_filterWidget, &ModFilterWidget::filterChanged, this, &ModrinthPage::triggerSearch); connect(m_filterWidget.get(), &ModFilterWidget::filterChanged, this, &ModrinthPage::triggerSearch);
auto response = std::make_shared<QByteArray>(); auto response = std::make_shared<QByteArray>();
m_categoriesTask = ModrinthAPI::getModCategories(response); m_categoriesTask = ModrinthAPI::getModCategories(response);
QObject::connect(m_categoriesTask.get(), &Task::succeeded, [this, response]() { QObject::connect(m_categoriesTask.get(), &Task::succeeded, [this, response]() {

View File

@ -103,6 +103,6 @@ class ModrinthPage : public QWidget, public ModpackProviderBasePage {
// Used to do instant searching with a delay to cache quick changes // Used to do instant searching with a delay to cache quick changes
QTimer m_search_timer; QTimer m_search_timer;
ModFilterWidget* m_filterWidget; std::unique_ptr<ModFilterWidget> m_filterWidget;
Task::Ptr m_categoriesTask; Task::Ptr m_categoriesTask;
}; };

View File

@ -142,19 +142,19 @@ auto ModrinthShaderPackPage::shouldDisplay() const -> bool
return true; return true;
} }
ModFilterWidget* ModrinthModPage::createFilterWidget() std::unique_ptr<ModFilterWidget> ModrinthModPage::createFilterWidget()
{ {
return new ModFilterWidget(&static_cast<MinecraftInstance&>(m_baseInstance), true, this); return ModFilterWidget::create(&static_cast<MinecraftInstance&>(m_baseInstance), true);
} }
void ModrinthModPage::prepareProviderCategories() void ModrinthModPage::prepareProviderCategories()
{ {
auto response = std::make_shared<QByteArray>(); auto response = std::make_shared<QByteArray>();
auto task = ModrinthAPI::getModCategories(response); m_categoriesTask = ModrinthAPI::getModCategories(response);
QObject::connect(task.get(), &Task::succeeded, [this, response]() { QObject::connect(m_categoriesTask.get(), &Task::succeeded, [this, response]() {
auto categories = ModrinthAPI::loadModCategories(response); auto categories = ModrinthAPI::loadModCategories(response);
m_filter_widget->setCategories(categories); m_filter_widget->setCategories(categories);
}); });
task->start(); m_categoriesTask->start();
}; };
} // namespace ResourceDownload } // namespace ResourceDownload

View File

@ -94,10 +94,11 @@ class ModrinthModPage : public ModPage {
[[nodiscard]] inline auto helpPage() const -> QString override { return "Mod-platform"; } [[nodiscard]] inline auto helpPage() const -> QString override { return "Mod-platform"; }
ModFilterWidget* createFilterWidget() override; std::unique_ptr<ModFilterWidget> createFilterWidget() override;
protected: protected:
virtual void prepareProviderCategories() override; virtual void prepareProviderCategories() override;
Task::Ptr m_categoriesTask;
}; };
class ModrinthResourcePackPage : public ResourcePackResourcePage { class ModrinthResourcePackPage : public ResourcePackResourcePage {

View File

@ -49,6 +49,11 @@
#include "Application.h" #include "Application.h"
#include "minecraft/PackProfile.h" #include "minecraft/PackProfile.h"
std::unique_ptr<ModFilterWidget> ModFilterWidget::create(MinecraftInstance* instance, bool extended)
{
return std::unique_ptr<ModFilterWidget>(new ModFilterWidget(instance, extended));
}
class VersionBasicModel : public QIdentityProxyModel { class VersionBasicModel : public QIdentityProxyModel {
Q_OBJECT Q_OBJECT
@ -102,8 +107,8 @@ class AllVersionProxyModel : public QSortFilterProxyModel {
} }
}; };
ModFilterWidget::ModFilterWidget(MinecraftInstance* instance, bool extended, QWidget* parent) ModFilterWidget::ModFilterWidget(MinecraftInstance* instance, bool extended)
: QTabWidget(parent), ui(new Ui::ModFilterWidget), m_instance(instance), m_filter(new Filter()) : QTabWidget(), ui(new Ui::ModFilterWidget), m_instance(instance), m_filter(new Filter())
{ {
ui->setupUi(this); ui->setupUi(this);

View File

@ -83,7 +83,7 @@ class ModFilterWidget : public QTabWidget {
} }
}; };
ModFilterWidget(MinecraftInstance* instance, bool extendedSupport, QWidget* parent = nullptr); static std::unique_ptr<ModFilterWidget> create(MinecraftInstance* instance, bool extended);
virtual ~ModFilterWidget(); virtual ~ModFilterWidget();
auto getFilter() -> std::shared_ptr<Filter>; auto getFilter() -> std::shared_ptr<Filter>;
@ -96,6 +96,8 @@ class ModFilterWidget : public QTabWidget {
void setCategories(const QList<ModPlatform::Category>&); void setCategories(const QList<ModPlatform::Category>&);
private: private:
ModFilterWidget(MinecraftInstance* instance, bool extendedSupport);
void loadVersionList(); void loadVersionList();
void prepareBasicFilter(); void prepareBasicFilter();