From 7c8d084edfd0dccd103070c03cff0d90b4e04d0f Mon Sep 17 00:00:00 2001 From: Raul Radu <raul.radu@mail.polimi.it> Date: Thu, 25 Jan 2024 10:03:23 +0100 Subject: [PATCH] [Modules] Final design of Module class w/smart ptr - Fixed error in Module.cpp: std::shared_ptr<Module>(this) is a mistake that can lead to crashes, plus replaceMe accepts raw pointers. - customContextMenuActions is now a list of unique pointers since the custom actions are stored within the class and used by QT directly. --- src/shared/Modules/Module.cpp | 13 ++++++++++--- src/shared/Modules/Module.h | 5 ++++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/shared/Modules/Module.cpp b/src/shared/Modules/Module.cpp index a3474ea5..43b12f3e 100644 --- a/src/shared/Modules/Module.cpp +++ b/src/shared/Modules/Module.cpp @@ -37,8 +37,7 @@ Module::Module(ModuleId id) : id(id) QAction *close = new QAction("Close"); connect(close, &QAction::triggered, this, - [this]() - { emit closeMe(std::shared_ptr<Module>(this)); }); + [this]() { emit closeMe(this); }); menu.addAction(close); QAction *replace = new QAction("Replace"); @@ -50,7 +49,7 @@ Module::Module(ModuleId id) : id(id) if (customContextMenuActions.size() > 0) { menu.addSeparator(); - menu.addActions(customContextMenuActions); + this->addActionsToMenu(menu); } // Load hub actions @@ -61,6 +60,14 @@ Module::Module(ModuleId id) : id(id) } } +void Module::addActionsToMenu(QMenu &menu) +{ + std::for_each(customContextMenuActions.begin(), + customContextMenuActions.end(), + [&menu](std::unique_ptr<QAction> action) + { menu.addAction(action.get()); }); +} + ModuleId Module::getId() const { return id; } QString Module::getModuleName() const diff --git a/src/shared/Modules/Module.h b/src/shared/Modules/Module.h index 416063ee..7d1800bc 100644 --- a/src/shared/Modules/Module.h +++ b/src/shared/Modules/Module.h @@ -62,5 +62,8 @@ signals: protected: ModuleId id; - QList<QAction*> customContextMenuActions; + QList<std::unique_ptr<QAction>> customContextMenuActions; + +private: + void addActionsToMenu(QMenu& menu); }; -- GitLab