[QGIS Commit] r13283 - trunk/qgis/src/app/composer

svn_qgis at osgeo.org svn_qgis at osgeo.org
Thu Apr 8 08:55:52 EDT 2010


Author: mhugent
Date: 2010-04-08 08:55:51 -0400 (Thu, 08 Apr 2010)
New Revision: 13283

Modified:
   trunk/qgis/src/app/composer/qgscomposermanager.cpp
   trunk/qgis/src/app/composer/qgscomposermanager.h
Log:
Ask user what template to use if default composer templates are found

Modified: trunk/qgis/src/app/composer/qgscomposermanager.cpp
===================================================================
--- trunk/qgis/src/app/composer/qgscomposermanager.cpp	2010-04-08 11:07:04 UTC (rev 13282)
+++ trunk/qgis/src/app/composer/qgscomposermanager.cpp	2010-04-08 12:55:51 UTC (rev 13283)
@@ -51,26 +51,26 @@
     item->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable );
     mItemComposerMap.insert( item, *it );
   }
+}
 
+QMap<QString, QString> QgsComposerManager::defaultTemplates() const
+{
+  QMap<QString, QString> templateMap;
+
   //search for default templates in $pkgDataPath/composer_templates
   QDir defaultTemplateDir( QgsApplication::pkgDataPath() + "/composer_templates" );
   if ( !defaultTemplateDir.exists() )
   {
-    return;
+    return templateMap;
   }
 
-  QFileInfoList defaultTemplateFiles = defaultTemplateDir.entryInfoList( QDir::Files );
-  QFileInfoList::const_iterator fileIt = defaultTemplateFiles.constBegin();
-
-  for ( ; fileIt != defaultTemplateFiles.constEnd(); ++fileIt )
+  QFileInfoList fileInfoList = defaultTemplateDir.entryInfoList( QDir::Files );
+  QFileInfoList::const_iterator infoIt = fileInfoList.constBegin();
+  for ( ; infoIt != fileInfoList.constEnd(); ++infoIt )
   {
-    mDefaultTemplateMap.insert( fileIt->baseName(), fileIt->absoluteFilePath() );
-    if ( mComposerListWidget->findItems( fileIt->baseName(), Qt::MatchExactly ).size() < 1 )
-    {
-      QListWidgetItem* item = new QListWidgetItem( fileIt->baseName(), mComposerListWidget );
-      mItemComposerMap.insert( item, 0 );
-    }
+    templateMap.insert( infoIt->baseName(), infoIt->absoluteFilePath() );
   }
+  return templateMap;
 }
 
 void QgsComposerManager::on_mAddButton_clicked()
@@ -79,11 +79,56 @@
   {
     return;
   }
-  QgsComposer* newComposer = mQgisApp->createNewComposer();
+
+  QMap<QString, QString> templateMap = defaultTemplates();
+  QString composerTemplate;
+  QgsComposer* newComposer = 0;
+
+  if ( templateMap.size() > 0 )
+  {
+    //show template dialog
+    QStringList templateNameList;
+    templateNameList.append( tr( "Empty composer" ) );
+    QMap<QString, QString>::const_iterator templateIt = templateMap.constBegin();
+    for ( ; templateIt != templateMap.constEnd(); ++templateIt )
+    {
+      templateNameList.append( templateIt.key() );
+    }
+
+    QInputDialog templateDialog;
+    templateDialog.setLabelText( tr( "Select a composer template" ) );
+    templateDialog.setComboBoxItems( templateNameList );
+    if ( templateDialog.exec() == QDialog::Rejected )
+    {
+      return;
+    }
+
+    QMap<QString, QString>::const_iterator selectedTemplate = templateMap.find( templateDialog.textValue() );
+    if ( selectedTemplate != templateMap.constEnd() )
+    {
+      composerTemplate = selectedTemplate.value();
+    }
+  }
+
+  newComposer = mQgisApp->createNewComposer();
   if ( !newComposer )
   {
     return;
   }
+
+  if ( !composerTemplate.isEmpty() ) //create composer from template
+  {
+    QDomDocument templateDoc;
+    QFile templateFile( composerTemplate );
+    if ( templateFile.open( QIODevice::ReadOnly ) )
+    {
+      if ( templateDoc.setContent( &templateFile, false ) )
+      {
+        newComposer->readXML( templateDoc );
+      }
+    }
+  }
+
   QListWidgetItem* item = new QListWidgetItem( newComposer->title(), mComposerListWidget );
   item->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable );
   mItemComposerMap.insert( item, newComposer );
