[QGIS Commit] r8988 - in branches/advanced_printing_branch/src/app: . composer

svn_qgis at osgeo.org svn_qgis at osgeo.org
Mon Aug 4 10:13:11 EDT 2008


Author: mhugent
Date: 2008-08-04 10:13:11 -0400 (Mon, 04 Aug 2008)
New Revision: 8988

Modified:
   branches/advanced_printing_branch/src/app/CMakeLists.txt
   branches/advanced_printing_branch/src/app/composer/qgscomposer.cpp
   branches/advanced_printing_branch/src/app/composer/qgscomposerlabel.cpp
   branches/advanced_printing_branch/src/app/composer/qgscomposerlegend.cpp
   branches/advanced_printing_branch/src/app/composer/qgscomposerlegend.h
   branches/advanced_printing_branch/src/app/composer/qgscomposermap.cpp
   branches/advanced_printing_branch/src/app/composer/qgscomposerscalebar.cpp
   branches/advanced_printing_branch/src/app/composer/qgscomposerscalebar.h
   branches/advanced_printing_branch/src/app/composer/qgscomposerscalebarwidget.cpp
   branches/advanced_printing_branch/src/app/composer/qgslegendmodel.cpp
   branches/advanced_printing_branch/src/app/composer/qgslegendmodel.h
   branches/advanced_printing_branch/src/app/composer/qgsticksscalebarstyle.cpp
   branches/advanced_printing_branch/src/app/qgisapp.cpp
Log:
Remove layers in composer legend that have been removed in main canvas

Modified: branches/advanced_printing_branch/src/app/CMakeLists.txt
===================================================================
--- branches/advanced_printing_branch/src/app/CMakeLists.txt	2008-08-03 08:40:17 UTC (rev 8987)
+++ branches/advanced_printing_branch/src/app/CMakeLists.txt	2008-08-04 14:13:11 UTC (rev 8988)
@@ -131,6 +131,7 @@
 
   composer/qgscomposer.h
   composer/qgscomposerlabelwidget.h
+  composer/qgscomposerlegend.h
   composer/qgscomposerlegendwidget.h
   composer/qgscomposermap.h
   composer/qgscomposermapwidget.h
@@ -139,6 +140,7 @@
   composer/qgscomposerview.h
   composer/qgscomposeritemgroup.h
   composer/qgscompositionwidget.h
+  composer/qgslegendmodel.h
 
   legend/qgslegend.h
   legend/qgslegendlayer.h

Modified: branches/advanced_printing_branch/src/app/composer/qgscomposer.cpp
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgscomposer.cpp	2008-08-03 08:40:17 UTC (rev 8987)
+++ branches/advanced_printing_branch/src/app/composer/qgscomposer.cpp	2008-08-04 14:13:11 UTC (rev 8988)
@@ -1219,8 +1219,35 @@
 	  newLabel->readXML(currentComposerLabelElem, doc);
 	  addComposerLabel(newLabel);
 	  mComposition->addItem(newLabel);
+	  newLabel->setZValue(60);
 	  mComposition->update();
 	}
+
+      //composer maps
+      QDomNodeList composerMapList = composerElem.elementsByTagName("ComposerMap");
+      for(int i = 0; i < composerMapList.size(); ++i)
+	{
+	  QDomElement currentComposerMapElem = composerMapList.at(i).toElement();
+	  QgsComposerMap* newMap = new QgsComposerMap(mComposition);
+	  newMap->readXML(currentComposerMapElem, doc);
+	  addComposerMap(newMap);
+	  mComposition->addItem(newMap);
+	  newMap->setZValue(50);
+	  mComposition->update();
+	}
+
+      //composer scalebars
+      QDomNodeList composerScaleBarList = composerElem.elementsByTagName("ComposerScaleBar");
+      for(int i = 0; i < composerScaleBarList.size(); ++i)
+	{
+	  QDomElement currentScaleBarElem = composerScaleBarList.at(i).toElement();
+	  QgsComposerScaleBar* newScaleBar = new QgsComposerScaleBar(mComposition);
+	  newScaleBar->readXML(currentScaleBarElem, doc);
+	  addComposerScaleBar(newScaleBar);
+	  mComposition->addItem(newScaleBar);
+	  newScaleBar->setZValue(60);
+	  mComposition->update();
+	}
     }
 
   mView->setComposition(mComposition);

Modified: branches/advanced_printing_branch/src/app/composer/qgscomposerlabel.cpp
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgscomposerlabel.cpp	2008-08-03 08:40:17 UTC (rev 8987)
+++ branches/advanced_printing_branch/src/app/composer/qgscomposerlabel.cpp	2008-08-04 14:13:11 UTC (rev 8988)
@@ -117,5 +117,5 @@
       QDomElement composerItemElem = composerItemList.at(0).toElement();
       _readXML(composerItemElem, doc);
     }
-  return false; //soon...
+  return true;
 }

Modified: branches/advanced_printing_branch/src/app/composer/qgscomposerlegend.cpp
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgscomposerlegend.cpp	2008-08-03 08:40:17 UTC (rev 8987)
+++ branches/advanced_printing_branch/src/app/composer/qgscomposerlegend.cpp	2008-08-04 14:13:11 UTC (rev 8988)
@@ -23,17 +23,9 @@
 
 QgsComposerLegend::QgsComposerLegend(QgsComposition* composition): QgsComposerItem(composition), mTitle(QObject::tr("Legend")), mBoxSpace(2), mLayerSpace(3), mSymbolSpace(2), mIconLabelSpace(2)
 {
-  QStringList layerIdList;
-  QMap<QString,QgsMapLayer*> layerMap =  QgsMapLayerRegistry::instance()->mapLayers();
-  QMap<QString,QgsMapLayer*>::const_iterator mapIt = layerMap.constBegin();
+  QStringList idList = layerIdList();
+  mLegendModel.setLayerSet(idList);
 
-  for(; mapIt != layerMap.constEnd(); ++mapIt)
-    {
-      layerIdList.push_back(mapIt.key());
-    }
-
-  mLegendModel.setLayerSet(layerIdList);
-
   //default font size
   mTitleFont.setPointSizeF(4);
   mLayerFont.setPointSizeF(3);
@@ -41,6 +33,8 @@
   mSymbolWidth = 7;
   mSymbolHeight = 4;
   adjustBoxSize();
+
+  connect(&mLegendModel, SIGNAL(layersChanged()), this, SLOT(synchronizeWithModel()));
 }
 
 QgsComposerLegend::QgsComposerLegend(): QgsComposerItem(0)
@@ -318,6 +312,26 @@
   currentXPosition += mSymbolWidth;
 }
 
+QStringList QgsComposerLegend::layerIdList() const
+{
+  QStringList layerIdList;
+  QMap<QString,QgsMapLayer*> layerMap =  QgsMapLayerRegistry::instance()->mapLayers();
+  QMap<QString,QgsMapLayer*>::const_iterator mapIt = layerMap.constBegin();
+
+  for(; mapIt != layerMap.constEnd(); ++mapIt)
+    {
+      layerIdList.push_back(mapIt.key());
+    }
+
+  return layerIdList;
+}
+
+void QgsComposerLegend::synchronizeWithModel()
+{
+  adjustBoxSize();
+  update();
+}
+
 bool QgsComposerLegend::writeXML(QDomElement& elem, QDomDocument & doc)
 {
   return true; //soon...

Modified: branches/advanced_printing_branch/src/app/composer/qgscomposerlegend.h
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgscomposerlegend.h	2008-08-03 08:40:17 UTC (rev 8987)
+++ branches/advanced_printing_branch/src/app/composer/qgscomposerlegend.h	2008-08-04 14:13:11 UTC (rev 8988)
@@ -20,11 +20,14 @@
 
 #include "qgscomposeritem.h"
 #include "qgslegendmodel.h"
+#include <QObject>
 
 class QgsSymbol;
 
-class QgsComposerLegend: public QgsComposerItem
+class QgsComposerLegend: public QObject, public QgsComposerItem
 {
+  Q_OBJECT
+
  public:
   QgsComposerLegend(QgsComposition* composition);
   ~QgsComposerLegend();
@@ -83,6 +86,10 @@
      */
   bool readXML(const QDomElement& itemElem, const QDomDocument& doc);
 
+ public slots:
+  /**Data changed*/
+  void synchronizeWithModel();
+
  protected:
   QString mTitle;
 
@@ -123,6 +130,9 @@
   void drawPointSymbol(QPainter*, QgsSymbol* s, double currentYCoord, double& currentXPosition, double& symbolHeight) const;
   void drawLineSymbol(QPainter*, QgsSymbol* s, double currentYCoord, double& currentXPosition) const;
   void drawPolygonSymbol(QPainter* p, QgsSymbol* s, double currentYCoord, double& currentXPosition) const; 
+
+  /**Helper function that lists ids of layers contained in map canvas*/
+  QStringList layerIdList() const;
 };
 
 #endif

Modified: branches/advanced_printing_branch/src/app/composer/qgscomposermap.cpp
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgscomposermap.cpp	2008-08-03 08:40:17 UTC (rev 8987)
+++ branches/advanced_printing_branch/src/app/composer/qgscomposermap.cpp	2008-08-04 14:13:11 UTC (rev 8988)
@@ -186,7 +186,7 @@
       
       painter->translate(0, 0); //do we need this?
       painter->scale(scale,scale);
-      
+
       painter->drawPixmap(0,0, mCachePixmap);
       
       painter->restore();
@@ -211,6 +211,7 @@
       drawSelectionBoxes(painter);
     }
   
+ 
   painter->restore();
 
   mLastScaleFactorX =  currentScaleFactorX;
@@ -328,10 +329,89 @@
 
 bool QgsComposerMap::writeXML(QDomElement& elem, QDomDocument & doc)
 {
-  return true; //soon...
+  if(elem.isNull())
+    {
+      return false;
+    }
+
+  QDomElement composerMapElem = doc.createElement("ComposerMap");
+  
+  //previewMode
+  if(mPreviewMode == Cache)
+    {
+      composerMapElem.setAttribute("previewMode", "Cache");
+    }
+  else if(mPreviewMode == Render)
+    {
+      composerMapElem.setAttribute("previewMode", "Render");
+    }
+  else //rectangle
+    {
+      composerMapElem.setAttribute("previewMode", "Rectangle");
+    }
+
+  //extent
+  QDomElement extentElem = doc.createElement("Extent");
+  extentElem.setAttribute("xmin", QString::number(mExtent.xMin()));
+  extentElem.setAttribute("xmax", QString::number(mExtent.xMax()));
+  extentElem.setAttribute("ymin", QString::number(mExtent.yMin()));
+  extentElem.setAttribute("ymax", QString::number(mExtent.yMax()));
+  composerMapElem.appendChild(extentElem);
+
+  mCacheUpdated = false;
+  mNumCachedLayers = 0;
+
+  elem.appendChild(composerMapElem);
+  return _writeXML(composerMapElem, doc);
 }
 
 bool QgsComposerMap::readXML(const QDomElement& itemElem, const QDomDocument& doc)
 {
-  return false; //soon...
+  if(itemElem.isNull())
+    {
+      return false;
+    }
+
+  //previewMode
+  QString previewMode = itemElem.attribute("previewMode");
+  if(previewMode == "Cache")
+    {
+      mPreviewMode = Cache;
+    }
+  else if(previewMode == "Render")
+    {
+      mPreviewMode = Render;
+    }
+  else
+    {
+      mPreviewMode = Rectangle;
+    }
+
+  //extent
+  QDomNodeList extentNodeList = itemElem.elementsByTagName("Extent");
+  if(extentNodeList.size() > 0)
+    {
+      QDomElement extentElem = extentNodeList.at(0).toElement();
+      double xmin, xmax, ymin, ymax;
+      xmin = extentElem.attribute("xmin").toDouble();
+      xmax = extentElem.attribute("xmax").toDouble();
+      ymin = extentElem.attribute("ymin").toDouble();
+      ymax = extentElem.attribute("ymax").toDouble();
+
+      mExtent = QgsRect(xmin, ymin, xmax, ymax);
+    }
+
+  mDrawing = false;
+  mNumCachedLayers = 0;
+  mCacheUpdated = false;
+
+  //restore general composer item properties
+  QDomNodeList composerItemList = itemElem.elementsByTagName("ComposerItem");
+  if(composerItemList.size() > 0)
+    {
+      QDomElement composerItemElem = composerItemList.at(0).toElement();
+      _readXML(composerItemElem, doc);
+    }
+
+  return true;
 }

Modified: branches/advanced_printing_branch/src/app/composer/qgscomposerscalebar.cpp
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgscomposerscalebar.cpp	2008-08-03 08:40:17 UTC (rev 8987)
+++ branches/advanced_printing_branch/src/app/composer/qgscomposerscalebar.cpp	2008-08-04 14:13:11 UTC (rev 8988)
@@ -22,6 +22,8 @@
 #include "qgssingleboxscalebarstyle.h"
 #include "qgsticksscalebarstyle.h"
 #include "qgsrect.h"
+#include <QDomDocument>
+#include <QDomElement>
 #include <QFontMetricsF>
 #include <QPainter>
 #include <cmath>
@@ -229,6 +231,18 @@
     }
 }
 
+QString QgsComposerScaleBar::style() const
+{
+  if(mStyle)
+    {
+      return mStyle->name();
+    }
+  else
+    {
+      return "";
+    }
+}
+
 QString QgsComposerScaleBar::firstLabelString() const
 {
   if(mNumSegmentsLeft > 0)
@@ -243,12 +257,111 @@
 
 bool QgsComposerScaleBar::writeXML(QDomElement& elem, QDomDocument & doc)
 {
-  return true; //soon...
+  if(elem.isNull())
+    {
+      return false;
+    }
+
+  QDomElement composerScaleBarElem = doc.createElement("ComposerScaleBar");
+  composerScaleBarElem.setAttribute("height", mHeight);
+  composerScaleBarElem.setAttribute("labelBarSpace", mLabelBarSpace);
+  composerScaleBarElem.setAttribute("boxContentSpace", mBoxContentSpace);
+  composerScaleBarElem.setAttribute("numSegments", mNumSegments);
+  composerScaleBarElem.setAttribute("numSegmentsLeft", mNumSegmentsLeft);
+  composerScaleBarElem.setAttribute("numUnitsPerSegment", mNumUnitsPerSegment);
+  composerScaleBarElem.setAttribute("numMapUnitsPerScaleBarUnit", mNumMapUnitsPerScaleBarUnit);
+  composerScaleBarElem.setAttribute("font", mFont.toString());
+  composerScaleBarElem.setAttribute("outlineWidth", mPen.widthF());
+  
+  //style
+  if(mStyle)
+    {
+      composerScaleBarElem.setAttribute("style", mStyle->name());
+    }
+
+  //map id
+  if(mComposerMap)
+    {
+      composerScaleBarElem.setAttribute("mapId", mComposerMap->id());
+    }
+
+  //fill color
+  QColor brushColor = mBrush.color();
+  QDomElement colorElem = doc.createElement("BrushColor");
+  colorElem.setAttribute("red", brushColor.red());
+  colorElem.setAttribute("green", brushColor.green());
+  colorElem.setAttribute("blue", brushColor.blue());
+  composerScaleBarElem.appendChild(colorElem);
+
+  elem.appendChild(composerScaleBarElem);
+  return _writeXML(composerScaleBarElem, doc);
 }
 
 bool QgsComposerScaleBar::readXML(const QDomElement& itemElem, const QDomDocument& doc)
 {
-  return false; //soon...
+  if(itemElem.isNull())
+    {
+      return false;
+    }
+
+  mHeight = itemElem.attribute("height", "5.0").toDouble();
+  mLabelBarSpace = itemElem.attribute("labelBarSpace", "3.0").toDouble();
+  mBoxContentSpace = itemElem.attribute("boxContentSpace", "1.0").toDouble();
+  mNumSegments = itemElem.attribute("numSegments", "2").toInt();
+  mNumSegmentsLeft = itemElem.attribute("numSegmentsLeft", "0").toInt();
+  mNumUnitsPerSegment = itemElem.attribute("numUnitsPerSegment", "1.0").toDouble();
+  mNumMapUnitsPerScaleBarUnit = itemElem.attribute("numMapUnitsPerScaleBarUnit", "1.0").toDouble();
+  mPen.setWidthF(itemElem.attribute("outlineWidth", "1.0").toDouble());
+  QString fontString = itemElem.attribute("font", "");
+  if(!fontString.isEmpty())
+    {
+      mFont.fromString(fontString);
+    }
+
+  //style
+  delete mStyle;
+  mStyle = 0;
+  QString styleString = itemElem.attribute("style", "");
+  if(!styleString.isEmpty())
+    {
+      if(styleString == "Line with Ticks")
+	{
+	  mStyle = new QgsTicksScaleBarStyle(this);
+	}
+      else if(styleString == "Single Box")
+	{
+	  mStyle = new QgsSingleBoxScaleBarStyle(this);
+	}
+      else if(styleString == "Double Box")
+	{
+	  mStyle = new QgsDoubleBoxScaleBarStyle(this);
+	}
+      else //numeric
+	{
+	  mStyle = new QgsNumericScaleBarStyle(this);
+	}
+    }
+  
+
+  //map
+  int mapId = itemElem.attribute("mapId", "-1").toInt();
+  if(mapId >= 0)
+    {
+      const QgsComposerMap* composerMap = mComposition->getComposerMapById(mapId);
+      mComposerMap = composerMap;
+    }
+	
+  refreshSegmentMM();
+
+  //restore general composer item properties
+  QDomNodeList composerItemList = itemElem.elementsByTagName("ComposerItem");
+  if(composerItemList.size() > 0)
+    {
+      QDomElement composerItemElem = composerItemList.at(0).toElement();
+      _readXML(composerItemElem, doc);
+    }
+  
+  return true;
 }
 
 

Modified: branches/advanced_printing_branch/src/app/composer/qgscomposerscalebar.h
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgscomposerscalebar.h	2008-08-03 08:40:17 UTC (rev 8987)
+++ branches/advanced_printing_branch/src/app/composer/qgscomposerscalebar.h	2008-08-04 14:13:11 UTC (rev 8988)
@@ -82,6 +82,9 @@
    possibilities are: */
   void setStyle(const QString& styleName);
 
+  /**Returns style name*/
+  QString style() const;
+
   /**Returns the x - positions of the segment borders (in item coordinates) and the width 
    of the segment*/
   void segmentPositions(QList<QPair<double, double> >& posWidthList) const; 

Modified: branches/advanced_printing_branch/src/app/composer/qgscomposerscalebarwidget.cpp
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgscomposerscalebarwidget.cpp	2008-08-03 08:40:17 UTC (rev 8987)
+++ branches/advanced_printing_branch/src/app/composer/qgscomposerscalebarwidget.cpp	2008-08-04 14:13:11 UTC (rev 8988)
@@ -156,7 +156,7 @@
       mBoxCheckBox->setCheckState(Qt::Unchecked);
     }
 
