[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