8#include <QMetaProperty>
10#include <yaml-cpp/yaml.h>
12#include "errorstack.hh"
22 if (QMetaType::UnknownType ==
prop.typeId())
25 if (! (QMetaType::PointerToQObject & type.flags()))
27 return type.metaObject()->inherits(&T::staticMetaObject);
131 virtual void clear();
139 template <
class Object>
145 template <
class Object>
151 template <
class Object>
199 Q_CLASSINFO(
"IdPrefix",
"obj")
271 virtual int count()
const;
275 virtual void clear();
278 virtual const Config *config()
const;
280 virtual void findItemsOfTypes(
const QStringList &typeNames, QSet<ConfigItem*> &items)
const;
282 virtual QList<ConfigObject *> findItemsByName(
const QString name)
const;
289 virtual int add(
ConfigObject *obj,
int row=-1,
bool unique=
true);
291 virtual int replace(
ConfigObject *obj,
int row,
bool unique=
true);
298 virtual bool moveUp(
int idx);
300 virtual bool moveUp(
int first,
int last);
302 virtual bool moveDown(
int idx);
304 virtual bool moveDown(
int first,
int last);
308 virtual bool move(
int source,
int count,
int destination);
311 const QList<QMetaObject> &elementTypes()
const;
313 QStringList classNames()
const;
327 void onElementDeleted(QObject *obj);
349 ConfigObjectList(
const std::initializer_list<QMetaObject> &elementTypes, QObject *parent=
nullptr);
352 int add(
ConfigObject *obj,
int row=-1,
bool unique=
true);
390 ConfigObjectRefList(
const std::initializer_list<QMetaObject> &elementTypes, QObject *parent=
nullptr);
Generic list class for config objects.
Definition configobject.hh:251
QVector< ConfigObject * > _items
Holds the list items.
Definition configobject.hh:333
void elementAdded(int idx)
Gets emitted if an element was added to the list.
virtual YAML::Node serialize(const ConfigItem::Context &context, const ErrorStack &err=ErrorStack())=0
Recursively serializes the configuration to YAML nodes.
QList< QMetaObject > _elementTypes
Holds the static QMetaObject of the element type.
Definition configobject.hh:331
void elementRemoved(int idx)
Gets emitted if one of the lists elements gets deleted.
virtual bool label(ConfigItem::Context &context, const ErrorStack &err=ErrorStack())=0
Recursively labels the config object.
void elementModified(int idx)
Gets emitted if one of the lists elements gets modified.
Base class of all device/vendor specific configuration extensions.
Definition configobject.hh:239
Parse context for config objects.
Definition configobject.hh:43
static QHash< QString, QList< QPair< QString, QVariant > > > _tags
Set of tag-value pairs for all properties.
Definition configobject.hh:87
static void setTag(const QString &className, const QString &property, const QString &tag, QVariant value)
Associates the given object with the tag for the property of the given class.
Definition configobject.cc:136
static bool tagIsSet(const QString &className, const QString &property, const QString &tag)
Returns true if the property of the class has the specified tag associated.
Definition configobject.cc:88
static bool hasTag(const QString &className, const QString &property, QVariant value)
Returns true if the property of the class has the specified object as a tag associated.
Definition configobject.cc:100
QString _version
The version string.
Definition configobject.hh:81
const QString & version() const
Returns the read version string.
Definition configobject.cc:50
virtual bool add(const QString &id, ConfigObject *)
Associates the given object with the given ID.
Definition configobject.cc:79
void setVersion(const QString &ver)
Sets the version string.
Definition configobject.cc:54
QHash< QString, ConfigObject * > _objects
ID->OBJ look-up table.
Definition configobject.hh:83
Context()
Empty constructor.
Definition configobject.cc:39
virtual ~Context()
Destructor.
Definition configobject.cc:45
static QString getTag(const QString &className, const QString &property, QVariant value)
Returns the tag associated with the object for the property of the class.
Definition configobject.cc:124
virtual QString getId(ConfigObject *obj) const
Returns ID of the given object.
Definition configobject.cc:69
virtual ConfigObject * getObj(const QString &id) const
Returns the object for the given ID.
Definition configobject.cc:74
QHash< ConfigObject *, QString > _ids
OBJ->ID look-up table.
Definition configobject.hh:85
static QVariant tagGetValue(const QString &className, const QString &property, const QString &tag)
Returns the object associated with the tag for the property of the class.
Definition configobject.cc:112
virtual bool contains(ConfigObject *obj) const
Returns true, if the context contains the given object.
Definition configobject.cc:59
Base class for all configuration objects (channels, zones, contacts, etc).
Definition configobject.hh:35
virtual bool link(const YAML::Node &node, const Context &ctx, const ErrorStack &err=ErrorStack())
Links the given object to the rest of the codeplug using the given context.
Definition configobject.cc:887
virtual int compare(const ConfigItem &other) const
Compares the items.
Definition configobject.cc:268
bool hasLongDescription() const
Returns true if there is a class info "longDescription" for this instance.
Definition configobject.cc:1080
virtual bool copy(const ConfigItem &other)
Copies the given item into this one.
Definition configobject.cc:165
Object * as()
Casts this object to the given type.
Definition configobject.hh:152
virtual bool populate(YAML::Node &node, const Context &context, const ErrorStack &err=ErrorStack())
Recursively serializes the configuration to YAML nodes.
Definition configobject.cc:433
QString longDescription() const
Returns the long description of this instance if set by a class info.
Definition configobject.cc:1112
virtual ConfigItem * clone() const =0
Clones this item.
bool hasDescription() const
Returns true if there is a class info "description" for this instance.
Definition configobject.cc:1074
virtual void findItemsOfTypes(const QStringList &typeNames, QSet< ConfigItem * > &items) const
Searches the config tree to find all instances of the given type names.
Definition configobject.cc:1051
virtual ConfigItem * allocateChild(QMetaProperty &prop, const YAML::Node &node, const Context &ctx, const ErrorStack &err=ErrorStack())
Allocates an instance for the given property on the given YAML node.
Definition configobject.cc:542
bool is() const
Returns true if this object is of class Object.
Definition configobject.hh:140
virtual bool label(Context &context, const ErrorStack &err=ErrorStack())
Recursively labels the config object.
Definition configobject.cc:381
virtual const Config * config() const
Returns the config, the item belongs to or nullptr if not part of a config.
Definition configobject.cc:1040
virtual YAML::Node serialize(const Context &context, const ErrorStack &err=ErrorStack())
Recursively serializes the configuration to YAML nodes.
Definition configobject.cc:405
virtual void clear()
Clears the config object.
Definition configobject.cc:413
const Object * as() const
Casts this object to the given type.
Definition configobject.hh:146
virtual bool parse(const YAML::Node &node, Context &ctx, const ErrorStack &err=ErrorStack())
Parses the given YAML node, updates the given object and updates the given context (IDs).
Definition configobject.cc:570
QString description() const
Returns the description of this instance if set by a class info.
Definition configobject.cc:1104
void endClear()
Gets emitted after clearing the item.
void modified(ConfigItem *obj)
Gets emitted once the config object is modified.
void beginClear()
Gets emitted before clearing the item.
List class for config objects.
Definition configobject.hh:342
virtual ConfigItem * allocateChild(const YAML::Node &node, ConfigItem::Context &ctx, const ErrorStack &err=ErrorStack())=0
Allocates a member objects for the given YAML node.
List class for config objects.
Definition configobject.hh:383
Base class of all labeled and named objects.
Definition configobject.hh:192
virtual bool populate(YAML::Node &node, const Context &context, const ErrorStack &err=ErrorStack())
Recursively serializes the configuration to YAML nodes.
Definition configobject.cc:1212
bool parse(const YAML::Node &node, Context &ctx, const ErrorStack &err=ErrorStack())
Parses the given YAML node, updates the given object and updates the given context (IDs).
Definition configobject.cc:1194
bool label(Context &context, const ErrorStack &err=ErrorStack())
Recursively labels the config object.
Definition configobject.cc:1172
virtual void setName(const QString &name)
Sets the name of the object.
Definition configobject.cc:1159
QString _name
Holds the name of the object.
Definition configobject.hh:231
QString name
The name of the object.
Definition configobject.hh:196
QString idPrefix() const
Returns the ID prefix for this object.
Definition configobject.cc:1167
static QString findIdPrefix(const QMetaObject *meta)
Helper to find the IdPrefix class info in the class hierarchy.
Definition configobject.cc:1219
The config class, representing the codeplug configuration.
Definition config.hh:70
Implements a stack of error messages to provide a pretty formatted error traceback.
Definition errorstack.hh:43