diff --git a/python/core/core_auto.sip b/python/core/core_auto.sip index d4630bf930e..8bee813dd4e 100644 --- a/python/core/core_auto.sip +++ b/python/core/core_auto.sip @@ -156,6 +156,7 @@ %Include composer/qgscomposertexttable.sip %Include composer/qgspaperitem.sip %Include layout/qgslayoutcontext.sip +%Include layout/qgslayoutgridsettings.sip %Include layout/qgslayoutmeasurement.sip %Include layout/qgslayoutmeasurementconverter.sip %Include layout/qgspagesizeregistry.sip diff --git a/python/core/layout/qgslayout.sip b/python/core/layout/qgslayout.sip index f7db70211cf..f9f9a1df694 100644 --- a/python/core/layout/qgslayout.sip +++ b/python/core/layout/qgslayout.sip @@ -149,6 +149,14 @@ class QgsLayout : QGraphicsScene, QgsExpressionContextGenerator %End + QgsLayoutGridSettings &gridSettings(); +%Docstring + Returns a reference to the layout's grid settings, which stores settings relating + to grid appearance, spacing and offsets. + :rtype: QgsLayoutGridSettings +%End + + virtual QgsExpressionContext createExpressionContext() const; %Docstring diff --git a/python/core/layout/qgslayoutgridsettings.sip b/python/core/layout/qgslayoutgridsettings.sip new file mode 100644 index 00000000000..4e2e1cd5dbf --- /dev/null +++ b/python/core/layout/qgslayoutgridsettings.sip @@ -0,0 +1,103 @@ +/************************************************************************ + * This file has been generated automatically from * + * * + * src/core/layout/qgslayoutgridsettings.h * + * * + * Do not edit manually ! Edit header and run scripts/sipify.pl again * + ************************************************************************/ + + + +class QgsLayoutGridSettings +{ +%Docstring + Contains settings relating to the appearance, spacing and offset for layout grids. +.. versionadded:: 3.0 +%End + +%TypeHeaderCode +#include "qgslayoutgridsettings.h" +%End + public: + + enum Style + { + StyleLines, + StyleDots, + StyleCrosses + }; + + QgsLayoutGridSettings(); +%Docstring + Constructor for QgsLayoutGridSettings. +%End + + void setResolution( const QgsLayoutMeasurement &resolution ); +%Docstring + Sets the page/snap grid ``resolution``. +.. seealso:: resolution() +.. seealso:: setOffset() +%End + + QgsLayoutMeasurement resolution() const; +%Docstring + Returns the page/snap grid resolution. +.. seealso:: setResolution() +.. seealso:: offset() + :rtype: QgsLayoutMeasurement +%End + + void setOffset( const QgsLayoutPoint offset ); +%Docstring + Sets the ``offset`` of the page/snap grid. +.. seealso:: offset() +.. seealso:: setResolution() +%End + + QgsLayoutPoint offset() const; +%Docstring + Returns the offset of the page/snap grid. +.. seealso:: setOffset() +.. seealso:: resolution() + :rtype: QgsLayoutPoint +%End + + void setPen( const QPen &pen ); +%Docstring + Sets the ``pen`` used for drawing page/snap grids. +.. seealso:: pen() +.. seealso:: setStyle() +%End + + QPen pen() const; +%Docstring + Returns the pen used for drawing page/snap grids. +.. seealso:: setPen() +.. seealso:: style() + :rtype: QPen +%End + + void setStyle( const Style style ); +%Docstring + Sets the ``style`` used for drawing the page/snap grids. +.. seealso:: style() +.. seealso:: setPen() +%End + + Style style() const; +%Docstring + Returns the style used for drawing the page/snap grids. +.. seealso:: setStyle() +.. seealso:: pen() + :rtype: Style +%End + +}; + +/************************************************************************ + * This file has been generated automatically from * + * * + * src/core/layout/qgslayoutgridsettings.h * + * * + * Do not edit manually ! Edit header and run scripts/sipify.pl again * + ************************************************************************/ diff --git a/python/core/layout/qgslayoutsnapper.sip b/python/core/layout/qgslayoutsnapper.sip index ecc3a39b822..779e7a41228 100644 --- a/python/core/layout/qgslayoutsnapper.sip +++ b/python/core/layout/qgslayoutsnapper.sip @@ -21,13 +21,6 @@ class QgsLayoutSnapper %End public: - enum GridStyle - { - GridLines, - GridDots, - GridCrosses - }; - QgsLayoutSnapper( QgsLayout *layout ); %Docstring Constructor for QgsLayoutSnapper, attached to the specified ``layout``. @@ -46,66 +39,6 @@ class QgsLayoutSnapper :rtype: int %End - void setGridResolution( const QgsLayoutMeasurement &resolution ); -%Docstring - Sets the page/snap grid ``resolution``. -.. seealso:: gridResolution() -.. seealso:: setGridOffset() -%End - - QgsLayoutMeasurement gridResolution() const; -%Docstring - Returns the page/snap grid resolution. -.. seealso:: setGridResolution() -.. seealso:: gridOffset() - :rtype: QgsLayoutMeasurement -%End - - void setGridOffset( const QgsLayoutPoint offset ); -%Docstring - Sets the ``offset`` of the page/snap grid. -.. seealso:: gridOffset() -.. seealso:: setGridResolution() -%End - - QgsLayoutPoint gridOffset() const; -%Docstring - Returns the offset of the page/snap grid. -.. seealso:: setGridOffset() -.. seealso:: gridResolution() - :rtype: QgsLayoutPoint -%End - - void setGridPen( const QPen &pen ); -%Docstring - Sets the ``pen`` used for drawing page/snap grids. -.. seealso:: gridPen() -.. seealso:: setGridStyle() -%End - - QPen gridPen() const; -%Docstring - Returns the pen used for drawing page/snap grids. -.. seealso:: setGridPen() -.. seealso:: gridStyle() - :rtype: QPen -%End - - void setGridStyle( const GridStyle style ); -%Docstring - Sets the ``style`` used for drawing the page/snap grids. -.. seealso:: gridStyle() -.. seealso:: setGridPen() -%End - - GridStyle gridStyle() const; -%Docstring - Returns the style used for drawing the page/snap grids. -.. seealso:: setGridStyle() -.. seealso:: gridPen() - :rtype: GridStyle -%End - bool snapToGrid() const; %Docstring Returns true if snapping to grid is enabled. diff --git a/src/app/layout/qgslayoutpropertieswidget.cpp b/src/app/layout/qgslayoutpropertieswidget.cpp index d58082ac91a..554d39ff826 100644 --- a/src/app/layout/qgslayoutpropertieswidget.cpp +++ b/src/app/layout/qgslayoutpropertieswidget.cpp @@ -47,51 +47,51 @@ void QgsLayoutPropertiesWidget::updateSnappingElements() { mSnapToleranceSpinBox->setValue( mLayout->snapper().snapTolerance() ); - mGridSpacingUnitsCombo->setUnit( mLayout->snapper().gridResolution().units() ); - mGridResolutionSpinBox->setValue( mLayout->snapper().gridResolution().length() ); + mGridSpacingUnitsCombo->setUnit( mLayout->gridSettings().resolution().units() ); + mGridResolutionSpinBox->setValue( mLayout->gridSettings().resolution().length() ); - mGridOffsetUnitsComboBox->setUnit( mLayout->snapper().gridOffset().units() ); - mOffsetXSpinBox->setValue( mLayout->snapper().gridOffset().x() ); - mOffsetYSpinBox->setValue( mLayout->snapper().gridOffset().y() ); + mGridOffsetUnitsComboBox->setUnit( mLayout->gridSettings().offset().units() ); + mOffsetXSpinBox->setValue( mLayout->gridSettings().offset().x() ); + mOffsetYSpinBox->setValue( mLayout->gridSettings().offset().y() ); } void QgsLayoutPropertiesWidget::gridResolutionChanged( double d ) { - QgsLayoutMeasurement m = mLayout->snapper().gridResolution(); + QgsLayoutMeasurement m = mLayout->gridSettings().resolution(); m.setLength( d ); - mLayout->snapper().setGridResolution( m ); + mLayout->gridSettings().setResolution( m ); mLayout->pageCollection()->redraw(); } void QgsLayoutPropertiesWidget::gridResolutionUnitsChanged( QgsUnitTypes::LayoutUnit unit ) { - QgsLayoutMeasurement m = mLayout->snapper().gridResolution(); + QgsLayoutMeasurement m = mLayout->gridSettings().resolution(); m.setUnits( unit ); - mLayout->snapper().setGridResolution( m ); + mLayout->gridSettings().setResolution( m ); mLayout->pageCollection()->redraw(); } void QgsLayoutPropertiesWidget::gridOffsetXChanged( double d ) { - QgsLayoutPoint o = mLayout->snapper().gridOffset(); + QgsLayoutPoint o = mLayout->gridSettings().offset(); o.setX( d ); - mLayout->snapper().setGridOffset( o ); + mLayout->gridSettings().setOffset( o ); mLayout->pageCollection()->redraw(); } void QgsLayoutPropertiesWidget::gridOffsetYChanged( double d ) { - QgsLayoutPoint o = mLayout->snapper().gridOffset(); + QgsLayoutPoint o = mLayout->gridSettings().offset(); o.setY( d ); - mLayout->snapper().setGridOffset( o ); + mLayout->gridSettings().setOffset( o ); mLayout->pageCollection()->redraw(); } void QgsLayoutPropertiesWidget::gridOffsetUnitsChanged( QgsUnitTypes::LayoutUnit unit ) { - QgsLayoutPoint o = mLayout->snapper().gridOffset(); + QgsLayoutPoint o = mLayout->gridSettings().offset(); o.setUnits( unit ); - mLayout->snapper().setGridOffset( o ); + mLayout->gridSettings().setOffset( o ); mLayout->pageCollection()->redraw(); } diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index d1104c9cc37..69ba41b4979 100755 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -353,6 +353,7 @@ SET(QGIS_CORE_SRCS layout/qgslayout.cpp layout/qgslayoutcontext.cpp + layout/qgslayoutgridsettings.cpp layout/qgslayoutitem.cpp layout/qgslayoutitemmap.cpp layout/qgslayoutitempage.cpp @@ -936,6 +937,7 @@ SET(QGIS_CORE_HDRS composer/qgspaperitem.h layout/qgslayoutcontext.h + layout/qgslayoutgridsettings.h layout/qgslayoutmeasurement.h layout/qgslayoutmeasurementconverter.h layout/qgspagesizeregistry.h diff --git a/src/core/layout/qgslayout.h b/src/core/layout/qgslayout.h index 7ff640b9ec6..ea2a654681e 100644 --- a/src/core/layout/qgslayout.h +++ b/src/core/layout/qgslayout.h @@ -22,6 +22,7 @@ #include "qgslayoutsnapper.h" #include "qgsexpressioncontextgenerator.h" #include "qgslayoutpagecollection.h" +#include "qgslayoutgridsettings.h" class QgsLayoutItemMap; @@ -167,6 +168,18 @@ class CORE_EXPORT QgsLayout : public QGraphicsScene, public QgsExpressionContext */ SIP_SKIP const QgsLayoutSnapper &snapper() const { return mSnapper; } + /** + * Returns a reference to the layout's grid settings, which stores settings relating + * to grid appearance, spacing and offsets. + */ + QgsLayoutGridSettings &gridSettings() { return mGridSettings; } + + /** + * Returns a reference to the layout's grid settings, which stores settings relating + * to grid appearance, spacing and offsets. + */ + SIP_SKIP const QgsLayoutGridSettings &gridSettings() const { return mGridSettings; } + /** * Creates an expression context relating to the layout's current state. The context includes * scopes for global, project, layout and layout context properties. @@ -276,6 +289,7 @@ class CORE_EXPORT QgsLayout : public QGraphicsScene, public QgsExpressionContext QgsUnitTypes::LayoutUnit mUnits = QgsUnitTypes::LayoutMillimeters; QgsLayoutContext mContext; QgsLayoutSnapper mSnapper; + QgsLayoutGridSettings mGridSettings; std::unique_ptr< QgsLayoutPageCollection > mPageCollection; diff --git a/src/core/layout/qgslayoutgridsettings.cpp b/src/core/layout/qgslayoutgridsettings.cpp new file mode 100644 index 00000000000..e673a5100f8 --- /dev/null +++ b/src/core/layout/qgslayoutgridsettings.cpp @@ -0,0 +1,25 @@ +/*************************************************************************** + qgslayoutgridsettings.cpp + ------------------------- + begin : July 2017 + copyright : (C) 2017 by Nyall Dawson + email : nyall dot dawson at gmail 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 "qgslayoutgridsettings.h" + +QgsLayoutGridSettings::QgsLayoutGridSettings() + : mGridResolution( QgsLayoutMeasurement( 10 ) ) +{ + mGridPen = QPen( QColor( 190, 190, 190, 100 ), 0 ); + mGridPen.setCosmetic( true ); +} + diff --git a/src/core/layout/qgslayoutgridsettings.h b/src/core/layout/qgslayoutgridsettings.h new file mode 100644 index 00000000000..cdf58f440eb --- /dev/null +++ b/src/core/layout/qgslayoutgridsettings.h @@ -0,0 +1,114 @@ +/*************************************************************************** + qgslayoutgridsettings.h + ----------------------- + begin : July 2017 + copyright : (C) 2017 by Nyall Dawson + email : nyall dot dawson at gmail 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 QGSLAYOUTGRIDSETTINGS_H +#define QGSLAYOUTGRIDSETTINGS_H + +#include "qgis_core.h" +#include "qgslayoutmeasurement.h" +#include "qgslayoutpoint.h" +#include + +class QgsLayout; + +/** + * \ingroup core + * \class QgsLayoutGridSettings + * \brief Contains settings relating to the appearance, spacing and offset for layout grids. + * \since QGIS 3.0 + */ +class CORE_EXPORT QgsLayoutGridSettings +{ + + public: + + //! Style for drawing the page/snapping grid + enum Style + { + StyleLines, //! Solid lines + StyleDots, //! Dots + StyleCrosses //! Crosses + }; + + /** + * Constructor for QgsLayoutGridSettings. + */ + QgsLayoutGridSettings(); + + /** + * Sets the page/snap grid \a resolution. + * \see resolution() + * \see setOffset() + */ + void setResolution( const QgsLayoutMeasurement &resolution ) { mGridResolution = resolution; } + + /** + * Returns the page/snap grid resolution. + * \see setResolution() + * \see offset() + */ + QgsLayoutMeasurement resolution() const { return mGridResolution;} + + /** + * Sets the \a offset of the page/snap grid. + * \see offset() + * \see setResolution() + */ + void setOffset( const QgsLayoutPoint offset ) { mGridOffset = offset; } + + /** + * Returns the offset of the page/snap grid. + * \see setOffset() + * \see resolution() + */ + QgsLayoutPoint offset() const { return mGridOffset; } + + /** + * Sets the \a pen used for drawing page/snap grids. + * \see pen() + * \see setStyle() + */ + void setPen( const QPen &pen ) { mGridPen = pen; } + + /** + * Returns the pen used for drawing page/snap grids. + * \see setPen() + * \see style() + */ + QPen pen() const { return mGridPen; } + + /** + * Sets the \a style used for drawing the page/snap grids. + * \see style() + * \see setPen() + */ + void setStyle( const Style style ) { mGridStyle = style; } + + /** + * Returns the style used for drawing the page/snap grids. + * \see setStyle() + * \see pen() + */ + Style style() const { return mGridStyle; } + + private: + + QgsLayoutMeasurement mGridResolution; + QgsLayoutPoint mGridOffset; + QPen mGridPen; + Style mGridStyle = StyleLines; +}; + +#endif //QGSLAYOUTGRIDSETTINGS_H diff --git a/src/core/layout/qgslayoutitempage.cpp b/src/core/layout/qgslayoutitempage.cpp index 8cda23869cf..50c431f01e0 100644 --- a/src/core/layout/qgslayoutitempage.cpp +++ b/src/core/layout/qgslayoutitempage.cpp @@ -212,13 +212,13 @@ void QgsLayoutItemPageGrid::paint( QPainter *painter, const QStyleOptionGraphics return; const QgsLayoutContext &context = mLayout->context(); - const QgsLayoutSnapper &snapper = mLayout->snapper(); + const QgsLayoutGridSettings &grid = mLayout->gridSettings(); - if ( !context.gridVisible() || snapper.gridResolution().length() <= 0 ) + if ( !context.gridVisible() || grid.resolution().length() <= 0 ) return; - QPointF gridOffset = mLayout->convertToLayoutUnits( snapper.gridOffset() ); - double gridResolution = mLayout->convertToLayoutUnits( snapper.gridResolution() ); + QPointF gridOffset = mLayout->convertToLayoutUnits( grid.offset() ); + double gridResolution = mLayout->convertToLayoutUnits( grid.resolution() ); int gridMultiplyX = static_cast< int >( gridOffset.x() / gridResolution ); int gridMultiplyY = static_cast< int >( gridOffset.y() / gridResolution ); double currentXCoord = gridOffset.x() - gridMultiplyX * gridResolution; @@ -229,11 +229,11 @@ void QgsLayoutItemPageGrid::paint( QPainter *painter, const QStyleOptionGraphics //turn of antialiasing so grid is nice and sharp painter->setRenderHint( QPainter::Antialiasing, false ); - switch ( snapper.gridStyle() ) + switch ( grid.style() ) { - case QgsLayoutSnapper::GridLines: + case QgsLayoutGridSettings::StyleLines: { - painter->setPen( snapper.gridPen() ); + painter->setPen( grid.pen() ); //draw vertical lines for ( ; currentXCoord <= rect().width(); currentXCoord += gridResolution ) @@ -250,14 +250,14 @@ void QgsLayoutItemPageGrid::paint( QPainter *painter, const QStyleOptionGraphics break; } - case QgsLayoutSnapper::GridDots: - case QgsLayoutSnapper::GridCrosses: + case QgsLayoutGridSettings::StyleDots: + case QgsLayoutGridSettings::StyleCrosses: { - QPen gridPen = snapper.gridPen(); + QPen gridPen = grid.pen(); painter->setPen( gridPen ); painter->setBrush( QBrush( gridPen.color() ) ); double halfCrossLength = 1; - if ( snapper.gridStyle() == QgsLayoutSnapper::GridDots ) + if ( grid.style() == QgsLayoutGridSettings::StyleDots ) { //dots are actually drawn as tiny crosses a few pixels across //set halfCrossLength to equivalent of 1 pixel diff --git a/src/core/layout/qgslayoutsnapper.cpp b/src/core/layout/qgslayoutsnapper.cpp index 43be650c465..4019ac7f358 100644 --- a/src/core/layout/qgslayoutsnapper.cpp +++ b/src/core/layout/qgslayoutsnapper.cpp @@ -19,10 +19,7 @@ QgsLayoutSnapper::QgsLayoutSnapper( QgsLayout *layout ) : mLayout( layout ) - , mGridResolution( QgsLayoutMeasurement( 10 ) ) { - mGridPen = QPen( QColor( 190, 190, 190, 100 ), 0 ); - mGridPen.setCosmetic( true ); } QPointF QgsLayoutSnapper::snapPoint( QPointF point, double scaleFactor, bool &snapped ) const @@ -44,10 +41,13 @@ QPointF QgsLayoutSnapper::snapPoint( QPointF point, double scaleFactor, bool &sn QPointF QgsLayoutSnapper::snapPointToGrid( QPointF point, double scaleFactor, bool &snapped ) const { snapped = false; - if ( !mLayout || !mSnapToGrid || mGridResolution.length() <= 0 ) + if ( !mLayout || !mSnapToGrid ) { return point; } + const QgsLayoutGridSettings &grid = mLayout->gridSettings(); + if ( grid.resolution().length() <= 0 ) + return point; //calculate y offset to current page QPointF pagePoint = mLayout->pageCollection()->positionOnPage( point ); @@ -56,8 +56,8 @@ QPointF QgsLayoutSnapper::snapPointToGrid( QPointF point, double scaleFactor, bo double yAtTopOfPage = mLayout->pageCollection()->page( mLayout->pageCollection()->pageNumberForPoint( point ) )->pos().y(); //snap x coordinate - double gridRes = mLayout->convertToLayoutUnits( mGridResolution ); - QPointF gridOffset = mLayout->convertToLayoutUnits( mGridOffset ); + double gridRes = mLayout->convertToLayoutUnits( grid.resolution() ); + QPointF gridOffset = mLayout->convertToLayoutUnits( grid.offset() ); int xRatio = static_cast< int >( ( point.x() - gridOffset.x() ) / gridRes + 0.5 ); //NOLINT int yRatio = static_cast< int >( ( yPage - gridOffset.y() ) / gridRes + 0.5 ); //NOLINT diff --git a/src/core/layout/qgslayoutsnapper.h b/src/core/layout/qgslayoutsnapper.h index 6b69fefedc9..d59a7552e30 100644 --- a/src/core/layout/qgslayoutsnapper.h +++ b/src/core/layout/qgslayoutsnapper.h @@ -35,14 +35,6 @@ class CORE_EXPORT QgsLayoutSnapper public: - //! Style for drawing the page/snapping grid - enum GridStyle - { - GridLines, //! Solid lines - GridDots, //! Dots - GridCrosses //! Crosses - }; - /** * Constructor for QgsLayoutSnapper, attached to the specified \a layout. */ @@ -60,62 +52,6 @@ class CORE_EXPORT QgsLayoutSnapper */ int snapTolerance() const { return mTolerance; } - /** - * Sets the page/snap grid \a resolution. - * \see gridResolution() - * \see setGridOffset() - */ - void setGridResolution( const QgsLayoutMeasurement &resolution ) { mGridResolution = resolution; } - - /** - * Returns the page/snap grid resolution. - * \see setGridResolution() - * \see gridOffset() - */ - QgsLayoutMeasurement gridResolution() const { return mGridResolution;} - - /** - * Sets the \a offset of the page/snap grid. - * \see gridOffset() - * \see setGridResolution() - */ - void setGridOffset( const QgsLayoutPoint offset ) { mGridOffset = offset; } - - /** - * Returns the offset of the page/snap grid. - * \see setGridOffset() - * \see gridResolution() - */ - QgsLayoutPoint gridOffset() const { return mGridOffset; } - - /** - * Sets the \a pen used for drawing page/snap grids. - * \see gridPen() - * \see setGridStyle() - */ - void setGridPen( const QPen &pen ) { mGridPen = pen; } - - /** - * Returns the pen used for drawing page/snap grids. - * \see setGridPen() - * \see gridStyle() - */ - QPen gridPen() const { return mGridPen; } - - /** - * Sets the \a style used for drawing the page/snap grids. - * \see gridStyle() - * \see setGridPen() - */ - void setGridStyle( const GridStyle style ) { mGridStyle = style; } - - /** - * Returns the style used for drawing the page/snap grids. - * \see setGridStyle() - * \see gridPen() - */ - GridStyle gridStyle() const { return mGridStyle; } - /** * Returns true if snapping to grid is enabled. * \see setSnapToGrid() @@ -157,12 +93,6 @@ class CORE_EXPORT QgsLayoutSnapper QgsLayout *mLayout = nullptr; int mTolerance = 5; - - QgsLayoutMeasurement mGridResolution; - QgsLayoutPoint mGridOffset; - QPen mGridPen; - GridStyle mGridStyle = GridLines; - bool mSnapToGrid = false; }; diff --git a/tests/src/python/CMakeLists.txt b/tests/src/python/CMakeLists.txt index f24fd505440..5f1e3aae969 100755 --- a/tests/src/python/CMakeLists.txt +++ b/tests/src/python/CMakeLists.txt @@ -78,6 +78,7 @@ ADD_PYTHON_TEST(PyQgsLayerTree test_qgslayertree.py) ADD_PYTHON_TEST(PyQgsLayoutManager test_qgslayoutmanager.py) ADD_PYTHON_TEST(PyQgsLayoutPageCollection test_qgslayoutpagecollection.py) ADD_PYTHON_TEST(PyQgsLayoutView test_qgslayoutview.py) +ADD_PYTHON_TEST(PyQgsLayoutGridSettings test_qgslayoutgridsettings.py) ADD_PYTHON_TEST(PyQgsLayoutItemPropertiesDialog test_qgslayoutitempropertiesdialog.py) ADD_PYTHON_TEST(PyQgsLayoutSnapper test_qgslayoutsnapper.py) ADD_PYTHON_TEST(PyQgsLayoutUnitsComboBox test_qgslayoutunitscombobox.py) diff --git a/tests/src/python/test_qgslayoutgridsettings.py b/tests/src/python/test_qgslayoutgridsettings.py new file mode 100644 index 00000000000..b7c5ffc1d91 --- /dev/null +++ b/tests/src/python/test_qgslayoutgridsettings.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +"""QGIS Unit tests for QgsLayoutGridSettings. + +.. note:: 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. +""" +__author__ = 'Nyall Dawson' +__date__ = '05/07/2017' +__copyright__ = 'Copyright 2017, The QGIS Project' +# This will get replaced with a git SHA1 when you do a git archive +__revision__ = '$Format:%H$' + +import qgis # NOQA + +from qgis.core import (QgsProject, + QgsLayout, + QgsLayoutGridSettings, + QgsLayoutMeasurement, + QgsUnitTypes, + QgsLayoutPoint, + QgsLayoutItemPage) +from qgis.PyQt.QtGui import (QPen, + QColor) + +from qgis.testing import start_app, unittest + +start_app() + + +class TestQgsLayoutGridSettings(unittest.TestCase): + + def testGettersSetters(self): + p = QgsProject() + l = QgsLayout(p) + s = QgsLayoutGridSettings() + s.setResolution(QgsLayoutMeasurement(5, QgsUnitTypes.LayoutPoints)) + self.assertEqual(s.resolution().length(), 5.0) + self.assertEqual(s.resolution().units(), QgsUnitTypes.LayoutPoints) + + s.setOffset(QgsLayoutPoint(6, 7, QgsUnitTypes.LayoutPixels)) + self.assertEqual(s.offset().x(), 6.0) + self.assertEqual(s.offset().y(), 7.0) + self.assertEqual(s.offset().units(), QgsUnitTypes.LayoutPixels) + + s.setPen(QPen(QColor(255, 0, 255))) + self.assertEqual(s.pen().color().name(), QColor(255, 0, 255).name()) + + s.setStyle(QgsLayoutGridSettings.StyleDots) + self.assertEqual(s.style(), QgsLayoutGridSettings.StyleDots) + + +if __name__ == '__main__': + unittest.main() diff --git a/tests/src/python/test_qgslayoutsnapper.py b/tests/src/python/test_qgslayoutsnapper.py index 016e8902e57..eafb259126e 100644 --- a/tests/src/python/test_qgslayoutsnapper.py +++ b/tests/src/python/test_qgslayoutsnapper.py @@ -17,13 +17,13 @@ import qgis # NOQA from qgis.core import (QgsProject, QgsLayout, QgsLayoutSnapper, + QgsLayoutGridSettings, QgsLayoutMeasurement, QgsUnitTypes, QgsLayoutPoint, QgsLayoutItemPage) -from qgis.PyQt.QtCore import QRectF, QPointF -from qgis.PyQt.QtGui import (QTransform, - QPen, +from qgis.PyQt.QtCore import QPointF +from qgis.PyQt.QtGui import (QPen, QColor) from qgis.testing import start_app, unittest @@ -37,20 +37,6 @@ class TestQgsLayoutSnapper(unittest.TestCase): p = QgsProject() l = QgsLayout(p) s = QgsLayoutSnapper(l) - s.setGridResolution(QgsLayoutMeasurement(5, QgsUnitTypes.LayoutPoints)) - self.assertEqual(s.gridResolution().length(), 5.0) - self.assertEqual(s.gridResolution().units(), QgsUnitTypes.LayoutPoints) - - s.setGridOffset(QgsLayoutPoint(6, 7, QgsUnitTypes.LayoutPixels)) - self.assertEqual(s.gridOffset().x(), 6.0) - self.assertEqual(s.gridOffset().y(), 7.0) - self.assertEqual(s.gridOffset().units(), QgsUnitTypes.LayoutPixels) - - s.setGridPen(QPen(QColor(255, 0, 255))) - self.assertEqual(s.gridPen().color().name(), QColor(255, 0, 255).name()) - - s.setGridStyle(QgsLayoutSnapper.GridDots) - self.assertEqual(s.gridStyle(), QgsLayoutSnapper.GridDots) s.setSnapToGrid(False) self.assertFalse(s.snapToGrid()) @@ -69,7 +55,8 @@ class TestQgsLayoutSnapper(unittest.TestCase): l.pageCollection().addPage(page) s = QgsLayoutSnapper(l) - s.setGridResolution(QgsLayoutMeasurement(5, QgsUnitTypes.LayoutMillimeters)) + l.gridSettings().setResolution(QgsLayoutMeasurement(5, QgsUnitTypes.LayoutMillimeters)) + s.setSnapToGrid(True) s.setSnapTolerance(1) @@ -113,12 +100,11 @@ class TestQgsLayoutSnapper(unittest.TestCase): self.assertEqual(point, QPointF(0.5, 0.5)) # with offset grid - s.setGridOffset(QgsLayoutPoint(2, 0)) + l.gridSettings().setOffset(QgsLayoutPoint(2, 0)) point, snapped = s.snapPointToGrid(QPointF(13, 23), 1) self.assertTrue(snapped) self.assertEqual(point, QPointF(12, 23)) - def testSnapPoint(self): p = QgsProject() l = QgsLayout(p) @@ -128,7 +114,7 @@ class TestQgsLayoutSnapper(unittest.TestCase): s = QgsLayoutSnapper(l) # first test snapping to grid - s.setGridResolution(QgsLayoutMeasurement(5, QgsUnitTypes.LayoutMillimeters)) + l.gridSettings().setResolution(QgsLayoutMeasurement(5, QgsUnitTypes.LayoutMillimeters)) s.setSnapToGrid(True) s.setSnapTolerance(1)