Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsattributeeditorcontainer.h - QgsAttributeEditorElement 3 : : 4 : : --------------------- 5 : : begin : 12.01.2021 6 : : copyright : (C) 2021 by Denis Rouzaud 7 : : email : denis@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 QGSATTRIBUTEEDITORCONTAINER_H 17 : : #define QGSATTRIBUTEEDITORCONTAINER_H 18 : : 19 : : #include "qgis_core.h" 20 : : #include "qgsattributeeditorelement.h" 21 : : 22 : : /** 23 : : * \ingroup core 24 : : * \brief This is a container for attribute editors, used to group them visually in the 25 : : * attribute form if it is set to the drag and drop designer. 26 : : */ 27 : : class CORE_EXPORT QgsAttributeEditorContainer : public QgsAttributeEditorElement 28 : : { 29 : : public: 30 : : 31 : : /** 32 : : * Creates a new attribute editor container 33 : : * 34 : : * \param name The name to show as title 35 : : * \param parent The parent. May be another container. 36 : : * \param backgroundColor The optional background color of the container. 37 : : */ 38 : 78 : QgsAttributeEditorContainer( const QString &name, QgsAttributeEditorElement *parent, const QColor &backgroundColor = QColor() ) 39 : 78 : : QgsAttributeEditorElement( AeTypeContainer, name, parent ) 40 : 78 : , mIsGroupBox( true ) 41 : 78 : , mColumnCount( 1 ) 42 : 78 : , mBackgroundColor( backgroundColor ) 43 : 156 : {} 44 : : 45 : : 46 : : ~QgsAttributeEditorContainer() override; 47 : : 48 : : /** 49 : : * Add a child element to this container. This may be another container, a field or a relation. 50 : : * 51 : : * \param element The element to add as child 52 : : */ 53 : : virtual void addChildElement( QgsAttributeEditorElement *element SIP_TRANSFER ); 54 : : 55 : : /** 56 : : * Determines if this container is rendered as collapsible group box or tab in a tabwidget 57 : : * 58 : : * \param isGroupBox If TRUE, this will be a group box 59 : : */ 60 : 0 : virtual void setIsGroupBox( bool isGroupBox ) { mIsGroupBox = isGroupBox; } 61 : : 62 : : /** 63 : : * Returns if this container is going to be rendered as a group box 64 : : * 65 : : * \returns TRUE if it will be a group box, FALSE if it will be a tab 66 : : */ 67 : 0 : virtual bool isGroupBox() const { return mIsGroupBox; } 68 : : 69 : : /** 70 : : * Gets a list of the children elements of this container 71 : : * 72 : : * \returns A list of elements 73 : : */ 74 : 0 : QList<QgsAttributeEditorElement *> children() const { return mChildren; } 75 : : 76 : : /** 77 : : * Traverses the element tree to find any element of the specified type 78 : : * 79 : : * \param type The type which should be searched 80 : : * 81 : : * \returns A list of elements of the type which has been searched for 82 : : */ 83 : : virtual QList<QgsAttributeEditorElement *> findElements( AttributeEditorType type ) const; 84 : : 85 : : /** 86 : : * Clear all children from this container. 87 : : */ 88 : : void clear(); 89 : : 90 : : /** 91 : : * Change the name of this container 92 : : */ 93 : : void setName( const QString &name ); 94 : : 95 : : /** 96 : : * Gets the number of columns in this group 97 : : */ 98 : : int columnCount() const; 99 : : 100 : : /** 101 : : * Set the number of columns in this group 102 : : */ 103 : : void setColumnCount( int columnCount ); 104 : : 105 : : /** 106 : : * Creates a deep copy of this element. To be implemented by subclasses. 107 : : * 108 : : * \since QGIS 3.0 109 : : */ 110 : : QgsAttributeEditorElement *clone( QgsAttributeEditorElement *parent ) const override SIP_FACTORY; 111 : : 112 : : /** 113 : : * The visibility expression is used in the attribute form to 114 : : * show or hide this container based on an expression incorporating 115 : : * the field value controlled by editor widgets. 116 : : * 117 : : * \since QGIS 3.0 118 : : */ 119 : : QgsOptionalExpression visibilityExpression() const; 120 : : 121 : : /** 122 : : * The visibility expression is used in the attribute form to 123 : : * show or hide this container based on an expression incorporating 124 : : * the field value controlled by editor widgets. 125 : : * 126 : : * \since QGIS 3.0 127 : : */ 128 : : void setVisibilityExpression( const QgsOptionalExpression &visibilityExpression ); 129 : : 130 : : /** 131 : : * \brief backgroundColor 132 : : * \return background color of the container 133 : : * \since QGIS 3.8 134 : : */ 135 : : QColor backgroundColor() const; 136 : : 137 : : /** 138 : : * Sets the background color to \a backgroundColor 139 : : */ 140 : : void setBackgroundColor( const QColor &backgroundColor ); 141 : : 142 : : private: 143 : : void saveConfiguration( QDomElement &elem, QDomDocument &doc ) const override; 144 : : void loadConfiguration( const QDomElement &element, const QString &layerId, const QgsReadWriteContext &context, const QgsFields &fields ) override; 145 : : QString typeIdentifier() const override; 146 : : 147 : : bool mIsGroupBox; 148 : : QList<QgsAttributeEditorElement *> mChildren; 149 : : int mColumnCount; 150 : : QgsOptionalExpression mVisibilityExpression; 151 : : QColor mBackgroundColor; 152 : : }; 153 : : 154 : : 155 : : #endif // QGSATTRIBUTEEDITORCONTAINER_H