Add a new enum for inherent map layer properties, and add property

to annotation layers to reflect that while these are editable
users are not able to toggle edits on them (they are ALWAYS
editable!)

Note that we can't use the existing QgsMapLayer::LayerFlag enum here,
as that has a different meaning (flags which are set by users
at runtime)
This commit is contained in:
Nyall Dawson 2021-08-18 08:09:08 +10:00
parent 3f7fc069ae
commit 3b2e640cee
9 changed files with 72 additions and 0 deletions

View File

@ -640,3 +640,8 @@ Qgis.FileOperationFlag.IncludeStyleFile.__doc__ = "Indicates that any associated
Qgis.FileOperationFlag.__doc__ = 'File operation flags.\n\n.. versionadded:: 3.22\n\n' + '* ``IncludeMetadataFile``: ' + Qgis.FileOperationFlag.IncludeMetadataFile.__doc__ + '\n' + '* ``IncludeStyleFile``: ' + Qgis.FileOperationFlag.IncludeStyleFile.__doc__
# --
Qgis.FileOperationFlag.baseClass = Qgis
# monkey patching scoped based enum
Qgis.MapLayerProperty.UsersCannotToggleEditing.__doc__ = "Indicates that users are not allowed to toggle editing for this layer. Note that this does not imply that the layer is non-editable (see isEditable(), supportsEditing() ), rather that the editable status of the layer cannot be changed by users manually. Since QGIS 3.22."
Qgis.MapLayerProperty.__doc__ = 'Generic map layer properties.\n\n.. versionadded:: 3.22\n\n' + '* ``UsersCannotToggleEditing``: ' + Qgis.MapLayerProperty.UsersCannotToggleEditing.__doc__
# --
Qgis.MapLayerProperty.baseClass = Qgis

View File

@ -93,6 +93,8 @@ This map contains references to items owned by the layer, and ownership of these
with the layer.
%End
virtual Qgis::MapLayerProperties properties() const;
virtual QgsAnnotationLayer *clone() const /Factory/;
virtual QgsMapLayerRenderer *createMapRenderer( QgsRenderContext &rendererContext ) /Factory/;

View File

@ -452,6 +452,13 @@ The development version
typedef QFlags<Qgis::FileOperationFlag> FileOperationFlags;
enum class MapLayerProperty
{
UsersCannotToggleEditing,
};
typedef QFlags<Qgis::MapLayerProperty> MapLayerProperties;
static const double DEFAULT_SEARCH_RADIUS_MM;
static const float DEFAULT_MAPTOPIXEL_THRESHOLD;

View File

@ -140,6 +140,8 @@ Returns the flags for this layer.
For instance, even if the Removable flag is not set, the layer can still be removed with the API
but the action will not be listed in the legend menu.
.. seealso:: :py:func:`properties`
.. versionadded:: 3.4
%End
@ -153,7 +155,22 @@ Returns the flags for this layer.
For instance, even if the Removable flag is not set, the layer can still be removed with the API
but the action will not be listed in the legend menu.
.. seealso:: :py:func:`properties`
.. versionadded:: 3.4
%End
virtual Qgis::MapLayerProperties properties() const;
%Docstring
Returns the map layer properties of this layer.
.. note::
:py:func:`~QgsMapLayer.properties` differ from :py:func:`~QgsMapLayer.flags` in that :py:func:`~QgsMapLayer.flags` are user settable, and reflect options that
users can enable for map layers. In contrast :py:func:`~QgsMapLayer.properties` are reflections of inherent capabilities
for the layer, which cannot be directly changed by users.
.. versionadded:: 3.22
%End
static QString extensionPropertyType( PropertyType type );

View File

@ -81,6 +81,12 @@ bool QgsAnnotationLayer::isEmpty() const
return mItems.empty();
}
Qgis::MapLayerProperties QgsAnnotationLayer::properties() const
{
// annotation layers are always editable
return Qgis::MapLayerProperty::UsersCannotToggleEditing;
}
QgsAnnotationLayer *QgsAnnotationLayer::clone() const
{
const QgsAnnotationLayer::LayerOptions options( mTransformContext );

View File

@ -117,6 +117,7 @@ class CORE_EXPORT QgsAnnotationLayer : public QgsMapLayer
*/
QMap<QString, QgsAnnotationItem *> items() const { return mItems; }
Qgis::MapLayerProperties properties() const override;
QgsAnnotationLayer *clone() const override SIP_FACTORY;
QgsMapLayerRenderer *createMapRenderer( QgsRenderContext &rendererContext ) override SIP_FACTORY;
QgsRectangle extent() const override;

View File

@ -706,6 +706,18 @@ class CORE_EXPORT Qgis
Q_DECLARE_FLAGS( FileOperationFlags, FileOperationFlag )
Q_ENUM( FileOperationFlag )
/**
* Generic map layer properties.
*
* \since QGIS 3.22
*/
enum class MapLayerProperty : int
{
UsersCannotToggleEditing = 1 << 0, //!< Indicates that users are not allowed to toggle editing for this layer. Note that this does not imply that the layer is non-editable (see isEditable(), supportsEditing() ), rather that the editable status of the layer cannot be changed by users manually. Since QGIS 3.22.
};
Q_DECLARE_FLAGS( MapLayerProperties, MapLayerProperty )
Q_ENUM( MapLayerProperty )
/**
* Identify search radius in mm
* \since QGIS 2.3

View File

@ -155,6 +155,11 @@ void QgsMapLayer::setFlags( QgsMapLayer::LayerFlags flags )
emit flagsChanged();
}
Qgis::MapLayerProperties QgsMapLayer::properties() const
{
return Qgis::MapLayerProperties();
}
QString QgsMapLayer::id() const
{
return mID;

View File

@ -210,6 +210,9 @@ class CORE_EXPORT QgsMapLayer : public QObject
* \note Flags are options specified by the user used for the UI but are not preventing any API call.
* For instance, even if the Removable flag is not set, the layer can still be removed with the API
* but the action will not be listed in the legend menu.
*
* \see properties()
*
* \since QGIS 3.4
*/
QgsMapLayer::LayerFlags flags() const;
@ -219,10 +222,24 @@ class CORE_EXPORT QgsMapLayer : public QObject
* \note Flags are options specified by the user used for the UI but are not preventing any API call.
* For instance, even if the Removable flag is not set, the layer can still be removed with the API
* but the action will not be listed in the legend menu.
*
* \see properties()
*
* \since QGIS 3.4
*/
void setFlags( QgsMapLayer::LayerFlags flags );
/**
* Returns the map layer properties of this layer.
*
* \note properties() differ from flags() in that flags() are user settable, and reflect options that
* users can enable for map layers. In contrast properties() are reflections of inherent capabilities
* for the layer, which cannot be directly changed by users.
*
* \since QGIS 3.22
*/
virtual Qgis::MapLayerProperties properties() const;
/**
* Returns the extension of a Property.
* \returns The extension