Skip to content

Commit 08e7267

Browse files
committed
Load and save custom snap lines in composer
1 parent 66e98a1 commit 08e7267

File tree

4 files changed

+38
-18
lines changed

4 files changed

+38
-18
lines changed

src/core/composer/qgscomposition.cpp

+36-3
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,19 @@ bool QgsComposition::writeXML( QDomElement& composerElem, QDomDocument& doc )
299299
compositionElem.setAttribute( "snapGridOffsetX", QString::number( mSnapGridOffsetX ) );
300300
compositionElem.setAttribute( "snapGridOffsetY", QString::number( mSnapGridOffsetY ) );
301301

302+
//custom snap lines
303+
QList< QGraphicsLineItem* >::const_iterator snapLineIt = mSnapLines.constBegin();
304+
for ( ; snapLineIt != mSnapLines.constEnd(); ++snapLineIt )
305+
{
306+
QDomElement snapLineElem = doc.createElement( "SnapLine" );
307+
QLineF line = ( *snapLineIt )->line();
308+
snapLineElem.setAttribute( "x1", QString::number( line.x1() ) );
309+
snapLineElem.setAttribute( "y1", QString::number( line.y1() ) );
310+
snapLineElem.setAttribute( "x2", QString::number( line.x2() ) );
311+
snapLineElem.setAttribute( "y2", QString::number( line.y2() ) );
312+
compositionElem.appendChild( snapLineElem );
313+
}
314+
302315
compositionElem.setAttribute( "printResolution", mPrintResolution );
303316
compositionElem.setAttribute( "printAsRaster", mPrintAsRaster );
304317

@@ -368,6 +381,19 @@ bool QgsComposition::readXML( const QDomElement& compositionElem, const QDomDocu
368381
mSnapGridOffsetX = compositionElem.attribute( "snapGridOffsetX" ).toDouble();
369382
mSnapGridOffsetY = compositionElem.attribute( "snapGridOffsetY" ).toDouble();
370383

384+
//custom snap lines
385+
QDomNodeList snapLineNodes = compositionElem.elementsByTagName( "SnapLine" );
386+
for ( int i = 0; i < snapLineNodes.size(); ++i )
387+
{
388+
QDomElement snapLineElem = snapLineNodes.at( i ).toElement();
389+
QGraphicsLineItem* snapItem = addSnapLine();
390+
double x1 = snapLineElem.attribute( "x1" ).toDouble();
391+
double y1 = snapLineElem.attribute( "y1" ).toDouble();
392+
double x2 = snapLineElem.attribute( "x2" ).toDouble();
393+
double y2 = snapLineElem.attribute( "y2" ).toDouble();
394+
snapItem->setLine( x1, y1, x2, y2 );
395+
}
396+
371397
mAlignmentSnap = compositionElem.attribute( "alignmentSnap", "1" ).toInt() == 0 ? false : true;
372398
mAlignmentSnapTolerance = compositionElem.attribute( "alignmentSnapTolerance", "2.0" ).toDouble();
373399

@@ -1063,10 +1089,17 @@ QPointF QgsComposition::alignPos( const QPointF& pos, const QgsComposerItem* exc
10631089
return result;
10641090
}
10651091

1066-
void QgsComposition::addSnapLine( QGraphicsLineItem* line )
1092+
QGraphicsLineItem* QgsComposition::addSnapLine()
10671093
{
1068-
addItem( line );
1069-
mSnapLines.push_back( line );
1094+
QGraphicsLineItem* item = new QGraphicsLineItem();
1095+
QPen linePen( Qt::SolidLine );
1096+
linePen.setColor( Qt::red );
1097+
linePen.setWidthF( 0.5 );
1098+
item->setPen( linePen );
1099+
item->setZValue( 100 );
1100+
addItem( item );
1101+
mSnapLines.push_back( item );
1102+
return item;
10701103
}
10711104

10721105
void QgsComposition::removeSnapLine( QGraphicsLineItem* line )

src/core/composer/qgscomposition.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ class CORE_EXPORT QgsComposition: public QGraphicsScene
263263
QPointF alignPos( const QPointF& pos, const QgsComposerItem* excludeItem, double& alignX, double& alignY );
264264

265265
/**Add a custom snap line (can be horizontal or vertical)*/
266-
void addSnapLine( QGraphicsLineItem* line );
266+
QGraphicsLineItem* addSnapLine();
267267
/**Remove custom snap line (and delete the object)*/
268268
void removeSnapLine( QGraphicsLineItem* line );
269269
/**Get nearest snap line*/

src/gui/qgscomposerruler.cpp

+1-13
Original file line numberDiff line numberDiff line change
@@ -176,8 +176,7 @@ void QgsComposerRuler::mousePressEvent( QMouseEvent* event )
176176
if ( !line )
177177
{
178178
//create new snap line
179-
mLineSnapItem = createLineSnapItem();
180-
mComposition->addSnapLine( mLineSnapItem );
179+
mLineSnapItem = mComposition->addSnapLine();
181180
}
182181
else
183182
{
@@ -244,14 +243,3 @@ void QgsComposerRuler::setSnapLinePosition( const QPointF& pos )
244243
}
245244
}
246245
}
247-
248-
QGraphicsLineItem* QgsComposerRuler::createLineSnapItem()
249-
{
250-
QGraphicsLineItem* item = new QGraphicsLineItem();
251-
QPen linePen( Qt::SolidLine );
252-
linePen.setColor( Qt::red );
253-
linePen.setWidthF( 0.5 );
254-
item->setPen( linePen );
255-
item->setZValue( 100 );
256-
return item;
257-
}

src/gui/qgscomposerruler.h

-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ class QgsComposerRuler: public QWidget
4343
QList< QPair< QgsComposerItem*, QgsComposerItem::ItemPositionMode > > mSnappedItems;
4444

4545
void setSnapLinePosition( const QPointF& pos );
46-
static QGraphicsLineItem* createLineSnapItem();
4746
};
4847

4948
#endif // QGSCOMPOSERRULER_H

0 commit comments

Comments
 (0)