BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
ModelView::JsonItemConverter::JsonItemConverterImpl Struct Reference
Collaboration diagram for ModelView::JsonItemConverter::JsonItemConverterImpl:
[legend]

Public Member Functions

 JsonItemConverterImpl (JsonItemConverter *parent, const ConverterContext &context)
 
const ItemFactoryInterfacefactory ()
 
QJsonObject item_to_json (const SessionItem &item) const
 
void populate_item (const QJsonObject &json, SessionItem &item)
 
void populate_item_data (const QJsonArray &json, SessionItemData &item_data)
 
void populate_item_tags (const QJsonObject &json, SessionItemTags &item_tags)
 

Public Attributes

ConverterContext m_context
 
std::unique_ptr< JsonItemDataConverterInterfacem_itemdata_converter
 
std::unique_ptr< JsonItemTagsConverterm_itemtags_converter
 
JsonItemConverterm_self {nullptr}
 

Detailed Description

Definition at line 42 of file jsonitemconverter.cpp.

Constructor & Destructor Documentation

◆ JsonItemConverterImpl()

ModelView::JsonItemConverter::JsonItemConverterImpl::JsonItemConverterImpl ( JsonItemConverter parent,
const ConverterContext context 
)
inline

Definition at line 48 of file jsonitemconverter.cpp.

49  : m_self(parent), m_context(context)
50  {
51  //! Callback to convert SessionItem to JSON object.
52  auto create_json = [this](const SessionItem& item) { return m_self->to_json(&item); };
53 
54  //! Callback to create SessionItem from JSON object.
55  auto create_item = [this](const QJsonObject& json) { return m_self->from_json(json); };
56 
57  //! Callback to update SessionItem from JSON object.
58  auto update_item = [this](const QJsonObject& json, SessionItem* item) {
59  populate_item(json, *item);
60  };
61 
62  ConverterCallbacks callbacks{create_json, create_item, update_item};
63 
64  m_itemdata_converter = createDataConverter(m_context.m_mode);
65  m_itemtags_converter = std::make_unique<JsonItemTagsConverter>(callbacks);
66  }
std::unique_ptr< SessionItem > from_json(const QJsonObject &json) const override
Creates item from JSON.
QJsonObject to_json(const SessionItem *item) const override
Converts item to JSON.
The main object representing an editable/displayable/serializable entity.
Definition: sessionitem.h:38
std::unique_ptr< JsonItemDataConverterInterface > m_itemdata_converter
std::unique_ptr< JsonItemTagsConverter > m_itemtags_converter
void populate_item(const QJsonObject &json, SessionItem &item)
Provides necessary callbacks to convert SessionItem to JSON and back.

References ModelView::JsonItemConverter::from_json(), ModelView::JsonItemConverter::JsonItemConverterImpl::m_context, ModelView::JsonItemConverter::JsonItemConverterImpl::m_itemdata_converter, ModelView::JsonItemConverter::JsonItemConverterImpl::m_itemtags_converter, ModelView::ConverterContext::m_mode, ModelView::JsonItemConverter::JsonItemConverterImpl::m_self, ModelView::JsonItemConverter::JsonItemConverterImpl::populate_item(), and ModelView::JsonItemConverter::to_json().

Here is the call graph for this function:

Member Function Documentation

◆ factory()

const ItemFactoryInterface* ModelView::JsonItemConverter::JsonItemConverterImpl::factory ( )
inline

◆ item_to_json()

QJsonObject ModelView::JsonItemConverter::JsonItemConverterImpl::item_to_json ( const SessionItem item) const
inline

Definition at line 102 of file jsonitemconverter.cpp.

103  {
104  QJsonObject result;
105  result[JsonItemFormatAssistant::modelKey] = QString::fromStdString(item.modelType());
106  result[JsonItemFormatAssistant::itemDataKey] =
107  m_itemdata_converter->to_json(*item.itemData());
108  result[JsonItemFormatAssistant::itemTagsKey] =
109  m_itemtags_converter->to_json(*item.itemTags());
110 
111  return result;
112  }
SessionItemTags * itemTags()
Returns pointer to internal collection of tag-registered items (non-const version).
SessionItemData * itemData()
Returns pointer to item's data container (non-const version).
model_type modelType() const
Returns item's model type.
Definition: sessionitem.cpp:80