@@ -140,46 +185,56 @@
     if ( it.value() ) //a normal composer
     {
       c = it.value();
-      it.value()->show();
+      if ( c )
+      {
+        c->show();
+        c->activate();
+        c->stackUnder( this );
+        raise();
+        activateWindow();
+      }
     }
-    else //create composer from default template
+  }
+#if 0
+  else //create composer from default template
+  {
+    QMap<QString, QString>::const_iterator templateIt = mDefaultTemplateMap.find( it.key()->text() );
+    if ( templateIt == mDefaultTemplateMap.constEnd() )
     {
-      QMap<QString, QString>::const_iterator templateIt = mDefaultTemplateMap.find( it.key()->text() );
-      if ( templateIt == mDefaultTemplateMap.constEnd() )
-      {
-        return;
-      }
+      return;
+    }
 
-      QDomDocument templateDoc;
-      QFile templateFile( templateIt.value() );
-      if ( !templateFile.open( QIODevice::ReadOnly ) )
-      {
-        return;
-      }
+    QDomDocument templateDoc;
+    QFile templateFile( templateIt.value() );
+    if ( !templateFile.open( QIODevice::ReadOnly ) )
+    {
+      return;
+    }
 
-      if ( !templateDoc.setContent( &templateFile, false ) )
-      {
-        return;
-      }
-      c = mQgisApp->createNewComposer();
-      c->setTitle( it.key()->text() );
-      if ( c )
-      {
-        c->readXML( templateDoc );
-        mItemComposerMap.insert( it.key(), c );
-      }
+    if ( !templateDoc.setContent( &templateFile, false ) )
+    {
+      return;
     }
-
+    c = mQgisApp->createNewComposer();
+    c->setTitle( it.key()->text() );
     if ( c )
     {
-      c->show();
-      c->activate();
-      c->stackUnder( this );
-      raise();
-      activateWindow();
+      c->readXML( templateDoc );
+      mItemComposerMap.insert( it.key(), c );
     }
   }
+
+  if ( c )
+  {
+    c->show();
+    c->activate();
+    c->stackUnder( this );
+    raise();
+    activateWindow();
+  }
 }
+#endif //0
+}
 
 void QgsComposerManager::on_mRenamePushButton_clicked()
 {
@@ -218,21 +273,3 @@
     it.value()->setTitle( item->text() );
   }
 }
-
-void QgsComposerManager::on_mComposerListWidget_currentItemChanged( QListWidgetItem* current, QListWidgetItem* previous )
-{
-  if ( !current )
-  {
-    return;
-  }
-  if ( mDefaultTemplateMap.contains( current->text() ) )
-  {
-    mRenamePushButton->setEnabled( false );
-    mRemoveButton->setEnabled( false );
-  }
-  else
-  {
-    mRenamePushButton->setEnabled( true );
-    mRemoveButton->setEnabled( true );
-  }
-}

Modified: trunk/qgis/src/app/composer/qgscomposermanager.h
===================================================================
--- trunk/qgis/src/app/composer/qgscomposermanager.h	2010-04-08 11:07:04 UTC (rev 13282)
+++ trunk/qgis/src/app/composer/qgscomposermanager.h	2010-04-08 12:55:51 UTC (rev 13283)
@@ -38,19 +38,19 @@
     /**Stores the relation between items and composer pointers. A 0 pointer for the composer means that
       this composer needs to be created from a default template*/
     QMap<QListWidgetItem*, QgsComposer*> mItemComposerMap;
-    /**Key: name of the default template (=filename without suffix). Value: absolute path of the template*/
-    QMap<QString, QString > mDefaultTemplateMap;
 
     /**Enters the composer instances and created the item-composer map*/
     void initialize();
 
+    /**Returns the default templates (key: template name, value: absolute path to template file)*/
+    QMap<QString, QString> defaultTemplates() const;
+
   private slots:
     void on_mAddButton_clicked();
     void on_mRemoveButton_clicked();
     void on_mShowPushButton_clicked();
     void on_mRenamePushButton_clicked();
     void on_mComposerListWidget_itemChanged( QListWidgetItem * item );
-    void on_mComposerListWidget_currentItemChanged( QListWidgetItem* current, QListWidgetItem* previous );
 };
 
 #endif // QGSCOMPOSERMANAGER_H



More information about the QGIS-commit mailing list