26 #include <QJsonObject>
34 std::unique_ptr<JsonItemDataConverterInterface> createDataConverter(
const ConverterMode& mode)
55 auto create_item = [
this](
const QJsonObject& json) {
return m_self->
from_json(json); };
58 auto update_item = [
this](
const QJsonObject& json,
SessionItem* item) {
85 throw std::runtime_error(
"Item model mismatch");
89 std::make_unique<SessionItemTags>());
96 child->setParent(&item);
124 return item ?
p_impl->item_to_json(*item) : QJsonObject();
132 throw std::runtime_error(
"JsonItemConverterV2::from_json() -> Error. Given json object "
133 "can't represent a SessionItem.");
136 auto result =
p_impl->factory()->createItem(modelType);
138 p_impl->populate_item(json, *result);
Interface class for all factories capable of producing SessionItem's.
Converter between SessionItem and JSON object.
std::unique_ptr< SessionItem > from_json(const QJsonObject &json) const override
Creates item from JSON.
JsonItemConverter(const ConverterContext &context)
QJsonObject to_json(const SessionItem *item) const override
Converts item to JSON.
std::unique_ptr< JsonItemConverterImpl > p_impl
~JsonItemConverter() override
Default converter of SessionItemData to/from json object.
static std::unique_ptr< JsonItemDataConverterInterface > createProjectConverter()
Creates JSON data converter intended for project saving.
Handles data roles for SessionItem.
The main object representing an editable/displayable/serializable entity.
SessionItemTags * itemTags()
Returns pointer to internal collection of tag-registered items (non-const version).
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.
std::vector< SessionItem * > children() const
Returns vector of children formed from all chidlren from all tags.
SessionItemData * itemData()
Returns pointer to item's data container (non-const version).
model_type modelType() const
Returns item's model type.
static identifier_type generate()
const int IDENTIFIER
unique identifier
materialitems.h Collection of materials to populate MaterialModel.
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.
ConverterMode
Flags to define converter behavior on the way from SessionItem to JSON and back.
@ project
selective copying for saving/loading the project (tags and data created by item, updated from JSON)
const ItemFactoryInterface * factory()
JsonItemConverterImpl(JsonItemConverter *parent, const ConverterContext &context)
ConverterContext m_context
std::unique_ptr< JsonItemDataConverterInterface > m_itemdata_converter
JsonItemConverter * m_self
std::unique_ptr< JsonItemTagsConverter > m_itemtags_converter
QJsonObject item_to_json(const SessionItem &item) const
void populate_item_tags(const QJsonObject &json, SessionItemTags &item_tags)
void populate_item_data(const QJsonArray &json, SessionItemData &item_data)
void populate_item(const QJsonObject &json, SessionItem &item)
Provides necessary callbacks to convert SessionItem to JSON and back.
Collection of input paramters for SessionItemConverter.
const ItemFactoryInterface * m_factory