References ModelView::SessionItem::itemData(), ModelView::JsonItemFormatAssistant::itemDataKey, ModelView::SessionItem::itemTags(), ModelView::JsonItemFormatAssistant::itemTagsKey, ModelView::JsonItemConverter::JsonItemConverterImpl::m_itemdata_converter, ModelView::JsonItemConverter::JsonItemConverterImpl::m_itemtags_converter, ModelView::JsonItemFormatAssistant::modelKey, and ModelView::SessionItem::modelType().

Here is the call graph for this function:

◆ populate_item()

void ModelView::JsonItemConverter::JsonItemConverterImpl::populate_item ( const QJsonObject &  json,
SessionItem item 
)
inline

Definition at line 80 of file jsonitemconverter.cpp.

81  {
82  auto modelType = json[JsonItemFormatAssistant::modelKey].toString().toStdString();
83 
84  if (modelType != item.modelType())
85  throw std::runtime_error("Item model mismatch");
86 
88  item.setDataAndTags(std::make_unique<SessionItemData>(),
89  std::make_unique<SessionItemTags>());
90  }
91 
92  populate_item_data(json[JsonItemFormatAssistant::itemDataKey].toArray(), *item.itemData());
93  populate_item_tags(json[JsonItemFormatAssistant::itemTagsKey].toObject(), *item.itemTags());
94 
95  for (auto child : item.children())
96  child->setParent(&item);
97 
99  item.setData(UniqueIdGenerator::generate(), ItemDataRole::IDENTIFIER);
100  }
void setDataAndTags(std::unique_ptr< SessionItemData > data, std::unique_ptr< SessionItemTags > tags)
bool setData(const T &value, int role=ItemDataRole::DATA, bool direct=false)
Sets data for a given role.
Definition: sessionitem.h:141
std::vector< SessionItem * > children() const
Returns vector of children formed from all chidlren from all tags.
const int IDENTIFIER
unique identifier
Definition: mvvm_types.h:29
bool isRebuildItemDataAndTagFromJson(ConverterMode mode)
Returns true if item content should be reconstructed from JSON.
bool isRegenerateIdWhenBackFromJson(ConverterMode mode)
Returns true if given mode requires ID regeneration instead of using the one stored in JSON.
void populate_item_tags(const QJsonObject &json, SessionItemTags &item_tags)
void populate_item_data(const QJsonArray &json, SessionItemData &item_data)

References ModelView::SessionItem::children(), ModelView::UniqueIdGenerator::generate(), ModelView::ItemDataRole::IDENTIFIER, ModelView::isRebuildItemDataAndTagFromJson(), ModelView::isRegenerateIdWhenBackFromJson(), ModelView::SessionItem::itemData(), ModelView::JsonItemFormatAssistant::itemDataKey, ModelView::SessionItem::itemTags(), ModelView::JsonItemFormatAssistant::itemTagsKey, ModelView::JsonItemConverter::JsonItemConverterImpl::m_context, ModelView::ConverterContext::m_mode, ModelView::JsonItemFormatAssistant::modelKey, ModelView::SessionItem::modelType(), ModelView::JsonItemConverter::JsonItemConverterImpl::populate_item_data(), ModelView::JsonItemConverter::JsonItemConverterImpl::populate_item_tags(), ModelView::SessionItem::setData(), and ModelView::SessionItem::setDataAndTags().

Referenced by ModelView::JsonItemConverter::JsonItemConverterImpl::JsonItemConverterImpl().

Here is the call graph for this function:

◆ populate_item_data()

void ModelView::JsonItemConverter::JsonItemConverterImpl::populate_item_data ( const QJsonArray &  json,
SessionItemData item_data 
)
inline

◆ populate_item_tags()

void ModelView::JsonItemConverter::JsonItemConverterImpl::populate_item_tags ( const QJsonObject &  json,
SessionItemTags item_tags 
)
inline

Member Data Documentation

◆ m_context

◆ m_itemdata_converter

◆ m_itemtags_converter

◆ m_self

JsonItemConverter* ModelView::JsonItemConverter::JsonItemConverterImpl::m_self {nullptr}

The documentation for this struct was generated from the following file: