/************************************************************************
 * This file has been generated automatically from                      *
 *                                                                      *
 * src/core/layout/qgslayoutitemmapgrid.h                               *
 *                                                                      *
 * Do not edit manually ! Edit header and run scripts/sipify.pl again   *
 ************************************************************************/





class QgsLayoutItemMapGridStack : QgsLayoutItemMapItemStack
{
%Docstring
A collection of grids which is drawn above the map content in a
QgsLayoutItemMap. The grid stack controls which grids are drawn and the
order they are drawn in.

.. seealso:: :py:class:`QgsLayoutItemMapGrid`

.. versionadded:: 3.0
%End

%TypeHeaderCode
#include "qgslayoutitemmapgrid.h"
%End
  public:

    QgsLayoutItemMapGridStack( QgsLayoutItemMap *map );
%Docstring
Constructor for QgsLayoutItemMapGridStack, attached to the specified ``map``.
%End

    void addGrid( QgsLayoutItemMapGrid *grid /Transfer/ );
%Docstring
Adds a new map ``grid`` to the stack and takes ownership of the grid.
The grid will be added to the end of the stack, and rendered
above any existing map grids already present in the stack.

.. note::

   After adding a grid to the stack, updateBoundingRect() and update()
   should be called for the QgsLayoutItemMap to prevent rendering artifacts.

.. seealso:: :py:func:`removeGrid`
%End

    void removeGrid( const QString &gridId );
%Docstring
Removes a grid with matching ``gridId`` from the stack and deletes the corresponding :py:class:`QgsLayoutItemMapGrid`.

.. note::

   After removing a grid from the stack, updateBoundingRect() and update()
   should be called for the QgsLayoutItemMap to prevent rendering artifacts.

.. seealso:: :py:func:`addGrid`
%End

    void moveGridUp( const QString &gridId );
%Docstring
Moves a grid with matching ``gridId`` up the stack, causing it to be rendered above other grids.

.. note::

   After moving a grid within the stack, update() should be
   called for the QgsLayoutItemMap to redraw the map with the new grid stack order.

.. seealso:: :py:func:`moveGridDown`
%End

    void moveGridDown( const QString &gridId );
%Docstring
Moves a grid with matching ``gridId`` down the stack, causing it to be rendered below other grids.

.. note::

   After moving a grid within the stack, update() should be
   called for the QgsLayoutItemMap to redraw the map with the new grid stack order.

.. seealso:: :py:func:`moveGridUp`
%End

    QgsLayoutItemMapGrid *grid( const QString &gridId ) const;
%Docstring
Returns a reference to a grid with matching ``gridId`` within the stack.
%End

    QgsLayoutItemMapGrid *grid( int index ) const;
%Docstring
Returns a reference to a grid at the specified ``index`` within the stack.
%End

    QgsLayoutItemMapGrid &operator[]( int index );

    QList< QgsLayoutItemMapGrid * > asList() const;
%Docstring
Returns a list of QgsLayoutItemMapGrids contained by the stack.
%End

    virtual bool readXml( const QDomElement &elem, const QDomDocument &doc, const QgsReadWriteContext &context );


    double maxGridExtension() const;
%Docstring
Calculates the maximum distance grids within the stack extend
beyond the QgsLayoutItemMap's item rect.

.. seealso:: :py:func:`calculateMaxGridExtension`
%End

    void calculateMaxGridExtension( double &top, double &right, double &bottom, double &left ) const;
%Docstring
Calculates the maximum distance grids within the stack extend beyond the
QgsLayoutItemMap's item rect. This method calculates the distance for each side of the
map item separately.

.. seealso:: :py:func:`maxGridExtension`
%End
};


class QgsLayoutItemMapGrid : QgsLayoutItemMapItem
{
%Docstring
An individual grid which is drawn above the map content in a
:py:class:`QgsLayoutItemMap`.

.. seealso:: :py:class:`QgsLayoutItemMapGridStack`

.. versionadded:: 3.0
%End

%TypeHeaderCode
#include "qgslayoutitemmapgrid.h"
%End
  public:

