From 2c18ab313cf4b032ae9b58eb0ccc8745d29f9c6c Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Fri, 23 Feb 2024 12:36:34 +0100
Subject: [PATCH] + ActionFactory::createRemoveAction etc

---
 GUI/View/Data/DatafilesSelector.cpp        |  6 ++---
 GUI/View/Job/JobsListing.cpp               |  5 ++---
 GUI/View/List/SamplesQListView.cpp         |  9 +++-----
 GUI/View/Material/MaterialEditorDialog.cpp |  5 ++---
 GUI/View/Setup/FrameActions.cpp            | 26 ++++++++++++++++------
 GUI/View/Setup/FrameActions.h              |  8 +++++++
 6 files changed, 36 insertions(+), 23 deletions(-)

diff --git a/GUI/View/Data/DatafilesSelector.cpp b/GUI/View/Data/DatafilesSelector.cpp
index 8dc6f0b9544..cd678ed14ca 100644
--- a/GUI/View/Data/DatafilesSelector.cpp
+++ b/GUI/View/Data/DatafilesSelector.cpp
@@ -27,6 +27,7 @@
 #include "GUI/View/Layout/ApplicationSettings.h"
 #include "GUI/View/Loader/Legacy1dDialog.h"
 #include "GUI/View/Manager/ProjectManager.h"
+#include "GUI/View/Setup/FrameActions.h"
 #include "GUI/View/Widget/ListItemDelegate.h"
 #include "GUI/View/Widget/StyledToolbar.h"
 #include <QBoxLayout>
@@ -107,10 +108,7 @@ DatafilesSelector::DatafilesSelector(StackedDataFrames* data_frames)
     m_rename_data_action->setToolTip("Rename data");
     connect(m_rename_data_action, &QAction::triggered, this, &DatafilesSelector::renameCurrentItem);
 
-    m_remove_data_action->setText("Remove");
-    m_remove_data_action->setIcon(QIcon(":/images/delete.svg"));
-    m_remove_data_action->setIconText("Remove");
-    m_remove_data_action->setToolTip("Remove selected data");
+    m_remove_data_action = ActionFactory::createRemoveAction("data file");
     connect(m_remove_data_action, &QAction::triggered, this, &DatafilesSelector::removeCurrentItem);
 
     // m_qview->setAttribute(Qt::WA_MacShowFocusRect, false); // TODO/Mac: needed?
diff --git a/GUI/View/Job/JobsListing.cpp b/GUI/View/Job/JobsListing.cpp
index 81d2d2a697b..5733cfbc78a 100644
--- a/GUI/View/Job/JobsListing.cpp
+++ b/GUI/View/Job/JobsListing.cpp
@@ -21,6 +21,7 @@
 #include "GUI/Support/Data/JobStatus.h"
 #include "GUI/View/Job/JobProgressDelegate.h"
 #include "GUI/View/Job/JobsQModel.h"
+#include "GUI/View/Setup/FrameActions.h"
 #include "GUI/View/Widget/StyledToolbar.h"
 #include <QVBoxLayout>
 
@@ -65,9 +66,7 @@ JobsListing::JobsListing(QWidget* parent, Qt::WindowFlags f)
     connect(m_cancel_action, &QAction::triggered, this, &JobsListing::onCancel);
     addAction(m_cancel_action);
 
-    m_remove_action = new QAction("Remove", this);
-    m_remove_action->setIcon(QIcon(":/images/delete.svg"));
-    m_remove_action->setToolTip("Remove currently selected jobs");
+    m_remove_action = ActionFactory::createRemoveAction("job");
     connect(m_remove_action, &QAction::triggered, this, &JobsListing::onRemove);
     addAction(m_remove_action);
 
diff --git a/GUI/View/List/SamplesQListView.cpp b/GUI/View/List/SamplesQListView.cpp
index d5970f22b1a..1f8b5f8e74f 100644
--- a/GUI/View/List/SamplesQListView.cpp
+++ b/GUI/View/List/SamplesQListView.cpp
@@ -19,6 +19,7 @@
 #include "GUI/Model/Sample/SamplesSet.h"
 #include "GUI/View/Layout/ApplicationSettings.h"
 #include "GUI/View/List/SamplesQModel.h"
+#include "GUI/View/Setup/FrameActions.h"
 #include "GUI/View/Widget/ListItemDelegate.h"
 #include <QAction>
 #include <QMenu>
