[Marble-commits] KDE/kdeedu/marble/src/lib
Thibaut Gridel
tgridel at free.fr
Fri Sep 11 22:39:29 CEST 2009
SVN commit 1022480 by tgridel:
FileManager: generic file naming and cache save
M +50 -13 FileLoader.cpp
M +1 -1 FileLoader.h
M +6 -4 FileManager.cpp
--- trunk/KDE/kdeedu/marble/src/lib/FileLoader.cpp #1022479:1022480
@@ -56,31 +56,30 @@
if( m_contents.isEmpty() ) {
QString defaultcachename;
QString defaultsrcname;
- QString defaulthomecache;
- if( m_filepath.endsWith(".kml") ) {
- m_filepath.remove(QRegExp("\\.kml$"));
- }
qDebug() << "starting parser for" << m_filepath;
QFileInfo fileinfo(m_filepath);
+ QString path = fileinfo.path();
+ if (path == ".") path.clear();
+ QString name = fileinfo.completeBaseName();
+ QString suffix = fileinfo.suffix();
+
if ( fileinfo.isAbsolute() ) {
// We got an _absolute_ path now: e.g. "/patrick.kml"
- defaultcachename = m_filepath + ".cache";
- defaultsrcname = m_filepath + ".kml";
+ defaultcachename = path + name + ".cache";
+ defaultsrcname = path + '/' + name + '.' + suffix;
}
else {
if ( m_filepath.contains( '/' ) ) {
// _relative_ path: "maps/mars/viking/patrick.kml"
- defaultcachename = MarbleDirs::path( m_filepath + ".cache" );
- defaultsrcname = MarbleDirs::path( m_filepath + ".kml");
- defaulthomecache = MarbleDirs::localPath() + m_filepath + ".cache";
+ defaultcachename = MarbleDirs::path( path + name + ".cache" );
+ defaultsrcname = MarbleDirs::path( path + '/' + name + '.' + suffix);
}
else {
// _standard_ shared placemarks: "placemarks/patrick.kml"
- defaultcachename = MarbleDirs::path( "placemarks/" + m_filepath + ".cache" );
- defaultsrcname = MarbleDirs::path( "placemarks/" + m_filepath + ".kml");
- defaulthomecache = MarbleDirs::localPath() + "/placemarks/" + m_filepath + ".cache";
+ defaultcachename = MarbleDirs::path( "placemarks/" + path + name + ".cache" );
+ defaultsrcname = MarbleDirs::path( "placemarks/" + path + name + '.' + suffix );
}
}
@@ -120,10 +119,11 @@
{
// Read the KML file.
importKml( defaultsrcname );
+ saveFile( defaultcachename );
}
else
{
- qDebug() << "No Default Placemark Source File for " << m_filepath;
+ qDebug() << "No Default Placemark Source File for " << defaultsrcname;
}
}
} else {
@@ -258,5 +258,42 @@
return true;
}
+void FileLoader::saveFile( const QString& filename )
+{
+ if ( !QDir( MarbleDirs::localPath() + "/placemarks/" ).exists() )
+ ( QDir::root() ).mkpath( MarbleDirs::localPath() + "/placemarks/" );
+
+ QFile file( filename );
+ file.open( QIODevice::WriteOnly );
+ QDataStream out( &file );
+
+ // Write a header with a "magic number" and a version
+ // out << (quint32)0xA0B0C0D0;
+ out << (quint32)MarbleMagicNumber;
+ out << (qint32)014;
+
+ out.setVersion( QDataStream::Qt_4_2 );
+
+ qreal lon;
+ qreal lat;
+ qreal alt;
+
+ QVector<Marble::GeoDataPlacemark>::const_iterator it = m_document->placemarks().constBegin();
+ QVector<Marble::GeoDataPlacemark>::const_iterator const end = m_document->placemarks().constEnd();
+ for (; it != end; ++it )
+ {
+ out << (*it).name();
+ (it)->coordinate( lon, lat, alt );
+
+ // Use double to provide a single cache file format across architectures
+ out << (double)(lon) << (double)(lat) << (double)(alt);
+ out << QString( (*it).role() );
+ out << QString( (*it).description() );
+ out << QString( (*it).countryCode() );
+ out << (double)(*it).area();
+ out << (qint64)(*it).population();
+ }
+}
+
#include "FileLoader.moc"
} // namespace Marble
--- trunk/KDE/kdeedu/marble/src/lib/FileLoader.h #1022479:1022480
@@ -36,7 +36,7 @@
void importKml( const QString& filename );
void importKmlFromData();
bool loadFile(const QString &filename );
- void saveFile();
+ void saveFile(const QString& filename );
QString m_filepath;
QString m_contents;
--- trunk/KDE/kdeedu/marble/src/lib/FileManager.cpp #1022479:1022480
@@ -88,16 +88,18 @@
QString FileManager::toRegularName( QString name )
{
- return name.remove(".kml").remove(".cache");
+ QFileInfo fileinfo(name);
+ return fileinfo.completeBaseName();
}
void FileManager::addFile( const QString& filepath )
{
- if( ! containers().contains( toRegularName( filepath ) ) ) {
- qDebug() << "adding container:" << toRegularName( filepath );
+ QString regularName = toRegularName( filepath );
+ if( ! containers().contains( regularName ) ) {
+ qDebug() << "adding container:" << regularName;
FileLoader* loader = new FileLoader( this, filepath );
appendLoader( loader );
- d->m_pathList.append( toRegularName( filepath ) );
+ d->m_pathList.append( filepath );
}
}
More information about the Marble-commits
mailing list