suggested changes from the review

This commit is contained in:
Samweli 2020-02-18 19:14:26 +03:00 committed by Nyall Dawson
parent b30ccf3289
commit 2517b566d1
39 changed files with 325 additions and 570 deletions

View File

@ -1,6 +1,10 @@
QGIS
Building QGIS from source - step by step
<<<<<<< HEAD
2020-02-24
=======
2020-02-19
>>>>>>> c81bfa2090... suggested changes from the review
%! target : html
%! style : style.css
@ -56,8 +60,13 @@ Building QGIS from source - step by step
% End of comments
% -------------------
<<<<<<< HEAD
Last Updated: 2020-02-24
Last Change : 2020-02-24
=======
Last Updated: 2020-02-19
Last Change : 2020-02-17
>>>>>>> c81bfa2090... suggested changes from the review
%%toc

View File

@ -1,6 +1,10 @@
QGIS News
Change history for the QGIS Project
<<<<<<< HEAD
2020-02-24
=======
2020-02-19
>>>>>>> c81bfa2090... suggested changes from the review
%! target : html
%! style : style.css
@ -35,6 +39,7 @@ Change history for the QGIS Project
% End of comments
% -------------------
<<<<<<< HEAD
Last Updated: 2020-02-24
Last Change : 2020-02-24
@ -72,6 +77,10 @@ This release has following new features:
- Notable Fixes: Bug fixes by Stephen Knox
-
=======
Last Updated: 2020-02-19
Last Change : 2020-02-17
>>>>>>> c81bfa2090... suggested changes from the review
= What's new in Version 3.10 'A Coruña'? =

View File

@ -116,9 +116,9 @@ Gets the data source specification.
.. versionadded:: 3.0
%End
virtual QgsDataProviderTemporalProperties *temporalProperties();
virtual QgsDataProviderTemporalCapabilities *temporalCapabilities();
%Docstring
Returns data provider temporal properties. This may be ``None``, depending on the data provider.
Returns data provider temporal capabilities. This may be ``None``, depending on the data provider.
.. versionadded:: 3.14
%End

View File

@ -0,0 +1,42 @@
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/qgsdataprovidertemporalcapabilities.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/
class QgsDataProviderTemporalCapabilities : QgsTemporalProperty
{
%Docstring
Class for handling data providers temporal capabilities.
.. versionadded:: 3.14
%End
%TypeHeaderCode
#include "qgsdataprovidertemporalcapabilities.h"
%End
public:
QgsDataProviderTemporalCapabilities( bool enabled = false );
%Docstring
Constructor for QgsDataProviderTemporalCapabilities.
%End
virtual ~QgsDataProviderTemporalCapabilities();
};
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/qgsdataprovidertemporalcapabilities.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/

View File

@ -1,7 +1,7 @@
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/qgsdataprovidertemporalproperties.h *
* src/core/qgsdataprovidertemporalcapabilities.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/
@ -12,31 +12,31 @@
class QgsDataProviderTemporalProperties : QgsTemporalProperty
class QgsDataProviderTemporalCapabilities : QgsTemporalProperty
{
%Docstring
Class for handling data providers temporal properties.
Class for handling data providers temporal capabilities.
.. versionadded:: 3.14
%End
%TypeHeaderCode
#include "qgsdataprovidertemporalproperties.h"
#include "qgsdataprovidertemporalcapabilities.h"
%End
public:
QgsDataProviderTemporalProperties( bool enabled = false );
QgsDataProviderTemporalCapabilities( bool enabled = false );
%Docstring
Constructor for QgsDataProviderTemporalProperties.
Constructor for QgsDataProviderTemporalCapabilities.
%End
virtual ~QgsDataProviderTemporalProperties();
virtual ~QgsDataProviderTemporalCapabilities();
};
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/qgsdataprovidertemporalproperties.h *
* src/core/qgsdataprovidertemporalcapabilities.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/

View File

