Skip to content

Commit 3ebef1b

Browse files
committed
Improved multiframe command handling
1 parent ec0a02b commit 3ebef1b

7 files changed

+46
-18
lines changed

src/core/composer/qgscomposerframe.h

+2
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ class QgsComposerFrame: public QgsComposerItem
3838

3939
int type() const { return ComposerFrame; }
4040

41+
QgsComposerMultiFrame* multiFrame() { return mMultiFrame; }
42+
4143
private:
4244
QgsComposerFrame(); //forbidden
4345

src/core/composer/qgscomposerhtml.cpp

+14-3
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,29 @@
1616
#include "qgscomposerhtml.h"
1717
#include "qgscomposerframe.h"
1818
#include "qgscomposition.h"
19+
#include "qgsaddremovemultiframecommand.h"
1920
#include <QCoreApplication>
2021
#include <QImage>
2122
#include <QPainter>
2223
#include <QWebFrame>
2324
#include <QWebPage>
2425

25-
QgsComposerHtml::QgsComposerHtml( QgsComposition* c, qreal x, qreal y, qreal width, qreal height ): QgsComposerMultiFrame( c ), mWebPage( 0 ), mLoaded( false ), mHtmlUnitsToMM( 1.0 )
26+
QgsComposerHtml::QgsComposerHtml( QgsComposition* c, qreal x, qreal y, qreal width, qreal height, bool addCommands ): QgsComposerMultiFrame( c ), mWebPage( 0 ),
27+
mLoaded( false ), mHtmlUnitsToMM( 1.0 )
2628
{
2729
mHtmlUnitsToMM = htmlUnitsToMM();
2830
mWebPage = new QWebPage();
2931
QObject::connect( mWebPage, SIGNAL( loadFinished( bool ) ), this, SLOT( frameLoaded( bool ) ) );
3032

3133
if ( mComposition && width > 0 && height > 0 )
3234
{
35+
if ( addCommands )
36+
{
37+
QgsAddRemoveMultiFrameCommand* c = new QgsAddRemoveMultiFrameCommand( QgsAddRemoveMultiFrameCommand::Added, this, mComposition, tr( "HTML added" ), 0 );
38+
mComposition->undoStack()->push( c );
39+
}
3340
QgsComposerFrame* frame = new QgsComposerFrame( c, this, x, y, width, height );
34-
addFrame( frame );
41+
addFrame( frame, addCommands );
3542
QObject::connect( mComposition, SIGNAL( itemRemoved( QgsComposerItem* ) ), this, SLOT( handleFrameRemoval( QgsComposerItem* ) ) );
3643
recalculateFrameSizes();
3744
}
@@ -105,13 +112,17 @@ double QgsComposerHtml::htmlUnitsToMM()
105112
return ( pixelPerMM / ( img.dotsPerMeterX() / 1000.0 ) );
106113
}
107114

108-
void QgsComposerHtml::addFrame( QgsComposerFrame* frame )
115+
void QgsComposerHtml::addFrame( QgsComposerFrame* frame, bool addCommand )
109116
{
110117
mFrameItems.push_back( frame );
111118
QObject::connect( frame, SIGNAL( sizeChanged() ), this, SLOT( recalculateFrameSizes() ) );
112119
if ( mComposition )
113120
{
114121
mComposition->addComposerHtmlFrame( this, frame );
122+
if ( addCommand )
123+
{
124+
mComposition->pushAddRemoveCommand( frame, tr( "Add Html frame" ) );
125+
}
115126
}
116127
}
117128

src/core/composer/qgscomposerhtml.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class QgsComposerHtml: public QgsComposerMultiFrame
2525
{
2626
Q_OBJECT
2727
public:
28-
QgsComposerHtml( QgsComposition* c, qreal x, qreal y, qreal width, qreal height );
28+
QgsComposerHtml( QgsComposition* c, qreal x, qreal y, qreal width, qreal height, bool addCommands = false );
2929
QgsComposerHtml();
3030
~QgsComposerHtml();
3131

@@ -39,7 +39,7 @@ class QgsComposerHtml: public QgsComposerMultiFrame
3939
bool readXML( const QDomElement& itemElem, const QDomDocument& doc );
4040

4141
protected:
42-
void addFrame( QgsComposerFrame* frame );
42+
void addFrame( QgsComposerFrame* frame, bool addCommand = false );
4343

4444
private slots:
4545
void frameLoaded( bool ok );

src/core/composer/qgscomposermultiframe.cpp

+11-6
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ QgsComposerMultiFrame::QgsComposerMultiFrame(): mComposition( 0 ), mResizeMode(
2828

2929
QgsComposerMultiFrame::~QgsComposerMultiFrame()
3030
{
31+
//todo: remove all frames from composition and delete them
3132
}
3233

3334
void QgsComposerMultiFrame::setResizeMode( ResizeMode mode )
@@ -40,7 +41,7 @@ void QgsComposerMultiFrame::setResizeMode( ResizeMode mode )
4041
}
4142
}
4243

43-
void QgsComposerMultiFrame::recalculateFrameSizes()
44+
void QgsComposerMultiFrame::recalculateFrameSizes( bool addCommands )
4445
{
4546
if ( mFrameItems.size() < 1 )
4647
{
@@ -67,7 +68,7 @@ void QgsComposerMultiFrame::recalculateFrameSizes()
6768
{
6869
for ( int j = mFrameItems.size(); j > i; --j )
6970
{
70-
removeFrame( j - 1 );
71+
removeFrame( j - 1, addCommands );
7172
}
7273
}
7374
return;
@@ -100,7 +101,7 @@ void QgsComposerMultiFrame::recalculateFrameSizes()
100101
newFrame->setContentSection( QRectF( 0, currentY, newFrame->rect().width(), newFrame->rect().height() ) );
101102
currentY += newFrame->rect().height();
102103
currentItem = newFrame;
103-
addFrame( newFrame );
104+
addFrame( newFrame, addCommands );
104105
}
105106
}
106107
}
@@ -125,8 +126,8 @@ void QgsComposerMultiFrame::handleFrameRemoval( QgsComposerItem* item )
125126
{
126127
//schedule this composer multi frame for deletion
127128
mComposition->removeMultiFrame( this );
128-
QgsAddRemoveMultiFrameCommand* c = new QgsAddRemoveMultiFrameCommand( QgsAddRemoveMultiFrameCommand::Removed, this, mComposition, tr( "Html removed" ), 0 );
129-
mComposition->undoStack()->push( c );
129+
// QgsAddRemoveMultiFrameCommand* c = new QgsAddRemoveMultiFrameCommand( QgsAddRemoveMultiFrameCommand::Removed, this, mComposition, tr( "Html removed" ), 0 );
130+
// mComposition->undoStack()->push( c );
130131
}
131132
}
132133
else
@@ -135,12 +136,16 @@ void QgsComposerMultiFrame::handleFrameRemoval( QgsComposerItem* item )
135136
}
136137
}
137138

138-
void QgsComposerMultiFrame::removeFrame( int i )
139+
void QgsComposerMultiFrame::removeFrame( int i, bool addCommand )
139140
{
140141
QgsComposerFrame* frameItem = mFrameItems[i];
141142
if ( mComposition )
142143
{
143144
mComposition->removeComposerItem( frameItem );
145+
if ( addCommand )
146+
{
147+
mComposition->pushAddRemoveCommand( frameItem, tr( "Frame removed" ), QgsAddRemoveItemCommand::Removed );
148+
}
144149
}
145150
}
146151

src/core/composer/qgscomposermultiframe.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class QgsComposerMultiFrame: public QObject
4343
virtual ~QgsComposerMultiFrame();
4444
virtual QSizeF totalSize() const = 0;
4545
virtual void render( QPainter* p, const QRectF& renderExtent ) = 0;
46-
void removeFrame( int i );
46+
void removeFrame( int i, bool addCommand = false );
4747

4848
void update();
4949

@@ -61,10 +61,10 @@ class QgsComposerMultiFrame: public QObject
6161
QList<QgsComposerFrame*> mFrameItems;
6262
ResizeMode mResizeMode;
6363

64-
virtual void addFrame( QgsComposerFrame* frame ) = 0;
64+
virtual void addFrame( QgsComposerFrame* frame, bool addCommand = false ) = 0;
6565

6666
protected slots:
67-
void recalculateFrameSizes();
67+
void recalculateFrameSizes( bool addCommands = false );
6868
/**Called before a frame is going to be removed (update frame list)*/
6969
void handleFrameRemoval( QgsComposerItem* item );
7070

src/core/composer/qgscomposition.cpp

+13
Original file line numberDiff line numberDiff line change
@@ -1260,6 +1260,19 @@ void QgsComposition::sendItemAddedSignal( QgsComposerItem* item )
12601260
emit selectedItemChanged( table );
12611261
return;
12621262
}
1263+
QgsComposerFrame* frame = dynamic_cast<QgsComposerFrame*>( item );
1264+
if ( frame )
1265+
{
1266+
//emit composerFrameAdded( multiframe, frame, );
1267+
QgsComposerMultiFrame* mf = frame->multiFrame();
1268+
QgsComposerHtml* html = dynamic_cast<QgsComposerHtml*>( mf );
1269+
if ( html )
1270+
{
1271+
emit composerHtmlFrameAdded( html, frame );
1272+
}
1273+
emit selectedItemChanged( frame );
1274+
return;
1275+
}
12631276
}
12641277

12651278
void QgsComposition::updatePaperItems()

src/gui/qgscomposerview.cpp

+1-4
Original file line numberDiff line numberDiff line change
@@ -324,14 +324,11 @@ void QgsComposerView::mouseReleaseEvent( QMouseEvent* e )
324324
if ( composition() )
325325
{
326326
QgsComposerHtml* composerHtml = new QgsComposerHtml( composition(), mRubberBandItem->transform().dx(), mRubberBandItem->transform().dy(),
327-
mRubberBandItem->rect().width(), mRubberBandItem->rect().height() );
327+
mRubberBandItem->rect().width(), mRubberBandItem->rect().height(), true );
328328
scene()->removeItem( mRubberBandItem );
329329
delete mRubberBandItem;
330330
mRubberBandItem = 0;
331331
emit actionFinished();
332-
333-
QgsAddRemoveMultiFrameCommand* c = new QgsAddRemoveMultiFrameCommand( QgsAddRemoveMultiFrameCommand::Added, composerHtml, composition(), tr( "HTML added" ), 0 );
334-
composition()->undoStack()->push( c );
335332
}
336333
default:
337334
break;

0 commit comments

Comments
 (0)