Branch data Line data Source code
1 : : /***************************************************************************
2 : : qgslayoutgridsettings.cpp
3 : : -------------------------
4 : : begin : July 2017
5 : : copyright : (C) 2017 by Nyall Dawson
6 : : email : nyall dot dawson at gmail dot com
7 : : ***************************************************************************/
8 : : /***************************************************************************
9 : : * *
10 : : * This program is free software; you can redistribute it and/or modify *
11 : : * it under the terms of the GNU General Public License as published by *
12 : : * the Free Software Foundation; either version 2 of the License, or *
13 : : * (at your option) any later version. *
14 : : * *
15 : : ***************************************************************************/
16 : :
17 : : #include "qgslayoutgridsettings.h"
18 : : #include "qgsreadwritecontext.h"
19 : : #include "qgslayout.h"
20 : : #include "qgsproject.h"
21 : : #include "qgslayoutundostack.h"
22 : : #include "qgslayoutpagecollection.h"
23 : : #include "qgssettings.h"
24 : :
25 : 0 : QgsLayoutGridSettings::QgsLayoutGridSettings( QgsLayout *layout )
26 : 0 : : mGridResolution( QgsLayoutMeasurement( 10 ) )
27 : 0 : , mLayout( layout )
28 : 0 : {
29 : 0 : mGridPen = QPen( QColor( 190, 190, 190, 100 ), 0 );
30 : 0 : mGridPen.setCosmetic( true );
31 : 0 : loadFromSettings();
32 : 0 : }
33 : :
34 : 0 : QgsLayout *QgsLayoutGridSettings::layout()
35 : : {
36 : 0 : return mLayout;
37 : : }
38 : :
39 : 0 : void QgsLayoutGridSettings::setResolution( QgsLayoutMeasurement resolution )
40 : : {
41 : 0 : mLayout->undoStack()->beginCommand( this, QObject::tr( "Change Grid Resolution" ), UndoGridResolution );
42 : 0 : mGridResolution = resolution;
43 : 0 : mLayout->undoStack()->endCommand();
44 : 0 : }
45 : :
46 : 0 : void QgsLayoutGridSettings::setOffset( const QgsLayoutPoint &offset )
47 : : {
48 : 0 : mLayout->undoStack()->beginCommand( this, QObject::tr( "Change Grid Offset" ), UndoGridOffset );
49 : 0 : mGridOffset = offset;
50 : 0 : mLayout->undoStack()->endCommand();
51 : 0 : }
52 : :
53 : 0 : void QgsLayoutGridSettings::loadFromSettings()
54 : : {
55 : : //read grid style, grid color and pen width from settings
56 : 0 : QgsSettings s;
57 : :
58 : 0 : QString gridStyleString;
59 : 0 : gridStyleString = s.value( QStringLiteral( "LayoutDesigner/gridStyle" ), "Dots", QgsSettings::Gui ).toString();
60 : :
61 : : int gridRed, gridGreen, gridBlue, gridAlpha;
62 : 0 : gridRed = s.value( QStringLiteral( "LayoutDesigner/gridRed" ), 190, QgsSettings::Gui ).toInt();
63 : 0 : gridGreen = s.value( QStringLiteral( "LayoutDesigner/gridGreen" ), 190, QgsSettings::Gui ).toInt();
64 : 0 : gridBlue = s.value( QStringLiteral( "LayoutDesigner/gridBlue" ), 190, QgsSettings::Gui ).toInt();
65 : 0 : gridAlpha = s.value( QStringLiteral( "LayoutDesigner/gridAlpha" ), 100, QgsSettings::Gui ).toInt();
66 : 0 : QColor gridColor = QColor( gridRed, gridGreen, gridBlue, gridAlpha );
67 : :
68 : 0 : mGridPen.setColor( gridColor );
69 : 0 : mGridPen.setWidthF( 0 );
70 : 0 : mGridPen.setCosmetic( true );
71 : :
72 : 0 : if ( gridStyleString == QLatin1String( "Dots" ) )
73 : : {
74 : 0 : mGridStyle = StyleDots;
75 : 0 : }
76 : 0 : else if ( gridStyleString == QLatin1String( "Crosses" ) )
77 : : {
78 : 0 : mGridStyle = StyleCrosses;
79 : 0 : }
80 : : else
81 : : {
82 : 0 : mGridStyle = StyleLines;
83 : : }
84 : :
85 : 0 : mGridResolution = QgsLayoutMeasurement( s.value( QStringLiteral( "LayoutDesigner/defaultSnapGridResolution" ), 10.0, QgsSettings::Gui ).toDouble(), QgsUnitTypes::LayoutMillimeters );
86 : : // mSnapToleranceSpinBox->setValue( mSettings->value( QStringLiteral( "LayoutDesigner/defaultSnapTolerancePixels" ), 5, QgsSettings::Gui ).toInt() );
87 : 0 : mGridOffset = QgsLayoutPoint( s.value( QStringLiteral( "LayoutDesigner/defaultSnapGridOffsetX" ), 0, QgsSettings::Gui ).toDouble(),
88 : 0 : s.value( QStringLiteral( "LayoutDesigner/defaultSnapGridOffsetY" ), 0, QgsSettings::Gui ).toDouble(), QgsUnitTypes::LayoutMillimeters );
89 : 0 : }
90 : :
91 : 0 : bool QgsLayoutGridSettings::writeXml( QDomElement &parentElement, QDomDocument &document, const QgsReadWriteContext & ) const
92 : : {
93 : 0 : QDomElement element = document.createElement( QStringLiteral( "Grid" ) );
94 : :
95 : 0 : element.setAttribute( QStringLiteral( "resolution" ), mGridResolution.length() );
96 : 0 : element.setAttribute( QStringLiteral( "resUnits" ), QgsUnitTypes::encodeUnit( mGridResolution.units() ) );
97 : :
98 : 0 : element.setAttribute( QStringLiteral( "offsetX" ), mGridOffset.x() );
99 : 0 : element.setAttribute( QStringLiteral( "offsetY" ), mGridOffset.y() );
100 : 0 : element.setAttribute( QStringLiteral( "offsetUnits" ), QgsUnitTypes::encodeUnit( mGridOffset.units() ) );
101 : :
102 : 0 : parentElement.appendChild( element );
103 : : return true;
104 : 0 : }
105 : :
106 : 0 : bool QgsLayoutGridSettings::readXml( const QDomElement &e, const QDomDocument &, const QgsReadWriteContext & )
107 : : {
108 : 0 : QDomElement element = e;
109 : 0 : if ( element.nodeName() != QLatin1String( "Grid" ) )
110 : : {
111 : 0 : element = element.firstChildElement( QStringLiteral( "Grid" ) );
112 : 0 : }
113 : :
114 : 0 : if ( element.nodeName() != QLatin1String( "Grid" ) )
115 : : {
116 : 0 : return false;
117 : : }
118 : :
119 : 0 : double res = element.attribute( QStringLiteral( "resolution" ), QStringLiteral( "10" ) ).toDouble();
120 : 0 : QgsUnitTypes::LayoutUnit resUnit = QgsUnitTypes::decodeLayoutUnit( element.attribute( QStringLiteral( "resUnits" ) ) );
121 : 0 : mGridResolution = QgsLayoutMeasurement( res, resUnit );
122 : :
123 : 0 : double offsetX = element.attribute( QStringLiteral( "offsetX" ) ).toDouble();
124 : 0 : double offsetY = element.attribute( QStringLiteral( "offsetY" ) ).toDouble();
125 : 0 : QgsUnitTypes::LayoutUnit offsetUnit = QgsUnitTypes::decodeLayoutUnit( element.attribute( QStringLiteral( "offsetUnits" ) ) );
126 : 0 : mGridOffset = QgsLayoutPoint( offsetX, offsetY, offsetUnit );
127 : :
128 : 0 : mLayout->pageCollection()->redraw();
129 : :
130 : 0 : return true;
131 : 0 : }
132 : :
|