Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsattributeeditorrelation.cpp - QgsAttributeEditorRelation 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 : : #include "qgsattributeeditorrelation.h" 17 : : #include "qgsrelationmanager.h" 18 : : #include "qgsxmlutils.h" 19 : : 20 : 0 : bool QgsAttributeEditorRelation::init( QgsRelationManager *relationManager ) 21 : : { 22 : 0 : mRelation = relationManager->relation( mRelationId ); 23 : 0 : return mRelation.isValid(); 24 : 0 : } 25 : : 26 : 0 : QgsAttributeEditorElement *QgsAttributeEditorRelation::clone( QgsAttributeEditorElement *parent ) const 27 : : { 28 : 0 : QgsAttributeEditorRelation *element = new QgsAttributeEditorRelation( mRelationId, parent ); 29 : 0 : element->mRelation = mRelation; 30 : 0 : element->mButtons = mButtons; 31 : 0 : element->mForceSuppressFormPopup = mForceSuppressFormPopup; 32 : 0 : element->mNmRelationId = mNmRelationId; 33 : 0 : element->mLabel = mLabel; 34 : 0 : element->mRelationEditorConfig = mRelationEditorConfig; 35 : : 36 : 0 : return element; 37 : 0 : } 38 : : 39 : 0 : void QgsAttributeEditorRelation::saveConfiguration( QDomElement &elem, QDomDocument &doc ) const 40 : : { 41 : 0 : elem.setAttribute( QStringLiteral( "relation" ), mRelation.id() ); 42 : 0 : elem.setAttribute( QStringLiteral( "forceSuppressFormPopup" ), mForceSuppressFormPopup ); 43 : 0 : elem.setAttribute( QStringLiteral( "nmRelationId" ), mNmRelationId.toString() ); 44 : 0 : elem.setAttribute( QStringLiteral( "label" ), mLabel ); 45 : 0 : elem.setAttribute( QStringLiteral( "relationWidgetTypeId" ), mRelationWidgetTypeId ); 46 : : 47 : 0 : QDomElement elemConfig = QgsXmlUtils::writeVariant( mRelationEditorConfig, doc ); 48 : 0 : elemConfig.setTagName( QStringLiteral( "editor_configuration" ) ); 49 : 0 : elem.appendChild( elemConfig ); 50 : 0 : } 51 : : 52 : 0 : void QgsAttributeEditorRelation::loadConfiguration( const QDomElement &element, const QString &layerId, const QgsReadWriteContext &context, const QgsFields &fields ) 53 : : { 54 : 0 : Q_UNUSED( layerId ) 55 : 0 : Q_UNUSED( context ) 56 : 0 : Q_UNUSED( fields ) 57 : : 58 : 0 : QVariantMap config = QgsXmlUtils::readVariant( element.firstChildElement( "editor_configuration" ) ).toMap(); 59 : : 60 : : // load defaults 61 : 0 : if ( config.isEmpty() ) 62 : 0 : config = relationEditorConfiguration(); 63 : : 64 : : // pre QGIS 3.18 compatibility 65 : 0 : if ( ! config.contains( QStringLiteral( "buttons" ) ) ) 66 : : { 67 : 0 : if ( element.hasAttribute( "buttons" ) ) 68 : : { 69 : 0 : QString buttonString = element.attribute( QStringLiteral( "buttons" ), qgsFlagValueToKeys( QgsAttributeEditorRelation::Button::AllButtons ) ); 70 : 0 : config.insert( "buttons", qgsFlagValueToKeys( qgsFlagKeysToValue( buttonString, QgsAttributeEditorRelation::Button::AllButtons ) ) ); 71 : 0 : } 72 : : else 73 : : { 74 : : // pre QGIS 3.16 compatibility 75 : 0 : QgsAttributeEditorRelation::Buttons buttons = QgsAttributeEditorRelation::Button::AllButtons; 76 : 0 : buttons.setFlag( QgsAttributeEditorRelation::Button::Link, element.attribute( QStringLiteral( "showLinkButton" ), QStringLiteral( "1" ) ).toInt() ); 77 : 0 : buttons.setFlag( QgsAttributeEditorRelation::Button::Unlink, element.attribute( QStringLiteral( "showUnlinkButton" ), QStringLiteral( "1" ) ).toInt() ); 78 : 0 : buttons.setFlag( QgsAttributeEditorRelation::Button::SaveChildEdits, element.attribute( QStringLiteral( "showSaveChildEditsButton" ), QStringLiteral( "1" ) ).toInt() ); 79 : 0 : config.insert( "buttons", qgsFlagValueToKeys( buttons ) ); 80 : : } 81 : 0 : } 82 : : 83 : 0 : setRelationEditorConfiguration( config ); 84 : : 85 : 0 : setForceSuppressFormPopup( element.attribute( QStringLiteral( "forceSuppressFormPopup" ), 0 ).toInt() ); 86 : : 87 : 0 : if ( element.hasAttribute( QStringLiteral( "nmRelationId" ) ) ) 88 : : { 89 : 0 : setNmRelationId( element.attribute( QStringLiteral( "nmRelationId" ) ) ); 90 : 0 : } 91 : : 92 : 0 : if ( element.hasAttribute( "label" ) ) 93 : : { 94 : 0 : QString label = element.attribute( QStringLiteral( "label" ) ); 95 : 0 : setLabel( label ); 96 : 0 : } 97 : 0 : if ( element.hasAttribute( "relationWidgetTypeId" ) ) 98 : : { 99 : 0 : QString relationWidgetTypeId = element.attribute( QStringLiteral( "relationWidgetTypeId" ) ); 100 : 0 : setRelationWidgetTypeId( relationWidgetTypeId ); 101 : 0 : } 102 : 0 : } 103 : : 104 : 0 : QString QgsAttributeEditorRelation::typeIdentifier() const 105 : : { 106 : 0 : return QStringLiteral( "attributeEditorRelation" ); 107 : : } 108 : : 109 : 0 : void QgsAttributeEditorRelation::setForceSuppressFormPopup( bool forceSuppressFormPopup ) 110 : : { 111 : 0 : mForceSuppressFormPopup = forceSuppressFormPopup; 112 : 0 : } 113 : : 114 : 0 : bool QgsAttributeEditorRelation::forceSuppressFormPopup() const 115 : : { 116 : 0 : return mForceSuppressFormPopup; 117 : : } 118 : : 119 : 0 : void QgsAttributeEditorRelation::setNmRelationId( const QVariant &nmRelationId ) 120 : : { 121 : 0 : mNmRelationId = nmRelationId; 122 : 0 : } 123 : : 124 : 0 : QVariant QgsAttributeEditorRelation::nmRelationId() const 125 : : { 126 : 0 : return mNmRelationId; 127 : : } 128 : : 129 : 0 : void QgsAttributeEditorRelation::setLabel( const QString &label ) 130 : : { 131 : 0 : mLabel = label; 132 : 0 : } 133 : : 134 : 0 : QString QgsAttributeEditorRelation::label() const 135 : : { 136 : 0 : return mLabel; 137 : : } 138 : : 139 : 0 : QString QgsAttributeEditorRelation::relationWidgetTypeId() const 140 : : { 141 : 0 : return mRelationWidgetTypeId; 142 : : } 143 : : 144 : 0 : void QgsAttributeEditorRelation::setRelationWidgetTypeId( const QString &relationWidgetTypeId ) 145 : : { 146 : 0 : mRelationWidgetTypeId = relationWidgetTypeId; 147 : 0 : } 148 : : 149 : 0 : QVariantMap QgsAttributeEditorRelation::relationEditorConfiguration() const 150 : : { 151 : 0 : return mRelationEditorConfig; 152 : : } 153 : : 154 : 0 : void QgsAttributeEditorRelation::setRelationEditorConfiguration( const QVariantMap &config ) 155 : : { 156 : 0 : mRelationEditorConfig = config; 157 : 0 : }