@@ -42,6 +42,8 @@ QgsComposerManager::QgsComposerManager( QWidget * parent, Qt::WindowFlags f ): Q
42
42
restoreGeometry ( settings.value ( " /Windows/ComposerManager/geometry" ).toByteArray () );
43
43
44
44
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 () ) );
45
47
46
48
pb = new QPushButton ( tr ( " &Show" ) );
47
49
mButtonBox ->addButton ( pb, QDialogButtonBox::ActionRole );
@@ -59,27 +61,11 @@ QgsComposerManager::QgsComposerManager( QWidget * parent, Qt::WindowFlags f ): Q
59
61
mButtonBox ->addButton ( pb, QDialogButtonBox::ActionRole );
60
62
connect ( pb, SIGNAL ( clicked () ), this , SLOT ( rename_clicked () ) );
61
63
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 ();
64
+ #ifdef Q_WS_MAC
65
+ // Create action to select this window
66
+ mWindowAction = new QAction ( windowTitle (), this );
67
+ connect ( mWindowAction , SIGNAL ( triggered () ), this , SLOT ( activate () ) );
68
+ #endif
83
69
84
70
mTemplate ->addItem ( tr ( " Empty composer" ) );
85
71
mTemplate ->addItem ( tr ( " Specific" ) );
@@ -109,6 +95,49 @@ void QgsComposerManager::initialize()
109
95
}
110
96
111
97
mTemplatePathLineEdit ->setText ( settings.value ( " /UI/ComposerManager/templatePath" , QString ( " " ) ).toString () );
98
+
99
+ refreshComposers ();
100
+ }
101
+
102
+ QgsComposerManager::~QgsComposerManager ()
103
+ {
104
+ QSettings settings;
105
+ settings.setValue ( " /Windows/ComposerManager/geometry" , saveGeometry () );
106
+ }
107
+
108
+ void QgsComposerManager::refreshComposers ()
109
+ {
110
+ QString selName = mComposerListWidget ->currentItem () ? mComposerListWidget ->currentItem ()->text () : " " ;
111
+
112
+ mItemComposerMap .clear ();
113
+ mComposerListWidget ->clear ();
114
+
115
+ QSet<QgsComposer*> composers = QgisApp::instance ()->printComposers ();
116
+ QSet<QgsComposer*>::const_iterator it = composers.constBegin ();
117
+ for ( ; it != composers.constEnd (); ++it )
118
+ {
119
+ QListWidgetItem* item = new QListWidgetItem (( *it )->title (), mComposerListWidget );
120
+ item->setFlags ( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable );
121
+ mItemComposerMap .insert ( item, *it );
122
+ }
123
+ mComposerListWidget ->sortItems ();
124
+
125
+ // Restore selection
126
+ if ( !selName.isEmpty () )
127
+ {
128
+ QList<QListWidgetItem*> items = mComposerListWidget ->findItems ( selName, Qt::MatchExactly );
129
+ if ( !items.isEmpty () )
130
+ {
131
+ mComposerListWidget ->setCurrentItem ( items.first () );
132
+ }
133
+ }
134
+ }
135
+
136
+ void QgsComposerManager::activate ()
137
+ {
138
+ raise ();
139
+ setWindowState ( windowState () & ~Qt::WindowMinimized );
140
+ activateWindow ();
112
141
}
113
142
114
143
QMap<QString, QString> QgsComposerManager::defaultTemplates ( bool fromUser ) const
@@ -200,25 +229,11 @@ void QgsComposerManager::on_mAddButton_clicked()
200
229
}
201
230
}
202
231
203
- if ( loadedOK )
204
- {
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
232
+ if ( !loadedOK )
215
233
{
216
- if ( newComposer )
217
- {
218
- newComposer->close ();
219
- QgisApp::instance ()->deleteComposer ( newComposer );
220
- newComposer = 0 ;
221
- }
234
+ newComposer->close ();
235
+ QgisApp::instance ()->deleteComposer ( newComposer );
236
+ newComposer = 0 ;
222
237
QMessageBox::warning ( this , tr ( " Template error" ), tr ( " Error, could not load template file" ) );
223
238
}
224
239
}
@@ -268,6 +283,32 @@ void QgsComposerManager::openLocalDirectory( const QString& localDirPath )
268
283
QDesktopServices::openUrl ( QUrl::fromLocalFile ( localDirPath ) );
269
284
}
270
285
286
+ #ifdef Q_WS_MAC
287
+ void QgsComposerManager::showEvent (QShowEvent* event)
288
+ {
289
+ if (!event->spontaneous ()) {
290
+ QgisApp::instance ()->addWindow ( mWindowAction );
291
+ }
292
+ }
293
+
294
+ void QgsComposerManager::changeEvent ( QEvent* event )
295
+ {
296
+ QDialog::changeEvent ( event );
297
+ switch ( event->type () )
298
+ {
299
+ case QEvent::ActivationChange:
300
+ if ( QApplication::activeWindow () == this )
301
+ {
302
+ mWindowAction ->setChecked ( true );
303
+ }
304
+ break ;
305
+
306
+ default :
307
+ break ;
308
+ }
309
+ }
310
+ #endif
311
+
271
312
void QgsComposerManager::remove_clicked ()
272
313
{
273
314
QListWidgetItem* item = mComposerListWidget ->currentItem ();
@@ -288,10 +329,6 @@ void QgsComposerManager::remove_clicked()
288
329
{
289
330
QgisApp::instance ()->deleteComposer ( it.value () );
290
331
}
291
- mItemComposerMap .remove ( item );
292
- mComposerListWidget ->removeItemWidget ( item );
293
- // and remove the list widget row
294
- delete ( mComposerListWidget ->takeItem ( mComposerListWidget ->row ( item ) ) );
295
332
}
296
333
297
334
void QgsComposerManager::show_clicked ()
@@ -313,7 +350,6 @@ void QgsComposerManager::show_clicked()
313
350
{
314
351
// extra activation steps for Windows
315
352
bool shown = c->isVisible ();
316
- hide ();
317
353
318
354
c->activate ();
319
355
@@ -350,7 +386,6 @@ void QgsComposerManager::show_clicked()
350
386
if ( c )
351
387
{
352
388
c->readXML( templateDoc );
353
- mItemComposerMap.insert( it.key(), c );
354
389
}
355
390
}
356
391
@@ -359,7 +394,6 @@ void QgsComposerManager::show_clicked()
359
394
c->activate();
360
395
}
361
396
#endif // 0
362
- close ();
363
397
}
364
398
365
399
void QgsComposerManager::duplicate_clicked ()
@@ -403,11 +437,7 @@ void QgsComposerManager::duplicate_clicked()
403
437
if ( newComposer )
404
438
{
405
439
// extra activation steps for Windows
406
- hide ();
407
440
newComposer->activate ();
408
-
409
- // no need to add new composer to list widget, if just closing this->exec();
410
- close ();
411
441
}
412
442
else
413
443
{
0 commit comments