Skip to content
Snippets Groups Projects
Commit 433fc760 authored by t.knopff's avatar t.knopff
Browse files

Make MultiLayerItem::T_LAYERS private

parent 15df9705
No related branches found
No related tags found
1 merge request!151Refactor model: MultiLayerItem
Pipeline #40345 passed
......@@ -82,6 +82,16 @@ SessionItem* MultiLayerItem::externalFieldItem() const
return getItem(P_EXTERNAL_FIELD);
}
QVector<LayerItem*> MultiLayerItem::layers() const
{
return items<LayerItem>(T_LAYERS);
}
SessionItem* MultiLayerItem::layersItem() const
{
return getItem(T_LAYERS);
}
void MultiLayerItem::updateLayers()
{
QVector<LayerItem*> list = childrenOfType<LayerItem>();
......
......@@ -18,14 +18,15 @@
#include "GUI/Models/SessionGraphicsItem.h"
#include "Base/Vector/Vectors3D.h"
class LayerItem;
class BA_CORE_API_ MultiLayerItem : public SessionGraphicsItem {
private:
static const QString P_CROSS_CORR_LENGTH;
static const QString P_EXTERNAL_FIELD;
public:
static const QString T_LAYERS;
public:
static const QString M_TYPE;
MultiLayerItem();
......@@ -40,6 +41,9 @@ public:
void setExternalField(const kvector_t& ext_field);
SessionItem* externalFieldItem() const;
QVector<LayerItem*> layers() const;
SessionItem* layersItem() const;
private:
void updateLayers();
};
......
......@@ -19,6 +19,9 @@
#include "GUI/Models/ParticleCoreShellItem.h"
#include "GUI/Models/ParticleLayoutItem.h"
#include <boost/polymorphic_cast.hpp>
using boost::polymorphic_downcast;
SampleValidator::SampleValidator() : m_valid_sample(true) {}
void SampleValidator::initValidator()
......@@ -43,7 +46,7 @@ void SampleValidator::validateItem(const SessionItem* item)
QString diagnosis;
if (item->hasModelType<MultiLayerItem>()) {
diagnosis = validateMultiLayerItem(item);
diagnosis = validateMultiLayerItem(polymorphic_downcast<const MultiLayerItem*>(item));
} else if (item->modelType() == "ParticleLayout") {
diagnosis = validateParticleLayoutItem(item);
} else if (item->modelType() == "ParticleCoreShell") {
......@@ -57,11 +60,11 @@ void SampleValidator::validateItem(const SessionItem* item)
}
}
QString SampleValidator::validateMultiLayerItem(const SessionItem* item)
QString SampleValidator::validateMultiLayerItem(const MultiLayerItem* item)
{
QString result;
QVector<LayerItem*> layers = item->items<LayerItem>(MultiLayerItem::T_LAYERS);
QVector<LayerItem*> layers = item->layers();
if (layers.isEmpty()) {
result = "MultiLayer should contain at least one layer.";
......
......@@ -35,7 +35,7 @@ private:
void iterateItems(const SessionItem* parentItem);
void validateItem(const SessionItem* item);
QString validateMultiLayerItem(const SessionItem* item);
QString validateMultiLayerItem(const MultiLayerItem* item);
QString validateParticleLayoutItem(const SessionItem* item);
QString validateParticleCoreShellItem(const SessionItem* item);
QString validateParticleCompositionItem(const SessionItem* item);
......
......@@ -49,7 +49,7 @@ void RealSpaceBuilder::populate(RealSpaceModel* model, const SessionItem& item,
model->defCamPos = cameraPosition;
if (item.hasModelType<MultiLayerItem>())
populateMultiLayer(model, item, sceneGeometry);
populateMultiLayer(model, dynamic_cast<const MultiLayerItem&>(item), sceneGeometry);
else if (item.hasModelType<LayerItem>())
populateLayer(model, dynamic_cast<const LayerItem&>(item), sceneGeometry);
......@@ -70,12 +70,12 @@ void RealSpaceBuilder::populate(RealSpaceModel* model, const SessionItem& item,
populateParticleFromParticleItem(model, item);
}
void RealSpaceBuilder::populateMultiLayer(RealSpaceModel* model, const SessionItem& item,
void RealSpaceBuilder::populateMultiLayer(RealSpaceModel* model, const MultiLayerItem& mlayerItem,
const SceneGeometry& sceneGeometry, const QVector3D&)
{
double total_height(0.0);
int index(0);
for (auto layer : item.items<LayerItem>(MultiLayerItem::T_LAYERS)) {
for (LayerItem* layer : mlayerItem.layers()) {
bool isTopLayer = index == 0;
populateLayer(model, *layer, sceneGeometry,
......
......@@ -21,6 +21,7 @@
class SessionItem;
class LayerItem;
class MultiLayerItem;
class ParticleLayoutItem;
class RealSpaceModel;
class Shape3D;
......@@ -42,7 +43,7 @@ public:
GUI::RealSpace::Vector3D(0, 0, 0), // center
GUI::RealSpace::Vector3D::_z)); // up
void populateMultiLayer(RealSpaceModel* model, const SessionItem& item,
void populateMultiLayer(RealSpaceModel* model, const MultiLayerItem& mlayerItem,
const SceneGeometry& sceneGeometry, const QVector3D& origin = {});
void populateLayer(RealSpaceModel* model, const LayerItem& layerItem,
......
......@@ -21,16 +21,19 @@
#include "GUI/Views/RealSpaceWidgets/RealSpaceCanvas.h"
#include "Sample/HardParticle/HardParticles.h"
#include <boost/polymorphic_cast.hpp>
using boost::polymorphic_downcast;
namespace {
bool isTopLayer(const SessionItem& layerItem)
bool isTopLayer(const LayerItem& layerItem)
{
auto layers = layerItem.parent()->getItems(MultiLayerItem::T_LAYERS);
return layers.indexOf(const_cast<SessionItem*>(&layerItem)) == 0;
auto layers = polymorphic_downcast<MultiLayerItem*>(layerItem.parent())->layers();
return layers.indexOf(const_cast<LayerItem*>(&layerItem)) == 0;
}
bool isBottomLayer(const SessionItem& layerItem)
bool isBottomLayer(const LayerItem& layerItem)
{
auto layers = layerItem.parent()->getItems(MultiLayerItem::T_LAYERS);
return layers.indexOf(const_cast<SessionItem*>(&layerItem)) == layers.size() - 1;
auto layers = polymorphic_downcast<MultiLayerItem*>(layerItem.parent())->layers();
return layers.indexOf(const_cast<LayerItem*>(&layerItem)) == layers.size() - 1;
}
} // namespace
......
......@@ -245,7 +245,7 @@ TEST_F(TestMapperForItem, test_onSiblingsChange)
EXPECT_TRUE(w.m_reported_items.isEmpty());
EXPECT_TRUE(w.m_reported_names.isEmpty());
delete multilayer->takeItem(1, MultiLayerItem::T_LAYERS);
delete multilayer->takeItem(1, multilayer->tagFromItem(multilayer->layersItem()));
EXPECT_EQ(w.m_onSiblingsChangeCount, 2);
}
......
......@@ -103,7 +103,7 @@ TEST_F(TestMultiLayerItem, test_movingMiddleLayerOnTop)
EXPECT_EQ(bottom->thickness(), 0.0);
// Moving middle layer to top
model.moveItem(middle, multilayer, 0, MultiLayerItem::T_LAYERS);
model.moveItem(middle, multilayer, 0, multilayer->tagFromItem(multilayer->layersItem()));
// checking that middle is top now, and top layer is middle now
EXPECT_EQ(middle, multilayer->childrenOfType<LayerItem>().at(0));
EXPECT_EQ(top, multilayer->childrenOfType<LayerItem>().at(1));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment