LCOV - code coverage report
Current view: top level - core/layout - qgslayoutframe.cpp (source / functions) Hit Total Coverage
Test: coverage.info.cleaned Lines: 0 118 0.0 %
Date: 2021-04-10 08:29:14 Functions: 0 0 -
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /***************************************************************************
       2                 :            :                               qgslayoutframe.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                 :            :  *   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 "qgslayoutframe.h"
      17                 :            : #include "qgslayoutmultiframe.h"
      18                 :            : #include "qgslayoutitemregistry.h"
      19                 :            : #include "qgslayout.h"
      20                 :            : #include "qgsexpressioncontextutils.h"
      21                 :            : 
      22                 :          0 : QgsLayoutFrame::QgsLayoutFrame( QgsLayout *layout, QgsLayoutMultiFrame *multiFrame )
      23                 :          0 :   : QgsLayoutItem( layout )
      24                 :          0 :   , mMultiFrame( multiFrame )
      25                 :          0 :   , mMultiFrameUuid( multiFrame ? multiFrame->uuid() : QString() )
      26                 :          0 : {
      27                 :            : 
      28                 :            :   //default to no background
      29                 :          0 :   setBackgroundEnabled( false );
      30                 :            : 
      31                 :          0 :   if ( multiFrame )
      32                 :            :   {
      33                 :            :     //repaint frame when multiframe content changes
      34                 :          0 :     connect( multiFrame, &QgsLayoutMultiFrame::contentsChanged, this, [ = ]
      35                 :            :     {
      36                 :          0 :       update();
      37                 :          0 :     } );
      38                 :            : 
      39                 :            :     //force recalculation of rect, so that multiframe specified sizes can be applied
      40                 :          0 :     refreshItemSize();
      41                 :          0 :   }
      42                 :          0 : }
      43                 :            : 
      44                 :          0 : QgsLayoutFrame *QgsLayoutFrame::create( QgsLayout *layout )
      45                 :            : {
      46                 :          0 :   return new QgsLayoutFrame( layout, nullptr );
      47                 :          0 : }
      48                 :            : 
      49                 :          0 : QgsLayoutMultiFrame *QgsLayoutFrame::multiFrame() const
      50                 :            : {
      51                 :          0 :   return mMultiFrame;
      52                 :            : }
      53                 :            : 
      54                 :          0 : QgsLayoutSize QgsLayoutFrame::minimumSize() const
      55                 :            : {
      56                 :          0 :   if ( !mMultiFrame )
      57                 :          0 :     return QgsLayoutSize();
      58                 :            : 
      59                 :            :   //calculate index of frame
      60                 :          0 :   int frameIndex = mMultiFrame->frameIndex( const_cast< QgsLayoutFrame * >( this ) );
      61                 :            :   //check minimum size
      62                 :          0 :   return QgsLayoutSize( mMultiFrame->minFrameSize( frameIndex ), QgsUnitTypes::LayoutMillimeters );
      63                 :          0 : }
      64                 :            : 
      65                 :          0 : QgsLayoutSize QgsLayoutFrame::fixedSize() const
      66                 :            : {
      67                 :          0 :   if ( !mMultiFrame )
      68                 :          0 :     return QgsLayoutSize();
      69                 :            : 
      70                 :            :   //calculate index of frame
      71                 :          0 :   int frameIndex = mMultiFrame->frameIndex( const_cast< QgsLayoutFrame * >( this ) );
      72                 :            :   //check fixed size
      73                 :          0 :   return QgsLayoutSize( mMultiFrame->fixedFrameSize( frameIndex ), QgsUnitTypes::LayoutMillimeters );
      74                 :          0 : }
      75                 :            : 
      76                 :          0 : int QgsLayoutFrame::type() const
      77                 :            : {
      78                 :          0 :   return QgsLayoutItemRegistry::LayoutFrame;
      79                 :            : }
      80                 :            : 
      81                 :          0 : QIcon QgsLayoutFrame::icon() const
      82                 :            : {
      83                 :          0 :   if ( mMultiFrame )
      84                 :          0 :     return mMultiFrame->icon();
      85                 :            :   else
      86                 :          0 :     return QIcon();
      87                 :          0 : }
      88                 :            : 
      89                 :          0 : void QgsLayoutFrame::setHidePageIfEmpty( const bool hidePageIfEmpty )
      90                 :            : {
      91                 :          0 :   mHidePageIfEmpty = hidePageIfEmpty;
      92                 :          0 : }
      93                 :            : 
      94                 :          0 : void QgsLayoutFrame::setHideBackgroundIfEmpty( const bool hideBackgroundIfEmpty )
      95                 :            : {
      96                 :          0 :   if ( hideBackgroundIfEmpty == mHideBackgroundIfEmpty )
      97                 :            :   {
      98                 :          0 :     return;
      99                 :            :   }
     100                 :            : 
     101                 :          0 :   mHideBackgroundIfEmpty = hideBackgroundIfEmpty;
     102                 :          0 :   update();
     103                 :          0 : }
     104                 :            : 
     105                 :          0 : bool QgsLayoutFrame::isEmpty() const
     106                 :            : {
     107                 :          0 :   if ( !mMultiFrame )
     108                 :            :   {
     109                 :          0 :     return true;
     110                 :            :   }
     111                 :            : 
     112                 :          0 :   double multiFrameHeight = mMultiFrame->totalSize().height();
     113                 :          0 :   if ( multiFrameHeight <= mSection.top() )
     114                 :            :   {
     115                 :            :     //multiframe height is less than top of this frame's visible portion
     116                 :          0 :     return true;
     117                 :            :   }
     118                 :            : 
     119                 :          0 :   return false;
     120                 :            : 
     121                 :          0 : }
     122                 :            : 
     123                 :          0 : QgsExpressionContext QgsLayoutFrame::createExpressionContext() const
     124                 :            : {
     125                 :          0 :   if ( !mMultiFrame )
     126                 :          0 :     return QgsLayoutItem::createExpressionContext();
     127                 :            : 
     128                 :            :   //start with multiframe's context
     129                 :          0 :   QgsExpressionContext context = mMultiFrame->createExpressionContext();
     130                 :          0 : 
     131                 :            :   //add frame's individual context
     132                 :          0 :   context.appendScope( QgsExpressionContextUtils::layoutItemScope( this ) );
     133                 :            : 
     134                 :          0 :   return context;
     135                 :          0 : }
     136                 :            : 
     137                 :          0 : QgsLayoutItem::ExportLayerBehavior QgsLayoutFrame::exportLayerBehavior() const
     138                 :            : {
     139                 :          0 :   return CanGroupWithItemsOfSameType;
     140                 :            : }
     141                 :            : 
     142                 :          0 : QString QgsLayoutFrame::displayName() const
     143                 :            : {
     144                 :          0 :   if ( !id().isEmpty() )
     145                 :            :   {
     146                 :          0 :     return id();
     147                 :            :   }
     148                 :            : 
     149                 :          0 :   if ( mMultiFrame )
     150                 :            :   {
     151                 :          0 :     return mMultiFrame->displayName();
     152                 :            :   }
     153                 :            : 
     154                 :          0 :   return tr( "<Frame>" );
     155                 :          0 : }
     156                 :            : 
     157                 :          0 : void QgsLayoutFrame::cleanup()
     158                 :            : {
     159                 :          0 :   if ( mMultiFrame )
     160                 :          0 :     mMultiFrame->handleFrameRemoval( this );
     161                 :            : 
     162                 :          0 :   QgsLayoutItem::cleanup();
     163                 :          0 : }
     164                 :            : 
     165                 :          0 : void QgsLayoutFrame::draw( QgsLayoutItemRenderContext &context )
     166                 :            : {
     167                 :          0 :   if ( mMultiFrame )
     168                 :            :   {
     169                 :            :     //calculate index of frame
     170                 :          0 :     int frameIndex = mMultiFrame->frameIndex( this );
     171                 :            :     Q_ASSERT_X( frameIndex >= 0, "QgsLayoutFrame::draw", "Invalid frame index for frame" );
     172                 :          0 :     mMultiFrame->render( context, mSection, frameIndex );
     173                 :          0 :   }
     174                 :          0 : }
     175                 :            : 
     176                 :          0 : void QgsLayoutFrame::drawFrame( QgsRenderContext &context )
     177                 :            : {
     178                 :          0 :   if ( !isEmpty() || !mHideBackgroundIfEmpty )
     179                 :            :   {
     180                 :          0 :     QgsLayoutItem::drawFrame( context );
     181                 :          0 :   }
     182                 :          0 : }
     183                 :            : 
     184                 :          0 : void QgsLayoutFrame::drawBackground( QgsRenderContext &context )
     185                 :            : {
     186                 :          0 :   if ( !isEmpty() || !mHideBackgroundIfEmpty )
     187                 :            :   {
     188                 :          0 :     QgsLayoutItem::drawBackground( context );
     189                 :          0 :   }
     190                 :          0 : }
     191                 :            : 
     192                 :          0 : bool QgsLayoutFrame::writePropertiesToElement( QDomElement &parentElement, QDomDocument &, const QgsReadWriteContext & ) const
     193                 :            : {
     194                 :          0 :   parentElement.setAttribute( QStringLiteral( "multiFrame" ), mMultiFrameUuid );
     195                 :          0 :   parentElement.setAttribute( QStringLiteral( "multiFrameTemplateUuid" ), mMultiFrameUuid );
     196                 :          0 :   parentElement.setAttribute( QStringLiteral( "sectionX" ), QString::number( mSection.x() ) );
     197                 :          0 :   parentElement.setAttribute( QStringLiteral( "sectionY" ), QString::number( mSection.y() ) );
     198                 :          0 :   parentElement.setAttribute( QStringLiteral( "sectionWidth" ), QString::number( mSection.width() ) );
     199                 :          0 :   parentElement.setAttribute( QStringLiteral( "sectionHeight" ), QString::number( mSection.height() ) );
     200                 :          0 :   parentElement.setAttribute( QStringLiteral( "hidePageIfEmpty" ), mHidePageIfEmpty );
     201                 :          0 :   parentElement.setAttribute( QStringLiteral( "hideBackgroundIfEmpty" ), mHideBackgroundIfEmpty );
     202                 :          0 :   return true;
     203                 :          0 : }
     204                 :            : 
     205                 :          0 : bool QgsLayoutFrame::readPropertiesFromElement( const QDomElement &itemElem, const QDomDocument &, const QgsReadWriteContext & )
     206                 :            : {
     207                 :          0 :   double x = itemElem.attribute( QStringLiteral( "sectionX" ) ).toDouble();
     208                 :          0 :   double y = itemElem.attribute( QStringLiteral( "sectionY" ) ).toDouble();
     209                 :          0 :   double width = itemElem.attribute( QStringLiteral( "sectionWidth" ) ).toDouble();
     210                 :          0 :   double height = itemElem.attribute( QStringLiteral( "sectionHeight" ) ).toDouble();
     211                 :          0 :   mSection = QRectF( x, y, width, height );
     212                 :          0 :   mHidePageIfEmpty = itemElem.attribute( QStringLiteral( "hidePageIfEmpty" ), QStringLiteral( "0" ) ).toInt();
     213                 :          0 :   mHideBackgroundIfEmpty = itemElem.attribute( QStringLiteral( "hideBackgroundIfEmpty" ), QStringLiteral( "0" ) ).toInt();
     214                 :            : 
     215                 :          0 :   mMultiFrameUuid = itemElem.attribute( QStringLiteral( "multiFrame" ) );
     216                 :          0 :   if ( mMultiFrameUuid.isEmpty( ) )
     217                 :            :   {
     218                 :          0 :     mMultiFrameUuid = itemElem.attribute( QStringLiteral( "multiFrameTemplateUuid" ) );
     219                 :          0 :   }
     220                 :          0 :   mMultiFrame = mLayout->multiFrameByUuid( mMultiFrameUuid );
     221                 :          0 :   return true;
     222                 :          0 : }

Generated by: LCOV version 1.14