Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsattributeeditorcontainer.cpp - QgsAttributeEditorContainer 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 : : 17 : : #include "qgsattributeeditorcontainer.h" 18 : : 19 : : 20 : 124 : QgsAttributeEditorContainer::~QgsAttributeEditorContainer() 21 : 124 : { 22 : 62 : qDeleteAll( mChildren ); 23 : 124 : } 24 : : 25 : 84 : void QgsAttributeEditorContainer::addChildElement( QgsAttributeEditorElement *widget ) 26 : : { 27 : 84 : mChildren.append( widget ); 28 : 84 : } 29 : : 30 : 0 : void QgsAttributeEditorContainer::setName( const QString &name ) 31 : : { 32 : 0 : mName = name; 33 : 0 : } 34 : : 35 : 0 : QgsOptionalExpression QgsAttributeEditorContainer::visibilityExpression() const 36 : : { 37 : 0 : return mVisibilityExpression; 38 : : } 39 : : 40 : 0 : void QgsAttributeEditorContainer::setVisibilityExpression( const QgsOptionalExpression &visibilityExpression ) 41 : : { 42 : 0 : if ( visibilityExpression == mVisibilityExpression ) 43 : 0 : return; 44 : : 45 : 0 : mVisibilityExpression = visibilityExpression; 46 : 0 : } 47 : : 48 : 0 : QColor QgsAttributeEditorContainer::backgroundColor() const 49 : : { 50 : 0 : return mBackgroundColor; 51 : : } 52 : : 53 : 0 : void QgsAttributeEditorContainer::setBackgroundColor( const QColor &backgroundColor ) 54 : : { 55 : 0 : mBackgroundColor = backgroundColor; 56 : 0 : } 57 : : 58 : 0 : QList<QgsAttributeEditorElement *> QgsAttributeEditorContainer::findElements( QgsAttributeEditorElement::AttributeEditorType type ) const 59 : : { 60 : 0 : QList<QgsAttributeEditorElement *> results; 61 : : 62 : 0 : const auto constMChildren = mChildren; 63 : 0 : for ( QgsAttributeEditorElement *elem : constMChildren ) 64 : : { 65 : 0 : if ( elem->type() == type ) 66 : : { 67 : 0 : results.append( elem ); 68 : 0 : } 69 : : 70 : 0 : if ( elem->type() == AeTypeContainer ) 71 : : { 72 : 0 : QgsAttributeEditorContainer *cont = dynamic_cast<QgsAttributeEditorContainer *>( elem ); 73 : 0 : if ( cont ) 74 : 0 : results += cont->findElements( type ); 75 : 0 : } 76 : : } 77 : : 78 : 0 : return results; 79 : 0 : } 80 : : 81 : 64 : void QgsAttributeEditorContainer::clear() 82 : : { 83 : 64 : qDeleteAll( mChildren ); 84 : 64 : mChildren.clear(); 85 : 64 : } 86 : : 87 : 0 : int QgsAttributeEditorContainer::columnCount() const 88 : : { 89 : 0 : return mColumnCount; 90 : : } 91 : : 92 : 0 : void QgsAttributeEditorContainer::setColumnCount( int columnCount ) 93 : : { 94 : 0 : mColumnCount = columnCount; 95 : 0 : } 96 : : 97 : 0 : QgsAttributeEditorElement *QgsAttributeEditorContainer::clone( QgsAttributeEditorElement *parent ) const 98 : : { 99 : 0 : QgsAttributeEditorContainer *element = new QgsAttributeEditorContainer( name(), parent ); 100 : : 101 : 0 : const auto childElements = children(); 102 : : 103 : 0 : for ( QgsAttributeEditorElement *child : childElements ) 104 : : { 105 : 0 : element->addChildElement( child->clone( element ) ); 106 : : } 107 : 0 : element->mIsGroupBox = mIsGroupBox; 108 : 0 : element->mColumnCount = mColumnCount; 109 : 0 : element->mVisibilityExpression = mVisibilityExpression; 110 : : 111 : 0 : return element; 112 : 0 : } 113 : : 114 : 0 : void QgsAttributeEditorContainer::saveConfiguration( QDomElement &elem, QDomDocument &doc ) const 115 : : { 116 : 0 : Q_UNUSED( doc ) 117 : 0 : elem.setAttribute( QStringLiteral( "columnCount" ), mColumnCount ); 118 : 0 : elem.setAttribute( QStringLiteral( "groupBox" ), mIsGroupBox ? 1 : 0 ); 119 : 0 : elem.setAttribute( QStringLiteral( "visibilityExpressionEnabled" ), mVisibilityExpression.enabled() ? 1 : 0 ); 120 : 0 : elem.setAttribute( QStringLiteral( "visibilityExpression" ), mVisibilityExpression->expression() ); 121 : 0 : if ( mBackgroundColor.isValid() ) 122 : 0 : elem.setAttribute( QStringLiteral( "backgroundColor" ), mBackgroundColor.name( ) ); 123 : 0 : const auto constMChildren = mChildren; 124 : 0 : for ( QgsAttributeEditorElement *child : constMChildren ) 125 : : { 126 : 0 : QDomDocument doc = elem.ownerDocument(); 127 : 0 : elem.appendChild( child->toDomElement( doc ) ); 128 : 0 : } 129 : 0 : } 130 : : 131 : 0 : void QgsAttributeEditorContainer::loadConfiguration( const QDomElement &element, const QString &layerId, const QgsReadWriteContext &context, const QgsFields &fields ) 132 : : { 133 : 0 : mBackgroundColor = element.attribute( QStringLiteral( "backgroundColor" ), QString() ); 134 : : bool ok; 135 : 0 : int cc = element.attribute( QStringLiteral( "columnCount" ) ).toInt( &ok ); 136 : 0 : if ( !ok ) 137 : 0 : cc = 0; 138 : 0 : setColumnCount( cc ); 139 : : 140 : 0 : bool isGroupBox = element.attribute( QStringLiteral( "groupBox" ) ).toInt( &ok ); 141 : 0 : if ( ok ) 142 : 0 : setIsGroupBox( isGroupBox ); 143 : : else 144 : 0 : setIsGroupBox( mParent ); 145 : : 146 : 0 : bool visibilityExpressionEnabled = element.attribute( QStringLiteral( "visibilityExpressionEnabled" ) ).toInt( &ok ); 147 : 0 : QgsOptionalExpression visibilityExpression; 148 : 0 : if ( ok ) 149 : : { 150 : 0 : visibilityExpression.setEnabled( visibilityExpressionEnabled ); 151 : 0 : visibilityExpression.setData( QgsExpression( element.attribute( QStringLiteral( "visibilityExpression" ) ) ) ); 152 : 0 : } 153 : 0 : setVisibilityExpression( visibilityExpression ); 154 : : 155 : 0 : QDomNodeList childNodeList = element.childNodes(); 156 : : 157 : 0 : for ( int i = 0; i < childNodeList.size(); i++ ) 158 : : { 159 : 0 : QDomElement childElem = childNodeList.at( i ).toElement(); 160 : : 161 : 0 : QgsAttributeEditorElement *myElem = create( childElem, layerId, fields, context, this ); 162 : 0 : if ( myElem ) 163 : 0 : addChildElement( myElem ); 164 : 0 : } 165 : 0 : } 166 : : 167 : 0 : QString QgsAttributeEditorContainer::typeIdentifier() const 168 : : { 169 : 0 : return QStringLiteral( "attributeEditorContainer" ); 170 : : } 171 : :