Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgscheckboxfieldformatter.cpp - QgsCheckBoxFieldFormatter 3 : : 4 : : --------------------- 5 : : begin : 23.09.2019 6 : : copyright : (C) 2019 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 <QObject> 18 : : 19 : : #include "qgscheckboxfieldformatter.h" 20 : : #include "qgsvectorlayer.h" 21 : : #include "qgsapplication.h" 22 : : 23 : : 24 : 5 : QString QgsCheckBoxFieldFormatter::id() const 25 : : { 26 : 10 : return QStringLiteral( "CheckBox" ); 27 : : } 28 : : 29 : 0 : QString QgsCheckBoxFieldFormatter::representValue( QgsVectorLayer *layer, int fieldIndex, const QVariantMap &config, const QVariant &cache, const QVariant &value ) const 30 : : { 31 : 0 : Q_UNUSED( cache ) 32 : : 33 : : /* 34 : : This follows this logic: 35 : : 36 : : if field type is bool: 37 : : NULL => nullRepresentation 38 : : true => tr("true") 39 : : false => tr("false") 40 : : else 41 : : if cannot convert to string (like json integer list) => (invalid) 42 : : if == checkedstate => tr("true") 43 : : if == uncheckedstate => tr("false") 44 : : else (value.toString) 45 : : */ 46 : : 47 : 0 : bool isNull = value.isNull(); 48 : 0 : bool boolValue = false; 49 : 0 : QString textValue = QgsApplication::nullRepresentation(); 50 : : 51 : 0 : const QVariant::Type fieldType = layer->fields().at( fieldIndex ).type(); 52 : 0 : if ( fieldType == QVariant::Bool ) 53 : : { 54 : 0 : boolValue = value.toBool(); 55 : 0 : textValue = boolValue ? QObject::tr( "true" ) : QObject::tr( "false" ); 56 : 0 : } 57 : : else 58 : : { 59 : 0 : if ( !value.canConvert<QString>() ) 60 : : { 61 : 0 : isNull = true; 62 : 0 : textValue = QObject::tr( "(invalid)" ); 63 : 0 : } 64 : : else 65 : : { 66 : 0 : textValue = value.toString(); 67 : 0 : if ( config.contains( QStringLiteral( "CheckedState" ) ) && textValue == config[ QStringLiteral( "CheckedState" ) ].toString() ) 68 : : { 69 : 0 : boolValue = true; 70 : 0 : } 71 : 0 : else if ( config.contains( QStringLiteral( "UncheckedState" ) ) && textValue == config[ QStringLiteral( "UncheckedState" ) ].toString() ) 72 : : { 73 : 0 : boolValue = false; 74 : 0 : } 75 : : else 76 : : { 77 : 0 : isNull = true; 78 : 0 : textValue = QStringLiteral( "(%1)" ).arg( textValue ); 79 : : } 80 : : } 81 : : } 82 : : 83 : 0 : if ( isNull ) 84 : : { 85 : 0 : return textValue; 86 : : } 87 : : 88 : 0 : const TextDisplayMethod displayMethod = static_cast< TextDisplayMethod >( config.value( QStringLiteral( "TextDisplayMethod" ), QStringLiteral( "0" ) ).toInt() ); 89 : 0 : switch ( displayMethod ) 90 : : { 91 : : case QgsCheckBoxFieldFormatter::ShowTrueFalse: 92 : 0 : if ( boolValue ) 93 : 0 : return QObject::tr( "true" ); 94 : : else 95 : 0 : return QObject::tr( "false" ); 96 : : 97 : : case QgsCheckBoxFieldFormatter::ShowStoredValues: 98 : 0 : return textValue; 99 : : } 100 : 0 : return QString(); 101 : 0 : }