[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