@@ -91,9 +92,7 @@ void SamplesQListView::copySample(SampleItem* item)
 
 QAction* SamplesQListView::createRemoveAction(QObject* parent, SampleItem* item)
 {
-    auto* removeAction = new QAction("Remove", parent);
-    removeAction->setIcon(QIcon(":/images/delete.svg"));
-    removeAction->setToolTip("Remove this sample");
+    QAction* removeAction = ActionFactory::createRemoveAction("sample", parent);
     connect(removeAction, &QAction::triggered, [this, item] { removeSample(item); });
 
     return removeAction;
@@ -101,9 +100,7 @@ QAction* SamplesQListView::createRemoveAction(QObject* parent, SampleItem* item)
 
 QAction* SamplesQListView::createCopyAction(QObject* parent, SampleItem* item)
 {
-    auto* copyAction = new QAction("Clone", parent);
-    copyAction->setIcon(QIcon(":/images/content-copy.svg"));
-    copyAction->setToolTip("Clone this sample");
+    auto* copyAction = ActionFactory::createCopyAction("sample", parent);
     connect(copyAction, &QAction::triggered, [this, item] { copySample(item); });
 
     return copyAction;
diff --git a/GUI/View/Material/MaterialEditorDialog.cpp b/GUI/View/Material/MaterialEditorDialog.cpp
index 7998702279c..6a67fcaa214 100644
--- a/GUI/View/Material/MaterialEditorDialog.cpp
+++ b/GUI/View/Material/MaterialEditorDialog.cpp
@@ -21,6 +21,7 @@
 #include "GUI/View/Layout/ApplicationSettings.h"
 #include "GUI/View/Material/MaterialsQModel.h"
 #include "GUI/View/Numeric/DoubleSpinBox.h"
+#include "GUI/View/Setup/FrameActions.h"
 #include "GUI/View/Widget/StyledToolbar.h"
 #include <QAction>
 #include <QColorDialog>
@@ -213,9 +214,7 @@ MaterialEditorDialog::MaterialEditorDialog(SampleItem* sample, const QString& id
     addSldMaterialAction->setToolTip("Add new material");
     connect(addSldMaterialAction, &QAction::triggered, this, &MaterialEditorDialog::addSldMaterial);
 
-    m_remove_material_action = new QAction("Remove");
-    m_remove_material_action->setIcon(QIcon(":/images/delete.svg"));
-    m_remove_material_action->setToolTip("Remove selected material");
+    m_remove_material_action = ActionFactory::createRemoveAction("material");
     connect(m_remove_material_action, &QAction::triggered, this,
             &MaterialEditorDialog::removeCurrentMaterial);
 
diff --git a/GUI/View/Setup/FrameActions.cpp b/GUI/View/Setup/FrameActions.cpp
index 6b71a1ce6bc..a08225d2ab7 100644
--- a/GUI/View/Setup/FrameActions.cpp
+++ b/GUI/View/Setup/FrameActions.cpp
@@ -14,6 +14,23 @@
 
 #include "GUI/View/Setup/FrameActions.h"
 
+QAction* ActionFactory::createCopyAction(const QString& type, QObject* parent)
+{
+    auto* result = new QAction("Copy", parent);
+    result->setIcon(QIcon(":/images/content-copy.svg"));
+    result->setToolTip("Clone current " + type);
+    return result;
+}
+
+QAction* ActionFactory::createRemoveAction(const QString& type, QObject* parent)
+{
+    auto* result = new QAction("Remove", parent);
+    result->setIcon(QIcon(":/images/delete.svg"));
+    result->setToolTip("Remove current " + type);
+    return result;
+}
+
+
 FrameActions* gActions; //<! Global pointer to single instance.
 
 FrameActions::FrameActions()
@@ -75,13 +92,8 @@ FrameActions::FrameActions()
     new_depthprobe_instrument->setIcon(QIcon(":/images/shape-square-plus.svg"));
     new_depthprobe_instrument->setToolTip("Add new depth probe instrument with default settings");
 
-    remove_instrument = new QAction("Remove");
-    remove_instrument->setIcon(QIcon(":/images/delete.svg"));
-    remove_instrument->setToolTip("Remove selected instrument");
-
-    copy_instrument = new QAction("Copy");
-    copy_instrument->setIcon(QIcon(":/images/content-copy.svg"));
-    copy_instrument->setToolTip("Make a copy of the selected instrument");
+    remove_instrument = ActionFactory::createRemoveAction("instrument");
+    copy_instrument = ActionFactory::createCopyAction("instrument");
 
     store_in_library_instrument = new QAction("Store in library");
     store_in_library_instrument->setIcon(QIcon(":/images/library.svg"));
diff --git a/GUI/View/Setup/FrameActions.h b/GUI/View/Setup/FrameActions.h
index e3f7f90579a..e2cf29951fb 100644
--- a/GUI/View/Setup/FrameActions.h
+++ b/GUI/View/Setup/FrameActions.h
@@ -16,6 +16,14 @@
 #define BORNAGAIN_GUI_VIEW_SETUP_FRAMEACTIONS_H
 
 #include <QAction>
+#include <QString>
+
+namespace ActionFactory {
+
+QAction* createCopyAction(const QString& type, QObject* parent = nullptr);
+QAction* createRemoveAction(const QString& type, QObject* parent = nullptr);
+
+} // namespace ActionFactory
 
 //! Actions for use in GUI top-level frames. Accessible through global gActions.
 
-- 
GitLab