From 32cd35a11fc62f52c1e2dd6726e5fb584f716629 Mon Sep 17 00:00:00 2001
From: Matthias Puchner <github@mpuchner.de>
Date: Thu, 21 Oct 2021 09:15:11 +0200
Subject: [PATCH] introduce ActionFactory to create commonly used actions

---
 GUI/utils/ActionFactory.cpp | 31 ++++++++++++++++++++++++++
 GUI/utils/ActionFactory.h   | 44 +++++++++++++++++++++++++++++++++++++
 2 files changed, 75 insertions(+)
 create mode 100644 GUI/utils/ActionFactory.cpp
 create mode 100644 GUI/utils/ActionFactory.h

diff --git a/GUI/utils/ActionFactory.cpp b/GUI/utils/ActionFactory.cpp
new file mode 100644
index 00000000000..70d649e0797
--- /dev/null
+++ b/GUI/utils/ActionFactory.cpp
@@ -0,0 +1,31 @@
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      GUI/utils/ActionFactory.cpp
+//! @brief     Implements class ActionFactory
+//!
+//! @homepage  http://www.bornagainproject.org
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2021
+//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
+//
+//  ************************************************************************************************
+
+#include "GUI/utils/ActionFactory.h"
+#include <QAction>
+
+QAction* ActionFactory::createRemoveAction(QObject* parent, const QString& what,
+                                           std::function<void()> slot)
+{
+    auto* removeAction = new QAction(parent);
+    removeAction->setText("Remove");
+    removeAction->setIcon(QIcon(":/images/delete.svg"));
+    removeAction->setIconText("Remove");
+    removeAction->setToolTip("Remove " + what);
+
+    if (slot)
+        QObject::connect(removeAction, &QAction::triggered, slot);
+
+    return removeAction;
+}
diff --git a/GUI/utils/ActionFactory.h b/GUI/utils/ActionFactory.h
new file mode 100644
index 00000000000..a373d9f8a45
--- /dev/null
+++ b/GUI/utils/ActionFactory.h
@@ -0,0 +1,44 @@
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      GUI/utils/ActionFactory.h
+//! @brief     Defines class ActionFactory
+//!
+//! @homepage  http://www.bornagainproject.org
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2021
+//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
+//
+//  ************************************************************************************************
+
+#ifndef BORNAGAIN_GUI_UTILS_ACTIONFACTORY_H
+#define BORNAGAIN_GUI_UTILS_ACTIONFACTORY_H
+
+#include <functional>
+
+class QAction;
+class QObject;
+class QString;
+
+//! Factory to create commonly used actions
+class ActionFactory {
+public:
+    // delete copy/move constructor/assignment:
+    ActionFactory(const ActionFactory&) = delete;
+    ActionFactory(ActionFactory&&) = delete;
+    ActionFactory& operator=(const ActionFactory&) = delete;
+    ActionFactory& operator=(ActionFactory&&) = delete;
+
+    //! Create "remove" action.
+    //!
+    //! The "what text will be used in the tooltip, appended to "Remove ".
+    //! If a slot is given, it will be connected to the "triggered" signal.
+    static QAction* createRemoveAction(QObject* parent, const QString& what,
+                                       std::function<void()> slot = nullptr);
+
+private:
+    ActionFactory() = default;
+};
+
+#endif // BORNAGAIN_GUI_UTILS_ACTIONFACTORY_H
-- 
GitLab