-  //Style //todo...
+  //todo: style...
   
   
   blockSignals(false);

Modified: branches/advanced_printing_branch/src/app/composer/qgslegendmodel.cpp
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgslegendmodel.cpp	2008-08-03 08:40:17 UTC (rev 8987)
+++ branches/advanced_printing_branch/src/app/composer/qgslegendmodel.cpp	2008-08-04 14:13:11 UTC (rev 8988)
@@ -25,6 +25,10 @@
 
 QgsLegendModel::QgsLegendModel(): QStandardItemModel()
 {
+  if(QgsMapLayerRegistry::instance())
+    {
+      connect(QgsMapLayerRegistry::instance(), SIGNAL(layerWillBeRemoved(QString)), this, SLOT(removeLayer(const QString&)));
+    }
 }
 
 QgsLegendModel::~QgsLegendModel()
@@ -54,6 +58,8 @@
 
       //addItem for layer
       QStandardItem* layerItem = new QStandardItem(currentLayer->name());
+      //set layer id as user data into the item
+      layerItem->setData(QVariant(currentLayer->getLayerID()));
       layerItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
      
       invisibleRootItem()->setChild (invisibleRootItem()->rowCount(), layerItem);
@@ -194,3 +200,73 @@
 {
   mSymbols.remove(s);
 }
