@@ -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,27 +61,11 @@ 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 ();
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
8369
8470 mTemplate ->addItem ( tr ( " Empty composer" ) );
8571 mTemplate ->addItem ( tr ( " Specific" ) );
@@ -109,6 +95,49 @@ void QgsComposerManager::initialize()
10995 }
11096
11197 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 ();
112141}
113142
114143QMap<QString, QString> QgsComposerManager::defaultTemplates ( bool fromUser ) const
@@ -200,25 +229,11 @@ void QgsComposerManager::on_mAddButton_clicked()
200229 }
201230 }
202231
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 )
215233 {
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 ;
222237 QMessageBox::warning ( this , tr ( " Template error" ), tr ( " Error, could not load template file" ) );
223238 }
224239}
@@ -268,6 +283,32 @@ void QgsComposerManager::openLocalDirectory( const QString& localDirPath )
268283 QDesktopServices::openUrl ( QUrl::fromLocalFile ( localDirPath ) );
269284}
270285
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+
271312void QgsComposerManager::remove_clicked ()
272313{
273314 QListWidgetItem* item = mComposerListWidget ->currentItem ();
@@ -288,10 +329,6 @@ void QgsComposerManager::remove_clicked()
288329 {
289330 QgisApp::instance ()->deleteComposer ( it.value () );
290331 }
291- mItemComposerMap .remove ( item );
292- mComposerListWidget ->removeItemWidget ( item );
293- // and remove the list widget row
294- delete ( mComposerListWidget ->takeItem ( mComposerListWidget ->row ( item ) ) );
295332}
296333
297334void QgsComposerManager::show_clicked ()
@@ -313,7 +350,6 @@ void QgsComposerManager::show_clicked()
313350 {
314351 // extra activation steps for Windows
315352 bool shown = c->isVisible ();
316- hide ();
317353
318354 c->activate ();
319355
@@ -350,7 +386,6 @@ void QgsComposerManager::show_clicked()
350386 if ( c )
351387 {
352388 c->readXML( templateDoc );
353- mItemComposerMap.insert( it.key(), c );
354389 }
355390 }
356391
@@ -359,7 +394,6 @@ void QgsComposerManager::show_clicked()
359394 c->activate();
360395 }
361396#endif // 0
362- close ();
363397}
364398
365399void QgsComposerManager::duplicate_clicked ()
@@ -403,11 +437,7 @@ void QgsComposerManager::duplicate_clicked()
403437 if ( newComposer )
404438 {
405439 // extra activation steps for Windows
406- hide ();
407440 newComposer->activate ();
408-
409- // no need to add new composer to list widget, if just closing this->exec();
410- close ();
411441 }
412442 else
413443 {
0 commit comments