From c049e96bdb8bc03409965d967deda564c37839b1 Mon Sep 17 00:00:00 2001 From: Tobias Knopff <t.knopff@fz-juelich.de> Date: Mon, 10 May 2021 09:06:31 +0200 Subject: [PATCH] Add templated add function to ItemCatalog for types which implement the Item::M_TYPE protocol --- GUI/Models/ItemCatalog.cpp | 22 ++++++++++++++-------- GUI/Models/ItemCatalog.h | 2 ++ 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/GUI/Models/ItemCatalog.cpp b/GUI/Models/ItemCatalog.cpp index 2b4a41fcd5d..c890517c3e2 100644 --- a/GUI/Models/ItemCatalog.cpp +++ b/GUI/Models/ItemCatalog.cpp @@ -80,8 +80,8 @@ ItemCatalog::ItemCatalog() add("GISASInstrument", create_new<GISASInstrumentItem>); add("OffSpecularInstrument", create_new<OffSpecularInstrumentItem>); add("SpecularInstrument", create_new<SpecularInstrumentItem>); - add(GISASBeamItem::M_TYPE, create_new<GISASBeamItem>); - add(SpecularBeamItem::M_TYPE, create_new<SpecularBeamItem>); + addItem<GISASBeamItem>(); + addItem<SpecularBeamItem>(); add("NoBackground", create_new<BackgroundNoneItem>); add("ConstantBackground", create_new<ConstantBackgroundItem>); add("PoissonNoiseBackground", create_new<PoissonNoiseBackgroundItem>); @@ -165,16 +165,16 @@ ItemCatalog::ItemCatalog() add("SquareLattice2D", create_new<SquareLattice2DItem>); add("HexagonalLattice2D", create_new<HexagonalLattice2DItem>); - add(MaterialItem::M_TYPE, create_new<MaterialItem>); - add(MaterialItemContainer::M_TYPE, create_new<MaterialItemContainer>); + addItem<MaterialItem>(); + addItem<MaterialItemContainer>(); - add(MaterialRefractiveDataItem::M_TYPE, create_new<MaterialRefractiveDataItem>); - add(MaterialSLDDataItem::M_TYPE, create_new<MaterialSLDDataItem>); + addItem<MaterialRefractiveDataItem>(); + addItem<MaterialSLDDataItem>(); add("JobItem", create_new<JobItem>); - add(IntensityDataItem::M_TYPE, create_new<IntensityDataItem>); - add(SpecularDataItem::M_TYPE, create_new<SpecularDataItem>); + addItem<IntensityDataItem>(); + addItem<SpecularDataItem>(); add("Data1DViewItem", create_new<Data1DViewItem>); add("DataPropertyContainer", create_new<DataPropertyContainer>); add("DataItem1DProperties", create_new<Data1DProperties>); @@ -269,3 +269,9 @@ void ItemCatalog::add(const QString& modelType, std::function<SessionItem*()> f) { m_data.registerItem(modelType, f); } + +template<typename T> +void ItemCatalog::addItem() +{ + m_data.registerItem(T::M_TYPE, create_new<T>); +} diff --git a/GUI/Models/ItemCatalog.h b/GUI/Models/ItemCatalog.h index f1b36f8bc2b..b995c3ea53c 100644 --- a/GUI/Models/ItemCatalog.h +++ b/GUI/Models/ItemCatalog.h @@ -34,6 +34,8 @@ public: private: void add(const QString& modelType, std::function<SessionItem*()> f); + template <typename T> void addItem(); + IFactory<QString, SessionItem> m_data; }; -- GitLab