Skip to content

Commit f1c4d53

Browse files
author
marco
committed
Option to create undo commands whan adding composer items from xml
1 parent d4c497b commit f1c4d53

File tree

4 files changed

+43
-3
lines changed

4 files changed

+43
-3
lines changed

python/core/qgscomposition.sip

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,13 @@ class QgsComposition: QGraphicsScene
102102
/**Reads settings from xml file*/
103103
bool readXML( const QDomElement& compositionElem, const QDomDocument& doc );
104104

105+
/**Add items from XML representation to the graphics scene (for project file reading, pasting items from clipboard)
106+
@param elem items parent element, e.g. <Composer> or <ComposerItemClipboard>
107+
@param doc xml document
108+
@param addUndoCommands insert AddItem commands if true (e.g. for copy/paste)
109+
@param pos item position. Optional, take position from xml if 0*/
110+
void addItemsFromXML( const QDomElement& elem, const QDomDocument& doc, bool addUndoCommands = false, QPointF* pos = 0 );
111+
105112
/**Adds item to z list. Usually called from constructor of QgsComposerItem*/
106113
void addItemToZList( QgsComposerItem* item );
107114
/**Removes item from z list. Usually called from destructor of QgsComposerItem*/

src/core/composer/qgscomposition.cpp

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ bool QgsComposition::readXML( const QDomElement& compositionElem, const QDomDocu
261261
return true;
262262
}
263263

264-
void QgsComposition::addItemsFromXML( const QDomElement& elem, const QDomDocument& doc, QPointF* pos )
264+
void QgsComposition::addItemsFromXML( const QDomElement& elem, const QDomDocument& doc, bool addUndoCommands, QPointF* pos )
265265
{
266266
QDomNodeList composerLabelList = elem.elementsByTagName( "ComposerLabel" );
267267
for ( int i = 0; i < composerLabelList.size(); ++i )
@@ -274,6 +274,10 @@ void QgsComposition::addItemsFromXML( const QDomElement& elem, const QDomDocumen
274274
newLabel->setItemPosition( pos->x(), pos->y() );
275275
}
276276
addComposerLabel( newLabel );
277+
if ( addUndoCommands )
278+
{
279+
pushAddRemoveCommand( newLabel, tr( "Label added" ) );
280+
}
277281
}
278282
// map
279283
QDomNodeList composerMapList = elem.elementsByTagName( "ComposerMap" );
@@ -287,6 +291,10 @@ void QgsComposition::addItemsFromXML( const QDomElement& elem, const QDomDocumen
287291
newMap->setItemPosition( pos->x(), pos->y() );
288292
}
289293
addComposerMap( newMap );
294+
if ( addUndoCommands )
295+
{
296+
pushAddRemoveCommand( newMap, tr( "Map added" ) );
297+
}
290298
}
291299
// arrow
292300
QDomNodeList composerArrowList = elem.elementsByTagName( "ComposerArrow" );
@@ -300,6 +308,10 @@ void QgsComposition::addItemsFromXML( const QDomElement& elem, const QDomDocumen
300308
newArrow->setItemPosition( pos->x(), pos->y() );
301309
}
302310
addComposerArrow( newArrow );
311+
if ( addUndoCommands )
312+
{
313+
pushAddRemoveCommand( newArrow, tr( "Arrow added" ) );
314+
}
303315
}
304316
// scalebar
305317
QDomNodeList composerScaleBarList = elem.elementsByTagName( "ComposerScaleBar" );
@@ -313,6 +325,10 @@ void QgsComposition::addItemsFromXML( const QDomElement& elem, const QDomDocumen
313325
newScaleBar->setItemPosition( pos->x(), pos->y() );
314326
}
315327
addComposerScaleBar( newScaleBar );
328+
if ( addUndoCommands )
329+
{
330+
pushAddRemoveCommand( newScaleBar, tr( "Scale bar added" ) );
331+
}
316332
}
317333
// shape
318334
QDomNodeList composerShapeList = elem.elementsByTagName( "ComposerShape" );
@@ -326,6 +342,10 @@ void QgsComposition::addItemsFromXML( const QDomElement& elem, const QDomDocumen
326342
newShape->setItemPosition( pos->x(), pos->y() );
327343
}
328344
addComposerShape( newShape );
345+
if ( addUndoCommands )
346+
{
347+
pushAddRemoveCommand( newShape, tr( "Shape added" ) );
348+
}
329349
}
330350
// picture
331351
QDomNodeList composerPictureList = elem.elementsByTagName( "ComposerPicture" );
@@ -339,6 +359,10 @@ void QgsComposition::addItemsFromXML( const QDomElement& elem, const QDomDocumen
339359
newPicture->setItemPosition( pos->x(), pos->y() );
340360
}
341361
addComposerPicture( newPicture );
362+
if ( addUndoCommands )
363+
{
364+
pushAddRemoveCommand( newPicture, tr( "Picture added" ) );
365+
}
342366
}
343367
// legend
344368
QDomNodeList composerLegendList = elem.elementsByTagName( "ComposerLegend" );
@@ -352,6 +376,10 @@ void QgsComposition::addItemsFromXML( const QDomElement& elem, const QDomDocumen
352376
newLegend->setItemPosition( pos->x(), pos->y() );
353377
}
354378
addComposerLegend( newLegend );
379+
if ( addUndoCommands )
380+
{
381+
pushAddRemoveCommand( newLegend, tr( "Legend added" ) );
382+
}
355383
}
356384
// table
357385
QDomNodeList composerTableList = elem.elementsByTagName( "ComposerAttributeTable" );
@@ -365,6 +393,10 @@ void QgsComposition::addItemsFromXML( const QDomElement& elem, const QDomDocumen
365393
newTable->setItemPosition( pos->x(), pos->y() );
366394
}
367395
addComposerTable( newTable );
396+
if ( addUndoCommands )
397+
{
398+
pushAddRemoveCommand( newTable, tr( "Table added" ) );
399+
}
368400
}
369401
}
370402

src/core/composer/qgscomposition.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,9 @@ class CORE_EXPORT QgsComposition: public QGraphicsScene
144144
/**Add items from XML representation to the graphics scene (for project file reading, pasting items from clipboard)
145145
@param elem items parent element, e.g. <Composer> or <ComposerItemClipboard>
146146
@param doc xml document
147+
@param addUndoCommands insert AddItem commands if true (e.g. for copy/paste)
147148
@param pos item position. Optional, take position from xml if 0*/
148-
void addItemsFromXML( const QDomElement& elem, const QDomDocument& doc, QPointF* pos = 0 );
149+
void addItemsFromXML( const QDomElement& elem, const QDomDocument& doc, bool addUndoCommands = false, QPointF* pos = 0 );
149150

150151
/**Adds item to z list. Usually called from constructor of QgsComposerItem*/
151152
void addItemToZList( QgsComposerItem* item );

src/gui/qgscomposerview.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,7 @@ void QgsComposerView::keyPressEvent( QKeyEvent * e )
461461
if ( composition() )
462462
{
463463
QPointF pt = mapToScene( mapFromGlobal( QCursor::pos() ) );
464-
composition()->addItemsFromXML( docElem, doc, &pt );
464+
composition()->addItemsFromXML( docElem, doc, true, &pt );
465465
}
466466
}
467467
}

0 commit comments

Comments
 (0)