@ -11,10 +11,14 @@
class QgsMapLayerTemporalProperties : QgsTemporalProperty
{
%Docstring
An abstract base class for handling map layer temporal properties.
Base class for storage of map layer temporal properties.
QgsMapLayerTemporalProperties expose user-configurable settings for controlling
how an individual QgsMapLayer behaves in a temporal context, e.g. while animating a map object.
.. versionadded:: 3.14
%End
@ -27,22 +31,20 @@ An abstract base class for handling map layer temporal properties.
QgsMapLayerTemporalProperties( bool enabled = false );
%Docstring
Constructor for QgsMapLayerTemporalProperties.
The ``enabled`` argument specifies whether the temporal properties are initially enabled or not (see isActive()).
%End
virtual ~QgsMapLayerTemporalProperties();
virtual QDomElement writeXml( QDomElement &element, QDomDocument &doc, const QgsReadWriteContext &context ) = 0;
%Docstring
Writes the properties to a DOM ``element``, to be used later with readXml().
Writes map layer temporal properties to a DOM element, to be used later with readXml()
.. seealso:: :py:func:`readXml`
%End
virtual bool readXml( const QDomElement &element, const QgsReadWriteContext &context ) = 0;
%Docstring
Reads temporal properties from a DOM ``element`` previously written by writeXml().
Reads temporal properties from a DOM element previously written by writeXml()
.. seealso:: :py:func:`writeXml`
%End

View File

@ -10,10 +10,11 @@
class QgsTemporalRangeObject
{
%Docstring
Base class for objects with an associated (optional) temporal range.
Base class for temporal based classes.
.. versionadded:: 3.14
%End
@ -23,11 +24,14 @@ Base class for objects with an associated (optional) temporal range.
%End
public:
QgsTemporalRangeObject( bool enabled = false );
QgsTemporalRangeObject();
%Docstring
Constructor QgsTemporalRangeObject.
Constructor for QgsTemporalRangeObject.
%End
The ``enabled`` argument specifies whether the temporal range is initially enabled or not (see isTemporal()).
QgsTemporalRangeObject( bool enabled );
%Docstring
Creates temporal range object with the specified temporal state.
%End
QgsTemporalRangeObject( const QgsRenderContext &rh );
@ -39,38 +43,34 @@ Copies render context temporal members
void setIsTemporal( bool enabled );
%Docstring
Sets whether the temporal range is ``enabled`` (i.e. whether the object has a temporal range
which will be considered when rendering maps with a specific time range set.)
Sets object as a temporal based one, which will be considered when rendering maps with a specific time range set.
.. seealso:: :py:func:`isTemporal`
%End
bool isTemporal() const;
%Docstring
Returns ``True`` if the object's temporal range is enabled, and the object will be filtered when rendering maps with a specific time range set.
Returns true if the object is a temporal one, and will be filtered when rendering maps with a specific time range set.
For map settings, if ``False`` is returned, then any other temporal settings relating to the map will be ignored during rendering.
For map settings, If false is returned, then any other temporal settings relating to the map will be ignored during rendering.
.. seealso:: :py:func:`setIsTemporal`
%End
void setTemporalRange( const QgsDateTimeRange &range );
void setTemporalRange( const QgsDateTimeRange &dateTimeRange );
%Docstring
Sets the temporal ``range`` for the object.
Set datetime range for a temporal object.
Calling setTemporalRange() automatically enables temporal properties on the
object (see isTemporal()), regardless of its existing state.
It updates object temporal state to true if it was false.
When a temporal ``range`` is set it can be used to filter and request time base objects.
When set, can be used to filter and request time base objects.
.. seealso:: :py:func:`temporalRange`
%End
const QgsDateTimeRange &temporalRange() const;
%Docstring
Returns the datetime range for the object.
This should only be considered when isTemporal() returns ``True``.
Returns datetime range if object is a temporal object.
.. seealso:: :py:func:`setTemporalRange`
%End

View File

@ -1,88 +0,0 @@
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/qgstemporalrangeobject.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/
class QgsTemporalRangeObject
{
%Docstring
Base class for temporal based classes.
Subclasses may wish to update the abstract temporal functions.
.. versionadded:: 3.14
%End
%TypeHeaderCode
#include "qgstemporalrangeobject.h"
%End
public:
QgsTemporalRangeObject();
%Docstring
Constructor for QgsTemporalRangeObject.
%End
QgsTemporalRangeObject( bool enabled );
%Docstring
Creates temporal range object with the specified temporal state.
%End
QgsTemporalRangeObject( const QgsRenderContext &rh );
%Docstring
Copies render context temporal members
%End
virtual ~QgsTemporalRangeObject();
void setIsTemporal( bool enabled );
%Docstring
Sets object as a temporal based one, which will be considered when rendering maps with a specific time range set.
.. seealso:: :py:func:`isTemporal`
%End
bool isTemporal() const;
%Docstring
Returns true if the object is a temporal one, and will be filtered when rendering maps with a specific time range set.
For map settings, If false is returned, then any other temporal settings relating to the map will be ignored during rendering.
.. seealso:: :py:func:`setIsTemporal`
%End
void setTemporalRange( const QgsDateTimeRange &dateTimeRange );
%Docstring
Set datetime range for a temporal object.
It updates object temporal state to true if it was false.
When set, can be used to filter and request time base objects.
.. seealso:: :py:func:`temporalRange`
%End
const QgsDateTimeRange &temporalRange() const;
%Docstring
Returns datetime range if object is a temporal object.
.. seealso:: :py:func:`setTemporalRange`
%End
};
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/qgstemporalrangeobject.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/

View File

@ -193,9 +193,9 @@ Returns the sublayers of this layer - useful for providers that manage
their own layers, such as WMS
%End
virtual QgsRasterDataProviderTemporalProperties *temporalProperties();
virtual QgsRasterDataProviderTemporalCapabilities *temporalCapabilities();
%Docstring
Returns temporal properties associated with data provider.
Returns temporal capabilities associated with the data provider.
%End
virtual bool supportsLegendGraphic() const;

View File

@ -1,7 +1,7 @@
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/raster/qgsrasterdataprovidertemporalproperties.h *
* src/core/raster/qgsrasterdataprovidertemporalcapabilities.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/
@ -10,25 +10,29 @@
class QgsRasterDataProviderTemporalProperties : QgsDataProviderTemporalProperties
class QgsRasterDataProviderTemporalCapabilities : QgsDataProviderTemporalCapabilities
{
%Docstring
Implementation raster data provider temporal properties.
Implementation of data provider temporal properties for QgsRasterDataProviders.
Data provider temporal capabilities reflect the temporal capabilities of a QgsDataProvider.
Unlike QgsMapLayerTemporalProperties, these settings are not user-configurable,
and should only be set by the QgsDataProvider itself.
.. versionadded:: 3.14
%End
%TypeHeaderCode
#include "qgsrasterdataprovidertemporalproperties.h"
#include "qgsrasterdataprovidertemporalcapabilities.h"
%End
public:
QgsRasterDataProviderTemporalProperties( bool enabled = false );
QgsRasterDataProviderTemporalCapabilities( bool enabled = false );
%Docstring
Constructor for QgsRasterDataProviderTemporalProperties.
Constructor for :py:class:`QgsRasterDataProviderTemporalProperties`.
%End
virtual ~QgsRasterDataProviderTemporalProperties();
virtual ~QgsRasterDataProviderTemporalCapabilities();
void setTemporalRange( const QgsDateTimeRange &dateTimeRange );
@ -136,7 +140,7 @@ Returns the enabled status of the reference range.
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/raster/qgsrasterdataprovidertemporalproperties.h *
* src/core/raster/qgsrasterdataprovidertemporalcapabilities.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/

View File

@ -36,7 +36,6 @@ The ``enabled`` argument specifies whether the temporal properties are initially
{
ModeFixedTemporalRange,
ModeTemporalRangeFromDataProvider,
ModeTemporalRangesList
};
TemporalMode mode() const;

View File

@ -41,7 +41,7 @@
%Include auto_generated/qgsdataitemprovider.sip
%Include auto_generated/qgsdataitemproviderregistry.sip
%Include auto_generated/qgsdataprovider.sip
%Include auto_generated/qgsdataprovidertemporalproperties.sip
%Include auto_generated/qgsdataprovidertemporalcapabilities.sip
%Include auto_generated/qgsdatasourceuri.sip
%Include auto_generated/qgsdatetimestatisticalsummary.sip
%Include auto_generated/qgsdatumtransform.sip
@ -448,7 +448,7 @@
%Include auto_generated/raster/qgsrasterblock.sip
%Include auto_generated/raster/qgsrasterchecker.sip
%Include auto_generated/raster/qgsrasterdataprovider.sip
%Include auto_generated/raster/qgsrasterdataprovidertemporalproperties.sip
%Include auto_generated/raster/qgsrasterdataprovidertemporalcapabilities.sip
%Include auto_generated/raster/qgsrasterdrawer.sip
%Include auto_generated/raster/qgsrasterfilewriter.sip
%Include auto_generated/raster/qgsrasterfilewritertask.sip

View File

@ -1,7 +1,7 @@
/************************************************************************
* This file has been generated automatically from *
* *
* src/gui/qgstemporallayerwidget.h *
* src/gui/raster/qgsrasterlayertemporalpropertieswidget.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/
@ -11,23 +11,22 @@
class QgsTemporalLayerWidget : QWidget
class QgsRasterLayerTemporalPropertiesWidget : QWidget
{
%Docstring
A widget for filtering temporal layer based on its available time values
A widget for configuring the temporal properties for a raster layer.
.. versionadded:: 3.14
%End
%TypeHeaderCode
#include "qgstemporallayerwidget.h"
#include "qgsrasterlayertemporalpropertieswidget.h"
%End
public:
QgsTemporalLayerWidget( QWidget *parent = 0, QgsMapLayer *layer = 0 );
QgsRasterLayerTemporalPropertiesWidget( QWidget *parent = 0, QgsMapLayer *layer = 0 );
%Docstring
Constructor for QgsTemporalLayerWidget.
Constructor for QgsRasterLayerTemporalPropertiesWidget.
%End
void setMapCanvas( QgsMapCanvas *canvas );
@ -44,7 +43,7 @@ Save widget temporal properties inputs.
/************************************************************************
* This file has been generated automatically from *
* *
* src/gui/qgstemporallayerwidget.h *
* src/gui/raster/qgsrasterlayertemporalpropertieswidget.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/

View File

@ -193,7 +193,6 @@
%Include auto_generated/qgstablewidgetitem.sip
%Include auto_generated/qgstabwidget.sip
%Include auto_generated/qgstaskmanagerwidget.sip
%Include auto_generated/qgstemporallayerwidget.sip
%Include auto_generated/qgstextformatwidget.sip
%Include auto_generated/qgstextpreview.sip
%Include auto_generated/qgstreewidgetitem.sip
@ -327,6 +326,7 @@
%Include auto_generated/raster/qgssinglebandgrayrendererwidget.sip
%Include auto_generated/raster/qgssinglebandpseudocolorrendererwidget.sip
%Include auto_generated/raster/qgsrasterlayerproperties.sip
%Include auto_generated/raster/qgsrasterlayertemporalpropertieswidget.sip
%Include auto_generated/symbology/characterwidget.sip
%Include auto_generated/symbology/qgs25drendererwidget.sip
%Include auto_generated/symbology/qgsarrowsymbollayerwidget.sip

View File

@ -232,7 +232,7 @@ SET(QGIS_CORE_SRCS
qgsdataitemproviderregistry.cpp
qgsdatasourceuri.cpp
qgsdataprovider.cpp
qgsdataprovidertemporalproperties.cpp
qgsdataprovidertemporalcapabilities.cpp
qgsdatetimestatisticalsummary.cpp
qgsdatumtransform.cpp
qgsdbfilterproxymodel.cpp
@ -509,7 +509,7 @@ SET(QGIS_CORE_SRCS
raster/qgsrasterblock.cpp
raster/qgsrasterchecker.cpp
raster/qgsrasterdataprovider.cpp
raster/qgsrasterdataprovidertemporalproperties.cpp
raster/qgsrasterdataprovidertemporalcapabilities.cpp
raster/qgsrasterfilewritertask.cpp
raster/qgsrasteridentifyresult.cpp
raster/qgsrasterinterface.cpp
@ -729,7 +729,7 @@ SET(QGIS_CORE_HDRS
qgsdataitemprovider.h
qgsdataitemproviderregistry.h
qgsdataprovider.h
qgsdataprovidertemporalproperties.h
qgsdataprovidertemporalcapabilities.h
qgsdatasourceuri.h
qgsdatetimestatisticalsummary.h
qgsdatumtransform.h
@ -1219,7 +1219,7 @@ SET(QGIS_CORE_HDRS
raster/qgsrasterblock.h
raster/qgsrasterchecker.h
raster/qgsrasterdataprovider.h
raster/qgsrasterdataprovidertemporalproperties.h
raster/qgsrasterdataprovidertemporalcapabilities.h
raster/qgsrasterdrawer.h
raster/qgsrasterfilewriter.h
raster/qgsrasterfilewritertask.h

View File

@ -28,7 +28,7 @@
#include "qgscoordinatetransformcontext.h"
#include "qgslayermetadata.h"
#include "qgserror.h"
#include "qgsdataprovidertemporalproperties.h"
#include "qgsdataprovidertemporalcapabilities.h"
class QgsRectangle;
class QgsCoordinateReferenceSystem;
@ -173,11 +173,11 @@ class CORE_EXPORT QgsDataProvider : public QObject
}
/**
* Returns data provider temporal properties. This may be NULLPTR, depending on the data provider.
* Returns data provider temporal capabilities. This may be NULLPTR, depending on the data provider.
*
* \since QGIS 3.14
*/
virtual QgsDataProviderTemporalProperties *temporalProperties() { return nullptr; }
virtual QgsDataProviderTemporalCapabilities *temporalCapabilities() { return nullptr; }
/**
* Returns the extent of the layer

View File

@ -1,5 +1,5 @@
/***************************************************************************
qgsdataprovidertemporalproperties.cpp
qgsdataprovidertemporalcapabalities.cpp
---------------
begin : February 2020
copyright : (C) 2020 by Samweli Mwakisambwe
@ -15,9 +15,9 @@
* *
***************************************************************************/
#include "qgsdataprovidertemporalproperties.h"
#include "qgsdataprovidertemporalcapabilities.h"
QgsDataProviderTemporalProperties::QgsDataProviderTemporalProperties( bool enabled )
QgsDataProviderTemporalCapabilities::QgsDataProviderTemporalCapabilities( bool enabled )
: QgsTemporalProperty( enabled )
{
}

View File

@ -1,5 +1,5 @@
/***************************************************************************
qgsdataprovidertemporalproperties.h
qgsdataprovidertemporalcapabilities.h
---------------
begin : February 2020
copyright : (C) 2020 by Samweli Mwakisambwe
@ -16,8 +16,8 @@
***************************************************************************/
#ifndef QGSDATAPROVIDERTEMPORALPROPERTIES_H
#define QGSDATAPROVIDERTEMPORALPROPERTIES_H
#ifndef QGSDATAPROVIDERTEMPORALCAPABILITIES_H
#define QGSDATAPROVIDERTEMPORALCAPABILITIES_H
#include "qgis_core.h"
#include "qgis_sip.h"
@ -26,23 +26,23 @@
#include <QDomElement>
/**
* \class QgsDataProviderTemporalProperties
* \class QgsDataProviderTemporalCapabilities
* \ingroup core
* Class for handling data providers temporal properties.
* Class for handling data providers temporal capabilities.
*
* \since QGIS 3.14
*/
class CORE_EXPORT QgsDataProviderTemporalProperties : public QgsTemporalProperty
class CORE_EXPORT QgsDataProviderTemporalCapabilities : public QgsTemporalProperty
{
public:
/**
* Constructor for QgsDataProviderTemporalProperties.
* Constructor for QgsDataProviderTemporalCapabilities.
*/
QgsDataProviderTemporalProperties( bool enabled = false );
QgsDataProviderTemporalCapabilities( bool enabled = false );
virtual ~QgsDataProviderTemporalProperties() = default;
virtual ~QgsDataProviderTemporalCapabilities() = default;
};
#endif // QGSDATAPROVIDERTEMPORALPROPERTIES_H
#endif // QGSDATAPROVIDERTEMPORALCAPABILITIES_H

View File

@ -29,32 +29,34 @@
/**
* \class QgsMapLayerTemporalProperties
* \ingroup core
* An abstract base class for handling map layer temporal properties.
* Base class for storage of map layer temporal properties.
*
* QgsMapLayerTemporalProperties expose user-configurable settings for controlling
* how an individual QgsMapLayer behaves in a temporal context, e.g. while animating a map object.
*
* \since QGIS 3.14
*/
class CORE_EXPORT QgsMapLayerTemporalProperties : public QgsTemporalProperty
{
public:
/**
* Constructor for QgsMapLayerTemporalProperties.
*
* The \a enabled argument specifies whether the temporal properties are initially enabled or not (see isActive()).
*/
QgsMapLayerTemporalProperties( bool enabled = false );
virtual ~QgsMapLayerTemporalProperties() = default;
/**
* Writes the properties to a DOM \a element, to be used later with readXml().
* Writes map layer temporal properties to a DOM element, to be used later with readXml()
*
* \see readXml()
*/
virtual QDomElement writeXml( QDomElement &element, QDomDocument &doc, const QgsReadWriteContext &context ) = 0;
/**
* Reads temporal properties from a DOM \a element previously written by writeXml().
* Reads temporal properties from a DOM element previously written by writeXml()
*
* \see writeXml()
*/

View File

@ -1,60 +0,0 @@
/***************************************************************************
qgstemporalrangeobject.cpp
---------------
begin : January 2020
copyright : (C) 2020 by Samweli Mwakisambwe
email : samweli at kartoza dot com
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "qgstemporalrangeobject.h"
#include "qgsrendercontext.h"
QgsTemporalRangeObject::QgsTemporalRangeObject()
{
}
QgsTemporalRangeObject::QgsTemporalRangeObject( bool enabled )
: mTemporal( enabled )
{
}
QgsTemporalRangeObject::QgsTemporalRangeObject( const QgsRenderContext &rh )
: mTemporal( rh.isTemporal() )
, mDateTimeRange( rh.temporalRange() )
{
}
void QgsTemporalRangeObject::setIsTemporal( bool enabled )
{
mTemporal = enabled;
}
bool QgsTemporalRangeObject::isTemporal() const
{
return mTemporal;
}
void QgsTemporalRangeObject::setTemporalRange( const QgsDateTimeRange &dateTimeRange )
{
if ( !isTemporal() )
setIsTemporal( true );
mDateTimeRange = dateTimeRange;
}
const QgsDateTimeRange &QgsTemporalRangeObject::temporalRange() const
{
return mDateTimeRange;
}

View File

@ -1,63 +0,0 @@
/***************************************************************************
qgstemporalrangeobject.cpp
---------------
begin : January 2020
copyright : (C) 2020 by Samweli Mwakisambwe
email : samweli at kartoza dot com
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "qgstemporalrangeobject.h"
#include "qgsrendercontext.h"
QgsTemporalRangeObject::QgsTemporalRangeObject()
{
}
QgsTemporalRangeObject::QgsTemporalRangeObject( bool enabled )
: mTemporal( enabled )
{
}
QgsTemporalRangeObject::QgsTemporalRangeObject( const QgsRenderContext &rh )
: mTemporal( rh.isTemporal() )
, mDateTimeRange( rh.temporalRange() )
{
}
void QgsTemporalRangeObject::setIsTemporal( bool enabled )
{
mTemporal = enabled;
}
bool QgsTemporalRangeObject::isTemporal() const
{
return mTemporal;
}
void QgsTemporalRangeObject::setTemporalRange( const QgsDateTimeRange &dateTimeRange )
{
if ( dateTimeRange == mDateTimeRange )
return;
if ( !isTemporal() )
setIsTemporal( true );
mDateTimeRange = dateTimeRange;
}
const QgsDateTimeRange &QgsTemporalRangeObject::temporalRange() const
{
return mDateTimeRange;
}

View File

@ -23,10 +23,12 @@
#include "qgis_sip.h"
#include "qgsrange.h"
class QgsRenderContext;
/**
* \class QgsTemporalRangeObject
* \ingroup core
* Base class for objects with an associated (optional) temporal range.
* Base class for temporal based classes.
*
* \since QGIS 3.14
*/
@ -35,11 +37,14 @@ class CORE_EXPORT QgsTemporalRangeObject
public:
/**
* Constructor QgsTemporalRangeObject.
*
* The \a enabled argument specifies whether the temporal range is initially enabled or not (see isTemporal()).
* Constructor for QgsTemporalRangeObject.
*/
QgsTemporalRangeObject( bool enabled = false );
QgsTemporalRangeObject();
/**
* Creates temporal range object with the specified temporal state.
*/
QgsTemporalRangeObject( bool enabled );
/**
* Copies render context temporal members
@ -49,38 +54,34 @@ class CORE_EXPORT QgsTemporalRangeObject
virtual ~QgsTemporalRangeObject() = default;
/**
* Sets whether the temporal range is \a enabled (i.e. whether the object has a temporal range
* which will be considered when rendering maps with a specific time range set.)
* Sets object as a temporal based one, which will be considered when rendering maps with a specific time range set.
*
* \see isTemporal()
*/
void setIsTemporal( bool enabled );
/**
* Returns TRUE if the object's temporal range is enabled, and the object will be filtered when rendering maps with a specific time range set.
* Returns true if the object is a temporal one, and will be filtered when rendering maps with a specific time range set.
*
* For map settings, if FALSE is returned, then any other temporal settings relating to the map will be ignored during rendering.
* For map settings, If false is returned, then any other temporal settings relating to the map will be ignored during rendering.
*
* \see setIsTemporal()
*/
bool isTemporal() const;
/**
* Sets the temporal \a range for the object.
* Set datetime range for a temporal object.
*
* Calling setTemporalRange() automatically enables temporal properties on the
* object (see isTemporal()), regardless of its existing state.
* It updates object temporal state to true if it was false.
*
* When a temporal \a range is set it can be used to filter and request time base objects.
* When set, can be used to filter and request time base objects.
*
* \see temporalRange()
*/
void setTemporalRange( const QgsDateTimeRange &range );
void setTemporalRange( const QgsDateTimeRange &dateTimeRange );
/**
* Returns the datetime range for the object.
*
* This should only be considered when isTemporal() returns TRUE.
* Returns datetime range if object is a temporal object.
*
* \see setTemporalRange()
*/

View File

@ -1,102 +0,0 @@
/***************************************************************************
qgstemporalrangeobject.h
---------------
begin : January 2020
copyright : (C) 2020 by Samweli Mwakisambwe
email : samweli at kartoza dot com
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef QGSTEMPORALRANGEOBJECT_H
#define QGSTEMPORALRANGEOBJECT_H
#include "qgis_core.h"
#include "qgis_sip.h"
#include "qgsrange.h"
class QgsRenderContext;
/**
* \class QgsTemporalRangeObject
* \ingroup core
* Base class for temporal based classes.
*
* Subclasses may wish to update the abstract temporal functions.
*
* \since QGIS 3.14
*/
class CORE_EXPORT QgsTemporalRangeObject
{
public:
/**
* Constructor for QgsTemporalRangeObject.
*/
QgsTemporalRangeObject();
/**
* Creates temporal range object with the specified temporal state.
*/
QgsTemporalRangeObject( bool enabled );
/**
* Copies render context temporal members
*/
QgsTemporalRangeObject( const QgsRenderContext &rh );
virtual ~QgsTemporalRangeObject() = default;
/**
* Sets object as a temporal based one, which will be considered when rendering maps with a specific time range set.
*
* \see isTemporal()
*/
void setIsTemporal( bool enabled );
/**
* Returns true if the object is a temporal one, and will be filtered when rendering maps with a specific time range set.
*
* For map settings, If false is returned, then any other temporal settings relating to the map will be ignored during rendering.
*
* \see setIsTemporal()
*/
bool isTemporal() const;
/**
* Set datetime range for a temporal object.
*
* It updates object temporal state to true if it was false.
*
* When set, can be used to filter and request time base objects.
*
* \see temporalRange()
*/
void setTemporalRange( const QgsDateTimeRange &dateTimeRange );
/**
* Returns datetime range if object is a temporal object.
*
* \see setTemporalRange()
*/
const QgsDateTimeRange &temporalRange() const;
private:
//! Temporal state
bool mTemporal = false;
//! Represents datetime range member.
QgsDateTimeRange mDateTimeRange;
};
#endif // QGSTEMPORALRANGEOBJECT_H

View File

@ -217,14 +217,14 @@ QgsRasterDataProvider::QgsRasterDataProvider()
: QgsDataProvider( QString(), QgsDataProvider::ProviderOptions() )
, QgsRasterInterface( nullptr )
{
mTemporalProperties = std::unique_ptr< QgsRasterDataProviderTemporalProperties >( new QgsRasterDataProviderTemporalProperties() );
mTemporalCapabilities = qgis::make_unique< QgsRasterDataProviderTemporalCapabilities >();
}
QgsRasterDataProvider::QgsRasterDataProvider( const QString &uri, const ProviderOptions &options )
: QgsDataProvider( uri, options )
, QgsRasterInterface( nullptr )
{
mTemporalProperties = std::unique_ptr< QgsRasterDataProviderTemporalProperties >( new QgsRasterDataProviderTemporalProperties() );
mTemporalCapabilities = qgis::make_unique< QgsRasterDataProviderTemporalCapabilities >();
}
QgsRasterDataProvider::ProviderCapabilities QgsRasterDataProvider::providerCapabilities() const
@ -518,13 +518,13 @@ void QgsRasterDataProvider::copyBaseSettings( const QgsRasterDataProvider &other
mExtent = other.mExtent;
// copy temporal properties
mTemporalProperties->setIsActive( other.mTemporalProperties->isActive() );
mTemporalProperties->setTemporalRange( other.mTemporalProperties->temporalRange() );
mTemporalProperties->setFixedTemporalRange( other.mTemporalProperties->fixedTemporalRange() );
mTemporalProperties->setEnableTime( other.mTemporalProperties->isTimeEnabled() );
mTemporalProperties->setHasReference( other.mTemporalProperties->hasReference() );
mTemporalProperties->setReferenceTemporalRange( other.mTemporalProperties->referenceTemporalRange() );
mTemporalProperties->setFixedReferenceTemporalRange( other.mTemporalProperties->fixedReferenceTemporalRange() );
mTemporalCapabilities->setIsActive( other.mTemporalCapabilities->isActive() );
mTemporalCapabilities->setTemporalRange( other.mTemporalCapabilities->temporalRange() );
mTemporalCapabilities->setFixedTemporalRange( other.mTemporalCapabilities->fixedTemporalRange() );
mTemporalCapabilities->setEnableTime( other.mTemporalCapabilities->isTimeEnabled() );
mTemporalCapabilities->setHasReference( other.mTemporalCapabilities->hasReference() );
mTemporalCapabilities->setReferenceTemporalRange( other.mTemporalCapabilities->referenceTemporalRange() );
mTemporalCapabilities->setFixedReferenceTemporalRange( other.mTemporalCapabilities->fixedReferenceTemporalRange() );
}
// ENDS

View File

@ -40,7 +40,7 @@
#include "qgsrasterrange.h"
#include "qgsrectangle.h"
#include "qgsrasteriterator.h"
#include "qgsrasterdataprovidertemporalproperties.h"
#include "qgsrasterdataprovidertemporalcapabilities.h"
class QImage;
class QByteArray;
@ -263,9 +263,9 @@ class CORE_EXPORT QgsRasterDataProvider : public QgsDataProvider, public QgsRast
}
/**
* Returns temporal properties associated with data provider.
* Returns temporal capabilities associated with the data provider.
*/
QgsRasterDataProviderTemporalProperties *temporalProperties() override { return mTemporalProperties.get(); }
QgsRasterDataProviderTemporalCapabilities *temporalCapabilities() override { return mTemporalCapabilities.get(); }
//! \brief Returns whether the provider supplies a legend graphic
virtual bool supportsLegendGraphic() const { return false; }
@ -623,7 +623,7 @@ class CORE_EXPORT QgsRasterDataProvider : public QgsDataProvider, public QgsRast
/**
* Data provider temporal properties
*/
std::unique_ptr< QgsRasterDataProviderTemporalProperties > mTemporalProperties;
std::unique_ptr< QgsRasterDataProviderTemporalCapabilities > mTemporalCapabilities;
};

View File

@ -1,5 +1,5 @@
/***************************************************************************
qgsrasterdataprovidertemporalproperties.cpp
qgsrasterdataprovidertemporalcapabilities.cpp
---------------
begin : February 2020
copyright : (C) 2020 by Samweli Mwakisambwe
@ -15,10 +15,10 @@
* *
***************************************************************************/
#include "qgsrasterdataprovidertemporalproperties.h"
#include "qgsrasterdataprovidertemporalcapabilities.h"
QgsRasterDataProviderTemporalProperties::QgsRasterDataProviderTemporalProperties( bool enabled )
: QgsDataProviderTemporalProperties( enabled )
QgsRasterDataProviderTemporalCapabilities::QgsRasterDataProviderTemporalCapabilities( bool enabled )
: QgsDataProviderTemporalCapabilities( enabled )
{
}
@ -31,7 +31,7 @@ QgsRasterDataProviderTemporalProperties::QgsRasterDataProviderTemporalProperties
// return *this;
//}
void QgsRasterDataProviderTemporalProperties::setTemporalRange( const QgsDateTimeRange &dateTimeRange )
void QgsRasterDataProviderTemporalCapabilities::setTemporalRange( const QgsDateTimeRange &dateTimeRange )
{
if ( !isActive() )
setIsActive( true );
@ -40,12 +40,12 @@ void QgsRasterDataProviderTemporalProperties::setTemporalRange( const QgsDateTim
}
const QgsDateTimeRange &QgsRasterDataProviderTemporalProperties::temporalRange() const
const QgsDateTimeRange &QgsRasterDataProviderTemporalCapabilities::temporalRange() const
{
return mRange;
}
void QgsRasterDataProviderTemporalProperties::setFixedTemporalRange( const QgsDateTimeRange &dateTimeRange )
void QgsRasterDataProviderTemporalCapabilities::setFixedTemporalRange( const QgsDateTimeRange &dateTimeRange )
{
if ( !isActive() )
setIsActive( true );
@ -54,22 +54,22 @@ void QgsRasterDataProviderTemporalProperties::setFixedTemporalRange( const QgsDa
}
const QgsDateTimeRange &QgsRasterDataProviderTemporalProperties::fixedTemporalRange() const
const QgsDateTimeRange &QgsRasterDataProviderTemporalCapabilities::fixedTemporalRange() const
{
return mFixedRange;
}
void QgsRasterDataProviderTemporalProperties::setEnableTime( bool enabled )
void QgsRasterDataProviderTemporalCapabilities::setEnableTime( bool enabled )
{
mEnableTime = enabled;
}
bool QgsRasterDataProviderTemporalProperties::isTimeEnabled() const
bool QgsRasterDataProviderTemporalCapabilities::isTimeEnabled() const
{
return mEnableTime;
}
void QgsRasterDataProviderTemporalProperties::setReferenceTemporalRange( const QgsDateTimeRange &dateTimeRange )
void QgsRasterDataProviderTemporalCapabilities::setReferenceTemporalRange( const QgsDateTimeRange &dateTimeRange )
{
if ( !isActive() )
setIsActive( true );
@ -78,12 +78,12 @@ void QgsRasterDataProviderTemporalProperties::setReferenceTemporalRange( const Q
}
const QgsDateTimeRange &QgsRasterDataProviderTemporalProperties::referenceTemporalRange() const
const QgsDateTimeRange &QgsRasterDataProviderTemporalCapabilities::referenceTemporalRange() const
{
return mReferenceRange;
}
void QgsRasterDataProviderTemporalProperties::setFixedReferenceTemporalRange( const QgsDateTimeRange &dateTimeRange )
void QgsRasterDataProviderTemporalCapabilities::setFixedReferenceTemporalRange( const QgsDateTimeRange &dateTimeRange )
{
if ( !isActive() )
setIsActive( true );
@ -92,28 +92,28 @@ void QgsRasterDataProviderTemporalProperties::setFixedReferenceTemporalRange( co
}
const QgsDateTimeRange &QgsRasterDataProviderTemporalProperties::fixedReferenceTemporalRange() const
const QgsDateTimeRange &QgsRasterDataProviderTemporalCapabilities::fixedReferenceTemporalRange() const
{
return mFixedReferenceRange;
}
void QgsRasterDataProviderTemporalProperties::setHasReference( bool enabled )
void QgsRasterDataProviderTemporalCapabilities::setHasReference( bool enabled )
{
mHasReferenceRange = enabled;
}
bool QgsRasterDataProviderTemporalProperties::hasReference() const
bool QgsRasterDataProviderTemporalCapabilities::hasReference() const
{
return mHasReferenceRange;
}
void QgsRasterDataProviderTemporalProperties::setReferenceEnable( bool enabled )
void QgsRasterDataProviderTemporalCapabilities::setReferenceEnable( bool enabled )
{
mReferenceEnable = enabled;
}
bool QgsRasterDataProviderTemporalProperties::isReferenceEnable() const
bool QgsRasterDataProviderTemporalCapabilities::isReferenceEnable() const
{
return mReferenceEnable;
}

View File

@ -1,5 +1,5 @@
/***************************************************************************
qgsrasterdataprovidertemporalproperties.h
qgsrasterdataprovidertemporalcapabilities.h
---------------
begin : February 2020
copyright : (C) 2020 by Samweli Mwakisambwe
@ -15,34 +15,38 @@
* *
***************************************************************************/
#ifndef QGSRASTERDATAPROVIDERTEMPORALPROPERTIES_H
#define QGSRASTERDATAPROVIDERTEMPORALPROPERTIES_H
#ifndef QGSRASTERDATAPROVIDERTEMPORALCAPABILITIES_H
#define QGSRASTERDATAPROVIDERTEMPORALCAPABILITIES_H
#include "qgis_core.h"
#include "qgis_sip.h"
#include "qgsrange.h"
#include "qgsdataprovidertemporalproperties.h"
#include "qgsdataprovidertemporalcapabilities.h"
/**
* \class QgsRasterDataProviderTemporalProperties
* \class QgsRasterDataProviderTemporalCapabilities
* \ingroup core
* Implementation raster data provider temporal properties.
* Implementation of data provider temporal properties for QgsRasterDataProviders.
*
* Data provider temporal capabilities reflect the temporal capabilities of a QgsDataProvider.
* Unlike QgsMapLayerTemporalProperties, these settings are not user-configurable,
* and should only be set by the QgsDataProvider itself.
*
* \since QGIS 3.14
*/
class CORE_EXPORT QgsRasterDataProviderTemporalProperties : public QgsDataProviderTemporalProperties
class CORE_EXPORT QgsRasterDataProviderTemporalCapabilities : public QgsDataProviderTemporalCapabilities
{
public:
/**
* Constructor for QgsRasterDataProviderTemporalProperties.
*/
QgsRasterDataProviderTemporalProperties( bool enabled = false );
QgsRasterDataProviderTemporalCapabilities( bool enabled = false );
virtual ~QgsRasterDataProviderTemporalProperties() = default;
virtual ~QgsRasterDataProviderTemporalCapabilities() = default;
// QgsRasterDataProviderTemporalProperties &operator=( const QgsRasterDataProviderTemporalProperties &other );
// QgsRasterDataProviderTemporalCapabilities &operator=( const QgsRasterDataProviderTemporalProperties &other );
/**
* Sets the current active datetime range for the temporal properties.
@ -187,4 +191,4 @@ class CORE_EXPORT QgsRasterDataProviderTemporalProperties : public QgsDataProvid
};
#endif // QGSRASTERDATAPROVIDERTEMPORALPROPERTIES_H
#endif // QGSRASTERDATAPROVIDERTEMPORALCAPABILITIES_H

View File

@ -110,8 +110,6 @@ QgsRasterLayerTemporalProperties::TemporalMode QgsRasterLayerTemporalProperties:
return TemporalMode::ModeFixedTemporalRange;
case 1:
return TemporalMode::ModeTemporalRangeFromDataProvider;
case 2:
return TemporalMode::ModeTemporalRangesList;
default:
return TemporalMode::ModeFixedTemporalRange;
}

View File

@ -52,7 +52,6 @@ class CORE_EXPORT QgsRasterLayerTemporalProperties : public QgsMapLayerTemporalP
{
ModeFixedTemporalRange, //! Mode when temporal properties have fixed start and end datetimes.
ModeTemporalRangeFromDataProvider, //! Mode when raster layer depends on temporal range from its data provider.
ModeTemporalRangesList //! To be used when raster layer has list of temporal ranges.
};
/**

View File

@ -5,6 +5,7 @@ SET(QGIS_GUI_SRCS
raster/qgsrasterbandcombobox.cpp
raster/qgsrasterhistogramwidget.cpp
raster/qgsrasterlayerproperties.cpp
raster/qgsrasterlayertemporalpropertieswidget.cpp
raster/qgsrasterminmaxwidget.cpp
raster/qgsrasterrendererwidget.cpp
raster/qgssinglebandgrayrendererwidget.cpp
@ -457,7 +458,6 @@ SET(QGIS_GUI_SRCS
qgstabwidget.cpp
qgstablewidgetitem.cpp
qgstaskmanagerwidget.cpp
qgstemporallayerwidget.cpp
qgstextformatwidget.cpp
qgstextpreview.cpp
qgstreewidgetitem.cpp
@ -668,7 +668,6 @@ SET(QGIS_GUI_HDRS
qgstablewidgetitem.h
qgstabwidget.h
qgstaskmanagerwidget.h
qgstemporallayerwidget.h
qgstextformatwidget.h
qgstextpreview.h
qgstreewidgetitem.h
@ -914,6 +913,7 @@ SET(QGIS_GUI_HDRS
raster/qgssinglebandgrayrendererwidget.h
raster/qgssinglebandpseudocolorrendererwidget.h
raster/qgsrasterlayerproperties.h
raster/qgsrasterlayertemporalpropertieswidget.h
symbology/characterwidget.h
symbology/qgs25drendererwidget.h

View File

@ -59,7 +59,7 @@
#include "qgsfileutils.h"
#include "qgswebview.h"
#include "qgstemporallayerwidget.h"
#include "qgsrasterlayertemporalpropertieswidget.h"
#include <QDesktopServices>
#include <QTableWidgetItem>
@ -274,14 +274,12 @@ QgsRasterLayerProperties::QgsRasterLayerProperties( QgsMapLayer *lyr, QgsMapCanv
// Temporal options
if ( mRasterLayer->temporalProperties()->isActive() ||
mRasterLayer->dataProvider()->temporalProperties()->isActive() )
mRasterLayer->dataProvider()->temporalCapabilities()->isActive() )
{
QVBoxLayout *temporalLayout = new QVBoxLayout( temporalFrame );
mTemporalLayerWidget = new QgsTemporalLayerWidget( this, mRasterLayer );
mTemporalLayerWidget->setMapCanvas( mMapCanvas );
temporalLayout->addWidget( mTemporalLayerWidget );
// TODO set lower and upper limits in datetimeedit inputs
mTemporalWidget = new QgsRasterLayerTemporalPropertiesWidget( this, mRasterLayer );
mTemporalWidget->setMapCanvas( mMapCanvas );
temporalLayout->addWidget( mTemporalWidget );
}
@ -1111,7 +1109,7 @@ void QgsRasterLayerProperties::apply()
mRasterLayer->setCustomProperty( "WMSBackgroundLayer", mBackgroundLayerCheckBox->isChecked() );
// Update temporal properties
mTemporalLayerWidget->saveTemporalProperties();
mTemporalWidget->saveTemporalProperties();
// Force a redraw of the legend
mRasterLayer->setLegend( QgsMapLayerLegend::defaultRasterLegend( mRasterLayer ) );

View File

@ -37,7 +37,7 @@ class QgsMetadataWidget;
class QgsRasterRenderer;
class QgsRasterRendererWidget;
class QgsRasterHistogramWidget;
class QgsTemporalLayerWidget;
class QgsRasterLayerTemporalPropertiesWidget;
class QgsWebView;
@ -204,7 +204,7 @@ class GUI_EXPORT QgsRasterLayerProperties : public QgsOptionsDialogBase, private
/**
* Widget with temporal inputs, to be used by temporal based raster layers.
*/
QgsTemporalLayerWidget *mTemporalLayerWidget = nullptr;
QgsRasterLayerTemporalPropertiesWidget *mTemporalWidget = nullptr;
bool rasterIsMultiBandColor();

View File

@ -1,5 +1,5 @@
/***************************************************************************
qgstemporallayerwidget.cpp
qgsrasterlayertemporalpropertieswidget.cpp
------------------------------
begin : January 2020
copyright : (C) 2020 by Samweli Mwakisambwe
@ -15,80 +15,80 @@
* *
***************************************************************************/
#include "qgstemporallayerwidget.h"
#include "qgsrasterlayertemporalpropertieswidget.h"
#include "qgsgui.h"
#include "qgsproject.h"
QgsTemporalLayerWidget::QgsTemporalLayerWidget( QWidget *parent, QgsMapLayer *layer )
QgsRasterLayerTemporalPropertiesWidget::QgsRasterLayerTemporalPropertiesWidget( QWidget *parent, QgsMapLayer *layer )
: QWidget( parent )
, mLayer( layer )
{
setupUi( this );
connect( mSetEndAsStartNormalButton, &QPushButton::clicked, this, &QgsTemporalLayerWidget::setEndAsStartNormalButton_clicked );
connect( mSetEndAsStartReferenceButton, &QPushButton::clicked, this, &QgsTemporalLayerWidget::setEndAsStartReferenceButton_clicked );
connect( mLayerRadioButton, &QRadioButton::clicked, this, &QgsTemporalLayerWidget::layerRadioButton_clicked );
connect( mProjectRadioButton, &QRadioButton::clicked, this, &QgsTemporalLayerWidget::projectRadioButton_clicked );
connect( mReferenceCheckBox, &QCheckBox::clicked, this, &QgsTemporalLayerWidget::referenceCheckBox_clicked );
connect( mSetEndAsStartNormalButton, &QPushButton::clicked, this, &QgsRasterLayerTemporalPropertiesWidget::setEndAsStartNormalButton_clicked );
connect( mSetEndAsStartReferenceButton, &QPushButton::clicked, this, &QgsRasterLayerTemporalPropertiesWidget::setEndAsStartReferenceButton_clicked );
connect( mLayerRadioButton, &QRadioButton::clicked, this, &QgsRasterLayerTemporalPropertiesWidget::layerRadioButton_clicked );
connect( mProjectRadioButton, &QRadioButton::clicked, this, &QgsRasterLayerTemporalPropertiesWidget::projectRadioButton_clicked );
connect( mReferenceCheckBox, &QCheckBox::clicked, this, &QgsRasterLayerTemporalPropertiesWidget::referenceCheckBox_clicked );
init();
}
void QgsTemporalLayerWidget::setEndAsStartNormalButton_clicked()
void QgsRasterLayerTemporalPropertiesWidget::setEndAsStartNormalButton_clicked()
{
mEndTemporalDateTimeEdit->setDateTime( mStartTemporalDateTimeEdit->dateTime() );
// Update current selection label
// updateRangeLabel( "layer", mRangeLabel );
}
void QgsTemporalLayerWidget::setEndAsStartReferenceButton_clicked()
void QgsRasterLayerTemporalPropertiesWidget::setEndAsStartReferenceButton_clicked()
{
mEndReferenceDateTimeEdit->setDateTime( mStartReferenceDateTimeEdit->dateTime() );
}
void QgsTemporalLayerWidget::layerRadioButton_clicked()
void QgsRasterLayerTemporalPropertiesWidget::layerRadioButton_clicked()
{
if ( mLayerRadioButton->isChecked() )
{
setInputWidgetState( "normal", true );
setInputWidgetState( TemporalDimension::NormalTemporal, true );
// updateRangeLabel( "layer", mRangeLabel );
mProjectRadioButton->setChecked( false );
}
else
setInputWidgetState( "normal", false );
setInputWidgetState( TemporalDimension::NormalTemporal, false );
}
void QgsTemporalLayerWidget::projectRadioButton_clicked()
void QgsRasterLayerTemporalPropertiesWidget::projectRadioButton_clicked()
{
if ( mProjectRadioButton->isChecked() )
{
mLayerRadioButton->setChecked( false );
setInputWidgetState( "normal", false );
setInputWidgetState( TemporalDimension::NormalTemporal, false );
// updateRangeLabel( "project", mRangeLabel );
}
}
void QgsTemporalLayerWidget::referenceCheckBox_clicked()
void QgsRasterLayerTemporalPropertiesWidget::referenceCheckBox_clicked()
{
if ( mReferenceCheckBox->isChecked() )
setInputWidgetState( "reference", true );
setInputWidgetState( TemporalDimension::BiTemporal, true );
else
setInputWidgetState( "reference", false );
setInputWidgetState( TemporalDimension::BiTemporal, false );
}
void QgsTemporalLayerWidget::init()
void QgsRasterLayerTemporalPropertiesWidget::init()
{
mLayerRadioButton->setChecked( true );
setInputWidgetState( "reference", false );
setInputWidgetState( TemporalDimension::BiTemporal, false );
setDateTimeInputsLimit();
// updateRangeLabel( "layer", mRangeLabel );
}
void QgsTemporalLayerWidget::setDateTimeInputsLimit()
void QgsRasterLayerTemporalPropertiesWidget::setDateTimeInputsLimit()
{
QgsRasterLayer *layer = qobject_cast<QgsRasterLayer *>( mLayer );
QgsDateTimeRange range = layer->dataProvider()->temporalProperties()->fixedTemporalRange();
QgsDateTimeRange referenceRange = layer->dataProvider()->temporalProperties()->fixedReferenceTemporalRange();
QgsDateTimeRange range = layer->dataProvider()->temporalCapabilities()->fixedTemporalRange();
QgsDateTimeRange referenceRange = layer->dataProvider()->temporalCapabilities()->fixedReferenceTemporalRange();
if ( range.begin().isValid() && range.end().isValid() )
{
@ -102,15 +102,15 @@ void QgsTemporalLayerWidget::setDateTimeInputsLimit()
}
}
void QgsTemporalLayerWidget::setInputWidgetState( QString type, bool enabled )
void QgsRasterLayerTemporalPropertiesWidget::setInputWidgetState( TemporalDimension dimension, bool enabled )
{
if ( type == "normal" )
if ( dimension == TemporalDimension::NormalTemporal )
{
mStartTemporalDateTimeEdit->setEnabled( enabled );
mEndTemporalDateTimeEdit->setEnabled( enabled );
mSetEndAsStartNormalButton->setEnabled( enabled );
}
else if ( type == "reference" )
else if ( dimension == TemporalDimension::BiTemporal )
{
mStartReferenceDateTimeEdit->setEnabled( enabled );
mEndReferenceDateTimeEdit->setEnabled( enabled );
@ -118,12 +118,12 @@ void QgsTemporalLayerWidget::setInputWidgetState( QString type, bool enabled )
}
}
void QgsTemporalLayerWidget::setMapCanvas( QgsMapCanvas *canvas )
void QgsRasterLayerTemporalPropertiesWidget::setMapCanvas( QgsMapCanvas *canvas )
{
mCanvas = canvas;
}
void QgsTemporalLayerWidget::saveTemporalProperties()
void QgsRasterLayerTemporalPropertiesWidget::saveTemporalProperties()
{
if ( mLayerRadioButton->isChecked() )
{
@ -133,12 +133,12 @@ void QgsTemporalLayerWidget::saveTemporalProperties()
QgsDateTimeRange normalRange = QgsDateTimeRange( mStartTemporalDateTimeEdit->dateTime(),
mEndTemporalDateTimeEdit->dateTime() );
QgsRasterLayer *rasterLayer = qobject_cast<QgsRasterLayer *>( mLayer );
rasterLayer->dataProvider()->temporalProperties()->setTemporalRange( normalRange );
rasterLayer->dataProvider()->temporalCapabilities()->setTemporalRange( normalRange );
if ( mDisableTime->isChecked() )
rasterLayer->dataProvider()->temporalProperties()->setEnableTime( false );
rasterLayer->dataProvider()->temporalCapabilities()->setEnableTime( false );
else
rasterLayer->dataProvider()->temporalProperties()->setEnableTime( true );
rasterLayer->dataProvider()->temporalCapabilities()->setEnableTime( true );
// Update current selection label
// updateRangeLabel( "layer", mRangeLabel );
@ -147,11 +147,11 @@ void QgsTemporalLayerWidget::saveTemporalProperties()
{
QgsDateTimeRange referenceRange = QgsDateTimeRange( mStartReferenceDateTimeEdit->dateTime(),
mEndReferenceDateTimeEdit->dateTime() );
rasterLayer->dataProvider()->temporalProperties()->setReferenceTemporalRange( referenceRange );
rasterLayer->dataProvider()->temporalProperties()->setReferenceEnable( true );
rasterLayer->dataProvider()->temporalCapabilities()->setReferenceTemporalRange( referenceRange );
rasterLayer->dataProvider()->temporalCapabilities()->setReferenceEnable( true );
}
else
rasterLayer->dataProvider()->temporalProperties()->setReferenceEnable( false );
rasterLayer->dataProvider()->temporalCapabilities()->setReferenceEnable( false );
}
if ( mProjectRadioButton->isChecked() )
@ -159,20 +159,19 @@ void QgsTemporalLayerWidget::saveTemporalProperties()
if ( mLayer->type() == QgsMapLayerType::RasterLayer &&
mLayer->providerType() == "wms" )
{
QgsDateTimeRange projectRange = mCanvas->mapSettings().temporalRange();
QgsRasterLayer *rasterLayer = qobject_cast<QgsRasterLayer *> ( mLayer );
rasterLayer->dataProvider()->temporalProperties()->setTemporalRange( projectRange );
// rasterLayer->dataProvider()->temporalCapabilities()->setTemporalRange( projectRange );
if ( mReferenceCheckBox->isChecked() )
rasterLayer->dataProvider()->temporalProperties()->setReferenceEnable( true );
rasterLayer->dataProvider()->temporalCapabilities()->setReferenceEnable( true );
else
rasterLayer->dataProvider()->temporalProperties()->setReferenceEnable( false );
rasterLayer->dataProvider()->temporalCapabilities()->setReferenceEnable( false );
}
}
}
}
void QgsTemporalLayerWidget::updateRangeLabel( QString type, QLabel *label )
void QgsRasterLayerTemporalPropertiesWidget::updateRangeLabel( QString type, QLabel *label )
{
if ( type == "layer" )
label->setText( tr( "Current selection range: %1 to %2" ).arg(

View File

@ -1,5 +1,5 @@
/***************************************************************************
qgstemporallayerwidget.h
qgsrasterlayertemporalpropertieswidget.h
------------------------------
begin : January 2020
copyright : (C) 2020 by Samweli Mwakisambwe
@ -15,34 +15,33 @@
* *
***************************************************************************/
#ifndef QGSTEMPORALLAYERWIDGET_H
#define QGSTEMPORALLAYERWIDGET_H
#ifndef QGSRASTERLAYERTEMPORALPROPERTIESWIDGET_H
#define QGSRASTERLAYERTEMPORALPROPERTIESWIDGET_H
#include "ui_qgstemporallayerwidgetbase.h"
#include "ui_qgsrasterlayertemporalpropertieswidgetbase.h"
#include "qgis_gui.h"
#include "qgsmapcanvas.h"
#include "qgsrasterlayer.h"
class QgsMapLayer;
/**
* \ingroup gui
* \class QgsTemporalLayerWidget
* A widget for filtering temporal layer based on its available time values
* \class QgsRasterLayerTemporalPropertiesWidget
* A widget for configuring the temporal properties for a raster layer.
*
* \since QGIS 3.14
*/
class GUI_EXPORT QgsTemporalLayerWidget : public QWidget, private Ui::QgsTemporalLayerWidgetBase
class GUI_EXPORT QgsRasterLayerTemporalPropertiesWidget : public QWidget, private Ui::QgsRasterLayerTemporalPropertiesWidgetBase
{
Q_OBJECT
public:
/**
* Constructor for QgsTemporalLayerWidget.
* Constructor for QgsRasterLayerTemporalPropertiesWidget.
*/
QgsTemporalLayerWidget( QWidget *parent = nullptr, QgsMapLayer *layer = nullptr );
QgsRasterLayerTemporalPropertiesWidget( QWidget *parent = nullptr, QgsMapLayer *layer = nullptr );
/**
* Sets the map canvas associtated with this temporal widget.
@ -55,6 +54,39 @@ class GUI_EXPORT QgsTemporalLayerWidget : public QWidget, private Ui::QgsTempora
*/
void saveTemporalProperties();
private:
/**
* Initialize the widget with default state.
*/
void init();
/**
* Map canvas associtated with this temporal widget.
*
* This can be used to get current project map settings.
*/
QgsMapCanvas *mCanvas = nullptr;
/**
* The corresponding map layer with temporal attributes
*/
QgsMapLayer *mLayer = nullptr;
/**
* Mode used to determine if temporal properties dimensional status.
*/
enum TemporalDimension
{
NormalTemporal, //! When temporal properties have single temporal dimension.
/**
* When temporal properties have bi-temporal dimension,
* eg. have normal time and reference time or reference time only.
*/
BiTemporal
};
private slots:
/**
@ -86,10 +118,10 @@ class GUI_EXPORT QgsTemporalLayerWidget : public QWidget, private Ui::QgsTempora
/**
* Sets the input widgets enable state in this temporal widget.
*
* \param type widget type
* \param dimension determine to either enable normal time or reference time.
* \param enabled new enable status
*/
void setInputWidgetState( QString type, bool enabled );
void setInputWidgetState( TemporalDimension dimension, bool enabled );
/**
* Updates the range label with current set datetime range.
@ -104,31 +136,5 @@ class GUI_EXPORT QgsTemporalLayerWidget : public QWidget, private Ui::QgsTempora
**/
void setDateTimeInputsLimit();
private:
/**
* Initialize the widget with default state.
*/
void init();
/**
* Map canvas associtated with this temporal widget.
*
* This can be used to get current project map settings.
*/
QgsMapCanvas *mCanvas = nullptr;
/**
* Update temporal layer Uri
*
*/
QString updateTemporalDataSource( QString sourceUri, QgsDateTimeRange sourceRange );
/**
* The corresponding map layer with temporal attributes
*/
QgsMapLayer *mLayer = nullptr;
};
#endif // QGSTEMPORALLAYERWIDGET_H
#endif // QGSRASTERLAYERTEMPORALPROPERTIESWIDGET_H

View File

@ -273,25 +273,23 @@ QgsDateTimeRange QgsWmsSettings::parseTemporalExtent( QgsWmstDimensionExtent dim
QgsWmstResolution QgsWmsSettings::parseWmstResolution( QString item )
{
QgsWmstResolution resolution;
char datesSymbols[] = { 'Y', 'M', 'D' };
char timesSymbols[] = { 'H', 'M', 'S' };
for ( int i = 0; i < 3; i++ )
for ( char datesSymbol : { 'Y', 'M', 'D' } )
{
QString number = item.left( item.indexOf( datesSymbols[i] ) );
QString number = item.left( item.indexOf( datesSymbol ) );
int resolutionValue = number.remove( 'P' ).toInt();
if ( datesSymbols[i] == 'Y' && item.contains( 'Y' ) )
if ( datesSymbol == 'Y' && item.contains( 'Y' ) )
{
resolution.year = resolutionValue;
item = item.remove( number );
}
if ( datesSymbols[i] == 'M' && item.contains( 'M' ) )
if ( datesSymbol == 'M' && item.contains( 'M' ) )
{
resolution.month = resolutionValue;
item = item.remove( number );
}
if ( datesSymbols[i] == 'D' && item.contains( 'D' ) )
if ( datesSymbol == 'D' && item.contains( 'D' ) )
{
resolution.day = resolutionValue;
item = item.remove( number );
@ -303,22 +301,22 @@ QgsWmstResolution QgsWmsSettings::parseWmstResolution( QString item )
else
item.remove( 'T' );
for ( int i = 0; i < 3; i++ )
for ( char timeSymbol : { 'H', 'M', 'S' } )
{
QString number = item.left( item.indexOf( timesSymbols[i] ) );
QString number = item.left( item.indexOf( timeSymbol ) );
int resolutionValue = number.remove( 'P' ).toInt();
if ( timesSymbols[i] == 'H' && item.contains( 'H' ) )
if ( timeSymbol == 'H' && item.contains( 'H' ) )
{
resolution.hour = resolutionValue;
item = item.remove( number );
}
if ( timesSymbols[i] == 'M' && item.contains( 'M' ) )
if ( timeSymbol == 'M' && item.contains( 'M' ) )
{
resolution.minutes = resolutionValue;
item = item.remove( number );
}
if ( timesSymbols[i] == 'S' && item.contains( 'S' ) )
if ( timeSymbol == 'S' && item.contains( 'S' ) )
{
resolution.seconds = resolutionValue;
item = item.remove( number );

View File

@ -154,11 +154,11 @@ QgsWmsProvider::QgsWmsProvider( QString const &uri, const ProviderOptions &optio
// Setup temporal properties for layers in WMS-T
if ( mSettings.mIsTemporal )
{
temporalProperties()->setFixedTemporalRange( mSettings.mFixedRange );
temporalCapabilities()->setFixedTemporalRange( mSettings.mFixedRange );
if ( mSettings.mIsBiTemporal )
{
temporalProperties()->setFixedReferenceTemporalRange( mSettings.mFixedReferenceRange );
temporalProperties()->setHasReference( true );
temporalCapabilities()->setFixedReferenceTemporalRange( mSettings.mFixedReferenceRange );
temporalCapabilities()->setHasReference( true );
}
}
}
@ -1044,7 +1044,7 @@ QUrl QgsWmsProvider::createRequestUrlWMS( const QgsRectangle &viewExtent, int pi
setQueryItem( query, QStringLiteral( "STYLES" ), styles );
// For WMS-T layers
if ( temporalProperties()->isActive() )
if ( temporalCapabilities()->isActive() )
{
addWmstParameters( query );
}
@ -1077,10 +1077,10 @@ QUrl QgsWmsProvider::createRequestUrlWMS( const QgsRectangle &viewExtent, int pi
void QgsWmsProvider::addWmstParameters( QUrlQuery &query )
{
QgsDateTimeRange range = temporalProperties()->temporalRange();
QgsDateTimeRange range = temporalCapabilities()->temporalRange();
QString format = "yyyy-MM-ddThh:mm:ssZ";
if ( !temporalProperties()->isTimeEnabled() )
if ( !temporalCapabilities()->isTimeEnabled() )
format = "yyyy-MM-dd";
if ( range.begin().isValid() && range.end().isValid() )
@ -1098,10 +1098,10 @@ void QgsWmsProvider::addWmstParameters( QUrlQuery &query )
}
}
// If the data provider has bi-temporal properties and they are enabled
if ( temporalProperties()->hasReference() &&
temporalProperties()->isReferenceEnable() )
if ( temporalCapabilities()->hasReference() &&
temporalCapabilities()->isReferenceEnable() )
{
QgsDateTimeRange referenceRange = temporalProperties()->referenceTemporalRange();
QgsDateTimeRange referenceRange = temporalCapabilities()->referenceTemporalRange();
if ( referenceRange.begin() == referenceRange.end() )
setQueryItem( query, QStringLiteral( "DIM_REFERENCE" ),

View File

@ -14,7 +14,6 @@ FILE(GLOB _3D_UIS "${CMAKE_CURRENT_SOURCE_DIR}/3d/*.ui")
FILE(GLOB CALLOUT_UIS "${CMAKE_CURRENT_SOURCE_DIR}/callouts/*.ui")
FILE(GLOB NUMERICFORMAT_UIS "${CMAKE_CURRENT_SOURCE_DIR}/numericformats/*.ui")
FILE(GLOB ATTRIBUTEFORMCONFIG_UIS "${CMAKE_CURRENT_SOURCE_DIR}/attributeformconfig/*.ui")
FILE(GLOB TEMPORALWIDGET_UIS "${CMAKE_CURRENT_SOURCE_DIR}/temporalwidgets/*.ui")
QT5_WRAP_UI(QGIS_UIS_H
${QGIS_UIS}

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QgsTemporalLayerWidgetBase</class>
<widget class="QWidget" name="QgsTemporalLayerWidgetBase">
<class>QgsRasterLayerTemporalPropertiesWidgetBase</class>
<widget class="QWidget" name="QgsRasterLayerTemporalPropertiesWidgetBase">
<property name="geometry">
<rect>
<x>0</x>
@ -57,7 +57,7 @@
</property>
<property name="styleSheet">
<string notr="true">QgsCollapsibleGroupBoxBasic::title, QgsCollapsibleGroupBox::title { subcontrol-origin: margin; subcontrol-position: top left; margin-left: 20px; margin-right: 5px; left: 0px; top: 1px;}QgsCollapsibleGroupBoxBasic::title, QgsCollapsibleGroupBox::title { subcontrol-origin: margin; subcontrol-position: top left; margin-left: 20px; margin-right: 5px; left: 0px; top: 1px;}QgsCollapsibleGroupBoxBasic::title, QgsCollapsibleGroupBox::title { subcontrol-origin: margin; subcontrol-position: top left; margin-left: 20px; margin-right: 5px; left: 0px; top: 1px;}QgsCollapsibleGroupBoxBasic::title, QgsCollapsibleGroupBox::title { subcontrol-origin: margin; subcontrol-position: top left; margin-left: 20px; margin-right: 5px; left: 0px; top: 1px;}
background: white;QgsCollapsibleGroupBoxBasic::title, QgsCollapsibleGroupBox::title { subcontrol-origin: margin; subcontrol-position: top left; margin-left: 20px; margin-right: 5px; left: 0px; top: 1px;}QgsCollapsibleGroupBoxBasic::title, QgsCollapsibleGroupBox::title { subcontrol-origin: margin; subcontrol-position: top left; margin-left: 20px; margin-right: 5px; left: 0px; top: 1px;}QgsCollapsibleGroupBoxBasic::title, QgsCollapsibleGroupBox::title { subcontrol-origin: margin; subcontrol-position: top left; margin-left: 20px; margin-right: 5px; left: 0px; top: 1px;}QgsCollapsibleGroupBoxBasic::title, QgsCollapsibleGroupBox::title { subcontrol-origin: margin; subcontrol-position: top left; margin-left: 20px; margin-right: 5px; left: 0px; top: 1px;}QgsCollapsibleGroupBoxBasic::title, QgsCollapsibleGroupBox::title { subcontrol-origin: margin; subcontrol-position: top left; margin-left: 20px; margin-right: 5px; left: 0px; top: 1px;}QgsCollapsibleGroupBoxBasic::title, QgsCollapsibleGroupBox::title { subcontrol-origin: margin; subcontrol-position: top left; margin-left: 20px; margin-right: 5px; left: 0px; top: 1px;}QgsCollapsibleGroupBoxBasic::title, QgsCollapsibleGroupBox::title { subcontrol-origin: margin; subcontrol-position: top left; margin-left: 20px; margin-right: 5px; left: 0px; top: 1px;}</string>
background: white;QgsCollapsibleGroupBoxBasic::title, QgsCollapsibleGroupBox::title { subcontrol-origin: margin; subcontrol-position: top left; margin-left: 20px; margin-right: 5px; left: 0px; top: 1px;}QgsCollapsibleGroupBoxBasic::title, QgsCollapsibleGroupBox::title { subcontrol-origin: margin; subcontrol-position: top left; margin-left: 20px; margin-right: 5px; left: 0px; top: 1px;}QgsCollapsibleGroupBoxBasic::title, QgsCollapsibleGroupBox::title { subcontrol-origin: margin; subcontrol-position: top left; margin-left: 20px; margin-right: 5px; left: 0px; top: 1px;}QgsCollapsibleGroupBoxBasic::title, QgsCollapsibleGroupBox::title { subcontrol-origin: margin; subcontrol-position: top left; margin-left: 20px; margin-right: 5px; left: 0px; top: 1px;}QgsCollapsibleGroupBoxBasic::title, QgsCollapsibleGroupBox::title { subcontrol-origin: margin; subcontrol-position: top left; margin-left: 20px; margin-right: 5px; left: 0px; top: 1px;}QgsCollapsibleGroupBoxBasic::title, QgsCollapsibleGroupBox::title { subcontrol-origin: margin; subcontrol-position: top left; margin-left: 20px; margin-right: 5px; left: 0px; top: 1px;}QgsCollapsibleGroupBoxBasic::title, QgsCollapsibleGroupBox::title { subcontrol-origin: margin; subcontrol-position: top left; margin-left: 20px; margin-right: 5px; left: 0px; top: 1px;}QgsCollapsibleGroupBoxBasic::title, QgsCollapsibleGroupBox::title { subcontrol-origin: margin; subcontrol-position: top left; margin-left: 20px; margin-right: 5px; left: 0px; top: 1px;}</string>
</property>
<property name="title">
<string>Temporal</string>

View File

@ -1024,14 +1024,14 @@ void TestQgsRasterLayer::testTemporalProperties()
QCOMPARE( temporalProperties->mode(), QgsRasterLayerTemporalProperties::TemporalMode::ModeFixedTemporalRange );
temporalProperties->setMode( QgsRasterLayerTemporalProperties::TemporalMode::ModeTemporalRangesList );
temporalProperties->setMode( QgsRasterLayerTemporalProperties::TemporalMode::ModeTemporalRangeFromDataProvider );
// Change temporal properties, save the xml
QDomElement element = temporalProperties->writeXml( elementRoot, document, QgsReadWriteContext() );
// Restore
QVERIFY( temporalProperties->readXml( element, QgsReadWriteContext() ) );
QCOMPARE( temporalProperties->mode(), QgsRasterLayerTemporalProperties::TemporalMode::ModeTemporalRangesList );
QCOMPARE( temporalProperties->mode(), QgsRasterLayerTemporalProperties::TemporalMode::ModeTemporalRangeFromDataProvider );
QCOMPARE( mTemporalRasterLayer->temporalProperties()->fixedTemporalRange().begin(), dateTimeRange.begin() );
QCOMPARE( mTemporalRasterLayer->temporalProperties()->fixedTemporalRange().end(), dateTimeRange.end() );