Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgslayoutitemgroupundocommand.cpp 3 : : --------------------------- 4 : : begin : 2016-06-09 5 : : copyright : (C) 2016 by Sandro Santilli 6 : : email : strk at kbt dot io 7 : : ***************************************************************************/ 8 : : 9 : : /*************************************************************************** 10 : : * * 11 : : * This program is free software; you can redistribute it and/or modify * 12 : : * it under the terms of the GNU General Public License as published by * 13 : : * the Free Software Foundation; either version 2 of the License, or * 14 : : * (at your option) any later version. * 15 : : * * 16 : : ***************************************************************************/ 17 : : 18 : : #include "qgslayoutitemgroupundocommand.h" 19 : : #include "qgslayoutitemgroup.h" 20 : : #include "qgslayout.h" 21 : : #include "qgsproject.h" 22 : : 23 : : ///@cond PRIVATE 24 : 0 : QgsLayoutItemGroupUndoCommand::QgsLayoutItemGroupUndoCommand( State s, QgsLayoutItemGroup *group, QgsLayout *layout, const QString &text, QUndoCommand *parent ) 25 : 0 : : QUndoCommand( text, parent ) 26 : 0 : , mGroupUuid( group->uuid() ) 27 : 0 : , mLayout( layout ) 28 : 0 : , mState( s ) 29 : 0 : { 30 : 0 : const QList< QgsLayoutItem * > items = group->items(); 31 : 0 : for ( QgsLayoutItem *i : items ) 32 : : { 33 : 0 : mItemUuids.insert( i->uuid() ); 34 : : } 35 : 0 : } 36 : : 37 : 0 : void QgsLayoutItemGroupUndoCommand::redo() 38 : : { 39 : 0 : if ( mFirstRun ) 40 : : { 41 : 0 : mFirstRun = false; 42 : 0 : return; 43 : : } 44 : 0 : switchState(); 45 : 0 : } 46 : : 47 : 0 : void QgsLayoutItemGroupUndoCommand::undo() 48 : : { 49 : 0 : if ( mFirstRun ) 50 : : { 51 : 0 : mFirstRun = false; 52 : 0 : return; 53 : : } 54 : 0 : switchState(); 55 : 0 : } 56 : : 57 : 0 : void QgsLayoutItemGroupUndoCommand::switchState() 58 : : { 59 : 0 : if ( mState == Grouped ) 60 : : { 61 : : // ungroup 62 : 0 : QgsLayoutItemGroup *group = dynamic_cast< QgsLayoutItemGroup * >( mLayout->itemByUuid( mGroupUuid ) ); 63 : : Q_ASSERT_X( group, "QgsLayoutItemGroupUndoCommand::switchState", "Could not find group" ); 64 : 0 : group->removeItems(); 65 : 0 : mLayout->removeLayoutItemPrivate( group ); 66 : 0 : mState = Ungrouped; 67 : 0 : } 68 : 0 : else //Ungrouped 69 : : { 70 : : // find group by uuid... 71 : 0 : QgsLayoutItemGroup *group = dynamic_cast< QgsLayoutItemGroup * >( mLayout->itemByUuid( mGroupUuid ) ); 72 : 0 : if ( !group ) 73 : : { 74 : 0 : group = new QgsLayoutItemGroup( mLayout ); 75 : 0 : mLayout->addLayoutItemPrivate( group ); 76 : 0 : } 77 : : 78 : 0 : for ( const QString &childUuid : std::as_const( mItemUuids ) ) 79 : : { 80 : 0 : QgsLayoutItem *childItem = mLayout->itemByUuid( childUuid ); 81 : 0 : group->addItem( childItem ); 82 : : } 83 : : 84 : 0 : mState = Grouped; 85 : : } 86 : 0 : mLayout->project()->setDirty( true ); 87 : 0 : } 88 : : ///@endcond