From 232f391bbf6b001458e244ae99c2b07aa8fa1214 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (o)" <j.wuttke@fz-juelich.de>
Date: Tue, 21 Nov 2023 14:52:59 +0100
Subject: [PATCH] more generic form of callback from registry

---
 Base/Util/IFactory.h                 | 12 ------------
 GUI/View/Data/DatafilePresenter.cpp  |  8 ++++----
 GUI/View/Job/JobResultsPresenter.cpp | 10 +++++-----
 3 files changed, 9 insertions(+), 21 deletions(-)

diff --git a/Base/Util/IFactory.h b/Base/Util/IFactory.h
index 81da769aea0..8000cc0811e 100644
--- a/Base/Util/IFactory.h
+++ b/Base/Util/IFactory.h
@@ -65,16 +65,4 @@ protected:
     CallbackMap_t m_callbacks; //!< map of correspondence of objectsId and creation functions
 };
 
-//! Returns new instance of class T.
-//!
-//! This templated function is used in catalogs in form of a function pointer
-//! 'create_new<T>', with no function arguments supplied. Equivalently, we could
-//! use a lambda function '[](){return new T;}'.
-
-template <class T>
-T* create_new()
-{
-    return new T();
-}
-
 #endif // BORNAGAIN_BASE_UTIL_IFACTORY_H
diff --git a/GUI/View/Data/DatafilePresenter.cpp b/GUI/View/Data/DatafilePresenter.cpp
index 7a5e3af4b8e..1c2241dd270 100644
--- a/GUI/View/Data/DatafilePresenter.cpp
+++ b/GUI/View/Data/DatafilePresenter.cpp
@@ -22,10 +22,10 @@
 
 DatafilePresenter::DatafilePresenter()
 {
-    registerWidget("Heat Map", create_new<Plot2DFrame>);
-    registerWidget("Projections", create_new<Plot2DWithProjectionFrame>);
-    registerWidget("Mask Editor", create_new<MaskEditingFrame>);
-    registerWidget("Reflectometry (Graph only)", create_new<SpecularFrame>);
+    registerWidget("Heat Map", []() { return new Plot2DFrame; });
+    registerWidget("Projections", []() { return new Plot2DWithProjectionFrame; });
+    registerWidget("Mask Editor", []() { return new MaskEditingFrame; });
+    registerWidget("Reflectometry (Graph only)", []() { return new SpecularFrame; });
 }
 
 QString DatafilePresenter::itemPresentation() const
diff --git a/GUI/View/Job/JobResultsPresenter.cpp b/GUI/View/Job/JobResultsPresenter.cpp
index f1bc40dcd67..f096b867aa2 100644
--- a/GUI/View/Job/JobResultsPresenter.cpp
+++ b/GUI/View/Job/JobResultsPresenter.cpp
@@ -48,11 +48,11 @@ JobResultsPresenter::JobResultsPresenter()
     setWindowTitle("Job Datafield");
     setObjectName("JobResultsPresenter");
 
-    registerWidget("Heat Map", create_new<Plot2DFrame>);
-    registerWidget("Projections", create_new<Plot2DWithProjectionFrame>);
-    registerWidget("Fit 1D Data", create_new<Fit1DFrame>);
-    registerWidget("Fit 2D Data", create_new<Fit2DFrame>);
-    registerWidget("Reflectometry", create_new<SpecularFrame>);
+    registerWidget("Heat Map", []() { return new Plot2DFrame; });
+    registerWidget("Projections", []() { return new Plot2DWithProjectionFrame; });
+    registerWidget("Fit 1D Data", []() { return new Fit1DFrame; });
+    registerWidget("Fit 2D Data", []() { return new Fit2DFrame; });
+    registerWidget("Reflectometry", []() { return new SpecularFrame; });
 
     setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
     setMinimumSize(220, 200);
-- 
GitLab