Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsfieldconstraints.h 3 : : --------------------- 4 : : Date : November 2016 5 : : Copyright : (C) 2016 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 : : 16 : : #ifndef QGSFIELDCONSTRAINTS_H 17 : : #define QGSFIELDCONSTRAINTS_H 18 : : 19 : : #include <QString> 20 : : #include <QHash> 21 : : #include <QObject> 22 : : 23 : : #include "qgis_core.h" 24 : : 25 : : /** 26 : : * \class QgsFieldConstraints 27 : : * \ingroup core 28 : : * \brief Stores information about constraints which may be present on a field. 29 : : * \since QGIS 3.0 30 : : */ 31 : : 32 : 240 : class CORE_EXPORT QgsFieldConstraints 33 : : { 34 : : Q_GADGET 35 : : 36 : : Q_PROPERTY( Constraints constraints READ constraints ) 37 : : 38 : : public: 39 : : 40 : : /** 41 : : * Constraints which may be present on a field. 42 : : */ 43 : : enum Constraint 44 : : { 45 : : ConstraintNotNull = 1, //!< Field may not be null 46 : : ConstraintUnique = 1 << 1, //!< Field must have a unique value 47 : : ConstraintExpression = 1 << 2, //!< Field has an expression constraint set. See constraintExpression(). 48 : : }; 49 : : Q_DECLARE_FLAGS( Constraints, Constraint ) 50 : : 51 : : /** 52 : : * Origin of constraints. 53 : : */ 54 : : enum ConstraintOrigin 55 : : { 56 : : ConstraintOriginNotSet = 0, //!< Constraint is not set 57 : : ConstraintOriginProvider, //!< Constraint was set at data provider 58 : : ConstraintOriginLayer, //!< Constraint was set by layer 59 : : }; 60 : : 61 : : /** 62 : : * Strength of constraints. 63 : : */ 64 : : enum ConstraintStrength 65 : : { 66 : : ConstraintStrengthNotSet = 0, //!< Constraint is not set 67 : : ConstraintStrengthHard, //!< Constraint must be honored before feature can be accepted 68 : : ConstraintStrengthSoft, //!< User is warned if constraint is violated but feature can still be accepted 69 : : }; 70 : : 71 : : /** 72 : : * Constructor for QgsFieldConstraints. 73 : : */ 74 : : QgsFieldConstraints(); 75 : : 76 : : /** 77 : : * Returns any constraints which are present for the field. 78 : : * \see setConstraint() 79 : : * \see constraintOrigin() 80 : : */ 81 : 0 : Constraints constraints() const { return mConstraints; } 82 : : 83 : : /** 84 : : * Returns the origin of a field constraint, or ConstraintOriginNotSet if the constraint 85 : : * is not present on this field. 86 : : * \see constraints() 87 : : */ 88 : : ConstraintOrigin constraintOrigin( Constraint constraint ) const; 89 : : 90 : : /** 91 : : * Returns the strength of a field constraint, or ConstraintStrengthNotSet if the constraint 92 : : * is not present on this field. 93 : : * \see constraints() 94 : : * \see setConstraintStrength() 95 : : */ 96 : : ConstraintStrength constraintStrength( Constraint constraint ) const; 97 : : 98 : : /** 99 : : * Sets the strength of a constraint. Constraints default to ConstraintStrengthHard unless 100 : : * explicitly changed. 101 : : * \see constraintStrength() 102 : : */ 103 : : void setConstraintStrength( Constraint constraint, ConstraintStrength strength ); 104 : : 105 : : /** 106 : : * Sets a constraint on the field. 107 : : * \see constraints() 108 : : * \see removeConstraint() 109 : : */ 110 : : void setConstraint( Constraint constraint, ConstraintOrigin origin = ConstraintOriginLayer ); 111 : : 112 : : /** 113 : : * Removes a constraint from the field. 114 : : * \see setConstraint() 115 : : * \see constraints() 116 : : */ 117 : 0 : void removeConstraint( Constraint constraint ) { mConstraints &= ~constraint; } 118 : : 119 : : /** 120 : : * Returns the constraint expression for the field, if set. 121 : : * \see constraints() 122 : : * \see constraintDescription() 123 : : * \see setConstraintExpression() 124 : : */ 125 : : QString constraintExpression() const; 126 : : 127 : : /** 128 : : * Returns the descriptive name for the constraint expression. 129 : : * \see constraints() 130 : : * \see constraintExpression() 131 : : * \see setConstraintExpression() 132 : : */ 133 : 0 : QString constraintDescription() const { return mExpressionConstraintDescription; } 134 : : 135 : : /** 136 : : * Set the constraint expression for the field. An optional descriptive name for the constraint 137 : : * can also be set. Setting an empty expression will clear any existing expression constraint. 138 : : * \see constraintExpression() 139 : : * \see constraintDescription() 140 : : * \see constraints() 141 : : */ 142 : : void setConstraintExpression( const QString &expression, const QString &description = QString() ); 143 : : 144 : : bool operator==( const QgsFieldConstraints &other ) const; 145 : : 146 : : private: 147 : : 148 : : //! Constraints 149 : : Constraints mConstraints; 150 : : 151 : : //! Origin of field constraints 152 : : QHash< Constraint, ConstraintOrigin > mConstraintOrigins; 153 : : 154 : : //! Strength of field constraints 155 : : QHash< Constraint, ConstraintStrength > mConstraintStrengths; 156 : : 157 : : //! Expression constraint 158 : : QString mExpressionConstraint; 159 : : 160 : : //! Expression constraint descriptive name 161 : : QString mExpressionConstraintDescription; 162 : : }; 163 : : 164 : : Q_DECLARE_OPERATORS_FOR_FLAGS( QgsFieldConstraints::Constraints ) 165 : : 166 : : #endif //QGSFIELDCONSTRAINTS_H