Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsmaplayersty.cpp 3 : : -------------------------------------- 4 : : Date : September 2019 5 : : Copyright : (C) 2018 by Denis Rouzaud 6 : : Email : denis@opengis.ch 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 "qgsmaplayerstyle.h" 17 : : #include "qgsmaplayerstylemanager.h" 18 : : #include "qgsreadwritecontext.h" 19 : : #include "qgsmaplayer.h" 20 : : 21 : : 22 : : #include "qgslogger.h" 23 : : 24 : : #include <QDomElement> 25 : : #include <QTextStream> 26 : : 27 : : 28 : 0 : QgsMapLayerStyle::QgsMapLayerStyle( const QString &xmlData ) 29 : 0 : : mXmlData( xmlData ) 30 : : { 31 : 0 : } 32 : : 33 : 0 : bool QgsMapLayerStyle::isValid() const 34 : : { 35 : 0 : return !mXmlData.isEmpty(); 36 : : } 37 : : 38 : 0 : void QgsMapLayerStyle::clear() 39 : : { 40 : 0 : mXmlData.clear(); 41 : 0 : } 42 : : 43 : 0 : QString QgsMapLayerStyle::xmlData() const 44 : : { 45 : 0 : return mXmlData; 46 : : } 47 : : 48 : 0 : void QgsMapLayerStyle::readFromLayer( QgsMapLayer *layer ) 49 : : { 50 : 0 : QString errorMsg; 51 : 0 : QDomDocument doc; 52 : 0 : QgsReadWriteContext context; 53 : 0 : layer->exportNamedStyle( doc, errorMsg, context ); 54 : 0 : if ( !errorMsg.isEmpty() ) 55 : : { 56 : 0 : QgsDebugMsg( "Failed to export style from layer: " + errorMsg ); 57 : 0 : return; 58 : : } 59 : : 60 : 0 : mXmlData.clear(); 61 : 0 : QTextStream stream( &mXmlData ); 62 : 0 : doc.documentElement().save( stream, 0 ); 63 : 0 : } 64 : : 65 : 0 : void QgsMapLayerStyle::writeToLayer( QgsMapLayer *layer ) const 66 : : { 67 : 0 : if ( !isValid() ) 68 : : { 69 : 0 : return; 70 : : } 71 : : 72 : 0 : QDomDocument doc( QStringLiteral( "qgis" ) ); 73 : 0 : if ( !doc.setContent( mXmlData ) ) 74 : : { 75 : 0 : QgsDebugMsg( QStringLiteral( "Failed to parse XML of previously stored XML data - this should not happen!" ) ); 76 : 0 : return; 77 : : } 78 : : 79 : 0 : QString errorMsg; 80 : 0 : if ( !layer->importNamedStyle( doc, errorMsg ) ) 81 : : { 82 : 0 : QgsDebugMsg( "Failed to import style to layer: " + errorMsg ); 83 : 0 : } 84 : 0 : } 85 : : 86 : 0 : void QgsMapLayerStyle::readXml( const QDomElement &styleElement ) 87 : : { 88 : 0 : mXmlData.clear(); 89 : 0 : QTextStream stream( &mXmlData ); 90 : 0 : styleElement.firstChildElement().save( stream, 0 ); 91 : 0 : } 92 : : 93 : 0 : void QgsMapLayerStyle::writeXml( QDomElement &styleElement ) const 94 : : { 95 : : // the currently selected style has no content stored here (layer has all the information inside) 96 : 0 : if ( !isValid() ) 97 : 0 : return; 98 : : 99 : 0 : QDomDocument docX; 100 : 0 : docX.setContent( mXmlData ); 101 : 0 : styleElement.appendChild( docX.documentElement() ); 102 : 0 : } 103 : : 104 : 0 : QgsMapLayerStyleOverride::~QgsMapLayerStyleOverride() 105 : : { 106 : 0 : if ( mLayer && mStyleOverridden ) 107 : 0 : mLayer->styleManager()->restoreOverrideStyle(); 108 : 0 : } 109 : : 110 : 0 : void QgsMapLayerStyleOverride::setOverrideStyle( const QString &style ) 111 : : { 112 : 0 : if ( mLayer ) 113 : : { 114 : 0 : if ( mStyleOverridden ) 115 : 0 : mLayer->styleManager()->restoreOverrideStyle(); 116 : : 117 : 0 : mLayer->styleManager()->setOverrideStyle( style ); 118 : 0 : mStyleOverridden = true; 119 : 0 : } 120 : 0 : }