LCOV - code coverage report
Current view: top level - core/layout - qgslayoutitemmapitem.cpp (source / functions) Hit Total Coverage
Test: coverage.info.cleaned Lines: 0 161 0.0 %
Date: 2021-03-26 12:19:53 Functions: 0 0 -
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /***************************************************************************
       2                 :            :                              qgslayoutitemmapitem.cpp
       3                 :            :                              -------------------
       4                 :            :     begin                : October 2017
       5                 :            :     copyright            : (C) 2017 by Nyall Dawson
       6                 :            :     email                : nyall dot dawson at gmail dot com
       7                 :            :  ***************************************************************************/
       8                 :            : 
       9                 :            : /***************************************************************************
      10                 :            :  *                                                                         *
      11                 :            :  *   This program is free software; you can redistribute it and/or modify  *
      12                 :            :  *   it under the terms of the GNU General Public License as published by  *
      13                 :            :  *   the Free Software Foundation; either version 2 of the License, or     *
      14                 :            :  *   (at your option) any later version.                                   *
      15                 :            :  *                                                                         *
      16                 :            :  ***************************************************************************/
      17                 :            : 
      18                 :            : #include "qgslayoutitemmapitem.h"
      19                 :            : #include "qgslayoutitemmap.h"
      20                 :            : #include "qgslayout.h"
      21                 :            : #include <QUuid>
      22                 :            : 
      23                 :          0 : QgsLayoutItemMapItem::QgsLayoutItemMapItem( const QString &name, QgsLayoutItemMap *map )
      24                 :          0 :   : QgsLayoutObject( map->layout() )
      25                 :          0 :   , mName( name )
      26                 :          0 :   , mMap( map )
      27                 :          0 :   , mUuid( QUuid::createUuid().toString() )
      28                 :          0 :   , mEnabled( true )
      29                 :          0 : {
      30                 :            : 
      31                 :          0 : }
      32                 :            : 
      33                 :          0 : bool QgsLayoutItemMapItem::writeXml( QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context ) const
      34                 :            : {
      35                 :          0 :   Q_UNUSED( document )
      36                 :            : 
      37                 :          0 :   QgsLayoutObject::writeObjectPropertiesToElement( element, document, context );
      38                 :            : 
      39                 :          0 :   element.setAttribute( QStringLiteral( "uuid" ), mUuid );
      40                 :          0 :   element.setAttribute( QStringLiteral( "name" ), mName );
      41                 :          0 :   element.setAttribute( QStringLiteral( "show" ), mEnabled );
      42                 :          0 :   element.setAttribute( QStringLiteral( "position" ), static_cast< int >( mStackingPosition ) );
      43                 :            : 
      44                 :          0 :   if ( mStackingLayer )
      45                 :            :   {
      46                 :          0 :     element.setAttribute( QStringLiteral( "stackingLayer" ), mStackingLayer.layerId );
      47                 :          0 :     element.setAttribute( QStringLiteral( "stackingLayerName" ), mStackingLayer.name );
      48                 :          0 :     element.setAttribute( QStringLiteral( "stackingLayerSource" ), mStackingLayer.source );
      49                 :          0 :     element.setAttribute( QStringLiteral( "stackingLayerProvider" ), mStackingLayer.provider );
      50                 :          0 :   }
      51                 :            : 
      52                 :          0 :   return true;
      53                 :          0 : }
      54                 :            : 
      55                 :          0 : bool QgsLayoutItemMapItem::readXml( const QDomElement &itemElem, const QDomDocument &doc, const QgsReadWriteContext &context )
      56                 :            : {
      57                 :          0 :   QgsLayoutObject::readObjectPropertiesFromElement( itemElem, doc, context );
      58                 :            : 
      59                 :          0 :   mUuid = itemElem.attribute( QStringLiteral( "uuid" ) );
      60                 :          0 :   mName = itemElem.attribute( QStringLiteral( "name" ) );
      61                 :          0 :   mEnabled = ( itemElem.attribute( QStringLiteral( "show" ), QStringLiteral( "0" ) ) != QLatin1String( "0" ) );
      62                 :          0 :   mStackingPosition = static_cast< StackingPosition >( itemElem.attribute( QStringLiteral( "position" ), QString::number( QgsLayoutItemMapItem::StackBelowMapLabels ) ).toInt() );
      63                 :            : 
      64                 :          0 :   const QString layerId = itemElem.attribute( QStringLiteral( "stackingLayer" ) );
      65                 :          0 :   const QString layerName = itemElem.attribute( QStringLiteral( "stackingLayerName" ) );
      66                 :          0 :   const QString layerSource = itemElem.attribute( QStringLiteral( "stackingLayerSource" ) );
      67                 :          0 :   const QString layerProvider = itemElem.attribute( QStringLiteral( "stackingLayerProvider" ) );
      68                 :          0 :   mStackingLayer = QgsMapLayerRef( layerId, layerName, layerSource, layerProvider );
      69                 :          0 :   if ( mMap && mMap->layout() )
      70                 :          0 :     mStackingLayer.resolveWeakly( mMap->layout()->project() );
      71                 :            : 
      72                 :            :   return true;
      73                 :          0 : }
      74                 :            : 
      75                 :          0 : void QgsLayoutItemMapItem::finalizeRestoreFromXml()
      76                 :            : {
      77                 :          0 : }
      78                 :            : 
      79                 :          0 : void QgsLayoutItemMapItem::setMap( QgsLayoutItemMap *map )
      80                 :            : {
      81                 :          0 :   mMap = map;
      82                 :          0 : }
      83                 :            : 
      84                 :          0 : const QgsLayoutItemMap *QgsLayoutItemMapItem::map() const
      85                 :            : {
      86                 :          0 :   return mMap;
      87                 :            : }
      88                 :            : 
      89                 :          0 : void QgsLayoutItemMapItem::setName( const QString &name )
      90                 :            : {
      91                 :          0 :   mName = name;
      92                 :          0 : }
      93                 :            : 
      94                 :          0 : QString QgsLayoutItemMapItem::name() const
      95                 :            : {
      96                 :          0 :   return mName;
      97                 :            : }
      98                 :            : 
      99                 :          0 : void QgsLayoutItemMapItem::setEnabled( const bool enabled )
     100                 :            : {
     101                 :          0 :   mEnabled = enabled;
     102                 :          0 : }
     103                 :            : 
     104                 :          0 : bool QgsLayoutItemMapItem::enabled() const
     105                 :            : {
     106                 :          0 :   return mEnabled;
     107                 :            : }
     108                 :            : 
     109                 :          0 : bool QgsLayoutItemMapItem::usesAdvancedEffects() const
     110                 :            : {
     111                 :          0 :   return false;
     112                 :            : }
     113                 :            : 
     114                 :          0 : QgsMapLayer *QgsLayoutItemMapItem::stackingLayer() const
     115                 :            : {
     116                 :          0 :   return mStackingLayer.get();
     117                 :            : }
     118                 :            : 
     119                 :          0 : void QgsLayoutItemMapItem::setStackingLayer( QgsMapLayer *layer )
     120                 :            : {
     121                 :          0 :   mStackingLayer.setLayer( layer );
     122                 :          0 : }
     123                 :            : 
     124                 :          0 : QgsExpressionContext QgsLayoutItemMapItem::createExpressionContext() const
     125                 :            : {
     126                 :          0 :   if ( mMap )
     127                 :          0 :     return mMap->createExpressionContext();
     128                 :            : 
     129                 :          0 :   return QgsLayoutObject::createExpressionContext();
     130                 :          0 : }
     131                 :            : 
     132                 :          0 : bool QgsLayoutItemMapItem::accept( QgsStyleEntityVisitorInterface * ) const
     133                 :            : {
     134                 :          0 :   return true;
     135                 :            : }
     136                 :            : 
     137                 :          0 : QgsMapLayer *QgsLayoutItemMapItem::mapLayer()
     138                 :            : {
     139                 :          0 :   return nullptr;
     140                 :            : }
     141                 :            : 
     142                 :            : //
     143                 :            : // QgsLayoutItemMapItemStack
     144                 :            : //
     145                 :            : 
     146                 :          0 : QgsLayoutItemMapItemStack::QgsLayoutItemMapItemStack( QgsLayoutItemMap *map )
     147                 :          0 :   : mMap( map )
     148                 :          0 : {
     149                 :            : 
     150                 :          0 : }
     151                 :            : 
     152                 :          0 : QgsLayoutItemMapItemStack::~QgsLayoutItemMapItemStack()
     153                 :          0 : {
     154                 :          0 :   removeItems();
     155                 :          0 : }
     156                 :            : 
     157                 :          0 : void QgsLayoutItemMapItemStack::addItem( QgsLayoutItemMapItem *item )
     158                 :            : {
     159                 :          0 :   mItems.append( item );
     160                 :          0 : }
     161                 :            : 
     162                 :          0 : void QgsLayoutItemMapItemStack::removeItem( const QString &itemId )
     163                 :            : {
     164                 :          0 :   for ( int i = mItems.size() - 1; i >= 0; --i )
     165                 :            :   {
     166                 :          0 :     if ( mItems.at( i )->id() == itemId )
     167                 :            :     {
     168                 :          0 :       delete mItems.takeAt( i );
     169                 :          0 :       return;
     170                 :            :     }
     171                 :          0 :   }
     172                 :          0 : }
     173                 :            : 
     174                 :          0 : void QgsLayoutItemMapItemStack::moveItemUp( const QString &itemId )
     175                 :            : {
     176                 :          0 :   QgsLayoutItemMapItem *targetItem = item( itemId );
     177                 :          0 :   if ( !targetItem )
     178                 :            :   {
     179                 :          0 :     return;
     180                 :            :   }
     181                 :            : 
     182                 :          0 :   int index = mItems.indexOf( targetItem );
     183                 :          0 :   if ( index >= mItems.size() - 1 )
     184                 :            :   {
     185                 :          0 :     return;
     186                 :            :   }
     187                 :            : #if QT_VERSION < QT_VERSION_CHECK(5, 13, 0)
     188                 :            :   mItems.swap( index, index + 1 );
     189                 :            : #else
     190                 :          0 :   mItems.swapItemsAt( index, index + 1 );
     191                 :            : #endif
     192                 :          0 : }
     193                 :            : 
     194                 :          0 : void QgsLayoutItemMapItemStack::moveItemDown( const QString &itemId )
     195                 :            : {
     196                 :          0 :   QgsLayoutItemMapItem *targetItem = item( itemId );
     197                 :          0 :   if ( !targetItem )
     198                 :            :   {
     199                 :          0 :     return;
     200                 :            :   }
     201                 :            : 
     202                 :          0 :   int index = mItems.indexOf( targetItem );
     203                 :          0 :   if ( index < 1 )
     204                 :            :   {
     205                 :          0 :     return;
     206                 :            :   }
     207                 :            : #if QT_VERSION < QT_VERSION_CHECK(5, 13, 0)
     208                 :            :   mItems.swap( index, index - 1 );
     209                 :            : #else
     210                 :          0 :   mItems.swapItemsAt( index, index - 1 );
     211                 :            : #endif
     212                 :          0 : }
     213                 :            : 
     214                 :          0 : QgsLayoutItemMapItem *QgsLayoutItemMapItemStack::item( const QString &itemId ) const
     215                 :          0 : {
     216                 :          0 :   for ( QgsLayoutItemMapItem *item : mItems )
     217                 :            :   {
     218                 :          0 :     if ( item->id() == itemId )
     219                 :            :     {
     220                 :          0 :       return item;
     221                 :            :     }
     222                 :            :   }
     223                 :            : 
     224                 :          0 :   return nullptr;
     225                 :          0 : }
     226                 :            : 
     227                 :          0 : QgsLayoutItemMapItem *QgsLayoutItemMapItemStack::item( const int index ) const
     228                 :            : {
     229                 :          0 :   if ( index < mItems.length() )
     230                 :            :   {
     231                 :          0 :     return mItems.at( index );
     232                 :            :   }
     233                 :            : 
     234                 :          0 :   return nullptr;
     235                 :          0 : }
     236                 :            : 
     237                 :          0 : QgsLayoutItemMapItem &QgsLayoutItemMapItemStack::operator[]( int idx )
     238                 :            : {
     239                 :          0 :   return *mItems[idx];
     240                 :            : }
     241                 :            : 
     242                 :          0 : QList<QgsLayoutItemMapItem *> QgsLayoutItemMapItemStack::asList() const
     243                 :            : {
     244                 :          0 :   QList< QgsLayoutItemMapItem * > list;
     245                 :          0 :   list.reserve( mItems.size() );
     246                 :          0 :   for ( QgsLayoutItemMapItem *item : mItems )
     247                 :            :   {
     248                 :          0 :     list.append( item );
     249                 :            :   }
     250                 :          0 :   return list;
     251                 :          0 : }
     252                 :            : 
     253                 :          0 : bool QgsLayoutItemMapItemStack::writeXml( QDomElement &elem, QDomDocument &doc, const QgsReadWriteContext &context ) const
     254                 :            : {
     255                 :            :   //write item stack
     256                 :          0 :   for ( QgsLayoutItemMapItem *item : mItems )
     257                 :            :   {
     258                 :          0 :     item->writeXml( elem, doc, context );
     259                 :            :   }
     260                 :            : 
     261                 :          0 :   return true;
     262                 :            : }
     263                 :            : 
     264                 :          0 : void QgsLayoutItemMapItemStack::finalizeRestoreFromXml()
     265                 :            : {
     266                 :          0 :   for ( QgsLayoutItemMapItem *item : std::as_const( mItems ) )
     267                 :            :   {
     268                 :          0 :     item->finalizeRestoreFromXml();
     269                 :            :   }
     270                 :          0 : }
     271                 :            : 
     272                 :          0 : void QgsLayoutItemMapItemStack::drawItems( QPainter *painter, bool ignoreStacking )
     273                 :            : {
     274                 :          0 :   if ( !painter )
     275                 :            :   {
     276                 :          0 :     return;
     277                 :            :   }
     278                 :            : 
     279                 :          0 :   for ( QgsLayoutItemMapItem *item : std::as_const( mItems ) )
     280                 :            :   {
     281                 :          0 :     switch ( item->stackingPosition() )
     282                 :            :     {
     283                 :            :       case QgsLayoutItemMapItem::StackBelowMap:
     284                 :            :       case QgsLayoutItemMapItem::StackAboveMapLayer:
     285                 :            :       case QgsLayoutItemMapItem::StackBelowMapLayer:
     286                 :            :       case QgsLayoutItemMapItem::StackBelowMapLabels:
     287                 :          0 :         if ( !ignoreStacking )
     288                 :          0 :           break;
     289                 :            : 
     290                 :            :         FALLTHROUGH
     291                 :            :       case QgsLayoutItemMapItem::StackAboveMapLabels:
     292                 :          0 :         item->draw( painter );
     293                 :          0 :         break;
     294                 :            : 
     295                 :            :     }
     296                 :            :   }
     297                 :          0 : }
     298                 :            : 
     299                 :          0 : bool QgsLayoutItemMapItemStack::containsAdvancedEffects() const
     300                 :            : {
     301                 :          0 :   for ( QgsLayoutItemMapItem *item : mItems )
     302                 :            :   {
     303                 :          0 :     if ( item->enabled() && item->usesAdvancedEffects() )
     304                 :            :     {
     305                 :          0 :       return true;
     306                 :            :     }
     307                 :            :   }
     308                 :          0 :   return false;
     309                 :          0 : }
     310                 :            : 
     311                 :          0 : bool QgsLayoutItemMapItemStack::hasEnabledItems() const
     312                 :            : {
     313                 :          0 :   for ( QgsLayoutItemMapItem *item : mItems )
     314                 :            :   {
     315                 :          0 :     if ( item->enabled() )
     316                 :            :     {
     317                 :          0 :       return true;
     318                 :            :     }
     319                 :            :   }
     320                 :          0 :   return false;
     321                 :          0 : }
     322                 :            : 
     323                 :          0 : void QgsLayoutItemMapItemStack::removeItems()
     324                 :            : {
     325                 :          0 :   qDeleteAll( mItems );
     326                 :          0 :   mItems.clear();
     327                 :          0 : }
     328                 :            : 
     329                 :            : 
     330                 :            : 

Generated by: LCOV version 1.14