[Marble-commits] KDE/kdeedu/marble/src/lib

Utku Aydın utkuaydin34 at gmail.com
Sat Jan 1 17:12:43 CET 2011


SVN commit 1210648 by aydin:

Create a GeoSceneDocument inside Map Wizard and string identifiers for GeoScene classes
REVIEW: 6228


 M  +97 -29    MapWizard.cpp  
 M  +4 -2      MapWizard.h  
 A             geodata/parser/GeoSceneTypes.cpp   [License: LGPL]
 A             geodata/parser/GeoSceneTypes.h   [License: LGPL]


--- trunk/KDE/kdeedu/marble/src/lib/MapWizard.cpp #1210647:1210648
@@ -5,7 +5,7 @@
 // find a copy of this license in LICENSE.txt in the top directory of
 // the source code.
 //
-// Copyright 2010 Utku Aydın <utkuaydin34 at gmail.com>
+// Copyright 2011 Utku Aydın <utkuaydin34 at gmail.com>
 //
 
 #include "MapWizard.h"
@@ -14,11 +14,18 @@
 #include "global.h"
 #include "MarbleDirs.h"
 #include "MarbleDebug.h"
+#include "GeoSceneHead.h"
+#include "GeoSceneIcon.h"
+#include "GeoSceneZoom.h"
+#include "GeoSceneMap.h"
+#include "GeoSceneLayer.h"
+#include "GeoSceneTexture.h"
 
 #include <QtCore/QDir>
 #include <QtCore/QFile>
 #include <QtCore/QProcess>
 #include <QtCore/QSettings>
+#include <QtCore/QSharedPointer>
 #include <QtCore/QTimer>
 #include <QtCore/QTemporaryFile>
 #include <QtGui/QPixmap>
@@ -38,6 +45,10 @@
 {
 public:
     Ui::MapWizard uiWidget;
+    
+    GeoSceneDocument document;
+    QString mapTheme;
+    
     QNetworkAccessManager xmlAccessManager;
     QNetworkAccessManager legendAccessManager;
     QNetworkAccessManager levelZeroAccessManager;
@@ -52,10 +63,6 @@
     };
 
     mapType mapProviderType;
-    QString mapTitle;
-    QString mapTheme;
-    QString mapDescription;
-    QString mapPreview;
     QByteArray levelZero;
 
     QString wmsProtocol;
@@ -72,7 +79,6 @@
     QString staticUrlQuery;
 
     QString sourceImage;
-    QString previewExtension;
     QString sourceExtension;
 
     QString dgmlOutput;
@@ -212,7 +218,7 @@
     d->uiWidget.lineEditTheme->setText( d->uiWidget.comboBoxWmsMap->itemData( selected ).toString() );
 }
 
-void MapWizard::createDgml()
+void MapWizard::createDgml( const GeoSceneDocument* document )
 {
     QXmlStreamWriter stream( &( d->dgmlOutput ) ) ;
     stream.setAutoFormatting( true );
@@ -223,23 +229,23 @@
     stream.writeStartElement( "document" );
 
     stream.writeStartElement( "head" );
-    stream.writeTextElement( "name", d->mapTitle );
+    stream.writeTextElement( "name", document->head()->name() );
     stream.writeTextElement( "target", "earth" );
-    stream.writeTextElement( "theme", d->mapTheme );
-    stream.writeTextElement( "visible", "true" );
+    stream.writeTextElement( "theme", document->head()->theme() );
+    stream.writeTextElement( "visible", document->head()->visible() ? "true" : "false" );
 
     stream.writeStartElement( "icon" );
-    stream.writeAttribute( "pixmap", QString( "preview.%1" ).arg( d->previewExtension ) );
+    stream.writeAttribute( "pixmap", document->head()->icon()->pixmap() );
     stream.writeEndElement();
 
     stream.writeStartElement( "description" );
-    stream.writeCDATA( d->mapDescription );
+    stream.writeCDATA( document->head()->description() );
     stream.writeEndElement();
 
     stream.writeStartElement( "zoom" );
-    stream.writeTextElement( "discrete", "false" );
-    stream.writeTextElement( "minimum", "900" );
-    stream.writeTextElement( "maximum", "3500" );
+    stream.writeTextElement( "discrete", document->head()->zoom()->discrete() ? "true" : "false" );
+    stream.writeTextElement( "minimum", QString::number( document->head()->zoom()->minimum() ) );
+    stream.writeTextElement( "maximum", QString::number( document->head()->zoom()->maximum() ) );
     stream.writeEndElement(); // zoom
     stream.writeEndElement(); // head
 
@@ -250,7 +256,7 @@
     stream.writeEndElement(); // target
 
     stream.writeStartElement( "layer" );
-    stream.writeAttribute( "name", d->mapTheme );
+    stream.writeAttribute( "name", document->head()->theme() );
     stream.writeAttribute( "backend", "texture" );
     stream.writeStartElement( "texture" );
     stream.writeAttribute( "name", "map" );
@@ -269,7 +275,7 @@
         stream.writeAttribute( "format", d->uiWidget.comboBoxStaticUrlFormat->currentText() );
     }
 
