15 #ifndef BORNAGAIN_GUI_COREGUI_MODELS_SESSIONITEM_H
16 #define BORNAGAIN_GUI_COREGUI_MODELS_SESSIONITEM_H
21 #include "Wrap/WinDllMacros.h"
22 #include <QStringList>
30 class QXmlStreamWriter;
31 class QXmlStreamReader;
39 explicit SessionItem(
const QString& modelType =
"");
43 template <
typename T>
bool is()
const;
46 QModelIndex
index()
const;
47 bool hasChildren()
const;
48 int numberOfChildren()
const;
49 QVector<SessionItem*> children()
const;
52 SessionItem* getChildOfType(
const QString& type)
const;
53 QVector<SessionItem*> getChildrenOfType(
const QString&
model_type)
const;
57 bool registerTag(
const QString&
name,
int min = 0,
int max = -1, QStringList modelTypes = {});
58 bool isTag(
const QString&
name)
const;
61 bool acceptsAsDefaultItem(
const QString& item_name)
const;
65 SessionItem* getItem(
const QString& tag =
"",
int row = 0)
const;
66 template <
typename T> T* item(
const QString& tag)
const;
67 QVector<SessionItem*> getItems(
const QString& tag =
"")
const;
75 template <
typename T> T* addProperty(
const QString&
name);
77 QVariant getItemValue(
const QString& tag)
const;
78 void setItemValue(
const QString& tag,
const QVariant& variant);
81 SessionItem* addGroupProperty(
const QString& groupTag,
const QString& groupType);
82 SessionItem* setGroupProperty(
const QString& groupTag,
const QString& modelType)
const;
83 SessionItem* getGroupItem(
const QString& groupName)
const;
84 template <
typename T> T& groupItem(
const QString& groupName)
const;
87 QVariant roleProperty(
int role)
const;
88 bool setRoleProperty(
int role,
const QVariant& value);
89 QVector<int> getRoles()
const;
90 void emitDataChanged(
int role = Qt::DisplayRole);
93 QString modelType()
const;
95 QVariant value()
const;
96 bool setValue(QVariant value);
98 QString defaultTag()
const;
99 void setDefaultTag(
const QString& tag);
101 QString displayName()
const;
102 void setDisplayName(
const QString& display_name);
104 QString itemName()
const;
105 void setItemName(
const QString&
name);
107 void setVisible(
bool enabled);
108 void setEnabled(
bool enabled);
109 void setEditable(
bool enabled);
110 bool isVisible()
const;
111 bool isEnabled()
const;
112 bool isEditable()
const;
117 int decimals()
const;
120 QString toolTip()
const;
123 QString editorType()
const;
124 SessionItem& setEditorType(
const QString& editorType);
128 virtual QStringList translateList(
const QStringList& list)
const;
131 virtual QByteArray serializeBinaryData()
const;
132 virtual void deserializeBinaryData(
const QByteArray&
data);
139 void changeFlags(
bool enabled,
int flag);
140 int getCopyNumberOfChild(
const SessionItem* item)
const;
153 T* t =
dynamic_cast<T*
>(
getItem(tag));
160 auto property =
new T;
162 registerTag(tagname, 1, 1, QStringList() << property->modelType());
163 bool success =
insertItem(0, property, tagname);
177 return dynamic_cast<const T*
>(
this) !=
nullptr;
Defines the macro ASSERT.
#define ASSERT(condition)
Defines class ModelMapper.
Defines class RealLimits.
Limits for a real fit parameter.
Handles all data roles for SessionItem.
T & groupItem(const QString &groupName) const
SessionItem * addProperty(const QString &name, const QVariant &variant)
Add new property item and register new tag.
bool insertItem(int row, SessionItem *item, const QString &tag="")
Insert item into given tag into given row.
SessionItem * getGroupItem(const QString &groupName) const
Access subitem of group item.
bool registerTag(const QString &name, int min=0, int max=-1, QStringList modelTypes={})
Add new tag to this item with given name, min, max and types.
std::unique_ptr< SessionItemData > m_properties
static const QString P_NAME
QVector< SessionItem * > m_children
void setDisplayName(const QString &display_name)
Set display name.
QVector< IPathTranslator * > m_translators
T * item(const QString &tag) const
std::unique_ptr< SessionItemTags > m_tags
std::unique_ptr< ModelMapper > m_mapper
SessionItem * getItem(const QString &tag="", int row=0) const
Returns item in given row of given tag.
virtual QModelIndex parent(const QModelIndex &child) const
virtual Qt::ItemFlags flags(const QModelIndex &index) const
T * insertItem(SessionItem *parent=nullptr, int row=-1, QString tag="")
virtual QModelIndex index(int row, int column, const QModelIndex &parent) const
virtual QVariant data(const QModelIndex &index, int role) const
QVector< QString > acceptableDefaultItemTypes(const QModelIndex &parent) const
QString const & name(EShape k)