Skip to content

Commit 70fe6cf

Browse files
committed
Delete composer frames from list
1 parent 6f14d2c commit 70fe6cf

11 files changed

+68
-71
lines changed

src/app/composer/qgscomposer.cpp

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ void QgsComposer::connectSlots()
371371

372372
connect( mComposition, SIGNAL( selectedItemChanged( QgsComposerItem* ) ), this, SLOT( showItemOptions( QgsComposerItem* ) ) );
373373
connect( mComposition, SIGNAL( composerArrowAdded( QgsComposerArrow* ) ), this, SLOT( addComposerArrow( QgsComposerArrow* ) ) );
374-
connect( mComposition, SIGNAL( composerHtmlAdded( QgsComposerHtml* ) ), this, SLOT( addComposerHtml( QgsComposerHtml* ) ) );
374+
connect( mComposition, SIGNAL( composerHtmlFrameAdded( QgsComposerHtml*, QgsComposerFrame* ) ), this, SLOT( addComposerHtmlFrame( QgsComposerHtml*, QgsComposerFrame* ) ) );
375375
connect( mComposition, SIGNAL( composerLabelAdded( QgsComposerLabel* ) ), this, SLOT( addComposerLabel( QgsComposerLabel* ) ) );
376376
connect( mComposition, SIGNAL( composerMapAdded( QgsComposerMap* ) ), this, SLOT( addComposerMap( QgsComposerMap* ) ) );
377377
connect( mComposition, SIGNAL( composerScaleBarAdded( QgsComposerScaleBar* ) ), this, SLOT( addComposerScaleBar( QgsComposerScaleBar* ) ) );
@@ -1341,20 +1341,15 @@ void QgsComposer::addComposerTable( QgsComposerAttributeTable* table )
13411341
mItemWidgetMap.insert( table, tWidget );
13421342
}
13431343

1344-
void QgsComposer::addComposerHtml( QgsComposerHtml* html )
1344+
void QgsComposer::addComposerHtmlFrame( QgsComposerHtml* html, QgsComposerFrame* frame )
13451345
{
13461346
if ( !html )
13471347
{
13481348
return;
13491349
}
13501350

1351-
QgsComposerHtmlWidget* hWidget = new QgsComposerHtmlWidget( html );
1352-
QList<QgsComposerFrame*> frameList = html->frameItems();
1353-
QList<QgsComposerFrame*>::iterator frameIt = frameList.begin();
1354-
for ( ; frameIt != frameList.end(); ++frameIt )
1355-
{
1356-
mItemWidgetMap.insert( *frameIt, hWidget );
1357-
}
1351+
QgsComposerHtmlWidget* hWidget = new QgsComposerHtmlWidget( html, frame );
1352+
mItemWidgetMap.insert( frame, hWidget );
13581353
}
13591354

13601355
void QgsComposer::deleteItem( QgsComposerItem* item )

src/app/composer/qgscomposer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ class QgsComposer: public QMainWindow, private Ui::QgsComposerBase
247247
void addComposerTable( QgsComposerAttributeTable* table );
248248

249249
/**Adds composer html and creates a configuration widget*/
250-
void addComposerHtml( QgsComposerHtml* html );
250+
void addComposerHtmlFrame( QgsComposerHtml* html, QgsComposerFrame* frame );
251251

252252
/**Removes item from the item/widget map and deletes the configuration widget. Does not delete the item itself*/
253253
void deleteItem( QgsComposerItem* item );

src/app/composer/qgscomposerhtmlwidget.cpp

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,22 @@
11
#include "qgscomposerhtmlwidget.h"
2+
#include "qgscomposerframe.h"
3+
#include "qgscomposeritemwidget.h"
24
#include "qgscomposerhtml.h"
35
#include <QFileDialog>
46

5-
QgsComposerHtmlWidget::QgsComposerHtmlWidget( QgsComposerHtml* html ): mHtml( html )
7+
QgsComposerHtmlWidget::QgsComposerHtmlWidget( QgsComposerHtml* html, QgsComposerFrame* frame ): mHtml( html ), mFrame( frame )
68
{
79
setupUi( this );
810
mResizeModeComboBox->addItem( tr( "Use existing frames" ), QgsComposerMultiFrame::UseExistingFrames );
911
mResizeModeComboBox->addItem( tr( "Extend to next page" ), QgsComposerMultiFrame::ExtendToNextPage );
12+
13+
//embed widget for general options
14+
if ( mFrame )
15+
{
16+
//add widget for general composer item properties
17+
QgsComposerItemWidget* itemPropertiesWidget = new QgsComposerItemWidget( this, mFrame );
18+
mToolBox->addItem( itemPropertiesWidget, tr( "General options" ) );
19+
}
1020
}
1121

1222
QgsComposerHtmlWidget::QgsComposerHtmlWidget()
@@ -28,10 +38,8 @@ void QgsComposerHtmlWidget::on_mUrlLineEdit_editingFinished()
2838
{
2939
if ( mHtml )
3040
{
31-
//mHtml->beginCommand( tr( "Url changed" ) );
3241
mHtml->setUrl( QUrl( mUrlLineEdit->text() ) );
3342
mHtml->update();
34-
//mHtmlItem->endCommand();
3543
}
3644
}
3745

@@ -41,9 +49,7 @@ void QgsComposerHtmlWidget::on_mFileToolButton_clicked()
4149
if ( !file.isEmpty() )
4250
{
4351
QUrl url = QUrl::fromLocalFile( file );
44-
//mHtmlItem->beginCommand( tr( "Url changed" ) );
4552
mHtml->setUrl( url );
46-
//mHtmlItem->endCommand();
4753
mUrlLineEdit->setText( url.toString() );
4854
}
4955
}

src/app/composer/qgscomposerhtmlwidget.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@
44
#include "ui_qgscomposerhtmlwidgetbase.h"
55

66
class QgsComposerHtml;
7+
class QgsComposerFrame;
78

89
class QgsComposerHtmlWidget: public QWidget, private Ui::QgsComposerHtmlWidgetBase
910
{
1011
Q_OBJECT
1112
public:
12-
QgsComposerHtmlWidget( QgsComposerHtml* html );
13+
QgsComposerHtmlWidget( QgsComposerHtml* html, QgsComposerFrame* frame );
1314
~QgsComposerHtmlWidget();
1415

1516
private slots:
@@ -25,6 +26,7 @@ class QgsComposerHtmlWidget: public QWidget, private Ui::QgsComposerHtmlWidgetBa
2526
void blockSignals( bool block );
2627

2728
QgsComposerHtml* mHtml;
29+
QgsComposerFrame* mFrame;
2830
};
2931

3032
#endif // QGSCOMPOSERHTMLWIDGET_H

src/core/composer/qgscomposerhtml.cpp

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,13 @@ QgsComposerHtml::QgsComposerHtml( QgsComposition* c, qreal x, qreal y, qreal wid
2727
mHtmlUnitsToMM = htmlUnitsToMM();
2828
mWebPage = new QWebPage();
2929
QObject::connect( mWebPage, SIGNAL( loadFinished( bool ) ), this, SLOT( frameLoaded( bool ) ) );
30-
//setUrl( QUrl( "http://www.qgis.org" ) );//test
31-
QgsComposerFrame* frame = new QgsComposerFrame( c, this, x, y, width, height );
32-
addFrame( frame );
30+
31+
if ( mComposition )
32+
{
33+
QgsComposerFrame* frame = new QgsComposerFrame( c, this, x, y, width, height );
34+
addFrame( frame );
35+
QObject::connect( mComposition, SIGNAL( itemRemoved( QgsComposerItem* ) ), this, SLOT( handleFrameRemoval( QgsComposerItem* ) ) );
36+
}
3337
recalculateFrameSizes();
3438
}
3539

@@ -64,6 +68,7 @@ void QgsComposerHtml::setUrl( const QUrl& url )
6468

6569
void QgsComposerHtml::frameLoaded( bool ok )
6670
{
71+
Q_UNUSED( ok );
6772
mLoaded = true;
6873
}
6974

@@ -97,3 +102,13 @@ double QgsComposerHtml::htmlUnitsToMM()
97102
double pixelPerMM = mComposition->printResolution() / 25.4;
98103
return ( pixelPerMM / ( img.dotsPerMeterX() / 1000.0 ) );
99104
}
105+
106+
void QgsComposerHtml::addFrame( QgsComposerFrame* frame )
107+
{
108+
mFrameItems.push_back( frame );
109+
QObject::connect( frame, SIGNAL( sizeChanged() ), this, SLOT( recalculateFrameSizes() ) );
110+
if ( mComposition )
111+
{
112+
mComposition->addComposerHtmlFrame( this, frame );
113+
}
114+
}

