diff --git a/GUI/Models/ItemCatalog.cpp b/GUI/Models/ItemCatalog.cpp index 2b4a41fcd5d1334a108a98ae6869d4e21e0c3c22..c890517c3e2dcea5e3c4e6dac5879f6d5ba90e81 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 f1b36f8bc2b27dac32a39bae46d5a0d4b13e6056..b995c3ea53c66d8bad3b540f2a401f906e8b3832 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; };