QGIS API Documentation  2.99.0-Master (ae4d26a)
qgscomposermultiframecommand.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgscomposermultiframecommand.cpp
3  --------------------------------
4  begin : 2012-08-02
5  copyright : (C) 2012 by Marco Hugentobler
6  email : marco dot hugentobler at sourcepole dot ch
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 
19 #include "qgscomposermultiframe.h"
20 #include "qgscomposition.h"
21 #include "qgsproject.h"
22 
23 QgsComposerMultiFrameCommand::QgsComposerMultiFrameCommand( QgsComposerMultiFrame *multiFrame, const QString &text, QUndoCommand *parent )
24  : QUndoCommand( text, parent )
25  , mMultiFrame( multiFrame )
26  , mFirstRun( true )
27 {
28 }
29 
31  : QUndoCommand( QString(), nullptr )
32 {
33 }
34 
36 {
38 }
39 
41 {
42  if ( checkFirstRun() )
43  {
44  return;
45  }
47 }
48 
50 {
52 }
53 
55 {
57 }
58 
59 void QgsComposerMultiFrameCommand::saveState( QDomDocument &stateDoc )
60 {
61  if ( mMultiFrame )
62  {
63  stateDoc.clear();
64  QDomElement documentElement = stateDoc.createElement( QStringLiteral( "ComposerMultiFrameState" ) );
65  mMultiFrame->writeXml( documentElement, stateDoc );
66  stateDoc.appendChild( documentElement );
67  }
68 }
69 
70 void QgsComposerMultiFrameCommand::restoreState( QDomDocument &stateDoc )
71 {
72  if ( mMultiFrame )
73  {
74  mMultiFrame->readXml( stateDoc.documentElement().firstChild().toElement(), stateDoc );
75  mMultiFrame->composition()->project()->setDirty( true );
76  }
77 }
78 
80 {
81  if ( !mFirstRun )
82  {
83  return false;
84  }
85  mFirstRun = false;
86  return true;
87 }
88 
90 {
91  return !( mPreviousState.isNull() || mAfterState.isNull() || mPreviousState.toString() == mAfterState.toString() );
92 }
93 
94 
96  : QgsComposerMultiFrameCommand( multiFrame, text )
97  , mContext( c )
98 {
99 
100 }
101 
102 bool QgsComposerMultiFrameMergeCommand::mergeWith( const QUndoCommand *command )
103 {
104  const QgsComposerMultiFrameCommand *c = dynamic_cast<const QgsComposerMultiFrameCommand *>( command );
105  if ( !c || mMultiFrame != c->multiFrame() )
106  {
107  return false;
108  }
109  mAfterState = c->afterState();
110  return true;
111 }
bool mergeWith(const QUndoCommand *command) override
void setDirty(bool b=true)
Flag the project as dirty (modified).
Definition: qgsproject.cpp:410
bool containsChange() const
Returns true if previous state and after state are valid and different.
const QgsComposerMultiFrame * multiFrame() const
void restoreState(QDomDocument &stateDoc)
void saveState(QDomDocument &stateDoc)
virtual bool readXml(const QDomElement &itemElem, const QDomDocument &doc, bool ignoreFrames=false)=0
Reads multiframe state information from a DOM element.
Abstract base class for composer items with the ability to distribute the content to several frames (...
virtual bool writeXml(QDomElement &elem, QDomDocument &doc, bool ignoreFrames=false) const =0
Stores state information about multiframe in DOM element.
QgsProject * project() const
The project associated with the composition.
QgsComposition * composition()
Returns the parent composition for the multiframe.
QgsComposerMultiFrameMergeCommand(Context c, QgsComposerMultiFrame *multiFrame, const QString &text)