-    stream.writeCharacters( QString( "earth/%1" ).arg( d->mapTheme ) );
+    stream.writeCharacters( QString( "earth/%1" ).arg( document->head()->theme() ) );
     stream.writeEndElement(); // sourcedir
 
     if( d->mapProviderType == MapWizardPrivate::WmsMap )
@@ -328,7 +334,7 @@
     }
 
     else if( d->mapProviderType == MapWizardPrivate::StaticImageMap ) {
-        stream.writeTextElement( "installmap", QString( "%1.%2" ).arg( d->mapTheme ).arg( d->sourceExtension ) );
+        stream.writeTextElement( "installmap", QString( "%1.%2" ).arg( document->head()->theme() ).arg( d->sourceExtension ) );
     }
 
     stream.writeEndElement(); // texture
@@ -376,10 +382,12 @@
         }
 
         // Preview image
-        d->previewExtension = d->mapPreview.right( d->mapPreview.length() - d->mapPreview.lastIndexOf( '.' ) - 1 ) ;
-        QFile previewImage( d->mapPreview );
-        previewImage.copy( QString( "%1/%2/preview.%3" ).arg( maps.absolutePath() ).arg( d->mapTheme ).arg( d->previewExtension ) );
+        QString pixmapPath = d->uiWidget.lineEditPreview->text();
+        QString extension = pixmapPath.right( pixmapPath.length() - pixmapPath.lastIndexOf( '.' ) - 1 );
 
+        QFile previewImage( pixmapPath );
+        previewImage.copy( QString( "%1/%2/preview.%3" ).arg( maps.absolutePath() ).arg( d->mapTheme ).arg( extension ) );
+
         // DGML
         QFile file( QString( "%1/%2/%2.dgml" ).arg( maps.absolutePath() ).arg( d->mapTheme ) );
         file.open( QIODevice::ReadWrite );
@@ -710,15 +718,73 @@
     }
 }
 