src/core/composer/qgscomposerhtml.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ class QgsComposerHtml: public QgsComposerMultiFrame
3535
QSizeF totalSize() const;
3636
void render( QPainter* p, const QRectF& renderExtent );
3737

38+
protected:
39+
void addFrame( QgsComposerFrame* frame );
40+
3841
private slots:
3942
void frameLoaded( bool ok );
4043

src/core/composer/qgscomposermultiframe.cpp

Lines changed: 13 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818

1919
QgsComposerMultiFrame::QgsComposerMultiFrame( QgsComposition* c ): mComposition( c ), mResizeMode( UseExistingFrames )
2020
{
21-
//debug
22-
//mResizeMode = ExtendToNextPage;
2321
}
2422

2523
QgsComposerMultiFrame::QgsComposerMultiFrame(): mComposition( 0 ), mResizeMode( UseExistingFrames )
@@ -98,15 +96,20 @@ void QgsComposerMultiFrame::recalculateFrameSizes()
9896
}
9997
}
10098

101-
void QgsComposerMultiFrame::addFrame( QgsComposerFrame* frame )
99+
void QgsComposerMultiFrame::handleFrameRemoval( QgsComposerItem* item )
102100
{
103-
mFrameItems.push_back( frame );
104-
QObject::connect( frame, SIGNAL( sizeChanged() ), this, SLOT( recalculateFrameSizes() ) );
105-
// QObject::connect( frame, SIGNAL( destroyed( QObject* ) ), this, SLOT( removeFrame( QObject* ) ) );
106-
/* if ( mComposition )
107-
{
108-
mComposition->addItem( frame );
109-
}*/
101+
QgsComposerFrame* frame = dynamic_cast<QgsComposerFrame*>( item );
102+
if ( !frame )
103+
{
104+
return;
105+
}
106+
int index = mFrameItems.indexOf( frame );
107+
if ( index == -1 )
108+
{
109+
return;
110+
}
111+
mFrameItems.removeAt( index );
112+
recalculateFrameSizes();
110113
}
111114

112115
void QgsComposerMultiFrame::removeFrame( int i )
@@ -116,21 +119,8 @@ void QgsComposerMultiFrame::removeFrame( int i )
116119
{
117120
mComposition->removeComposerItem( frameItem );
118121
}
119-
mFrameItems.removeAt( i );
120122
}
121123

122-
/*
123-
void QgsComposerMultiFrame::removeFrame( QObject* frame )
124-
{
125-
QgsComposerFrame* composerFrame = dynamic_cast<QgsComposerFrame*>( frame );
126-
if( composerFrame )
127-
{
128-
removeFrame( mFrameItems.indexOf( composerFrame ) );
129-
recalculateFrameSizes();
130-
}
131-
}*/
132-
133-
134124
void QgsComposerMultiFrame::update()
135125
{
136126
QList<QgsComposerFrame*>::iterator frameIt = mFrameItems.begin();

src/core/composer/qgscomposermultiframe.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include <QSizeF>
2121

2222
class QgsComposerFrame;
23+
class QgsComposerItem;
2324
class QgsComposition;
2425
class QRectF;
2526
class QPainter;
@@ -40,25 +41,24 @@ class QgsComposerMultiFrame: public QObject
4041
virtual ~QgsComposerMultiFrame();
4142
virtual QSizeF totalSize() const = 0;
4243
virtual void render( QPainter* p, const QRectF& renderExtent ) = 0;
43-
44-
void addFrame( QgsComposerFrame* frame );
4544
void removeFrame( int i );
4645

4746
void update();
4847

4948
void setResizeMode( ResizeMode mode );
5049
ResizeMode resizeMode() const { return mResizeMode; }
5150

52-
QList<QgsComposerFrame*> frameItems() { return mFrameItems; }
53-
5451
protected:
5552
QgsComposition* mComposition;
5653
QList<QgsComposerFrame*> mFrameItems;
5754
ResizeMode mResizeMode;
5855

56+
virtual void addFrame( QgsComposerFrame* frame ) = 0;
57+
5958
protected slots:
6059
void recalculateFrameSizes();
61-
//void removeFrame( QObject* frame );
60+
/**Called before a frame is going to be removed (update frame list)*/
61+
void handleFrameRemoval( QgsComposerItem* item );
6262

6363
private:
6464
QgsComposerMultiFrame(); //forbidden

src/core/composer/qgscomposition.cpp

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1098,28 +1098,13 @@ void QgsComposition::addComposerTable( QgsComposerAttributeTable* table )
10981098
emit selectedItemChanged( table );
10991099
}
11001100

