Skip to content
Snippets Groups Projects
Commit 598e7424 authored by Matthias Puchner's avatar Matthias Puchner
Browse files

use SelectionDescriptor in ParticleLayoutItem

parent 87530aaa
No related branches found
No related tags found
1 merge request!402Preparation for upcoming sample editor - add more descriptors (continued)
...@@ -65,7 +65,7 @@ GUI::Model::DomainObjectBuilder::buildParticleLayout(const ParticleLayoutItem& i ...@@ -65,7 +65,7 @@ GUI::Model::DomainObjectBuilder::buildParticleLayout(const ParticleLayoutItem& i
throw Error("GUI::Model::DomainObjectBuilder::buildParticleLayout()" throw Error("GUI::Model::DomainObjectBuilder::buildParticleLayout()"
" -> Error! Not implemented"); " -> Error! Not implemented");
} }
InterferenceItem* interference = item.interference(); InterferenceItem* interference = item.interference().currentItem();
if (interference) { if (interference) {
auto P_interference = buildInterference(*interference); auto P_interference = buildInterference(*interference);
if (P_interference) if (P_interference)
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include "GUI/Models/ParticleLayoutItem.h" #include "GUI/Models/ParticleLayoutItem.h"
#include "GUI/Models/DoubleDescriptor.h" #include "GUI/Models/DoubleDescriptor.h"
#include "GUI/Models/InterferenceItems.h" #include "GUI/Models/InterferenceItems.h"
#include "GUI/Models/ItemCatalog.h"
#include "GUI/Models/Lattice2DItems.h" #include "GUI/Models/Lattice2DItems.h"
#include "GUI/Models/MesoCrystalItem.h" #include "GUI/Models/MesoCrystalItem.h"
#include "GUI/Models/ParticleCompositionItem.h" #include "GUI/Models/ParticleCompositionItem.h"
...@@ -105,9 +106,47 @@ void ParticleLayoutItem::removeParticle(ItemWithParticles* particle) ...@@ -105,9 +106,47 @@ void ParticleLayoutItem::removeParticle(ItemWithParticles* particle)
model()->removeItem(particle); model()->removeItem(particle);
} }
InterferenceItem* ParticleLayoutItem::interference() const SelectionDescriptor<InterferenceItem*> ParticleLayoutItem::interference() const
{ {
return dynamic_cast<InterferenceItem*>(getItem(T_INTERFERENCE)); SelectionDescriptor<InterferenceItem*> d;
// we need a special filling for this selection descriptor (not just from a GroupItem), since
// the interference is stored in a child, which can be present or not.
static QVector<QPair<QString, QString>> map;
// initialize if not done so far
if (map.isEmpty()) {
map << qMakePair(QString("None"), QString(""));
for (auto modelType : ItemCatalog::interferenceFunctionTypes())
map << qMakePair(ItemCatalog::instance().uiInfo(modelType).menuEntry, modelType);
}
d.label = "Interference function";
for (auto [title, type] : map)
d.options << title;
d.currentItem = [=] { return dynamic_cast<InterferenceItem*>(getItem(T_INTERFERENCE)); };
d.setCurrentIndex = [=](int current) {
if (auto item = getItem(T_INTERFERENCE))
model()->removeItem(item);
if (current > 0)
model()->insertNewItem(map[current].second, const_cast<ParticleLayoutItem*>(this), -1,
T_INTERFERENCE);
};
d.currentIndex = [=]() {
if (auto item = dynamic_cast<InterferenceItem*>(getItem(T_INTERFERENCE)))
for (int i = 1; i < map.size(); i++)
if (map[i].second == item->modelType())
return i;
return 0;
};
return d;
} }
void ParticleLayoutItem::setInterference(InterferenceItem* interference) void ParticleLayoutItem::setInterference(InterferenceItem* interference)
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#ifndef BORNAGAIN_GUI_MODELS_PARTICLELAYOUTITEM_H #ifndef BORNAGAIN_GUI_MODELS_PARTICLELAYOUTITEM_H
#define BORNAGAIN_GUI_MODELS_PARTICLELAYOUTITEM_H #define BORNAGAIN_GUI_MODELS_PARTICLELAYOUTITEM_H
#include "GUI/Models/SelectionDescriptor.h"
#include "GUI/Models/SessionGraphicsItem.h" #include "GUI/Models/SessionGraphicsItem.h"
#include "GUI/Models/SessionModel.h" #include "GUI/Models/SessionModel.h"
...@@ -41,7 +42,7 @@ public: ...@@ -41,7 +42,7 @@ public:
void addParticle(ItemWithParticles* particle); void addParticle(ItemWithParticles* particle);
void removeParticle(ItemWithParticles* particle); void removeParticle(ItemWithParticles* particle);
InterferenceItem* interference() const; SelectionDescriptor<InterferenceItem*> interference() const;
template <typename T> T* createInterference(); template <typename T> T* createInterference();
void setInterference(InterferenceItem* interference); void setInterference(InterferenceItem* interference);
......
...@@ -36,7 +36,7 @@ namespace { ...@@ -36,7 +36,7 @@ namespace {
std::unique_ptr<IInterference> GetInterference(const ParticleLayoutItem& layoutItem) std::unique_ptr<IInterference> GetInterference(const ParticleLayoutItem& layoutItem)
{ {
auto interferenceItem = layoutItem.interference(); auto interferenceItem = layoutItem.interference().currentItem();
if (interferenceItem) { if (interferenceItem) {
auto P_interference = interferenceItem->createInterference(); auto P_interference = interferenceItem->createInterference();
if (P_interference) if (P_interference)
......
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