Skip to content

Commit c51be63

Browse files
committed
Make QgsComposerManager non-modal, ensure consistency of composer manager composer list
1 parent e71930f commit c51be63

File tree

5 files changed

+44
-51
lines changed

5 files changed

+44
-51
lines changed

src/app/composer/qgscomposer.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -3184,3 +3184,4 @@ void QgsComposer::updateAtlasMapLayerAction( bool atlasEnabled )
31843184
connect( mAtlasFeatureAction, SIGNAL( triggeredForFeature( QgsMapLayer*, QgsFeature* ) ), this, SLOT( setAtlasFeature( QgsMapLayer*, QgsFeature* ) ) );
31853185
}
31863186
}
3187+

src/app/composer/qgscomposermanager.cpp

+30-45
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ QgsComposerManager::QgsComposerManager( QWidget * parent, Qt::WindowFlags f ): Q
4242
restoreGeometry( settings.value( "/Windows/ComposerManager/geometry" ).toByteArray() );
4343

4444
connect( mButtonBox, SIGNAL( rejected() ), this, SLOT( close() ) );
45+
connect( QgisApp::instance(), SIGNAL( composerAdded( QgsComposerView* ) ), this, SLOT( refreshComposers() ) );
46+
connect( QgisApp::instance(), SIGNAL( composerRemoved( QgsComposerView* ) ), this, SLOT( refreshComposers() ) );
4547

4648
pb = new QPushButton( tr( "&Show" ) );
4749
mButtonBox->addButton( pb, QDialogButtonBox::ActionRole );
@@ -59,28 +61,6 @@ QgsComposerManager::QgsComposerManager( QWidget * parent, Qt::WindowFlags f ): Q
5961
mButtonBox->addButton( pb, QDialogButtonBox::ActionRole );
6062
connect( pb, SIGNAL( clicked() ), this, SLOT( rename_clicked() ) );
6163

62-
initialize();
63-
}
64-
65-
QgsComposerManager::~QgsComposerManager()
66-
{
67-
QSettings settings;
68-
settings.setValue( "/Windows/ComposerManager/geometry", saveGeometry() );
69-
}
70-
71-
void QgsComposerManager::initialize()
72-
{
73-
QSettings settings;
74-
QSet<QgsComposer*> composers = QgisApp::instance()->printComposers();
75-
QSet<QgsComposer*>::const_iterator it = composers.constBegin();
76-
for ( ; it != composers.constEnd(); ++it )
77-
{
78-
QListWidgetItem* item = new QListWidgetItem(( *it )->title(), mComposerListWidget );
79-
item->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable );
80-
mItemComposerMap.insert( item, *it );
81-
}
82-
mComposerListWidget->sortItems();
83-
8464
mTemplate->addItem( tr( "Empty composer" ) );
8565
mTemplate->addItem( tr( "Specific" ) );
8666

@@ -109,6 +89,30 @@ void QgsComposerManager::initialize()
10989
}
11090

11191
mTemplatePathLineEdit->setText( settings.value( "/UI/ComposerManager/templatePath", QString( "" ) ).toString() );
92+
93+
refreshComposers();
94+
}
95+
96+
QgsComposerManager::~QgsComposerManager()
97+
{
98+
QSettings settings;
99+
settings.setValue( "/Windows/ComposerManager/geometry", saveGeometry() );
100+
}
101+
102+
void QgsComposerManager::refreshComposers()
103+
{
104+
mItemComposerMap.clear();
105+
mComposerListWidget->clear();
106+
107+
QSet<QgsComposer*> composers = QgisApp::instance()->printComposers();
108+
QSet<QgsComposer*>::const_iterator it = composers.constBegin();
109+
for ( ; it != composers.constEnd(); ++it )
110+
{
111+
QListWidgetItem* item = new QListWidgetItem(( *it )->title(), mComposerListWidget );
112+
item->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable );
113+
mItemComposerMap.insert( item, *it );
114+
}
115+
mComposerListWidget->sortItems();
112116
}
113117

114118
QMap<QString, QString> QgsComposerManager::defaultTemplates( bool fromUser ) const
@@ -200,25 +204,11 @@ void QgsComposerManager::on_mAddButton_clicked()
200204
}
201205
}
202206

