From 148c693e1afb72a2fa3eac335d9ead0cb5babb42 Mon Sep 17 00:00:00 2001 From: Matthias Puchner <github@mpuchner.de> Date: Thu, 2 Dec 2021 16:17:50 +0100 Subject: [PATCH] reduce SessionModel usage for SampleModel --- GUI/Model/From/GUIDomainSampleVisitor.cpp | 2 +- GUI/Model/From/SampleListModel.cpp | 6 ++++-- GUI/Model/Sample/SampleModel.cpp | 5 +++++ GUI/Model/Sample/SampleModel.h | 2 ++ GUI/View/SampleDesigner/ScriptPanel.cpp | 2 +- GUI/View/Toplevel/SimulationView.cpp | 2 +- Tests/Unit/GUI/TestMultiLayerItem.cpp | 8 ++++---- 7 files changed, 18 insertions(+), 9 deletions(-) diff --git a/GUI/Model/From/GUIDomainSampleVisitor.cpp b/GUI/Model/From/GUIDomainSampleVisitor.cpp index b8702754c15..f5de5e70078 100644 --- a/GUI/Model/From/GUIDomainSampleVisitor.cpp +++ b/GUI/Model/From/GUIDomainSampleVisitor.cpp @@ -132,7 +132,7 @@ void GUIDomainSampleVisitor::visit(const Layer* node) void GUIDomainSampleVisitor::visit(const MultiLayer* node) { - auto* multilayer_item = m_sampleModel->insertItem<MultiLayerItem>(); + auto* multilayer_item = m_sampleModel->addMultiLayer(); multilayer_item->setItemName(node->sampleName().c_str()); multilayer_item->crossCorrLength().set(node->crossCorrLength()); multilayer_item->setExternalField(node->externalField()); diff --git a/GUI/Model/From/SampleListModel.cpp b/GUI/Model/From/SampleListModel.cpp index 31898bd8e16..09efed232d9 100644 --- a/GUI/Model/From/SampleListModel.cpp +++ b/GUI/Model/From/SampleListModel.cpp @@ -13,6 +13,7 @@ // ************************************************************************************************ #include "GUI/Model/From/SampleListModel.h" +#include "Base/Util/Assert.h" #include "GUI/Model/From/GUIExamplesFactory.h" #include "GUI/Model/Sample/MultiLayerItem.h" #include "GUI/Model/Sample/SampleModel.h" @@ -32,7 +33,8 @@ SampleListModel::SampleListModel(QObject* parent, SampleModel* model) MultiLayerItem* SampleListModel::topMostItem() const { - return m_sampleModel->topItem<MultiLayerItem>(); + ASSERT(!m_sampleModel->multiLayerItems().isEmpty()); + return m_sampleModel->multiLayerItems().first(); } int SampleListModel::rowCount(const QModelIndex& parent) const @@ -131,7 +133,7 @@ QModelIndex SampleListModel::createSample() const int row = m_sampleModel->multiLayerItems().size(); beginInsertRows(QModelIndex(), row, row); - auto* multilayer_item = m_sampleModel->insertItem<MultiLayerItem>(); + auto* multilayer_item = m_sampleModel->addMultiLayer(); multilayer_item->setItemName(suggestName(topItemNames(m_sampleModel), "Sample")); endInsertRows(); return indexForItem(multilayer_item); diff --git a/GUI/Model/Sample/SampleModel.cpp b/GUI/Model/Sample/SampleModel.cpp index fb582f1bc54..c5d28d0cd74 100644 --- a/GUI/Model/Sample/SampleModel.cpp +++ b/GUI/Model/Sample/SampleModel.cpp @@ -77,6 +77,11 @@ QVector<ItemWithMaterial*> SampleModel::itemsWithMaterial() const return result; } +MultiLayerItem* SampleModel::addMultiLayer() +{ + return insertItem<MultiLayerItem>(); +} + void SampleModel::removeMultiLayer(MultiLayerItem* item) { removeItem(item); diff --git a/GUI/Model/Sample/SampleModel.h b/GUI/Model/Sample/SampleModel.h index e923341fc2a..591441a369e 100644 --- a/GUI/Model/Sample/SampleModel.h +++ b/GUI/Model/Sample/SampleModel.h @@ -38,6 +38,8 @@ public: //! Returns vector of SessionItems having MaterialProperty on board. QVector<ItemWithMaterial*> itemsWithMaterial() const; + //! Adds a multilayer and returns the new item. + MultiLayerItem* addMultiLayer(); void removeMultiLayer(MultiLayerItem* item); signals: diff --git a/GUI/View/SampleDesigner/ScriptPanel.cpp b/GUI/View/SampleDesigner/ScriptPanel.cpp index db157586f30..427eb3e3ae3 100644 --- a/GUI/View/SampleDesigner/ScriptPanel.cpp +++ b/GUI/View/SampleDesigner/ScriptPanel.cpp @@ -111,7 +111,7 @@ QString ScriptPanel::generateCodeSnippet() m_cautionSign->clear(); QString result; - for (const MultiLayerItem* sampleItem : m_sampleModel->topItems<MultiLayerItem>()) { + for (const MultiLayerItem* sampleItem : m_sampleModel->multiLayerItems()) { try { auto multilayer = GUI::Model::DomainObjectBuilder::buildMultiLayer(*sampleItem); if (!result.isEmpty()) diff --git a/GUI/View/Toplevel/SimulationView.cpp b/GUI/View/Toplevel/SimulationView.cpp index 61ce8f53090..1e5a2f3c1d0 100644 --- a/GUI/View/Toplevel/SimulationView.cpp +++ b/GUI/View/Toplevel/SimulationView.cpp @@ -236,7 +236,7 @@ void SimulationView::updateFunctionalityNarrowing() QVector<MultiLayerItem*> SimulationView::multiLayerItems() const { - return m_document->sampleModel()->topItems<MultiLayerItem>(); + return m_document->sampleModel()->multiLayerItems(); } QVector<InstrumentItem*> SimulationView::instrumentItems() const diff --git a/Tests/Unit/GUI/TestMultiLayerItem.cpp b/Tests/Unit/GUI/TestMultiLayerItem.cpp index d9bf4b176f1..209171ce56c 100644 --- a/Tests/Unit/GUI/TestMultiLayerItem.cpp +++ b/Tests/Unit/GUI/TestMultiLayerItem.cpp @@ -16,7 +16,7 @@ TEST_F(TestMultiLayerItem, twoLayerSystem) { SampleModel model; - auto* multilayer = model.insertItem<MultiLayerItem>(); + auto* multilayer = model.addMultiLayer(); auto* top = model.insertItem<LayerItem>(multilayer); auto* bottom = model.insertItem<LayerItem>(multilayer); @@ -45,7 +45,7 @@ TEST_F(TestMultiLayerItem, threeLayerSystem) { SampleModel model; - auto* multilayer = model.insertItem<MultiLayerItem>(); + auto* multilayer = model.addMultiLayer(); auto* top = model.insertItem<LayerItem>(multilayer); auto* middle = model.insertItem<LayerItem>(multilayer); auto* bottom = model.insertItem<LayerItem>(multilayer); @@ -80,7 +80,7 @@ TEST_F(TestMultiLayerItem, movingMiddleLayerOnTop) { SampleModel model; - auto* multilayer = model.insertItem<MultiLayerItem>(); + auto* multilayer = model.addMultiLayer(); auto* top = model.insertItem<LayerItem>(multilayer); auto* middle = model.insertItem<LayerItem>(multilayer); auto* bottom = model.insertItem<LayerItem>(multilayer); @@ -128,7 +128,7 @@ TEST_F(TestMultiLayerItem, movingLayerOnCanvas) { SampleModel model; - auto* multilayer = model.insertItem<MultiLayerItem>(); + auto* multilayer = model.addMultiLayer(); auto* top = model.insertItem<LayerItem>(multilayer); model.insertItem<LayerItem>(multilayer); -- GitLab