+GeoSceneDocument* MapWizard::createDocument()
+{
+    GeoSceneDocument *document = new GeoSceneDocument;
+       
+    GeoSceneHead *head = document->head();
+    head->setName( d->uiWidget.lineEditTitle->text() );
+    head->setTheme( d->uiWidget.lineEditTheme->text() );
+    head->setDescription( d->uiWidget.textEditDesc->document()->toHtml() );
+    head->setVisible( true );
+        
+    GeoSceneIcon *icon = head->icon();
+    QString pixmapPath = d->uiWidget.lineEditPreview->text();
+    QString pixmapExtension = pixmapPath.right( pixmapPath.length() - pixmapPath.lastIndexOf( '.' ) - 1 );
+    icon->setPixmap( QString( "preview.%1" ).arg( pixmapExtension ) );
+    
+    GeoSceneZoom *zoom = head->zoom();
+    zoom->setMinimum( 900 );
+    zoom->setMaximum( 3500 );
+    zoom->setDiscrete( false );
+    
+    GeoSceneTexture *texture = new GeoSceneTexture( "map" );
+    texture->setExpire( 31536000 );
+    texture->setStorageLayout( GeoSceneTexture::Marble );
+    texture->setProjection( GeoSceneTexture::Equirectangular );
+    texture->setSourceDir( "earth/" + document->head()->theme() ); 
+    QUrl downloadUrl;
+    if( d->mapProviderType == MapWizardPrivate::WmsMap )
+    {
+        texture->setFileFormat( d->wmsFormat );
+        QString layer = d->uiWidget.comboBoxWmsMap->itemData( d->uiWidget.comboBoxWmsMap->currentIndex() ).toString();
+        downloadUrl = QUrl( d->uiWidget.lineEditWmsUrl->text() );
+        downloadUrl.addQueryItem( "layers", layer );
+        texture->addDownloadUrl( downloadUrl );
+    }
+    
+    else if( d->mapProviderType == MapWizardPrivate::StaticUrlMap )
+    {
+        texture->setFileFormat( d->uiWidget.comboBoxStaticUrlFormat->currentText() );
+        downloadUrl = QUrl( d->uiWidget.lineEditStaticUrlServer->text() );
+        texture->addDownloadPolicy( DownloadBrowse, 20 );
+        texture->addDownloadPolicy( DownloadBulk, 2 );
+        texture->addDownloadUrl( downloadUrl );
+    }
+    
+    else if( d->mapProviderType == MapWizardPrivate::StaticImageMap )
+    {
+        QString image = d->uiWidget.lineEditSource->text();
+        QString extension = image.right( image.length() - image.lastIndexOf( '.' ) - 1 );
+        texture->setFileFormat( extension );
+        texture->setInstallMap( document->head()->theme() + d->sourceExtension );
+    }
+    
+    GeoSceneLayer *layer = new GeoSceneLayer( d->uiWidget.lineEditTheme->text() );
+    layer->setBackend( "texture" );
+    layer->addDataset( texture );
+    
+    GeoSceneMap *map = document->map();
+    map->addLayer( layer );    
+    return document;
+}
+
 void MapWizard::accept()
 {
-    d->mapTitle = d->uiWidget.lineEditTitle->text();
-    d->mapTheme = d->uiWidget.lineEditTheme->text();
-    d->mapDescription = d->uiWidget.textEditDesc->document()->toHtml();
+    QSharedPointer<GeoSceneDocument> document( createDocument() );
+    d->mapTheme = document->head()->theme();
     d->sourceImage = d->uiWidget.lineEditSource->text();
-    d->mapPreview = d->uiWidget.lineEditPreview->text();
     d->sourceExtension = d->sourceImage.right( d->sourceImage.length() - d->sourceImage.lastIndexOf( '.' ) - 1 );
-    d->previewExtension = d->mapPreview.right( d->mapPreview.length() - d->mapPreview.lastIndexOf( '.' ) - 1 );
 
     QString wmsUrl = d->uiWidget.lineEditWmsUrl->text();
 
@@ -754,7 +820,9 @@
         return;
     }
 
-    if( !d->mapTitle.isEmpty() && !d->mapDescription.isEmpty() && !d->mapDescription.isEmpty() && !d->mapPreview.isEmpty() )
+    if( !document->head()->name().isEmpty() && 
+        !document->head()->description().isEmpty() && 
+        !d->uiWidget.lineEditPreview->text().isEmpty() )
     {
         if( d->mapProviderType == MapWizardPrivate::StaticImageMap && !QFile( d->sourceImage ).exists() )
         {
@@ -762,13 +830,13 @@
             return;
         }
 
-        if( !QFile( d->mapPreview ).exists() )
+        if( !QFile( d->uiWidget.lineEditPreview->text() ).exists() )
         {
             QMessageBox::critical( this, tr( "File not found" ), tr( "Preview image is not found." ) );
             return;
         }
 
-        createDgml();
+        createDgml( document.data() );
 
         if( createFiles() )
         {
--- trunk/KDE/kdeedu/marble/src/lib/MapWizard.h #1210647:1210648
@@ -5,7 +5,7 @@
 // find a copy of this license in LICENSE.txt in the top directory of
 // the source code.
 //
-// Copyright 2010 Utku Aydın <utkuaydin34 at gmail.com>
+// Copyright 2011 Utku Aydın <utkuaydin34 at gmail.com>
 //
 
 #ifndef MARBLE_MAPWIZARD_H
@@ -16,6 +16,7 @@
 #include <QtNetwork/QNetworkReply>
 
 #include "marble_export.h"
+#include "GeoSceneDocument.h"
 
 /**
  * @file
@@ -64,7 +65,8 @@
     void suggestPreviewImage();
 
 private:
-    void createDgml();
+    GeoSceneDocument* createDocument();
+    void createDgml( const GeoSceneDocument* document );
     bool createFiles();
     void createLegendHtml();
     void createLegend();


More information about the Marble-commits mailing list