    enum GridUnit
    {
      MapUnit,
      MM,
      CM
    };

    enum GridStyle
    {
      Solid,
      Cross,
      Markers,
      FrameAnnotationsOnly
    };

    enum DisplayMode
    {
      ShowAll,
      LatitudeOnly,
      LongitudeOnly,
      HideAll
    };

    enum AnnotationPosition
    {
      InsideMapFrame,
      OutsideMapFrame,
    };

    enum AnnotationDirection
    {
      Horizontal,
      Vertical,
      VerticalDescending,
      BoundaryDirection
    };

    enum AnnotationFormat
    {
      Decimal,
      DegreeMinute,
      DegreeMinuteSecond,
      DecimalWithSuffix,
      DegreeMinuteNoSuffix,
      DegreeMinutePadded,
      DegreeMinuteSecondNoSuffix,
      DegreeMinuteSecondPadded,
      CustomFormat
    };

    enum BorderSide
    {
      Left,
      Right,
      Bottom,
      Top
    };

    enum FrameStyle
    {
      NoFrame,
      Zebra,
      InteriorTicks,
      ExteriorTicks,
      InteriorExteriorTicks,
      LineBorder,
      LineBorderNautical,
      ZebraNautical,
    };

    enum FrameSideFlag
    {
      FrameLeft,
      FrameRight,
      FrameTop,
      FrameBottom
    };
    typedef QFlags<QgsLayoutItemMapGrid::FrameSideFlag> FrameSideFlags;


    enum AnnotationCoordinate
    {
      Longitude,
      Latitude
    };

    QgsLayoutItemMapGrid( const QString &name, QgsLayoutItemMap *map );
%Docstring
Constructor for QgsLayoutItemMapGrid.

:param name: friendly display name for grid
:param map: QgsLayoutItemMap the grid is attached to
%End

    virtual void draw( QPainter *painter );

    virtual bool writeXml( QDomElement &elem, QDomDocument &doc, const QgsReadWriteContext &context ) const;

    virtual bool readXml( const QDomElement &itemElem, const QDomDocument &doc, const QgsReadWriteContext &context );


    void setCrs( const QgsCoordinateReferenceSystem &crs );
%Docstring
Sets the ``crs`` for the grid.

.. seealso:: :py:func:`crs`
%End

    QgsCoordinateReferenceSystem crs() const;
%Docstring
Retrieves the CRS for the grid.

.. seealso:: :py:func:`setCrs`
%End

    void setBlendMode( const QPainter::CompositionMode mode );
%Docstring
Sets the blending ``mode`` used for drawing the grid.

.. seealso:: :py:func:`blendMode`
%End

    QPainter::CompositionMode blendMode() const;
%Docstring
Retrieves the blending mode used for drawing the grid.

.. seealso:: :py:func:`setBlendMode`
%End

    virtual bool usesAdvancedEffects() const;


    double maxExtension() const;
%Docstring
Calculates the maximum distance the grid extends beyond the QgsLayoutItemMap's
item rect (in layout units).
%End

    void calculateMaxExtension( double &top, double &right, double &bottom, double &left ) const;
%Docstring
Calculates the maximum distance the grid extends beyond the
QgsLayoutItemMap's item rect. This method calculates the distance for each side of the
map item separately.

.. seealso:: :py:func:`maxExtension`
%End


    void setUnits( GridUnit unit );
%Docstring
Sets the ``unit`` to use for grid measurements such as the interval
and offset for grid lines.

.. seealso:: :py:func:`units`
%End

    GridUnit units() const;
%Docstring
Returns the units used for grid measurements such as the interval
and offset for grid lines.

.. seealso:: :py:func:`setUnits`
%End

    void setIntervalX( double interval );
%Docstring
Sets the ``interval`` between grid lines in the x-direction. The units
are controlled through the setUnits method

.. seealso:: :py:func:`setIntervalY`

.. seealso:: :py:func:`intervalX`
%End

