[QGIS Commit] r8779 - branches/advanced_printing_branch/src/app/composer

svn_qgis at osgeo.org svn_qgis at osgeo.org
Tue Jul 15 02:06:47 EDT 2008


Author: mhugent
Date: 2008-07-15 02:06:46 -0400 (Tue, 15 Jul 2008)
New Revision: 8779

Modified:
   branches/advanced_printing_branch/src/app/composer/qgslegendmodel.cpp
   branches/advanced_printing_branch/src/app/composer/qgslegendmodel.h
Log:
Saver memory management for composer legend

Modified: branches/advanced_printing_branch/src/app/composer/qgslegendmodel.cpp
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgslegendmodel.cpp	2008-07-14 22:08:48 UTC (rev 8778)
+++ branches/advanced_printing_branch/src/app/composer/qgslegendmodel.cpp	2008-07-15 06:06:46 UTC (rev 8779)
@@ -33,7 +33,11 @@
 
 QgsLegendModel::~QgsLegendModel()
 {
-
+  QSet<QgsSymbol*>::iterator it = mSymbols.begin();
+  for(; it != mSymbols.end(); ++it)
+    {
+      delete *it;
+    }
 }
 
 void QgsLegendModel::setLayerSet(const QStringList& layerIds)
@@ -121,8 +125,10 @@
 	  break;
 	}
 
-      //Pass pointer to QgsSymbol as user data. Cast to void* necessary such that QMetaType handles it
-      currentSymbolItem->setData(QVariant::fromValue((void*)(*symbolIt)));
+      //Pass deep copy of QgsSymbol as user data. Cast to void* necessary such that QMetaType handles it
+      QgsSymbol* symbolCopy = new QgsSymbol(**symbolIt);
+      currentSymbolItem->setData(QVariant::fromValue((void*)symbolCopy));
+      insertSymbol(symbolCopy);
 
       if(!currentSymbolItem)
 	{
@@ -181,3 +187,21 @@
 
   return 0;
 }
+
+void QgsLegendModel::insertSymbol(QgsSymbol* s)
+{
+  QSet<QgsSymbol*>::iterator it = mSymbols.find(s);
+  if(it != mSymbols.end())
+    {
+      delete (*it); //very unlikely
+    }
+  else
+    {
+      mSymbols.insert(s);
+    }
+}
+  
+void QgsLegendModel::removeSymbol(QgsSymbol* s)
+{
+  mSymbols.remove(s);
+}

Modified: branches/advanced_printing_branch/src/app/composer/qgslegendmodel.h
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgslegendmodel.h	2008-07-14 22:08:48 UTC (rev 8778)
+++ branches/advanced_printing_branch/src/app/composer/qgslegendmodel.h	2008-07-15 06:06:46 UTC (rev 8779)
@@ -20,8 +20,10 @@
 
 #include <QStandardItemModel>
 #include <QStringList>
+#include <QSet>
 
 class QgsMapLayer;
+class QgsSymbol;
 
 /**A model that provides layers as root items. The classification items are children of the layer items*/
 class QgsLegendModel: public QStandardItemModel
@@ -41,6 +43,12 @@
    @return 0 in case of success*/
   int addRasterLayerItem(QStandardItem* layerItem, QgsMapLayer* rlayer);
 
+  void insertSymbol(QgsSymbol* s);
+  void removeSymbol(QgsSymbol* s);
+
+  /**Keep track of copied symbols to delete them if not used anymore*/
+  QSet<QgsSymbol*> mSymbols;
+
  protected:
   QStringList mLayerIds;
 };



More information about the QGIS-commit mailing list