+
+void QgsLegendModel::updateLayerEntries(const QStringList& newLayerIds)
+{
+  if(!invisibleRootItem())
+    {
+      return;
+    }
+
+  //check for layers to remove
+  QStandardItem* currentLayerItem = 0;
+  QSet<int> rowsToRemove;
+
+  int numRootItems = rowCount();
+  for(int i = 0; i < numRootItems ; ++i)
+    {
+      currentLayerItem = item(i);
+      if(!currentLayerItem)
+	{
+	  continue;
+	}
+
+      QString layerId = currentLayerItem->data().toString();
+
+      if(!newLayerIds.contains(layerId)) //layer has been removed
+	{
+	  rowsToRemove.insert(i);
+	}
+    }
+
+  //remove layers in reverse order
+  if(rowsToRemove.size() > 0)
+    {
+      QSet<int>::const_iterator delete_it = --rowsToRemove.constEnd();
+      for(;; --delete_it)
+	{
+	  removeRow(*delete_it);
+	  if(delete_it == rowsToRemove.constBegin())
+	    {
+	      break;
+	    }
+	}
+
+    }
+
+
+  mLayerIds = newLayerIds;
+}
+
+void QgsLegendModel::removeLayer(const QString& layerId)
+{
+  QStandardItem* currentLayerItem = 0;
+
+  int numRootItems = rowCount();
+  for(int i = 0; i < numRootItems ; ++i)
+    {
+      currentLayerItem = item(i);
+      if(!currentLayerItem)
+	{
+	  continue;
+	}
+
+      QString currentId = currentLayerItem->data().toString();
+      if(currentId == layerId)
+	{
+	  removeRow(i);
+	  emit layersChanged();
+	  return;
+	}
+    }
+}

Modified: branches/advanced_printing_branch/src/app/composer/qgslegendmodel.h
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgslegendmodel.h	2008-08-03 08:40:17 UTC (rev 8987)
+++ branches/advanced_printing_branch/src/app/composer/qgslegendmodel.h	2008-08-04 14:13:11 UTC (rev 8988)
@@ -28,12 +28,22 @@
 /**A model that provides layers as root items. The classification items are children of the layer items*/
 class QgsLegendModel: public QStandardItemModel
 {
+  Q_OBJECT
+
  public:
   QgsLegendModel();
   ~QgsLegendModel();
 
   void setLayerSet(const QStringList& layerIds);
+  /**Apply added or removed layers to the model*/
+  void updateLayerEntries(const QStringList& newLayerIds);
 
+ public slots:
+  void removeLayer(const QString& layerId);
+
+ signals:
+  void layersChanged();
+
  private:
   /**Adds classification items of vector layers
    @return 0 in case of success*/

Modified: branches/advanced_printing_branch/src/app/composer/qgsticksscalebarstyle.cpp
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgsticksscalebarstyle.cpp	2008-08-03 08:40:17 UTC (rev 8987)
+++ branches/advanced_printing_branch/src/app/composer/qgsticksscalebarstyle.cpp	2008-08-04 14:13:11 UTC (rev 8988)
@@ -35,7 +35,7 @@
 
 QString QgsTicksScaleBarStyle::name() const
 {
-  return "Line Ticks Middle";
+  return "Line with Ticks";
 }
 
 void QgsTicksScaleBarStyle::draw(QPainter* p, double xOffset) const

Modified: branches/advanced_printing_branch/src/app/qgisapp.cpp
===================================================================
--- branches/advanced_printing_branch/src/app/qgisapp.cpp	2008-08-03 08:40:17 UTC (rev 8987)
+++ branches/advanced_printing_branch/src/app/qgisapp.cpp	2008-08-04 14:13:11 UTC (rev 8988)
@@ -2558,6 +2558,9 @@
   QgsMapLayerRegistry::instance()->removeAllMapLayers();
   mMapCanvas->clear();
 
+  delete mComposer;
+  mComposer = new QgsComposer(this);
+
   QgsProject* prj = QgsProject::instance();
   prj->title( QString::null );
   prj->filename( QString::null );
@@ -2779,6 +2782,9 @@
     // clear out any stuff from previous project
     mMapCanvas->freeze(true);
     removeAllLayers();
+    
+    delete mComposer;
+    mComposer = new QgsComposer(this);
 
     QgsProject::instance()->filename( fullPath );
 



More information about the QGIS-commit mailing list