    double intervalX() const;
%Docstring
Returns the interval between grid lines in the x-direction. The units
are retrieved through the units() method.

.. seealso:: :py:func:`setIntervalX`

.. seealso:: :py:func:`intervalY`
%End

    void setIntervalY( double interval );
%Docstring
Sets the ``interval`` between grid lines in the y-direction. The units
are controlled through the setUnits method

.. seealso:: :py:func:`setIntervalX`

.. seealso:: :py:func:`intervalY`
%End

    double intervalY() const;
%Docstring
Returns the interval between grid lines in the y-direction. The units
are retrieved through the units() method.

.. seealso:: :py:func:`setIntervalY`

.. seealso:: :py:func:`intervalX`
%End

    void setOffsetX( double offset );
%Docstring
Sets the ``offset`` for grid lines in the x-direction. The units
are controlled through the setUnits method.

.. seealso:: :py:func:`setOffsetY`

.. seealso:: :py:func:`offsetX`
%End

    double offsetX() const;
%Docstring
Returns the offset for grid lines in the x-direction. The units
are retrieved through the units() method.

.. seealso:: :py:func:`setOffsetX`

.. seealso:: :py:func:`offsetY`
%End

    void setOffsetY( double offset );
%Docstring
Sets the ``offset`` for grid lines in the y-direction. The units
are controlled through the setUnits method.

.. seealso:: :py:func:`setOffsetX`

.. seealso:: :py:func:`offsetY`
%End

    double offsetY() const;
%Docstring
Returns the offset for grid lines in the y-direction. The units
are retrieved through the units() method.

.. seealso:: :py:func:`setOffsetY`

.. seealso:: :py:func:`offsetX`
%End


    void setStyle( GridStyle style );
%Docstring
Sets the grid ``style``, which controls how the grid is drawn
over the map's contents.

.. seealso:: :py:func:`style`
%End

    GridStyle style() const;
%Docstring
Returns the grid's style, which controls how the grid is drawn
over the map's contents.

.. seealso:: :py:func:`setStyle`
%End

    void setCrossLength( const double length );
%Docstring
Sets the ``length`` (in layout units) of the cross segments drawn for the grid. This is only used for grids
with QgsLayoutItemMapGrid.Cross styles.

.. seealso:: :py:func:`crossLength`
%End

    double crossLength() const;
%Docstring
Retrieves the length (in layout units) of the cross segments drawn for the grid. This is only used for grids
with QgsLayoutItemMapGrid.Cross styles.

.. seealso:: :py:func:`setCrossLength`
%End

    void setGridLineWidth( double width );
%Docstring
Sets the ``width`` of grid lines (in layout units). This is only used for grids with QgsLayoutItemMapGrid.Solid
or QgsLayoutItemMapGrid.Cross styles. For more control over grid line appearance, use
setLineSymbol instead.

.. seealso:: :py:func:`setLineSymbol`

.. seealso:: :py:func:`setGridLineColor`
%End

    void setGridLineColor( const QColor &color );
%Docstring
Sets the ``color`` of grid lines. This is only used for grids with QgsLayoutItemMapGrid.Solid
or QgsLayoutItemMapGrid.Cross styles. For more control over grid line appearance, use
setLineSymbol instead.

.. seealso:: :py:func:`setLineSymbol`

.. seealso:: :py:func:`setGridLineWidth`
%End

    void setLineSymbol( QgsLineSymbol *symbol /Transfer/ );
%Docstring
Sets the line ``symbol`` used for drawing grid lines. This is only used for grids with
QgsLayoutItemMapGrid.Solid or QgsLayoutItemMapGrid.Cross styles.
Ownership of ``symbol`` is transferred to the grid.

.. seealso:: :py:func:`lineSymbol`

.. seealso:: :py:func:`setMarkerSymbol`

.. seealso:: :py:func:`setStyle`
%End

