Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsattributeeditorelement.h - QgsAttributeEditorElement 3 : : 4 : : --------------------- 5 : : begin : 18.8.2016 6 : : copyright : (C) 2016 by Matthias Kuhn 7 : : email : matthias@opengis.ch 8 : : *************************************************************************** 9 : : * * 10 : : * This program is free software; you can redistribute it and/or modify * 11 : : * it under the terms of the GNU General Public License as published by * 12 : : * the Free Software Foundation; either version 2 of the License, or * 13 : : * (at your option) any later version. * 14 : : * * 15 : : ***************************************************************************/ 16 : : #ifndef QGSATTRIBUTEEDITORELEMENT_H 17 : : #define QGSATTRIBUTEEDITORELEMENT_H 18 : : 19 : : #include "qgis_core.h" 20 : : #include "qgsrelation.h" 21 : : #include "qgsoptionalexpression.h" 22 : : #include "qgspropertycollection.h" 23 : : #include <QColor> 24 : : 25 : : /** 26 : : * \ingroup core 27 : : * \brief This is an abstract base class for any elements of a drag and drop form. 28 : : * 29 : : * This can either be a container which will be represented on the screen 30 : : * as a tab widget or a collapsible group box. Or it can be a field which will 31 : : * then be represented based on the QgsEditorWidget type and configuration. 32 : : * Or it can be a relation and embed the form of several children of another 33 : : * layer. 34 : : */ 35 : : 36 : : class CORE_EXPORT QgsAttributeEditorElement SIP_ABSTRACT 37 : : { 38 : : 39 : : #ifdef SIP_RUN 40 : : SIP_CONVERT_TO_SUBCLASS_CODE 41 : : switch ( sipCpp->type() ) 42 : : { 43 : : case QgsAttributeEditorElement::AeTypeContainer: 44 : : sipType = sipType_QgsAttributeEditorContainer; 45 : : break; 46 : : case QgsAttributeEditorElement::AeTypeField: 47 : : sipType = sipType_QgsAttributeEditorField; 48 : : break; 49 : : case QgsAttributeEditorElement::AeTypeRelation: 50 : : sipType = sipType_QgsAttributeEditorRelation; 51 : : break; 52 : : default: 53 : : sipType = nullptr; 54 : : break; 55 : : } 56 : : SIP_END 57 : : #endif 58 : : public: 59 : : enum AttributeEditorType 60 : : { 61 : : AeTypeContainer, //!< A container 62 : : AeTypeField, //!< A field 63 : : AeTypeRelation, //!< A relation 64 : : AeTypeInvalid, //!< Invalid 65 : : AeTypeQmlElement, //!< A QML element 66 : : AeTypeHtmlElement //!< A HTML element 67 : : }; 68 : : 69 : : /** 70 : : * Constructor 71 : : * 72 : : * \param type The type of the new element. 73 : : * \param name 74 : : * \param parent 75 : : */ 76 : 162 : QgsAttributeEditorElement( AttributeEditorType type, const QString &name, QgsAttributeEditorElement *parent = nullptr ) 77 : 162 : : mType( type ) 78 : 162 : , mName( name ) 79 : 162 : , mParent( parent ) 80 : 162 : , mShowLabel( true ) 81 : 324 : {} 82 : : 83 : 142 : virtual ~QgsAttributeEditorElement() = default; 84 : : 85 : : /** 86 : : * Constructs the editor element from the given element 87 : : * 88 : : * \since QGIS 3.18 89 : : */ 90 : : static QgsAttributeEditorElement *create( const QDomElement &element, const QString &layerId, const QgsFields &fields, const QgsReadWriteContext &context, QgsAttributeEditorElement *parent = nullptr ) SIP_FACTORY; 91 : : 92 : : /** 93 : : * Returns the name of this element 94 : : * 95 : : * \returns The name for this element 96 : : */ 97 : 0 : QString name() const { return mName; } 98 : : 99 : : /** 100 : : * The type of this element 101 : : * 102 : : * \returns The type 103 : : */ 104 : 0 : AttributeEditorType type() const { return mType; } 105 : : 106 : : /** 107 : : * Gets the parent of this element. 108 : : * 109 : : * \since QGIS 3.0 110 : : */ 111 : : QgsAttributeEditorElement *parent() const { return mParent; } 112 : : 113 : : /** 114 : : * Gets the XML Dom element to save this element. 115 : : * 116 : : * \param doc The QDomDocument which is used to create new XML elements 117 : : * 118 : : * \returns A DOM element to serialize this element 119 : : */ 120 : : QDomElement toDomElement( QDomDocument &doc ) const; 121 : : 122 : : /** 123 : : * Returns a clone of this element. To be implemented by subclasses. 124 : : * 125 : : * \since QGIS 3.0 126 : : */ 127 : : virtual QgsAttributeEditorElement *clone( QgsAttributeEditorElement *parent ) const = 0 SIP_FACTORY; 128 : : 129 : : /** 130 : : * Controls if this element should be labeled with a title (field, relation or groupname). 131 : : * 132 : : * \since QGIS 2.18 133 : : */ 134 : : bool showLabel() const; 135 : : 136 : : /** 137 : : * Controls if this element should be labeled with a title (field, relation or groupname). 138 : : * \since QGIS 2.18 139 : : */ 140 : : void setShowLabel( bool showLabel ); 141 : : 142 : : protected: 143 : : #ifndef SIP_RUN 144 : : AttributeEditorType mType; 145 : : QString mName; 146 : : QgsAttributeEditorElement *mParent = nullptr; 147 : : bool mShowLabel; 148 : : #endif 149 : : 150 : : private: 151 : : 152 : : /** 153 : : * Should be implemented by subclasses to save type specific configuration. 154 : : * 155 : : * \since QGIS 2.18 156 : : */ 157 : : virtual void saveConfiguration( QDomElement &elem, QDomDocument &doc ) const = 0; 158 : : 159 : : /** 160 : : * Should be implemented by subclasses to read specific configuration 161 : : * \since QGIS 3.18 162 : : */ 163 : : virtual void loadConfiguration( const QDomElement &element, const QString &layerId, const QgsReadWriteContext &context, const QgsFields &fields ) = 0; 164 : : 165 : : /** 166 : : * All subclasses need to overwrite this method and return a type specific identifier. 167 : : * Needs to be XML key compatible. 168 : : * 169 : : * \since QGIS 2.18 170 : : */ 171 : : virtual QString typeIdentifier() const = 0; 172 : : 173 : : }; 174 : : 175 : : #endif // QGSATTRIBUTEEDITORELEMENT_H