Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgstablecell.h 3 : : -------------- 4 : : begin : January 2020 5 : : copyright : (C) 2020 by Nyall Dawson 6 : : email : nyall dot dawson at gmail dot com 7 : : *************************************************************************** 8 : : * * 9 : : * This program is free software; you can redistribute it and/or modify * 10 : : * it under the terms of the GNU General Public License as published by * 11 : : * the Free Software Foundation; either version 2 of the License, or * 12 : : * (at your option) any later version. * 13 : : * * 14 : : ***************************************************************************/ 15 : : 16 : : #include "qgstablecell.h" 17 : : #include "qgsapplication.h" 18 : : #include "qgsnumericformatregistry.h" 19 : : #include "qgsnumericformat.h" 20 : : #include "qgsreadwritecontext.h" 21 : : 22 : 0 : QgsTableCell::QgsTableCell( const QVariant &content ) 23 : 0 : : mContent( content ) 24 : 0 : {} 25 : : 26 : 0 : QgsTableCell::QgsTableCell( const QgsTableCell &other ) 27 : 0 : : mContent( other.mContent ) 28 : 0 : , mBackgroundColor( other.mBackgroundColor ) 29 : 0 : , mForegroundColor( other.mForegroundColor ) 30 : 0 : , mTextFormat( other.mTextFormat ) 31 : 0 : , mFormat( other.mFormat ? other.mFormat->clone() : nullptr ) 32 : 0 : , mHAlign( other.mHAlign ) 33 : 0 : , mVAlign( other.mVAlign ) 34 : 0 : {} 35 : : 36 : 0 : QgsTableCell::~QgsTableCell() = default; 37 : : 38 : 0 : QgsTableCell &QgsTableCell::operator=( const QgsTableCell &other ) 39 : : { 40 : 0 : mContent = other.mContent; 41 : 0 : mBackgroundColor = other.mBackgroundColor; 42 : 0 : mForegroundColor = other.mForegroundColor; 43 : 0 : mTextFormat = other.mTextFormat; 44 : 0 : mFormat.reset( other.mFormat ? other.mFormat->clone() : nullptr ); 45 : 0 : mHAlign = other.mHAlign; 46 : 0 : mVAlign = other.mVAlign; 47 : 0 : return *this; 48 : : } 49 : : 50 : 0 : const QgsNumericFormat *QgsTableCell::numericFormat() const 51 : : { 52 : 0 : return mFormat.get(); 53 : : } 54 : : 55 : 0 : void QgsTableCell::setNumericFormat( QgsNumericFormat *format ) 56 : : { 57 : 0 : mFormat.reset( format ); 58 : 0 : } 59 : : 60 : 0 : QVariantMap QgsTableCell::properties( const QgsReadWriteContext &context ) const 61 : : { 62 : 0 : QVariantMap res; 63 : 0 : res.insert( QStringLiteral( "content" ), mContent ); 64 : 0 : res.insert( QStringLiteral( "background" ), mBackgroundColor ); 65 : 0 : res.insert( QStringLiteral( "foreground" ), mForegroundColor ); 66 : 0 : if ( mFormat ) 67 : : { 68 : 0 : res.insert( QStringLiteral( "format_type" ), mFormat->id() ); 69 : 0 : res.insert( QStringLiteral( "format" ), mFormat->configuration( context ) ); 70 : 0 : } 71 : : 72 : 0 : if ( mTextFormat.isValid() ) 73 : : { 74 : 0 : QDomDocument textDoc; 75 : 0 : QDomElement textElem = mTextFormat.writeXml( textDoc, context ); 76 : 0 : textDoc.appendChild( textElem ); 77 : 0 : res.insert( QStringLiteral( "text_format" ), textDoc.toString() ); 78 : 0 : } 79 : : 80 : 0 : res.insert( QStringLiteral( "halign" ), static_cast< int >( mHAlign ) ); 81 : 0 : res.insert( QStringLiteral( "valign" ), static_cast< int >( mVAlign ) ); 82 : : 83 : 0 : return res; 84 : 0 : } 85 : : 86 : 0 : void QgsTableCell::setProperties( const QVariantMap &properties, const QgsReadWriteContext &context ) 87 : : { 88 : 0 : mContent = properties.value( QStringLiteral( "content" ) ); 89 : 0 : mBackgroundColor = properties.value( QStringLiteral( "background" ) ).value< QColor >(); 90 : 0 : mForegroundColor = properties.value( QStringLiteral( "foreground" ) ).value< QColor >(); 91 : : 92 : 0 : QDomDocument doc; 93 : 0 : QDomElement elem; 94 : 0 : const QString textXml = properties.value( QStringLiteral( "text_format" ) ).toString(); 95 : 0 : if ( !textXml.isEmpty() ) 96 : : { 97 : 0 : doc.setContent( textXml ); 98 : 0 : elem = doc.documentElement(); 99 : 0 : mTextFormat.readXml( elem, context ); 100 : 0 : } 101 : : else 102 : : { 103 : 0 : mTextFormat = QgsTextFormat(); 104 : : } 105 : : 106 : 0 : if ( properties.contains( QStringLiteral( "format_type" ) ) ) 107 : : { 108 : : 109 : 0 : mFormat.reset( QgsApplication::numericFormatRegistry()->create( properties.value( QStringLiteral( "format_type" ) ).toString(), 110 : 0 : properties.value( QStringLiteral( "format" ) ).toMap(), 111 : 0 : context ) ); 112 : 0 : } 113 : : else 114 : : { 115 : 0 : mFormat.reset(); 116 : : } 117 : : 118 : 0 : mHAlign = static_cast< Qt::Alignment >( properties.value( QStringLiteral( "halign" ), Qt::AlignLeft ).toInt() ); 119 : 0 : mVAlign = static_cast< Qt::Alignment >( properties.value( QStringLiteral( "valign" ), Qt::AlignVCenter ).toInt() ); 120 : 0 : } 121 : : 122 : 0 : Qt::Alignment QgsTableCell::horizontalAlignment() const 123 : : { 124 : 0 : return mHAlign; 125 : : } 126 : : 127 : 0 : void QgsTableCell::setHorizontalAlignment( Qt::Alignment alignment ) 128 : : { 129 : 0 : mHAlign = alignment; 130 : 0 : } 131 : : 132 : 0 : Qt::Alignment QgsTableCell::verticalAlignment() const 133 : : { 134 : 0 : return mVAlign; 135 : : } 136 : : 137 : 0 : void QgsTableCell::setVerticalAlignment( Qt::Alignment alignment ) 138 : : { 139 : 0 : mVAlign = alignment; 140 : 0 : }