    QgsLineSymbol *lineSymbol();
%Docstring
Returns the line symbol used for drawing grid lines. This is only used for grids with
QgsLayoutItemMapGrid.Solid or QgsLayoutItemMapGrid.Cross styles.

.. seealso:: :py:func:`setLineSymbol`

.. seealso:: :py:func:`markerSymbol`

.. seealso:: :py:func:`style`
%End

    void setMarkerSymbol( QgsMarkerSymbol *symbol /Transfer/ );
%Docstring
Sets the marker ``symbol`` used for drawing grid points. This is only used for grids with a
QgsLayoutItemMapGrid.Markers style.
Ownership of ``symbol`` is transferred to the grid.

.. seealso:: :py:func:`markerSymbol`

.. seealso:: :py:func:`setLineSymbol`

.. seealso:: :py:func:`setStyle`
%End

    QgsMarkerSymbol *markerSymbol();
%Docstring
Returns the marker symbol used for drawing grid points. This is only used for grids with a
QgsLayoutItemMapGrid.Markers style.

.. seealso:: :py:func:`setMarkerSymbol`

.. seealso:: :py:func:`lineSymbol`

.. seealso:: :py:func:`style`
%End


    void setAnnotationEnabled( const bool enabled );
%Docstring
Sets whether annotations should be shown for the grid.

.. seealso:: :py:func:`annotationEnabled`
%End

    bool annotationEnabled() const;
%Docstring
Returns whether annotations are shown for the grid.

.. seealso:: :py:func:`setAnnotationEnabled`
%End

    void setAnnotationFont( const QFont &font );
%Docstring
Sets the ``font`` used for drawing grid annotations.

.. seealso:: :py:func:`annotationFont`
%End

    QFont annotationFont() const;
%Docstring
Returns the font used for drawing grid annotations.

.. seealso:: :py:func:`setAnnotationFont`
%End

    void setAnnotationFontColor( const QColor &color );
%Docstring
Sets the font ``color`` used for drawing grid annotations.

.. seealso:: :py:func:`annotationFontColor`
%End

    QColor annotationFontColor() const;
%Docstring
Returns the font color used for drawing grid annotations.

.. seealso:: :py:func:`setAnnotationFontColor`
%End

    void setAnnotationPrecision( const int precision );
%Docstring
Sets the coordinate ``precision`` for grid annotations.
The ``precision`` indicates the number of decimal places to show when drawing grid annotations.

.. seealso:: :py:func:`annotationPrecision`
%End

    int annotationPrecision() const;
%Docstring
Returns the coordinate precision for grid annotations, which is the
number of decimal places shown when drawing grid annotations.

.. seealso:: :py:func:`setAnnotationPrecision`
%End

    void setAnnotationDisplay( DisplayMode display, BorderSide border );
%Docstring
Sets what types of grid annotations should be drawn for a specified side of the map frame,
or whether grid annotations should be disabled for the side.

:param display: display mode for annotations
:param border: side of map for annotations

.. seealso:: :py:func:`annotationDisplay`
%End

    DisplayMode annotationDisplay( BorderSide border ) const;
%Docstring
Returns the display mode for the grid annotations on a specified side of the map
frame. This property also specifies whether annotations have been disabled
from a side of the map frame.

:param border: side of map for annotations

:return: display mode for grid annotations

.. seealso:: :py:func:`setAnnotationDisplay`
%End

    void setAnnotationPosition( AnnotationPosition position, BorderSide side );
%Docstring
Sets the ``position`` for the grid annotations on a specified ``side`` of the map
frame.

.. seealso:: :py:func:`annotationPosition`
%End

    AnnotationPosition annotationPosition( BorderSide side ) const;
%Docstring
Returns the position for the grid annotations on a specified ``side`` of the map
frame.

.. seealso:: :py:func:`setAnnotationPosition`
%End

    void setAnnotationFrameDistance( const double distance );
%Docstring
Sets the ``distance`` between the map frame and annotations. Units are layout units.

.. seealso:: :py:func:`annotationFrameDistance`
%End

    double annotationFrameDistance() const;
%Docstring
Returns the distance between the map frame and annotations. Units are in layout units.

.. seealso:: :py:func:`setAnnotationFrameDistance`
%End

