Skip to content

Commit ece3cd9

Browse files
author
mhugent
committed
[FEATURE?] Close composers instead of deleting them. Added composer manager dialog to manage the existing composer instances
git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@12087 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 6206903 commit ece3cd9

11 files changed

+401
-225
lines changed

src/app/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ SET(QGIS_APP_SRCS
7777
composer/qgscomposeritemwidget.cpp
7878
composer/qgscomposerlabelwidget.cpp
7979
composer/qgscomposerpicturewidget.cpp
80+
composer/qgscomposermanager.cpp
8081
composer/qgscomposermapwidget.cpp
8182
composer/qgscomposerscalebarwidget.cpp
8283
composer/qgscomposerlegenditemdialog.cpp
@@ -174,6 +175,7 @@ SET (QGIS_APP_MOC_HDRS
174175
composer/qgscomposeritemwidget.h
175176
composer/qgscomposerlabelwidget.h
176177
composer/qgscomposerlegendwidget.h
178+
composer/qgscomposermanager.h
177179
composer/qgscomposermapwidget.h
178180
composer/qgscomposerpicturewidget.h
179181
composer/qgscomposerscalebarwidget.h

src/app/composer/qgscomposer.cpp

Lines changed: 17 additions & 170 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,12 @@
6565
#include <QSizeGrip>
6666
#include "qgslogger.h"
6767

68-
QgsComposer::QgsComposer( QgisApp *qgis, const QString& id ): QMainWindow(), mId( id )
68+
QgsComposer::QgsComposer( QgisApp *qgis, const QString& title ): QMainWindow(), mTitle( title )
6969
{
7070
setupUi( this );
71-
setAttribute( Qt::WA_DeleteOnClose );
71+
setWindowTitle( mTitle );
7272
setupTheme();
73+
QObject::connect( mButtonBox, SIGNAL( rejected() ), this, SLOT( close() ) );
7374

7475
QToolButton* orderingToolButton = new QToolButton( this );
7576
orderingToolButton->setPopupMode( QToolButton::InstantPopup );
@@ -107,8 +108,6 @@ QgsComposer::QgsComposer( QgisApp *qgis, const QString& id ): QMainWindow(), mId
107108
toggleActionGroup->addAction( mActionSelectMoveItem );
108109
toggleActionGroup->setExclusive( true );
109110

110-
setWindowTitle( mId );
111-
112111
mActionAddNewMap->setCheckable( true );
113112
mActionAddNewLabel->setCheckable( true );
114113
mActionAddNewLegend->setCheckable( true );
@@ -185,6 +184,7 @@ QgsComposer::QgsComposer( QgisApp *qgis, const QString& id ): QMainWindow(), mId
185184
connectSlots();
186185

187186
mComposition = new QgsComposition( mQgis->mapCanvas()->mapRenderer() );
187+
mComposition->setParent(mView);
188188
mView->setComposition( mComposition );
189189

190190
QgsCompositionWidget* compositionWidget = new QgsCompositionWidget( mCompositionOptionsFrame, mComposition );
@@ -297,31 +297,12 @@ void QgsComposer::open( void )
297297

298298
void QgsComposer::activate()
299299
{
300+
show();
300301
raise();
301302
setWindowState( windowState() & ~Qt::WindowMinimized );
302303
activateWindow();
303304
}
304305

305-
void QgsComposer::closeEvent( QCloseEvent *event )
306-
{
307-
if ( QMessageBox::warning( 0, tr( "Remove composer?" ), tr( "Do you really want to remove the composer instance '%1'?" ).arg( mId ), QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Cancel ) == QMessageBox::Ok )
308-
{
309-
mQgis->checkOutComposer( this );
310-
event->accept();
311-
}
312-
else
313-
{
314-
event->ignore();
315-
}
316-
#if 0
317-
QMainWindow::closeEvent( event );
318-
if ( event->isAccepted() )
319-
{
320-
QgisApp::instance()->removeWindow( mWindowAction );
321-
}
322-
#endif //0
323-
}
324-
325306
#ifdef Q_WS_MAC
326307
void QgsComposer::changeEvent( QEvent* event )
327308
{
@@ -351,6 +332,12 @@ void QgsComposer::showEvent( QShowEvent *event )
351332
}
352333
#endif
353334

335+
void QgsComposer::setTitle( const QString& title )
336+
{
337+
mTitle = title;
338+
setWindowTitle( mTitle );
339+
}
340+
354341
void QgsComposer::showCompositionOptions( QWidget *w )
355342
{
356343
QWidget* currentWidget = mItemStackedWidget->currentWidget();
@@ -1024,7 +1011,7 @@ void QgsComposer::writeXML( QDomDocument& doc )
10241011
void QgsComposer::writeXML( QDomNode& parentNode, QDomDocument& doc )
10251012
{
10261013
QDomElement composerElem = doc.createElement( "Composer" );
1027-
composerElem.setAttribute( "id", mId );
1014+
composerElem.setAttribute( "title", mTitle );
10281015
parentNode.appendChild( composerElem );
10291016

10301017
//store composer items:
@@ -1055,14 +1042,16 @@ void QgsComposer::readXML( const QDomDocument& doc )
10551042

10561043
void QgsComposer::readXML( const QDomElement& composerElem, const QDomDocument& doc )
10571044
{
1058-
mId = composerElem.attribute( "id", "" );
1059-
setWindowTitle( mId );
1060-
10611045
// Create action to select this window
10621046
delete mWindowAction;
10631047
mWindowAction = new QAction( windowTitle(), this );
10641048
connect( mWindowAction, SIGNAL( triggered() ), this, SLOT( activate() ) );
10651049

1050+
if ( composerElem.hasAttribute( "title" ) )
1051+
{
1052+
setTitle( composerElem.attribute( "title", tr( "Composer" ) ) );
1053+
}
1054+
10661055
//delete composer view and composition
10671056
delete mView;
10681057
mView = 0;
@@ -1187,148 +1176,6 @@ void QgsComposer::readXML( const QDomElement& composerElem, const QDomDocument&
11871176
setSelectionTool();
11881177
}
11891178

1190-
#if 0
1191-
void QgsComposer::readXML( const QDomDocument& doc )
1192-
{
1193-
//look for Composer element
1194-
QDomNodeList nl = doc.elementsByTagName( "Composer" );
1195-
if ( nl.size() < 1 )
1196-
{
1197-
return; //nothing to do...
1198-
}
1199-
QDomElement composerElem = nl.at( 0 ).toElement();
1200-
mId = composerElem.attribute( "id", "" );
1201-
1202-
//look for Composition element
1203-
QDomNodeList cnl = composerElem.elementsByTagName( "Composition" );
1204-
if ( cnl.size() < 1 )
1205-
{
1206-
return; //nothing to do
1207-
}
1208-
1209-
1210-
//delete composer view and composition
1211-
delete mView;
1212-
mView = 0;
1213-
//delete every child of mViewFrame
1214-
QObjectList viewFrameChildren = mViewFrame->children();
1215-
QObjectList::iterator it = viewFrameChildren.begin();
1216-
for ( ; it != viewFrameChildren.end(); ++it )
1217-
{
1218-
delete( *it );
1219-
}
1220-
//delete composition widget
1221-
QgsCompositionWidget* oldCompositionWidget = qobject_cast<QgsCompositionWidget *>( mCompositionOptionsFrame->children().at( 0 ) );
1222-
delete oldCompositionWidget;
1223-
delete mCompositionOptionsLayout;
1224-
mCompositionOptionsLayout = 0;
1225-
1226-
QDomElement compositionElem = cnl.at( 0 ).toElement();
1227-
1228-
//todo: move in function because duplicated code with constructor
1229-
mView = new QgsComposerView( mViewFrame );
1230-
connectSlots();
1231-
1232-
mComposition = new QgsComposition( mQgis->mapCanvas()->mapRenderer() );
1233-
mComposition->readXML( compositionElem, doc );
1234-
1235-
QGridLayout *l = new QGridLayout( mViewFrame );
1236-
l->setMargin( 0 );
1237-
l->addWidget( mView, 0, 0 );
1238-
1239-
//create compositionwidget
1240-
QgsCompositionWidget* compositionWidget = new QgsCompositionWidget( mCompositionOptionsFrame, mComposition );
1241-
QObject::connect( mComposition, SIGNAL( paperSizeChanged() ), compositionWidget, SLOT( displayCompositionWidthHeight() ) );
1242-
compositionWidget->show();
1243-
1244-
mCompositionOptionsLayout = new QGridLayout( mCompositionOptionsFrame );
1245-
mCompositionOptionsLayout->setMargin( 0 );
1246-
mCompositionOptionsLayout->addWidget( compositionWidget );
1247-
1248-
//read and restore all the items
1249-
1250-
//composer labels
1251-
QDomNodeList composerLabelList = composerElem.elementsByTagName( "ComposerLabel" );
1252-
for ( int i = 0; i < composerLabelList.size(); ++i )
1253-
{
1254-
QDomElement currentComposerLabelElem = composerLabelList.at( i ).toElement();
1255-
QgsComposerLabel* newLabel = new QgsComposerLabel( mComposition );
1256-
newLabel->readXML( currentComposerLabelElem, doc );
1257-
addComposerLabel( newLabel );
1258-
mComposition->addItem( newLabel );
1259-
mComposition->update();
1260-
mComposition->clearSelection();
1261-
newLabel->setSelected( true );
1262-
showItemOptions( newLabel );
1263-
}
1264-
1265-
//composer maps
1266-
QDomNodeList composerMapList = composerElem.elementsByTagName( "ComposerMap" );
1267-
for ( int i = 0; i < composerMapList.size(); ++i )
1268-
{
1269-
QDomElement currentComposerMapElem = composerMapList.at( i ).toElement();
1270-
QgsComposerMap* newMap = new QgsComposerMap( mComposition );
1271-
newMap->readXML( currentComposerMapElem, doc );
1272-
addComposerMap( newMap );
1273-
mComposition->addItem( newMap );
1274-
mComposition->update();
1275-
mComposition->clearSelection();
1276-
newMap->setSelected( true );
1277-
showItemOptions( newMap );
1278-
}
1279-
1280-
//composer scalebars
1281-
QDomNodeList composerScaleBarList = composerElem.elementsByTagName( "ComposerScaleBar" );
1282-
for ( int i = 0; i < composerScaleBarList.size(); ++i )
1283-
{
1284-
QDomElement currentScaleBarElem = composerScaleBarList.at( i ).toElement();
1285-
QgsComposerScaleBar* newScaleBar = new QgsComposerScaleBar( mComposition );
1286-
newScaleBar->readXML( currentScaleBarElem, doc );
1287-
addComposerScaleBar( newScaleBar );
1288-
mComposition->addItem( newScaleBar );
1289-
mComposition->update();
1290-
mComposition->clearSelection();
1291-
newScaleBar->setSelected( true );
1292-
showItemOptions( newScaleBar );
1293-
}
1294-
1295-
//composer legends
1296-
QDomNodeList composerLegendList = composerElem.elementsByTagName( "ComposerLegend" );
1297-
for ( int i = 0; i < composerLegendList.size(); ++i )
1298-
{
1299-
QDomElement currentLegendElem = composerLegendList.at( i ).toElement();
1300-
QgsComposerLegend* newLegend = new QgsComposerLegend( mComposition );
1301-
newLegend->readXML( currentLegendElem, doc );
1302-
addComposerLegend( newLegend );
1303-
mComposition->addItem( newLegend );
1304-
mComposition->update();
1305-
mComposition->clearSelection();
1306-
newLegend->setSelected( true );
1307-
showItemOptions( newLegend );
1308-
}
1309-
1310-
//composer pictures
1311-
QDomNodeList composerPictureList = composerElem.elementsByTagName( "ComposerPicture" );
1312-
for ( int i = 0; i < composerPictureList.size(); ++i )
1313-
{
1314-
QDomElement currentPictureElem = composerPictureList.at( i ).toElement();
1315-
QgsComposerPicture* newPicture = new QgsComposerPicture( mComposition );
1316-
newPicture->readXML( currentPictureElem, doc );
1317-
addComposerPicture( newPicture );
1318-
mComposition->addItem( newPicture );
1319-
mComposition->update();
1320-
mComposition->clearSelection();
1321-
newPicture->setSelected( true );
1322-
showItemOptions( newPicture );
1323-
}
1324-
1325-
mComposition->sortZList();
1326-
mView->setComposition( mComposition );
1327-
1328-
setSelectionTool();
1329-
}
1330-
#endif //0
1331-
13321179
void QgsComposer::addComposerMap( QgsComposerMap* map )
13331180
{
13341181
if ( !map )

src/app/composer/qgscomposer.h

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class QgsComposer: public QMainWindow, private Ui::QgsComposerBase
4646
Q_OBJECT
4747

4848
public:
49-
QgsComposer( QgisApp *qgis, const QString& id );
49+
QgsComposer( QgisApp *qgis, const QString& title );
5050
~QgsComposer();
5151

5252
//! Set the pixmap / icons on the toolbar buttons
@@ -75,7 +75,8 @@ class QgsComposer: public QMainWindow, private Ui::QgsComposerBase
7575

7676
QAction* windowAction() {return mWindowAction;}
7777

78-
QString id() const {return mId;}
78+
const QString& title() const {return mTitle;}
79+
void setTitle( const QString& title );
7980

8081
protected:
8182
//! Move event
@@ -84,9 +85,6 @@ class QgsComposer: public QMainWindow, private Ui::QgsComposerBase
8485
//! Resize event
8586
virtual void resizeEvent( QResizeEvent * );
8687

87-
//! Close event (remove window from menu)
88-
virtual void closeEvent( QCloseEvent * );
89-
9088
#ifdef Q_WS_MAC
9189
//! Change event (update window menu on ActivationChange)
9290
virtual void changeEvent( QEvent * );
@@ -225,8 +223,6 @@ class QgsComposer: public QMainWindow, private Ui::QgsComposerBase
225223

226224
void setSelectionTool();
227225

228-
private slots:
229-
230226
//! Raise, unminimize and activate this window
231227
void activate();
232228

@@ -250,8 +246,8 @@ class QgsComposer: public QMainWindow, private Ui::QgsComposerBase
250246
//! Writes state under DOM element
251247
void writeXML( QDomNode& parentNode, QDomDocument& doc );
252248

253-
/**Identification string*/
254-
QString mId;
249+
/**Composer title*/
250+
QString mTitle;
255251

256252
//! Pointer to composer view
257253
QgsComposerView *mView;

0 commit comments

Comments
 (0)