LCOV - code coverage report
Current view: top level - core/layout - qgslayoutitemundocommand.cpp (source / functions) Hit Total Coverage
Test: coverage.info.cleaned Lines: 0 78 0.0 %
Date: 2021-04-10 08:29:14 Functions: 0 0 -
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /***************************************************************************
       2                 :            :                           qgslayoutitemundocommand.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                 :            :  *                                                                         *
      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 "qgslayoutitemundocommand.h"
      19                 :            : #include "qgslayoutitem.h"
      20                 :            : #include "qgsreadwritecontext.h"
      21                 :            : #include "qgslayout.h"
      22                 :            : #include "qgsproject.h"
      23                 :            : #include "qgslayoutundostack.h"
      24                 :            : 
      25                 :            : ///@cond PRIVATE
      26                 :          0 : QgsLayoutItemUndoCommand::QgsLayoutItemUndoCommand( QgsLayoutItem *item, const QString &text, int id, QUndoCommand *parent )
      27                 :          0 :   : QgsAbstractLayoutUndoCommand( text, id, parent )
      28                 :          0 :   , mItemUuid( item->uuid() )
      29                 :          0 :   , mLayout( item->layout() )
      30                 :          0 :   , mItemType( item->type() )
      31                 :          0 : {
      32                 :            : 
      33                 :          0 : }
      34                 :            : 
      35                 :          0 : bool QgsLayoutItemUndoCommand::mergeWith( const QUndoCommand *command )
      36                 :            : {
      37                 :          0 :   if ( command->id() == 0 )
      38                 :          0 :     return false;
      39                 :            : 
      40                 :          0 :   const QgsLayoutItemUndoCommand *c = dynamic_cast<const QgsLayoutItemUndoCommand *>( command );
      41                 :          0 :   if ( !c )
      42                 :            :   {
      43                 :          0 :     return false;
      44                 :            :   }
      45                 :          0 :   if ( c->itemUuid() != itemUuid() )
      46                 :          0 :     return false;
      47                 :            : 
      48                 :          0 :   setAfterState( c->afterState() );
      49                 :          0 :   return true;
      50                 :          0 : }
      51                 :            : 
      52                 :          0 : void QgsLayoutItemUndoCommand::saveState( QDomDocument &stateDoc ) const
      53                 :            : {
      54                 :          0 :   stateDoc.clear();
      55                 :          0 :   QDomElement documentElement = stateDoc.createElement( QStringLiteral( "ItemState" ) );
      56                 :            : 
      57                 :          0 :   QgsLayoutItem *item = mLayout->itemByUuid( mItemUuid );
      58                 :            :   Q_ASSERT_X( item, "QgsLayoutItemUndoCommand::saveState", "could not retrieve item for saving state" );
      59                 :            : 
      60                 :          0 :   item->writeXml( documentElement, stateDoc, QgsReadWriteContext() );
      61                 :          0 :   stateDoc.appendChild( documentElement );
      62                 :          0 : }
      63                 :            : 
      64                 :          0 : void QgsLayoutItemUndoCommand::restoreState( QDomDocument &stateDoc )
      65                 :            : {
      66                 :            :   // find item by uuid...
      67                 :          0 :   QgsLayoutItem *item = mLayout->itemByUuid( mItemUuid );
      68                 :          0 :   if ( !item )
      69                 :            :   {
      70                 :            :     // uh oh - it's been deleted! we need to create a new instance
      71                 :          0 :     item = recreateItem( mItemType, mLayout );
      72                 :          0 :   }
      73                 :            : 
      74                 :          0 :   item->readXml( stateDoc.documentElement().firstChild().toElement(), stateDoc, QgsReadWriteContext() );
      75                 :          0 :   item->finalizeRestoreFromXml();
      76                 :          0 :   mLayout->project()->setDirty( true );
      77                 :          0 :   mLayout->undoStack()->notifyUndoRedoOccurred( item );
      78                 :          0 : }
      79                 :            : 
      80                 :          0 : QgsLayoutItem *QgsLayoutItemUndoCommand::recreateItem( int itemType, QgsLayout *layout )
      81                 :            : {
      82                 :          0 :   QgsLayoutItem *item = QgsApplication::layoutItemRegistry()->createItem( itemType, layout );
      83                 :          0 :   mLayout->addLayoutItemPrivate( item );
      84                 :          0 :   return item;
      85                 :            : }
      86                 :            : 
      87                 :          0 : QString QgsLayoutItemUndoCommand::itemUuid() const
      88                 :            : {
      89                 :          0 :   return mItemUuid;
      90                 :            : }
      91                 :            : 
      92                 :          0 : QgsLayout *QgsLayoutItemUndoCommand::layout() const
      93                 :            : {
      94                 :          0 :   return mLayout;
      95                 :            : }
      96                 :            : 
      97                 :            : 
      98                 :            : //
      99                 :            : // QgsLayoutItemDeleteUndoCommand
     100                 :            : //
     101                 :            : 
     102                 :          0 : QgsLayoutItemDeleteUndoCommand::QgsLayoutItemDeleteUndoCommand( QgsLayoutItem *item, const QString &text, int id, QUndoCommand *parent )
     103                 :          0 :   : QgsLayoutItemUndoCommand( item, text, id, parent )
     104                 :          0 : {
     105                 :          0 :   saveBeforeState();
     106                 :          0 : }
     107                 :            : 
     108                 :          0 : bool QgsLayoutItemDeleteUndoCommand::mergeWith( const QUndoCommand * )
     109                 :            : {
     110                 :          0 :   return false;
     111                 :            : }
     112                 :            : 
     113                 :          0 : void QgsLayoutItemDeleteUndoCommand::redo()
     114                 :            : {
     115                 :          0 :   if ( mFirstRun )
     116                 :            :   {
     117                 :          0 :     mFirstRun = false;
     118                 :          0 :     return;
     119                 :            :   }
     120                 :            : 
     121                 :          0 :   QgsLayoutItem *item = layout()->itemByUuid( itemUuid() );
     122                 :            :   //Q_ASSERT_X( item, "QgsLayoutItemDeleteUndoCommand::redo", "could not find item to re-delete!" );
     123                 :            : 
     124                 :          0 :   layout()->undoStack()->blockCommands( true );
     125                 :          0 :   if ( item )
     126                 :          0 :     layout()->removeLayoutItemPrivate( item );
     127                 :          0 :   layout()->undoStack()->blockCommands( false );
     128                 :          0 : }
     129                 :            : 
     130                 :          0 : QgsLayoutItemAddItemCommand::QgsLayoutItemAddItemCommand( QgsLayoutItem *item, const QString &text, int id, QUndoCommand *parent )
     131                 :          0 :   : QgsLayoutItemUndoCommand( item, text, id, parent )
     132                 :          0 : {
     133                 :          0 :   saveAfterState();
     134                 :          0 : }
     135                 :            : 
     136                 :          0 : bool QgsLayoutItemAddItemCommand::containsChange() const
     137                 :            : {
     138                 :          0 :   return true;
     139                 :            : }
     140                 :            : 
     141                 :          0 : bool QgsLayoutItemAddItemCommand::mergeWith( const QUndoCommand * )
     142                 :            : {
     143                 :          0 :   return false;
     144                 :            : }
     145                 :            : 
     146                 :          0 : void QgsLayoutItemAddItemCommand::undo()
     147                 :            : {
     148                 :          0 :   if ( mFirstRun )
     149                 :            :   {
     150                 :          0 :     mFirstRun = false;
     151                 :          0 :     return;
     152                 :            :   }
     153                 :            : 
     154                 :          0 :   QgsLayoutItem *item = layout()->itemByUuid( itemUuid() );
     155                 :          0 :   if ( item )
     156                 :            :   {
     157                 :          0 :     layout()->removeLayoutItemPrivate( item );
     158                 :          0 :   }
     159                 :          0 : }
     160                 :            : 
     161                 :            : 
     162                 :            : ///@endcond

Generated by: LCOV version 1.14