    void setAnnotationDirection( AnnotationDirection direction, BorderSide side );
%Docstring
Sets the ``direction`` for drawing frame annotations for the specified map ``side``.

.. seealso:: :py:func:`annotationDirection`
%End

    void setAnnotationDirection( AnnotationDirection direction );
%Docstring
Sets the ``direction`` for drawing all frame annotations.

.. seealso:: :py:func:`annotationDirection`
%End

    AnnotationDirection annotationDirection( BorderSide border ) const;
%Docstring
Returns the direction for drawing frame annotations, on the specified ``side``
of the map.

.. seealso:: :py:func:`setAnnotationDirection`
%End

    void setAnnotationFormat( const AnnotationFormat format );
%Docstring
Sets the ``format`` for drawing grid annotations.

.. seealso:: :py:func:`annotationFormat`
%End

    AnnotationFormat annotationFormat() const;
%Docstring
Returns the format for drawing grid annotations.

.. seealso:: :py:func:`setAnnotationFormat`
%End

    void setAnnotationExpression( const QString &expression );
%Docstring
Sets the ``expression`` used for drawing grid annotations. This is only used when annotationFormat()
is QgsLayoutItemMapGrid.CustomFormat.

.. seealso:: :py:func:`annotationExpression`
%End

    QString annotationExpression() const;
%Docstring
Returns the expression used for drawing grid annotations. This is only used when annotationFormat()
is QgsLayoutItemMapGrid.CustomFormat.

.. seealso:: :py:func:`setAnnotationExpression`
%End


    void setFrameStyle( const FrameStyle style );
%Docstring
Sets the grid frame ``style``.

.. seealso:: :py:func:`frameStyle`
%End

    FrameStyle frameStyle() const;
%Docstring
Returns the grid frame style.

.. seealso:: :py:func:`setFrameStyle`
%End

    void setFrameDivisions( DisplayMode divisions, BorderSide side );
%Docstring
Sets what type of grid ``divisions`` should be used for frames on a specified ``side`` of the map.

.. seealso:: :py:func:`frameDivisions`
%End

    DisplayMode frameDivisions( BorderSide side ) const;
%Docstring
Returns the type of grid divisions which are used for frames on a specified ``side`` of the map.

.. seealso:: :py:func:`setFrameDivisions`
%End

    void setFrameSideFlags( QgsLayoutItemMapGrid::FrameSideFlags flags );
%Docstring
Sets ``flags`` for grid frame sides. Setting these flags controls which sides
of the map item the grid frame is drawn on.

.. seealso:: :py:func:`setFrameSideFlag`

.. seealso:: :py:func:`frameSideFlags`

.. seealso:: :py:func:`testFrameSideFlag`
%End

    void setFrameSideFlag( QgsLayoutItemMapGrid::FrameSideFlag flag, bool on = true );
%Docstring
Sets whether the grid frame is drawn for a certain side of the map item.

:param flag: flag for grid frame side
:param on: set to ``True`` to draw grid frame on that side of the map

.. seealso:: :py:func:`setFrameSideFlags`

.. seealso:: :py:func:`frameSideFlags`

.. seealso:: :py:func:`testFrameSideFlag`
%End

    QgsLayoutItemMapGrid::FrameSideFlags frameSideFlags() const;
%Docstring
Returns the flags which control which sides of the map item the grid frame
is drawn on.

.. seealso:: :py:func:`setFrameSideFlags`

.. seealso:: :py:func:`setFrameSideFlag`

.. seealso:: :py:func:`testFrameSideFlag`
%End

    bool testFrameSideFlag( FrameSideFlag flag ) const;
%Docstring
Tests whether the grid frame should be drawn on a specified side of the map
item.

:param flag: flag for grid frame side

:return: ``True`` if grid frame should be drawn for that side of the map

.. seealso:: :py:func:`setFrameSideFlags`

.. seealso:: :py:func:`setFrameSideFlag`

.. seealso:: :py:func:`frameSideFlags`
%End

