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

           Branch data     Line data    Source code
       1                 :            : /***************************************************************************
       2                 :            :                          qgsrasterlayertemporalproperties.cpp
       3                 :            :                          ---------------
       4                 :            :     begin                : February 2020
       5                 :            :     copyright            : (C) 2020 by Samweli Mwakisambwe
       6                 :            :     email                : samweli at kartoza 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 "qgsrasterlayertemporalproperties.h"
      19                 :            : #include "qgsrasterdataprovidertemporalcapabilities.h"
      20                 :            : #include "qgsrasterlayer.h"
      21                 :            : 
      22                 :          0 : QgsRasterLayerTemporalProperties::QgsRasterLayerTemporalProperties( QObject *parent, bool enabled )
      23                 :          0 :   :  QgsMapLayerTemporalProperties( parent, enabled )
      24                 :          0 : {
      25                 :          0 : }
      26                 :            : 
      27                 :          0 : bool QgsRasterLayerTemporalProperties::isVisibleInTemporalRange( const QgsDateTimeRange &range ) const
      28                 :            : {
      29                 :          0 :   if ( !isActive() )
      30                 :          0 :     return true;
      31                 :            : 
      32                 :          0 :   switch ( mMode )
      33                 :            :   {
      34                 :            :     case ModeFixedTemporalRange:
      35                 :          0 :       return range.isInfinite() || mFixedRange.isInfinite() || mFixedRange.overlaps( range );
      36                 :            : 
      37                 :            :     case ModeTemporalRangeFromDataProvider:
      38                 :          0 :       return true;
      39                 :            :   }
      40                 :          0 :   return true;
      41                 :          0 : }
      42                 :            : 
      43                 :          0 : QgsDateTimeRange QgsRasterLayerTemporalProperties::calculateTemporalExtent( QgsMapLayer *layer ) const
      44                 :            : {
      45                 :          0 :   QgsRasterLayer *rasterLayer = qobject_cast< QgsRasterLayer *>( layer );
      46                 :          0 :   if ( !rasterLayer )
      47                 :          0 :     return QgsDateTimeRange();
      48                 :            : 
      49                 :          0 :   switch ( mMode )
      50                 :            :   {
      51                 :            :     case QgsRasterLayerTemporalProperties::ModeFixedTemporalRange:
      52                 :          0 :       return mFixedRange;
      53                 :            : 
      54                 :            :     case QgsRasterLayerTemporalProperties::ModeTemporalRangeFromDataProvider:
      55                 :          0 :       return rasterLayer->dataProvider()->temporalCapabilities()->availableTemporalRange();
      56                 :            :   }
      57                 :            : 
      58                 :          0 :   return QgsDateTimeRange();
      59                 :          0 : }
      60                 :            : 
      61                 :          0 : QList<QgsDateTimeRange> QgsRasterLayerTemporalProperties::allTemporalRanges( QgsMapLayer *layer ) const
      62                 :            : {
      63                 :          0 :   QgsRasterLayer *rasterLayer = qobject_cast< QgsRasterLayer *>( layer );
      64                 :          0 :   if ( !rasterLayer )
      65                 :          0 :     return {};
      66                 :            : 
      67                 :          0 :   switch ( mMode )
      68                 :            :   {
      69                 :            :     case QgsRasterLayerTemporalProperties::ModeFixedTemporalRange:
      70                 :          0 :       return { mFixedRange };
      71                 :            : 
      72                 :            :     case QgsRasterLayerTemporalProperties::ModeTemporalRangeFromDataProvider:
      73                 :            :     {
      74                 :          0 :       QList< QgsDateTimeRange > ranges = rasterLayer->dataProvider()->temporalCapabilities()->allAvailableTemporalRanges();
      75                 :          0 :       return ranges.empty() ? QList< QgsDateTimeRange > { rasterLayer->dataProvider()->temporalCapabilities()->availableTemporalRange() } : ranges;
      76                 :          0 :     }
      77                 :            :   }
      78                 :            : 
      79                 :          0 :   return {};
      80                 :          0 : }
      81                 :            : 
      82                 :          0 : QgsRasterLayerTemporalProperties::TemporalMode QgsRasterLayerTemporalProperties::mode() const
      83                 :            : {
      84                 :          0 :   return mMode;
      85                 :            : }
      86                 :            : 
      87                 :          0 : void QgsRasterLayerTemporalProperties::setMode( QgsRasterLayerTemporalProperties::TemporalMode mode )
      88                 :            : {
      89                 :          0 :   if ( mMode == mode )
      90                 :          0 :     return;
      91                 :          0 :   mMode = mode;
      92                 :          0 : }
      93                 :            : 
      94                 :          0 : QgsTemporalProperty::Flags QgsRasterLayerTemporalProperties::flags() const
      95                 :            : {
      96                 :          0 :   return mode() == ModeFixedTemporalRange ? QgsTemporalProperty::FlagDontInvalidateCachedRendersWhenRangeChanges : QgsTemporalProperty::Flags();
      97                 :            : }
      98                 :            : 
      99                 :          0 : QgsRasterDataProviderTemporalCapabilities::IntervalHandlingMethod QgsRasterLayerTemporalProperties::intervalHandlingMethod() const
     100                 :            : {
     101                 :          0 :   return mIntervalHandlingMethod;
     102                 :            : }
     103                 :            : 
     104                 :          0 : void QgsRasterLayerTemporalProperties::setIntervalHandlingMethod( QgsRasterDataProviderTemporalCapabilities::IntervalHandlingMethod method )
     105                 :            : {
     106                 :          0 :   if ( mIntervalHandlingMethod == method )
     107                 :          0 :     return;
     108                 :          0 :   mIntervalHandlingMethod = method;
     109                 :          0 : }
     110                 :            : 
     111                 :          0 : void  QgsRasterLayerTemporalProperties::setFixedTemporalRange( const QgsDateTimeRange &range )
     112                 :            : {
     113                 :          0 :   mFixedRange = range;
     114                 :          0 : }
     115                 :            : 
     116                 :          0 : const QgsDateTimeRange &QgsRasterLayerTemporalProperties::fixedTemporalRange() const
     117                 :            : {
     118                 :          0 :   return mFixedRange;
     119                 :            : }
     120                 :            : 
     121                 :          0 : bool QgsRasterLayerTemporalProperties::readXml( const QDomElement &element, const QgsReadWriteContext &context )
     122                 :            : {
     123                 :          0 :   Q_UNUSED( context )
     124                 :            :   // TODO add support for raster layers with multi-temporal properties.
     125                 :            : 
     126                 :          0 :   QDomElement temporalNode = element.firstChildElement( QStringLiteral( "temporal" ) );
     127                 :          0 : 
     128                 :          0 :   setIsActive( temporalNode.attribute( QStringLiteral( "enabled" ), QStringLiteral( "0" ) ).toInt() );
     129                 :            : 
     130                 :          0 :   mMode = static_cast< TemporalMode >( temporalNode.attribute( QStringLiteral( "mode" ), QStringLiteral( "0" ) ). toInt() );
     131                 :          0 :   mIntervalHandlingMethod = static_cast< QgsRasterDataProviderTemporalCapabilities::IntervalHandlingMethod >( temporalNode.attribute( QStringLiteral( "fetchMode" ), QStringLiteral( "0" ) ). toInt() );
     132                 :            : 
     133                 :          0 :   QDomNode rangeElement = temporalNode.namedItem( QStringLiteral( "fixedRange" ) );
     134                 :            : 
     135                 :          0 :   QDomNode begin = rangeElement.namedItem( QStringLiteral( "start" ) );
     136                 :          0 :   QDomNode end = rangeElement.namedItem( QStringLiteral( "end" ) );
     137                 :            : 
     138                 :          0 :   QDateTime beginDate = QDateTime::fromString( begin.toElement().text(), Qt::ISODate );
     139                 :          0 :   QDateTime endDate = QDateTime::fromString( end.toElement().text(), Qt::ISODate );
     140                 :            : 
     141                 :          0 :   QgsDateTimeRange range = QgsDateTimeRange( beginDate, endDate );
     142                 :          0 :   setFixedTemporalRange( range );
     143                 :            : 
     144                 :            :   return true;
     145                 :          0 : }
     146                 :            : 
     147                 :          0 : QDomElement QgsRasterLayerTemporalProperties::writeXml( QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context )
     148                 :            : {
     149                 :          0 :   Q_UNUSED( context )
     150                 :          0 :   if ( element.isNull() )
     151                 :          0 :     return QDomElement();
     152                 :            : 
     153                 :          0 :   QDomElement temporalElement = document.createElement( QStringLiteral( "temporal" ) );
     154                 :          0 :   temporalElement.setAttribute( QStringLiteral( "enabled" ), isActive() ? QStringLiteral( "1" ) : QStringLiteral( "0" ) );
     155                 :          0 :   temporalElement.setAttribute( QStringLiteral( "mode" ), QString::number( mMode ) );
     156                 :          0 :   temporalElement.setAttribute( QStringLiteral( "fetchMode" ), QString::number( mIntervalHandlingMethod ) );
     157                 :            : 
     158                 :          0 :   QDomElement rangeElement = document.createElement( QStringLiteral( "fixedRange" ) );
     159                 :            : 
     160                 :          0 :   QDomElement startElement = document.createElement( QStringLiteral( "start" ) );
     161                 :          0 :   QDomElement endElement = document.createElement( QStringLiteral( "end" ) );
     162                 :            : 
     163                 :          0 :   QDomText startText = document.createTextNode( mFixedRange.begin().toTimeSpec( Qt::OffsetFromUTC ).toString( Qt::ISODate ) );
     164                 :          0 :   QDomText endText = document.createTextNode( mFixedRange.end().toTimeSpec( Qt::OffsetFromUTC ).toString( Qt::ISODate ) );
     165                 :          0 :   startElement.appendChild( startText );
     166                 :          0 :   endElement.appendChild( endText );
     167                 :          0 :   rangeElement.appendChild( startElement );
     168                 :          0 :   rangeElement.appendChild( endElement );
     169                 :            : 
     170                 :          0 :   temporalElement.appendChild( rangeElement );
     171                 :            : 
     172                 :          0 :   element.appendChild( temporalElement );
     173                 :            : 
     174                 :          0 :   return element;
     175                 :          0 : }
     176                 :            : 
     177                 :          0 : void QgsRasterLayerTemporalProperties::setDefaultsFromDataProviderTemporalCapabilities( const QgsDataProviderTemporalCapabilities *capabilities )
     178                 :            : {
     179                 :          0 :   if ( const QgsRasterDataProviderTemporalCapabilities *rasterCaps = dynamic_cast< const QgsRasterDataProviderTemporalCapabilities *>( capabilities ) )
     180                 :            :   {
     181                 :          0 :     setIsActive( rasterCaps->hasTemporalCapabilities() );
     182                 :          0 :     setFixedTemporalRange( rasterCaps->availableTemporalRange() );
     183                 :            : 
     184                 :          0 :     if ( rasterCaps->hasTemporalCapabilities() )
     185                 :            :     {
     186                 :          0 :       setMode( ModeTemporalRangeFromDataProvider );
     187                 :          0 :     }
     188                 :            : 
     189                 :          0 :     mIntervalHandlingMethod = rasterCaps->intervalHandlingMethod();
     190                 :          0 :   }
     191                 :          0 : }

Generated by: LCOV version 1.14