203-
if ( loadedOK )
207+
if ( newComposer && !loadedOK )
204208
{
205-
// do not close on Add, since user may want to add multiple composers from templates
206-
QListWidgetItem* item = new QListWidgetItem( newComposer->title(), mComposerListWidget );
207-
item->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable );
208-
mItemComposerMap.insert( item, newComposer );
209-
210-
mComposerListWidget->sortItems();
211-
mComposerListWidget->setCurrentItem( item );
212-
mComposerListWidget->setFocus();
213-
}
214-
else
215-
{
216-
if ( newComposer )
217-
{
218-
newComposer->close();
219-
QgisApp::instance()->deleteComposer( newComposer );
220-
newComposer = 0;
221-
}
209+
newComposer->close();
210+
QgisApp::instance()->deleteComposer( newComposer );
211+
newComposer = 0;
222212
QMessageBox::warning( this, tr( "Template error" ), tr( "Error, could not load template file" ) );
223213
}
224214
}
@@ -288,10 +278,6 @@ void QgsComposerManager::remove_clicked()
288278
{
289279
QgisApp::instance()->deleteComposer( it.value() );
290280
}
291-
mItemComposerMap.remove( item );
292-
mComposerListWidget->removeItemWidget( item );
293-
//and remove the list widget row
294-
delete( mComposerListWidget->takeItem( mComposerListWidget->row( item ) ) );
295281
}
296282

297283
void QgsComposerManager::show_clicked()
@@ -350,7 +336,6 @@ void QgsComposerManager::show_clicked()
350336
if ( c )
351337
{
352338
c->readXML( templateDoc );
353-
mItemComposerMap.insert( it.key(), c );
354339
}
355340
}
356341

src/app/composer/qgscomposermanager.h

+3-4
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,11 @@ class QgsComposerManager: public QDialog, private Ui::QgsComposerManagerBase
3131
QgsComposerManager( QWidget * parent = 0, Qt::WindowFlags f = 0 );
3232
~QgsComposerManager();
3333

34-
3534
private:
3635
/**Stores the relation between items and composer pointers. A 0 pointer for the composer means that
3736
this composer needs to be created from a default template*/
3837
QMap<QListWidgetItem*, QgsComposer*> mItemComposerMap;
3938

40-
/**Enters the composer instances and created the item-composer map*/
41-
void initialize();
42-
4339
/** Returns the default templates (key: template name, value: absolute path to template file)
4440
* @param fromUser whether to return user templates from ~/.qgis/composer_templates (added in 1.9)
4541
*/
@@ -72,6 +68,9 @@ class QgsComposerManager: public QDialog, private Ui::QgsComposerManagerBase
7268
*/
7369
void on_mTemplatesUserDirBtn_pressed();
7470

71+
/** Refreshes the list of composers */
72+
void refreshComposers();
73+
7574
void remove_clicked();
7675
void show_clicked();
7776
/** Duplicate composer

src/app/qgisapp.cpp

+6-2
Original file line numberDiff line numberDiff line change
@@ -3919,8 +3919,11 @@ void QgisApp::newPrintComposer()
39193919

39203920
void QgisApp::showComposerManager()
39213921
{
3922-
QgsComposerManager m( this );
3923-
m.exec();
3922+
QgsComposerManager* m = new QgsComposerManager( this, Qt::Window );
3923+
connect( m, SIGNAL( finished( int ) ), m, SLOT( deleteLater() ) );
3924+
m->show();
3925+
m->raise();
3926+
m->activateWindow();
39243927
}
39253928

39263929
void QgisApp::saveMapAsImage()
@@ -5004,6 +5007,7 @@ void QgisApp::deleteComposer( QgsComposer* c )
50045007
mPrintComposers.remove( c );
50055008
mPrintComposersMenu->removeAction( c->windowAction() );
50065009
markDirty();
5010+
emit composerRemoved( c->view() );
50075011
delete c;
50085012
}
50095013

src/app/qgisapp.h

+4
Original file line numberDiff line numberDiff line change
@@ -1208,6 +1208,10 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow
12081208
@note added in version 1.4*/
12091209
void composerWillBeRemoved( QgsComposerView* v );
12101210

1211+
/**This signal is emitted when a composer instance has been removed
1212+
@note added in version 2.3*/
1213+
void composerRemoved( QgsComposerView* v );
1214+
12111215
/**This signal is emitted when QGIS' initialization is complete
12121216
@note added in version 1.6*/
12131217
void initializationCompleted();

0 commit comments

Comments
 (0)