    void setFrameWidth( const double width );
%Docstring
Sets the grid frame ``width`` (in layout units). This property controls how wide the grid frame is.
The size of the line outlines drawn in the frame is controlled through the
setFramePenSize method.

.. seealso:: :py:func:`frameWidth`
%End

    double frameWidth() const;
%Docstring
Gets the grid frame width in layout units. This property controls how wide the grid frame is.
The size of the line outlines drawn in the frame can be retrieved via the
framePenSize method.

.. seealso:: :py:func:`setFrameWidth`
%End

    void setFrameMargin( const double margin );
%Docstring
Sets the grid frame margin (in layout units).
This property controls distance between the map frame and the grid frame.

.. seealso:: :py:func:`frameMargin`

.. versionadded:: 3.6
%End

    double frameMargin() const;
%Docstring
Sets the grid frame Margin (in layout units).
This property controls distance between the map frame and the grid frame.

.. seealso:: :py:func:`setFrameMargin`

.. versionadded:: 3.6
%End

    void setFramePenSize( const double width );
%Docstring
Sets the ``width`` of the stroke drawn in the grid frame.

.. seealso:: :py:func:`framePenSize`

.. seealso:: :py:func:`setFramePenColor`
%End

    double framePenSize() const;
%Docstring
Retrieves the width of the stroke drawn in the grid frame.

.. seealso:: :py:func:`setFramePenSize`

.. seealso:: :py:func:`framePenColor`
%End

    void setFramePenColor( const QColor &color );
%Docstring
Sets the ``color`` of the stroke drawn in the grid frame.

.. seealso:: :py:func:`framePenColor`

.. seealso:: :py:func:`setFramePenSize`

.. seealso:: :py:func:`setFrameFillColor1`

.. seealso:: :py:func:`setFrameFillColor2`
%End

    QColor framePenColor() const;
%Docstring
Retrieves the color of the stroke drawn in the grid frame.

.. seealso:: :py:func:`setFramePenColor`

.. seealso:: :py:func:`framePenSize`

.. seealso:: :py:func:`frameFillColor1`

.. seealso:: :py:func:`frameFillColor2`
%End

    void setFrameFillColor1( const QColor &color );
%Docstring
Sets the first fill ``color`` used for the grid frame.

.. seealso:: :py:func:`frameFillColor1`

.. seealso:: :py:func:`setFramePenColor`

.. seealso:: :py:func:`setFrameFillColor2`
%End

    QColor frameFillColor1() const;
%Docstring
Retrieves the first fill color for the grid frame.

.. seealso:: :py:func:`setFrameFillColor1`

.. seealso:: :py:func:`framePenColor`

.. seealso:: :py:func:`frameFillColor2`
%End

    void setFrameFillColor2( const QColor &color );
%Docstring
Sets the second fill ``color`` used for the grid frame.

.. seealso:: :py:func:`frameFillColor2`

.. seealso:: :py:func:`setFramePenColor`

.. seealso:: :py:func:`setFrameFillColor1`
%End

    QColor frameFillColor2() const;
%Docstring
Retrieves the second fill color for the grid frame.

.. seealso:: :py:func:`setFrameFillColor2`

.. seealso:: :py:func:`framePenColor`

.. seealso:: :py:func:`frameFillColor1`
%End

    virtual QgsExpressionContext createExpressionContext() const;

    virtual bool accept( QgsStyleEntityVisitorInterface *visitor ) const;

    virtual void refresh();


      public:
};

QFlags<QgsLayoutItemMapGrid::FrameSideFlag> operator|(QgsLayoutItemMapGrid::FrameSideFlag f1, QFlags<QgsLayoutItemMapGrid::FrameSideFlag> f2);


/************************************************************************
 * This file has been generated automatically from                      *
 *                                                                      *
 * src/core/layout/qgslayoutitemmapgrid.h                               *
 *                                                                      *
 * Do not edit manually ! Edit header and run scripts/sipify.pl again   *
 ************************************************************************/