QGIS API Documentation 3.28.0-Firenze (ed3ad0430f)
qgspropertycollection.h
Go to the documentation of this file.
1/***************************************************************************
2 qgspropertycollection.h
3 -----------------------
4 Date : January 2017
5 Copyright : (C) 2017 by Nyall Dawson
6 Email : nyall dot dawson at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15#ifndef QGSPROPERTYCOLLECTION_H
16#define QGSPROPERTYCOLLECTION_H
17
18#include "qgis_core.h"
19#include "qgis_sip.h"
21#include "qgsproperty.h"
22
23#include <QString>
24#include <QVariant>
25#include <QColor>
26#include <QDateTime>
27
28class QDomElement;
29class QDomDocument;
30
32typedef QMap< int, QgsPropertyDefinition > QgsPropertiesDefinition;
33
42{
43
44#ifdef SIP_RUN
46 if ( dynamic_cast<QgsPropertyCollection *>( sipCpp ) )
47 sipType = sipType_QgsPropertyCollection;
48 else if ( dynamic_cast<QgsPropertyCollectionStack *>( sipCpp ) )
49 sipType = sipType_QgsPropertyCollectionStack;
50 else
51 sipType = sipType_QgsAbstractPropertyCollection;
53#endif
54
55 public:
56
61 QgsAbstractPropertyCollection( const QString &name = QString() );
62
63 virtual ~QgsAbstractPropertyCollection() = default;
64
69 QString name() const { return mName; }
70
75 void setName( const QString &name ) { mName = name; }
76
80 virtual QSet<int> propertyKeys() const = 0;
81
85 virtual void clear() = 0;
86
93 virtual bool hasProperty( int key ) const = 0;
94
102 virtual QgsProperty property( int key ) const = 0;
103
120 virtual QVariant value( int key, const QgsExpressionContext &context, const QVariant &defaultValue = QVariant() ) const = 0;
121
138 QDateTime valueAsDateTime( int key, const QgsExpressionContext &context, const QDateTime &defaultDateTime = QDateTime(), bool *ok SIP_OUT = nullptr ) const;
139
155 QString valueAsString( int key, const QgsExpressionContext &context, const QString &defaultString = QString(), bool *ok SIP_OUT = nullptr ) const;
156
172 QColor valueAsColor( int key, const QgsExpressionContext &context, const QColor &defaultColor = QColor(), bool *ok SIP_OUT = nullptr ) const;
173
189 double valueAsDouble( int key, const QgsExpressionContext &context, double defaultValue = 0.0, bool *ok SIP_OUT = nullptr ) const;
190
206 int valueAsInt( int key, const QgsExpressionContext &context, int defaultValue = 0, bool *ok SIP_OUT = nullptr ) const;
207
223 bool valueAsBool( int key, const QgsExpressionContext &context, bool defaultValue = false, bool *ok SIP_OUT = nullptr ) const;
224
230 virtual bool prepare( const QgsExpressionContext &context = QgsExpressionContext() ) const = 0;
231
239 virtual QSet< QString > referencedFields( const QgsExpressionContext &context = QgsExpressionContext(), bool ignoreContext = false ) const = 0;
240
246 virtual bool isActive( int key ) const = 0;
247
253 virtual bool hasActiveProperties() const = 0;
254
260 virtual bool hasDynamicProperties() const = 0;
261
268 virtual bool writeXml( QDomElement &collectionElem, const QgsPropertiesDefinition &definitions ) const;
269
276 virtual bool readXml( const QDomElement &collectionElem, const QgsPropertiesDefinition &definitions );
277
284 virtual QVariant toVariant( const QgsPropertiesDefinition &definitions ) const = 0;
285
292 virtual bool loadVariant( const QVariant &configuration, const QgsPropertiesDefinition &definitions ) = 0;
293
294 private:
295
296 QString mName;
297};
298
319{
320 public:
321
326 QgsPropertyCollection( const QString &name = QString() );
327
332
333 QgsPropertyCollection &operator=( const QgsPropertyCollection &other );
334
335 bool operator==( const QgsPropertyCollection &other ) const;
336 bool operator!=( const QgsPropertyCollection &other ) const;
337
341 int count() const;
342
343 QSet<int> propertyKeys() const override;
344 void clear() override;
345 bool hasProperty( int key ) const override;
346 QgsProperty property( int key ) const override SIP_SKIP;
347
355 virtual QgsProperty &property( int key );
356
357 QVariant value( int key, const QgsExpressionContext &context, const QVariant &defaultValue = QVariant() ) const override;
358 bool prepare( const QgsExpressionContext &context = QgsExpressionContext() ) const override;
359 QSet< QString > referencedFields( const QgsExpressionContext &context = QgsExpressionContext(), bool ignoreContext = false ) const override;
360 bool isActive( int key ) const override;
361 bool hasActiveProperties() const override;
362 bool hasDynamicProperties() const override;
363
364 QVariant toVariant( const QgsPropertiesDefinition &definitions ) const override;
365 bool loadVariant( const QVariant &configuration, const QgsPropertiesDefinition &definitions ) override;
366
375 void setProperty( int key, const QgsProperty &property );
376
384 void setProperty( int key, const QVariant &value );
385
386 private:
387
388 QHash<int, QgsProperty> mProperties;
389
390 mutable bool mDirty = false;
391 mutable bool mHasActiveProperties = false;
392 mutable bool mHasDynamicProperties = false;
393 mutable int mCount = 0;
394
396 void rescan() const;
397};
398
399
409{
410 public:
411
416
418
421
423
427 int count() const;
428
432 void clear() override;
433
439 void appendCollection( QgsPropertyCollection *collection SIP_TRANSFER );
440
446 QgsPropertyCollection *at( int index );
447
454 const QgsPropertyCollection *at( int index ) const SIP_SKIP;
455
461 QgsPropertyCollection *collection( const QString &name );
462
469 bool hasActiveProperties() const override;
470
476 bool hasDynamicProperties() const override;
477
484 bool isActive( int key ) const override;
485
493 QgsProperty property( int key ) const override;
494
504 QVariant value( int key, const QgsExpressionContext &context, const QVariant &defaultValue = QVariant() ) const override;
505
513 QSet< QString > referencedFields( const QgsExpressionContext &context = QgsExpressionContext(), bool ignoreContext = false ) const override;
514 bool prepare( const QgsExpressionContext &context = QgsExpressionContext() ) const override;
515
516 QSet<int> propertyKeys() const override;
517 bool hasProperty( int key ) const override;
518
519 QVariant toVariant( const QgsPropertiesDefinition &definitions ) const override;
520
521 bool loadVariant( const QVariant &collection, const QgsPropertiesDefinition &definitions ) override;
522
523 private:
524
525 QList< QgsPropertyCollection * > mStack;
526
527};
528
529#endif // QGSPROPERTYCOLLECTION_H
Abstract base class for QgsPropertyCollection like objects.
virtual QVariant value(int key, const QgsExpressionContext &context, const QVariant &defaultValue=QVariant()) const =0
Returns the calculated value of the property with the specified key from within the collection.
void setName(const QString &name)
Sets the descriptive name for the property collection.
virtual bool hasProperty(int key) const =0
Returns true if the collection contains a property with the specified key.
virtual bool isActive(int key) const =0
Returns true if the collection contains an active property with the specified key.
virtual QgsProperty property(int key) const =0
Returns a matching property from the collection, if one exists.
virtual QSet< int > propertyKeys() const =0
Returns a list of property keys contained within the collection.
virtual QSet< QString > referencedFields(const QgsExpressionContext &context=QgsExpressionContext(), bool ignoreContext=false) const =0
Returns the set of any fields referenced by the active properties from the collection.
virtual void clear()=0
Removes all properties from the collection.
virtual bool prepare(const QgsExpressionContext &context=QgsExpressionContext()) const =0
Prepares the collection against a specified expression context.
virtual bool loadVariant(const QVariant &configuration, const QgsPropertiesDefinition &definitions)=0
Loads this property collection from a QVariantMap, wrapped in a QVariant.
virtual bool hasActiveProperties() const =0
Returns true if the collection has any active properties, or false if all properties within the colle...
QString name() const
Returns the descriptive name of the property collection.
virtual bool hasDynamicProperties() const =0
Returns true if the collection has any active, non-static properties, or false if either all non-stat...
virtual ~QgsAbstractPropertyCollection()=default
virtual QVariant toVariant(const QgsPropertiesDefinition &definitions) const =0
Saves this property collection to a QVariantMap, wrapped in a QVariant.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
An ordered stack of QgsPropertyCollection containers, where collections added later to the stack will...
QgsPropertyCollectionStack()=default
Constructor for QgsPropertyCollectionStack.
A grouped map of multiple QgsProperty objects, each referenced by a integer key value.
A store for object properties.
Definition: qgsproperty.h:230
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
Definition: qgis_sip.h:186
#define SIP_SKIP
Definition: qgis_sip.h:126
#define SIP_TRANSFER
Definition: qgis_sip.h:36
#define SIP_OUT
Definition: qgis_sip.h:58
#define SIP_END
Definition: qgis_sip.h:203
bool operator==(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)
bool operator!=(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)
QMap< int, QgsPropertyDefinition > QgsPropertiesDefinition
Definition of available properties.