1101-
void QgsComposition::addComposerHtml( QgsComposerHtml* html )
1101+
void QgsComposition::addComposerHtmlFrame( QgsComposerHtml* html, QgsComposerFrame* frame )
11021102
{
1103-
QList<QgsComposerFrame*> htmlFrames = html->frameItems();
1104-
if ( htmlFrames.size() < 1 )
1105-
{
1106-
return;
1107-
}
1108-
1109-
QList<QgsComposerFrame*>::iterator frameIt = htmlFrames.begin();
1110-
for ( ; frameIt != htmlFrames.end(); ++frameIt )
1111-
{
1112-
addItem( *frameIt );
1113-
}
1114-
emit composerHtmlAdded( html );
1103+
addItem( frame );
1104+
emit composerHtmlFrameAdded( html, frame );
11151105
clearSelection();
1116-
1117-
QgsComposerFrame* firstItem = htmlFrames[0];
1118-
if ( firstItem )
1119-
{
1120-
firstItem->setSelected( true );
1121-
emit selectedItemChanged( firstItem );
1122-
}
1106+
frame->setSelected( true );
1107+
emit selectedItemChanged( frame );
11231108
}
11241109

11251110
void QgsComposition::removeComposerItem( QgsComposerItem* item )

src/core/composer/qgscomposition.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include "qgscomposeritemcommand.h"
2525
#include "qgsaddremoveitemcommand.h"
2626

27+
class QgsComposerFrame;
2728
class QgsComposerItem;
2829
class QgsComposerMap;
2930
class QgsPaperItem;
@@ -215,8 +216,8 @@ class CORE_EXPORT QgsComposition: public QGraphicsScene
215216
void addComposerShape( QgsComposerShape* shape );
216217
/**Adds a composer table to the graphics scene and advices composer to create a widget for it (through signal)*/
217218
void addComposerTable( QgsComposerAttributeTable* table );
218-
/**Adds composer html and advices composer to create a widget for it (through signal)*/
219-
void addComposerHtml( QgsComposerHtml* html );
219+
/**Adds composer html frame and advices composer to create a widget for it (through signal)*/
220+
void addComposerHtmlFrame( QgsComposerHtml* html, QgsComposerFrame* frame );
220221

221222
/**Remove item from the graphics scene. Additionally to QGraphicsScene::removeItem, this function considers undo/redo command*/
222223
void removeComposerItem( QgsComposerItem* item );
@@ -302,7 +303,7 @@ class CORE_EXPORT QgsComposition: public QGraphicsScene
302303
/**Is emitted when new composer arrow has been added to the view*/
303304
void composerArrowAdded( QgsComposerArrow* arrow );
304305
/**Is emitted when a new composer html has been added to the view*/
305-
void composerHtmlAdded( QgsComposerHtml* html );
306+
void composerHtmlFrameAdded( QgsComposerHtml* html, QgsComposerFrame* frame );
306307
/**Is emitted when new composer label has been added to the view*/
307308
void composerLabelAdded( QgsComposerLabel* label );
308309
/**Is emitted when new composer map has been added to the view*/

src/gui/qgscomposerview.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ void QgsComposerView::mouseReleaseEvent( QMouseEvent* e )
324324
{
325325
QgsComposerHtml* composerHtml = new QgsComposerHtml( composition(), mRubberBandItem->transform().dx(), mRubberBandItem->transform().dy(),
326326
mRubberBandItem->rect().width(), mRubberBandItem->rect().height() );
327-
composition()->addComposerHtml( composerHtml );
327+
//composition()->addComposerHtml( composerHtml );
328328
scene()->removeItem( mRubberBandItem );
329329
delete mRubberBandItem;
330330
mRubberBandItem = 0;

0 commit comments

Comments
 (0)