[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [marble] src/lib: MarbleModel: reload datasets also if a property or style has changed
From:       Thibaut Gridel <tgridel () free ! fr>
Date:       2013-03-31 21:44:27
Message-ID: 20130331214427.D4AEAA604F () git ! kde ! org
[Download RAW message or body]

Git commit d78d02f561ffdfe5ecf8ae90ad920c43d0bcd373 by Thibaut Gridel.
Committed on 31/03/2013 at 20:45.
Pushed by tgridel into branch 'master'.

MarbleModel: reload datasets also if a property or style has changed

M  +16   -19   src/lib/MarbleModel.cpp
M  +7    -0    src/lib/geodata/scene/GeoSceneGeodata.cpp
M  +3    -1    src/lib/geodata/scene/GeoSceneGeodata.h

http://commits.kde.org/marble/d78d02f561ffdfe5ecf8ae90ad920c43d0bcd373

diff --git a/src/lib/MarbleModel.cpp b/src/lib/MarbleModel.cpp
index 6ab280e..df81fa3 100644
--- a/src/lib/MarbleModel.cpp
+++ b/src/lib/MarbleModel.cpp
@@ -260,7 +260,7 @@ void MarbleModel::setMapThemeId( const QString &mapThemeId )
     }
 
     // find the list of previous theme's geodata
-    QStringList loadedContainers;
+    QList<GeoSceneGeodata> currentDatasets;
     if ( d->m_mapTheme ) {
         foreach ( GeoSceneLayer *layer, d->m_mapTheme->map()->layers() ) {
             if ( layer->backend() != dgml::dgmlValue_geodata )
@@ -270,8 +270,7 @@ void MarbleModel::setMapThemeId( const QString &mapThemeId )
             foreach ( GeoSceneAbstractDataset *dataset, layer->datasets() ) {
                 GeoSceneGeodata *data = dynamic_cast<GeoSceneGeodata*>( dataset );
                 Q_ASSERT( data );
-                QString containername = data->sourceFile();
-                loadedContainers <<  containername;
+                currentDatasets << *data;
             }
         }
     }
@@ -309,7 +308,7 @@ void MarbleModel::setMapThemeId( const QString &mapThemeId )
         sunLocator()->setPlanet(d->m_planet);
     }
 
-    QStringList loadList;
+    QStringList fileList;
     QStringList propertyList;
     QList<GeoDataStyle*> styleList;
 
@@ -318,11 +317,14 @@ void MarbleModel::setMapThemeId( const QString &mapThemeId )
             continue;
 
         GeoSceneGeodata emptyData("empty");
-        // look for documents
+        // look for datasets which are different from currentDatasets
         foreach ( GeoSceneAbstractDataset *dataset, layer->datasets() ) {
             GeoSceneGeodata *data = dynamic_cast<GeoSceneGeodata*>( dataset );
             Q_ASSERT( data );
-            QString containername = data->sourceFile();
+            if( currentDatasets.removeOne( *data ) ) {
+                continue;
+            }
+            QString filename = data->sourceFile();
             QString property = data->property();
             QPen pen = data->pen();
             QBrush brush = data->brush();
@@ -352,22 +354,17 @@ void MarbleModel::setMapThemeId( const QString &mapThemeId )
                 style->setStyleId( "default" );
             }
 
-            if ( !loadedContainers.removeOne( containername ) ) {
-                loadList << containername;
-                propertyList << property;
-                styleList << style;
-            }
+            fileList << filename;
+            propertyList << property;
+            styleList << style;
         }
     }
-    // unload old standard Placemarks which are not part of the new map
-    foreach(const QString& container, loadedContainers) {
-        loadedContainers.pop_front();
-        d->m_fileManager->removeFile( container );
+    // unload old currentDatasets which are not part of the new map
+    foreach(const GeoSceneGeodata data, currentDatasets) {
+        d->m_fileManager->removeFile( data.sourceFile() );
     }
-    // load new standard Placemarks
-    d->m_fileManager->addFile( loadList, propertyList, styleList, MapDocument );
-    loadList.clear();
-    styleList.clear();
+    // load new datasets
+    d->m_fileManager->addFile( fileList, propertyList, styleList, MapDocument );
 
     mDebug() << "THEME CHANGED: ***" << mapTheme->head()->mapThemeId();
     emit themeChanged( mapTheme->head()->mapThemeId() );
diff --git a/src/lib/geodata/scene/GeoSceneGeodata.cpp b/src/lib/geodata/scene/GeoSceneGeodata.cpp
index c955c5e..7624816 100644
--- a/src/lib/geodata/scene/GeoSceneGeodata.cpp
+++ b/src/lib/geodata/scene/GeoSceneGeodata.cpp
@@ -32,6 +32,13 @@ const char* GeoSceneGeodata::nodeType() const
     return GeoSceneTypes::GeoSceneGeodataType;
 }
 
+bool GeoSceneGeodata::operator==( const GeoSceneGeodata &other ) const
+{
+    return m_sourceFile == other.sourceFile()
+            && m_pen == other.pen()
+            && m_brush == other.brush();
+}
+
 QString GeoSceneGeodata::property() const
 {
     return m_property;
diff --git a/src/lib/geodata/scene/GeoSceneGeodata.h b/src/lib/geodata/scene/GeoSceneGeodata.h
index fa780b7..03ad634 100644
--- a/src/lib/geodata/scene/GeoSceneGeodata.h
+++ b/src/lib/geodata/scene/GeoSceneGeodata.h
@@ -27,7 +27,9 @@ class GEODATA_EXPORT GeoSceneGeodata : public GeoSceneAbstractDataset
     explicit GeoSceneGeodata( QString name );
     virtual ~GeoSceneGeodata();
     virtual const char* nodeType() const;
-     
+
+    bool operator==( const GeoSceneGeodata &other ) const;
+
     QString property() const;
     void setProperty( QString property );
 
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic