LCOV - code coverage report
Current view: top level - core/layout - qgslayoutmultiframeundocommand.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                 :            :                           qgslayoutmultiframeundocommand.cpp
       3                 :            :                           ----------------------
       4                 :            :     begin                : October 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 "qgslayoutmultiframeundocommand.h"
      19                 :            : #include "qgslayoutmultiframe.h"
      20                 :            : #include "qgsreadwritecontext.h"
      21                 :            : #include "qgslayout.h"
      22                 :            : #include "qgsproject.h"
      23                 :            : #include "qgsfeedback.h"
      24                 :            : 
      25                 :            : ///@cond PRIVATE
      26                 :          0 : QgsLayoutMultiFrameUndoCommand::QgsLayoutMultiFrameUndoCommand( QgsLayoutMultiFrame *frame, const QString &text, int id, QUndoCommand *parent )
      27                 :          0 :   : QgsAbstractLayoutUndoCommand( text, id, parent )
      28                 :          0 :   , mFrameUuid( frame->uuid() )
      29                 :          0 :   , mLayout( frame->layout() )
      30                 :          0 :   , mItemType( frame->type() )
      31                 :          0 : {
      32                 :            : 
      33                 :          0 : }
      34                 :            : 
      35                 :          0 : bool QgsLayoutMultiFrameUndoCommand::mergeWith( const QUndoCommand *command )
      36                 :            : {
      37                 :          0 :   if ( command->id() == 0 )
      38                 :          0 :     return false;
      39                 :            : 
      40                 :          0 :   const QgsLayoutMultiFrameUndoCommand *c = dynamic_cast<const QgsLayoutMultiFrameUndoCommand *>( command );
      41                 :          0 :   if ( !c )
      42                 :            :   {
      43                 :          0 :     return false;
      44                 :            :   }
      45                 :          0 :   if ( c->multiFrameUuid() != multiFrameUuid() )
      46                 :          0 :     return false;
      47                 :            : 
      48                 :          0 :   setAfterState( c->afterState() );
      49                 :          0 :   return true;
      50                 :          0 : }
      51                 :            : 
      52                 :          0 : void QgsLayoutMultiFrameUndoCommand::saveState( QDomDocument &stateDoc ) const
      53                 :            : {
      54                 :          0 :   stateDoc.clear();
      55                 :          0 :   QDomElement documentElement = stateDoc.createElement( QStringLiteral( "ItemState" ) );
      56                 :            : 
      57                 :          0 :   QgsLayoutMultiFrame *item = mLayout->multiFrameByUuid( mFrameUuid );
      58                 :            :   Q_ASSERT_X( item, "QgsLayoutMultiFrameUndoCommand::saveState", "could not retrieve item for saving state" );
      59                 :            : 
      60                 :          0 :   item->writeXml( documentElement, stateDoc, QgsReadWriteContext(), true );
      61                 :          0 :   stateDoc.appendChild( documentElement );
      62                 :          0 : }
      63                 :            : 
      64                 :          0 : void QgsLayoutMultiFrameUndoCommand::restoreState( QDomDocument &stateDoc )
      65                 :            : {
      66                 :            :   // find item by uuid...
      67                 :          0 :   QgsLayoutMultiFrame *item = mLayout->multiFrameByUuid( mFrameUuid );
      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(), true );
      75                 :          0 :   item->finalizeRestoreFromXml();
      76                 :          0 :   mLayout->project()->setDirty( true );
      77                 :          0 : }
      78                 :            : 
      79                 :          0 : QgsLayoutMultiFrame *QgsLayoutMultiFrameUndoCommand::recreateItem( int itemType, QgsLayout *layout )
      80                 :            : {
      81                 :          0 :   QgsLayoutMultiFrame *item = QgsApplication::layoutItemRegistry()->createMultiFrame( itemType, layout );
      82                 :          0 :   mLayout->addMultiFrame( item );
      83                 :          0 :   return item;
      84                 :            : }
      85                 :            : 
      86                 :          0 : QString QgsLayoutMultiFrameUndoCommand::multiFrameUuid() const
      87                 :            : {
      88                 :          0 :   return mFrameUuid;
      89                 :            : }
      90                 :            : 
      91                 :          0 : QgsLayout *QgsLayoutMultiFrameUndoCommand::layout() const
      92                 :            : {
      93                 :          0 :   return mLayout;
      94                 :            : }
      95                 :            : 
      96                 :            : 
      97                 :            : //
      98                 :            : // QgsLayoutMultiFrameDeleteUndoCommand
      99                 :            : //
     100                 :            : 
     101                 :          0 : QgsLayoutMultiFrameDeleteUndoCommand::QgsLayoutMultiFrameDeleteUndoCommand( QgsLayoutMultiFrame *item, const QString &text, int id, QUndoCommand *parent )
     102                 :          0 :   : QgsLayoutMultiFrameUndoCommand( item, text, id, parent )
     103                 :          0 : {
     104                 :          0 :   saveBeforeState();
     105                 :          0 : }
     106                 :            : 
     107                 :          0 : bool QgsLayoutMultiFrameDeleteUndoCommand::mergeWith( const QUndoCommand * )
     108                 :            : {
     109                 :          0 :   return false;
     110                 :            : }
     111                 :            : 
     112                 :          0 : void QgsLayoutMultiFrameDeleteUndoCommand::redo()
     113                 :            : {
     114                 :          0 :   if ( mFirstRun )
     115                 :            :   {
     116                 :          0 :     mFirstRun = false;
     117                 :          0 :     return;
     118                 :            :   }
     119                 :            : 
     120                 :          0 :   QgsLayoutMultiFrame *item = layout()->multiFrameByUuid( multiFrameUuid() );
     121                 :            :   //Q_ASSERT_X( item, "QgsLayoutMultiFrameDeleteUndoCommand::redo", "could not find item to re-delete!" );
     122                 :            : 
     123                 :          0 :   if ( item )
     124                 :            :   {
     125                 :          0 :     layout()->removeMultiFrame( item );
     126                 :          0 :     delete item;
     127                 :          0 :   }
     128                 :          0 : }
     129                 :            : 
     130                 :          0 : QgsLayoutMultiFrameAddItemCommand::QgsLayoutMultiFrameAddItemCommand( QgsLayoutMultiFrame *frame, const QString &text, int id, QUndoCommand *parent )
     131                 :          0 :   : QgsLayoutMultiFrameUndoCommand( frame, text, id, parent )
     132                 :          0 : {
     133                 :          0 :   saveAfterState();
     134                 :          0 : }
     135                 :            : 
     136                 :          0 : bool QgsLayoutMultiFrameAddItemCommand::containsChange() const
     137                 :            : {
     138                 :          0 :   return true;
     139                 :            : }
     140                 :            : 
     141                 :          0 : bool QgsLayoutMultiFrameAddItemCommand::mergeWith( const QUndoCommand * )
     142                 :            : {
     143                 :          0 :   return false;
     144                 :            : }
     145                 :            : 
     146                 :          0 : void QgsLayoutMultiFrameAddItemCommand::undo()
     147                 :            : {
     148                 :          0 :   if ( mFirstRun )
     149                 :            :   {
     150                 :          0 :     mFirstRun = false;
     151                 :          0 :     return;
     152                 :            :   }
     153                 :            : 
     154                 :          0 :   QgsLayoutMultiFrame *item = layout()->multiFrameByUuid( multiFrameUuid() );
     155                 :          0 :   if ( item )
     156                 :            :   {
     157                 :          0 :     layout()->removeMultiFrame( item );
     158                 :          0 :     delete item;
     159                 :          0 :   }
     160                 :          0 : }
     161                 :            : 
     162                 :            : 
     163                 :            : ///@endcond

Generated by: LCOV version 1.14