12 #include "ui_MapWizard.h"
41 #include <QSharedPointer>
43 #include <QTemporaryFile>
45 #include <QMessageBox>
46 #include <QFileDialog>
47 #include <QImageReader>
48 #include <QDialogButtonBox>
49 #include <QNetworkAccessManager>
50 #include <QNetworkReply>
51 #include <QNetworkRequest>
52 #include <QDomElement>
53 #include <QXmlStreamWriter>
54 #if QT_VERSION >= 0x050000
61 class MapWizardPrivate
65 : m_serverCapabilitiesValid( false )
68 void pageEntered(
int id );
70 Ui::MapWizard uiWidget;
74 QNetworkAccessManager xmlAccessManager;
75 QNetworkAccessManager legendAccessManager;
76 QNetworkAccessManager levelZeroAccessManager;
77 QStringList wmsServerList;
78 QMap<QString, QString> wmsFetchedMaps;
79 QStringList staticUrlServerList;
80 bool m_serverCapabilitiesValid;
90 mapType mapProviderType;
96 QString wmsProjection;
97 QStringList wmsLegends;
105 class PreviewDialog :
public QDialog
108 PreviewDialog(
QWidget* parent, QString mapThemeId );
109 virtual void closeEvent(QCloseEvent* e );
111 bool deleteTheme( QString directory );
112 QString m_mapThemeId;
115 PreviewDialog::PreviewDialog(
QWidget* parent, QString mapThemeId ) :
QDialog( parent ), m_mapThemeId( mapThemeId )
117 QGridLayout *layout =
new QGridLayout();
119 MarbleNavigator *navigator =
new MarbleNavigator();
121 connect( navigator, SIGNAL(goHome()), widget, SLOT(goHome()) );
122 connect( navigator, SIGNAL(moveUp()), widget, SLOT(moveUp()) );
123 connect( navigator, SIGNAL(moveDown()), widget, SLOT(moveDown()) );
124 connect( navigator, SIGNAL(moveLeft()), widget, SLOT(moveLeft()) );
125 connect( navigator, SIGNAL(moveRight()), widget, SLOT(moveRight()) );
126 connect( navigator, SIGNAL(zoomIn()), widget, SLOT(zoomIn()) );
127 connect( navigator, SIGNAL(zoomOut()), widget, SLOT(zoomOut()) );
128 connect( navigator, SIGNAL(zoomChanged(
int)), widget, SLOT(setZoom(
int)) );
131 widget->setZoom( 1000 );
133 layout->addWidget( navigator, 1, 1 );
134 layout->addWidget( widget, 1, 2 );
135 layout->setMargin( 0 );
136 layout->setSpacing( 0 );
138 this->setLayout( layout );
139 this->setMinimumSize( 640, 480 );
140 this->setWindowTitle( tr(
"Preview Map" ) );
143 void PreviewDialog::closeEvent(QCloseEvent* e)
146 QString directory = dgmlPath.left( dgmlPath.lastIndexOf(
"/") );
147 this->deleteTheme( directory );
148 QDialog::closeEvent( e );
151 bool PreviewDialog::deleteTheme( QString directory )
156 if (dir.exists(directory)) {
157 Q_FOREACH(QFileInfo info, dir.entryInfoList(QDir::NoDotAndDotDot | QDir::System | QDir::Hidden | QDir::AllDirs | QDir::Files, QDir::DirsFirst)) {
159 result = deleteTheme(info.absoluteFilePath());
161 result = QFile::remove(info.absoluteFilePath());
168 result = dir.rmdir(directory);
174 void MapWizardPrivate::pageEntered(
int id )
177 m_serverCapabilitiesValid =
false;
178 }
else if (
id == 2 ||
id == 4 ) {
180 uiWidget.comboBoxStaticUrlServer->clear();
181 uiWidget.comboBoxStaticUrlServer->addItems( staticUrlServerList );
182 uiWidget.comboBoxStaticUrlServer->addItem(
"http://" );
183 }
else if (
id == 5 ) {
184 if ( mapProviderType == MapWizardPrivate::StaticImageMap ) {
185 previewImage = QImage( uiWidget.lineEditSource->text() ).scaled( 136, 136, Qt::IgnoreAspectRatio, Qt::SmoothTransformation );
187 previewImage = QImage::fromData( levelZero ).scaled( 136, 136, Qt::IgnoreAspectRatio, Qt::SmoothTransformation );
189 uiWidget.labelPreview->setPixmap( QPixmap::fromImage( previewImage ) );
190 }
else if (
id == 7 ) {
191 uiWidget.labelThumbnail->setPixmap( QPixmap::fromImage( previewImage ) );
197 d->uiWidget.setupUi(
this );
199 connect(
this, SIGNAL(currentIdChanged(
int)),
this, SLOT(pageEntered(
int)) );
201 connect( &( d->xmlAccessManager ), SIGNAL(finished(QNetworkReply*)),
this, SLOT(
parseServerCapabilities(QNetworkReply*)) );
202 connect( &( d->legendAccessManager ), SIGNAL(finished(QNetworkReply*)),
this, SLOT(
createWmsLegend(QNetworkReply*)) );
203 connect( &( d->levelZeroAccessManager ), SIGNAL(finished(QNetworkReply*)),
this, SLOT(
createLevelZero(QNetworkReply*)) );
205 connect( d->uiWidget.pushButtonSource, SIGNAL(clicked(
bool)),
this, SLOT(
querySourceImage()) );
206 connect( d->uiWidget.pushButtonPreview, SIGNAL(clicked(
bool)),
this, SLOT(
queryPreviewImage()) );
207 connect( d->uiWidget.pushButtonLegend_2, SIGNAL(clicked(
bool)),
this, SLOT(
queryLegendImage()) );
209 connect( d->uiWidget.comboBoxWmsServer, SIGNAL(currentIndexChanged(QString)), d->uiWidget.lineEditWmsUrl, SLOT(setText(QString)) );
210 connect( d->uiWidget.listWidgetWmsMaps, SIGNAL(itemSelectionChanged()),
this, SLOT(
autoFillDetails()) );
212 connect( d->uiWidget.lineEditTitle, SIGNAL(textChanged(QString)), d->uiWidget.labelSumMName, SLOT(setText(QString)) );
213 connect( d->uiWidget.lineEditTheme, SIGNAL(textChanged(QString)), d->uiWidget.labelSumMTheme, SLOT(setText(QString)) );
215 connect( d->uiWidget.pushButtonPreviewMap, SIGNAL(clicked(
bool)),
this, SLOT(
showPreview()) );
226 QUrl url( d->uiWidget.lineEditWmsUrl->text() );
227 #if QT_VERSION < 0x050000
228 url.addQueryItem(
"service",
"WMS" );
229 url.addQueryItem(
"request",
"GetCapabilities" );
232 urlQuery.addQueryItem(
"service",
"WMS" );
233 urlQuery.addQueryItem(
"request",
"GetCapabilities" );
234 url.setQuery(urlQuery);
237 QNetworkRequest request;
238 request.setUrl( url );
240 d->xmlAccessManager.get( request );
245 button( MapWizard::NextButton )->setEnabled(
true );
247 QString result( reply->readAll() );
249 if( !xml.setContent( result ) )
251 QMessageBox::critical(
this, tr(
"Error while parsing" ), tr(
"Wizard cannot parse server's response" ) );
255 if( xml.documentElement().firstChildElement().tagName().isNull() )
257 QMessageBox::critical(
this, tr(
"Error while parsing" ), tr(
"Server is not a Web Map Server." ) );
261 QDomElement firstLayer = xml.documentElement().firstChildElement(
"Capability" ).firstChildElement(
"Layer" );
262 QDomNodeList layers = firstLayer.elementsByTagName(
"Layer" );
264 d->wmsProjection = firstLayer.firstChildElement(
"SRS" ).text();
265 d->uiWidget.listWidgetWmsMaps->clear();
266 d->wmsFetchedMaps.clear();
268 for(
int i = 0; i < layers.size(); ++i )
270 QString theme = layers.at( i ).firstChildElement(
"Name" ).text();
271 QString title = layers.at( i ).firstChildElement(
"Title" ).text();
272 QDomElement legendUrl = layers.at( i ).firstChildElement(
"Style" ).firstChildElement(
"LegendURL" );
273 d->wmsFetchedMaps[ theme ] = title;
275 d->wmsLegends.clear();
276 if( legendUrl.isNull() ) {
277 d->wmsLegends.append( QString() );
279 d->wmsLegends.append( legendUrl.firstChildElement(
"OnlineResource" ).attribute(
"xlink:href" ) );
283 d->uiWidget.listWidgetWmsMaps->addItems( d->wmsFetchedMaps.values() );
285 QDomElement format = xml.documentElement().firstChildElement(
"Capability" ).firstChildElement(
"Request" )
286 .firstChildElement(
"GetMap" ).firstChildElement(
"Format" );
288 d->format = format.text().right( format.text().length() - format.text().indexOf(
'/' ) - 1 ).toLower();
290 if( d->format ==
"jpeg" ) {
294 if( !d->wmsFetchedMaps.isEmpty() && !d->wmsServerList.contains( d->uiWidget.lineEditWmsUrl->text() ) ) {
295 d->wmsServerList.append( d->uiWidget.lineEditWmsUrl->text() );
299 d->m_serverCapabilitiesValid =
true;
305 QByteArray result( reply->readAll() );
307 if( !map.exists(
"legend" ) ) {
308 map.mkdir(
"legend" );
311 QFile image( QString(
"%1/legend/legend.png" ).arg( map.absolutePath() ) );
312 image.open( QIODevice::ReadWrite );
313 image.write( result );
322 d->wmsServerList = uris;
324 d->uiWidget.comboBoxWmsServer->clear();
325 d->uiWidget.comboBoxWmsServer->addItems( d->wmsServerList );
326 d->uiWidget.comboBoxWmsServer->addItem( tr(
"Custom" ),
"http://" );
331 return d->wmsServerList;
336 return d->staticUrlServerList;
341 d->staticUrlServerList = uris;
346 QString selected = d->uiWidget.listWidgetWmsMaps->currentItem()->text();
347 d->uiWidget.lineEditTitle->setText( selected );
348 d->uiWidget.lineEditTheme->setText( d->wmsFetchedMaps.key( selected ) );
355 if( !maps.exists( document->
head()->
theme() ) )
359 if( d->mapProviderType == MapWizardPrivate::StaticImageMap )
362 QFile sourceImage( d->sourceImage );
363 d->format = d->sourceImage.right( d->sourceImage.length() - d->sourceImage.lastIndexOf(
'.' ) - 1 ).toLower();
364 sourceImage.copy( QString(
"%1/%2/%2.%3" ).arg( maps.absolutePath() )
369 else if( d->mapProviderType == MapWizardPrivate::WmsMap )
371 maps.mkdir( QString(
"%1/0/" ).arg( document->
head()->
theme() ) );
372 maps.mkdir( QString(
"%1/0/0" ).arg( document->
head()->
theme() ) );
373 const QString path = QString(
"%1/%2/0/0/0.%3" ).arg( maps.absolutePath() )
376 QFile baseTile( path );
377 baseTile.open( QFile::WriteOnly );
378 baseTile.write( d->levelZero );
381 else if( d->mapProviderType == MapWizardPrivate::StaticUrlMap )
383 maps.mkdir( QString(
"%1/0/" ).arg( document->
head()->
theme() ) );
384 maps.mkdir( QString(
"%1/0/0" ).arg( document->
head()->
theme() ) );
385 const QString path = QString(
"%1/%2/0/0/0.%3" ).arg( maps.absolutePath() )
388 QFile baseTile( path );
389 baseTile.open( QFile::WriteOnly );
390 baseTile.write( d->levelZero );
394 QString pixmapPath = QString(
"%1/%2/%3" ).arg( maps.absolutePath() )
397 d->previewImage.save( pixmapPath );
400 QFile file( QString(
"%1/%2/%2.dgml" ).arg( maps.absolutePath() )
402 file.open( QIODevice::ReadWrite );
405 geoWriter.write( &file, document );
415 void MapWizard::createLegendHtml( QString image )
419 stream.writeStartDocument();
420 stream.writeStartElement(
"html" );
421 stream.writeStartElement(
"head" );
423 stream.writeTextElement(
"title",
"Marble: Legend" );
424 stream.writeStartElement(
"link" );
425 stream.writeAttribute(
"href",
"legend.css" );
426 stream.writeAttribute(
"rel",
"stylesheet" );
427 stream.writeAttribute(
"type",
"text/css" );
428 stream.writeEndElement();
430 stream.writeStartElement(
"body" );
431 stream.writeStartElement(
"img" );
432 stream.writeAttribute(
"src", image );
433 stream.writeEndElement();
434 stream.writeComment(
" ##customLegendEntries:all## " );
435 stream.writeEndElement();
436 stream.writeEndElement();
437 d->legendHtml = htmlOutput;
440 void MapWizard::createLegendFile()
444 QFile html( QString(
"%1/legend.html" ).arg( map.absolutePath() ) );
445 html.open( QIODevice::ReadWrite );
446 html.write( d->legendHtml.toLatin1().data() );
450 void MapWizard::downloadLegend(
const QString& url )
452 QUrl downloadUrl( url );
453 QNetworkRequest request( downloadUrl );
454 d->legendAccessManager.get( request );
459 if( d->mapProviderType == MapWizardPrivate::WmsMap )
461 QString selected = d->uiWidget.listWidgetWmsMaps->currentItem()->text();
463 #if QT_VERSION < 0x050000
464 QUrl downloadUrl( d->uiWidget.lineEditWmsUrl->text() );
466 QUrl finalDownloadUrl( d->uiWidget.lineEditWmsUrl->text() );
467 QUrlQuery downloadUrl;
469 downloadUrl.addQueryItem(
"request",
"GetMap" );
470 downloadUrl.addQueryItem(
"version",
"1.1.1" );
471 downloadUrl.addQueryItem(
"layers", d->wmsFetchedMaps.key( selected ) );
472 downloadUrl.addQueryItem(
"srs",
"EPSG:4326" );
473 downloadUrl.addQueryItem(
"width",
"400" );
474 downloadUrl.addQueryItem(
"height",
"200" );
475 downloadUrl.addQueryItem(
"bbox",
"-180,-90,180,90" );
476 downloadUrl.addQueryItem(
"format",
"image/jpeg" );
477 downloadUrl.addQueryItem(
"styles",
"" );
479 #if QT_VERSION < 0x050000
480 QNetworkRequest request( downloadUrl );
482 finalDownloadUrl.setQuery( downloadUrl );
484 QNetworkRequest request( finalDownloadUrl );
487 d->levelZeroAccessManager.get( request );
490 else if( d->mapProviderType == MapWizardPrivate::StaticUrlMap )
492 QString server = d->uiWidget.comboBoxStaticUrlServer->currentText();
495 server.replace( server.indexOf(
"{x}" ), 3, QString::number( 0 ) );
496 server.replace( server.indexOf(
"{y}" ), 3, QString::number( 0 ) );
497 server.replace( server.indexOf(
"{zoomLevel}" ), 11, QString::number( 0 ) );
498 downloadUrl.setUrl( server );
500 QNetworkRequest request( downloadUrl );
501 d->levelZeroAccessManager.get( request );
507 button( MapWizard::NextButton )->setEnabled(
true );
509 d->levelZero = reply->readAll();
510 QImage testImage = QImage::fromData( d->levelZero );
512 if ( d->levelZero.isNull() ) {
513 QMessageBox::information(
this,
515 tr(
"The base tile could not be downloaded." ) );
519 if ( testImage.isNull() ) {
520 QMessageBox::information(
this,
522 tr(
"The base tile could not be downloaded successfully. The server replied:\n\n%1" ).arg( QString( d->levelZero ) ) );
523 d->levelZero.clear();
527 QBuffer testBuffer( &d->levelZero );
528 d->format = QImageReader( &testBuffer ).format();
530 if ( d->mapProviderType == MapWizardPrivate::StaticUrlMap ) {
531 const QString url = d->uiWidget.comboBoxStaticUrlServer->currentText();
532 d->staticUrlServerList.removeAll( url );
533 d->staticUrlServerList.prepend( url );
539 void MapWizard::createLegend()
542 if( !map.exists(
"legend" ) ) {
543 map.mkdir(
"legend" );
547 image.setFileName( d->uiWidget.lineEditLegend_2->text() );
548 image.copy( QString(
"%1/legend/legend.png" ).arg( map.absolutePath() ) );
556 d->uiWidget.lineEditSource->setText( QFileDialog::getOpenFileName() );
561 QString fileName = QFileDialog::getOpenFileName();
562 d->previewImage = QImage( fileName );
564 QPixmap preview = QPixmap::fromImage( d->previewImage );
565 d->uiWidget.labelThumbnail->setPixmap( preview );
566 d->uiWidget.labelThumbnail->resize( preview.width(), preview.height() );
571 QString fileName = QFileDialog::getOpenFileName();
572 d->uiWidget.lineEditLegend_2->setText( fileName );
573 createLegendHtml( d->uiWidget.lineEditLegend_2->text() );
574 d->uiWidget.textBrowserLegend->setHtml( d->legendHtml );
579 QStringList splitMapId( mapId.split(QLatin1Char(
'/')) );
580 QString body = splitMapId[0];
581 QString theme = splitMapId[1];
585 tarArgs.append(
"--create" );
586 tarArgs.append(
"--gzip" );
587 tarArgs.append(
"--file" );
588 tarArgs.append( QString(
"%1/%2.tar.gz" ).arg( QDir::tempPath() ).arg( theme ) );
589 tarArgs.append(
"--directory" );
603 if( QFile::exists( QString(
"%1/%2.dgml" ).arg( themeDir.absolutePath() ).arg( theme ) ) )
605 tarArgs.append( QString(
"%1/%2/%2.dgml" ).arg( body ).arg( theme ) );
608 if( QFile::exists( QString(
"%1/legend.html" ).arg( themeDir.absolutePath() ) ) )
610 tarArgs.append( QString(
"%1/%2/legend.html" ).arg( body ).arg( theme ) );
613 if( QFile::exists( QString(
"%1/legend" ).arg( themeDir.absolutePath() ) ) )
615 tarArgs.append( QString(
"%1/%2/legend" ).arg( body ).arg( theme ) );
618 if( QFile::exists( QString(
"%1/0/000000" ).arg( themeDir.absolutePath() ) ) )
620 tarArgs.append( QString(
"%1/%2/0/000000" ).arg( body ).arg( theme ) );
623 QStringList previewFilters;
624 previewFilters <<
"preview.*";
625 QStringList preview = themeDir.entryList( previewFilters );
626 if( !preview.isEmpty() ) {
627 tarArgs.append( QString(
"%1/%2/%3" ).arg( body ).arg( theme ).arg( preview[0] ) );
630 QStringList sourceImgFilters;
631 sourceImgFilters << QString(
"%1.jpg" ).arg( theme ) << QString(
"%1.png" ).arg( theme ) << QString(
"%1.jpeg" ).arg( theme );
632 QStringList sourceImg = themeDir.entryList( sourceImgFilters );
633 if( !sourceImg.isEmpty() ) {
634 tarArgs.append( QString(
"%1/%2/%3" ).arg( body ).arg( theme ).arg( sourceImg[0] ) );
638 switch( archiver.execute(
"tar", tarArgs ) )
641 QMessageBox::critical( parent, tr(
"Archiving failed" ), tr(
"Archiving process cannot be started." ) );
644 QMessageBox::critical( parent, tr(
"Archiving failed" ), tr(
"Archiving process crashed." ) );
647 mDebug() <<
"Archived the theme successfully.";
650 archiver.waitForFinished();
651 return QString(
"%1/%2.tar.gz" ).arg( QDir::tempPath() ).arg( theme );
656 QStringList splitMapId( mapId.split(QLatin1Char(
'/')) );
657 QString theme = splitMapId[1];
658 QFile::remove( QString(
"%1/%2.tar.gz" ).arg( QDir::tempPath() ).arg( theme ) );
663 if ( currentId() == 1 && !d->m_serverCapabilitiesValid ) {
665 button( MapWizard::NextButton )->setEnabled(
false );
669 if ( ( currentId() == 2 || currentId() == 4 ) && d->levelZero.isNull() ) {
671 button( MapWizard::NextButton )->setEnabled(
false );
675 if ( currentId() == 3 ) {
676 d->sourceImage = d->uiWidget.lineEditSource->text();
677 if ( d->sourceImage.isEmpty() ) {
678 QMessageBox::information(
this,
679 tr(
"Source Image" ),
680 tr(
"Please specify a source image." ) );
681 d->uiWidget.lineEditSource->setFocus();
685 if ( !QFileInfo( d->sourceImage ).exists() ) {
686 QMessageBox::information(
this,
687 tr(
"Source Image" ),
688 tr(
"The source image you specified does not exist. Please specify a different one." ) );
689 d->uiWidget.lineEditSource->setFocus();
690 d->uiWidget.lineEditSource->selectAll();
694 if ( QImage( d->sourceImage ).isNull() ) {
695 QMessageBox::information(
this,
696 tr(
"Source Image" ),
697 tr(
"The source image you specified does not seem to be an image. Please specify a different image file." ) );
698 d->uiWidget.lineEditSource->setFocus();
699 d->uiWidget.lineEditSource->selectAll();
704 if ( currentId() == 5 ) {
705 if ( d->uiWidget.lineEditTitle->text().isEmpty() ) {
706 QMessageBox::information(
this, tr(
"Map Title" ), tr(
"Please specify a map title." ) );
707 d->uiWidget.lineEditTitle->setFocus();
711 d->mapTheme = d->uiWidget.lineEditTheme->text();
712 if ( d->mapTheme.isEmpty() ) {
713 QMessageBox::information(
this, tr(
"Map Name" ), tr(
"Please specify a map name." ) );
714 d->uiWidget.lineEditTheme->setFocus();
718 const QDir destinationDir( QString(
"%1/maps/earth/%2" ).arg(
MarbleDirs::localPath() ).arg( d->mapTheme ) );
719 if ( destinationDir.exists() ) {
720 QMessageBox::information(
this,
722 tr(
"Please specify another map name, since there is already a map named \"%1\"." ).arg( d->mapTheme ) );
723 d->uiWidget.lineEditTheme->setFocus();
724 d->uiWidget.lineEditTheme->selectAll();
728 if ( d->previewImage.isNull() ) {
729 QMessageBox::information(
this, tr(
"Preview Image" ), tr(
"Please specify a preview image." ) );
730 d->uiWidget.pushButtonPreview->setFocus();
735 return QWizard::validateCurrentPage();
740 switch( currentId() )
743 if( d->uiWidget.radioButtonWms->isChecked() ) {
744 d->mapProviderType = MapWizardPrivate::WmsMap;
746 }
else if( d->uiWidget.radioButtonBitmap->isChecked() ) {
747 d->mapProviderType = MapWizardPrivate::StaticImageMap;
749 }
else if( d->uiWidget.radioButtonStaticUrl->isChecked() ) {
750 d->mapProviderType = MapWizardPrivate::StaticUrlMap;
772 return currentId() + 1;
780 head->
setName( d->uiWidget.lineEditTitle->text() );
781 head->
setTheme( d->uiWidget.lineEditTheme->text() );
783 head->
setDescription( d->uiWidget.textEditDesc->document()->toHtml() );
787 icon->
setPixmap( QString(
"preview.png" ) );
797 if( d->mapProviderType == MapWizardPrivate::WmsMap )
800 QString layer = d->wmsFetchedMaps.key( d->uiWidget.listWidgetWmsMaps->currentItem()->text() );
801 QUrl downloadUrl = QUrl( d->uiWidget.lineEditWmsUrl->text() );
802 #if QT_VERSION < 0x050000
803 downloadUrl.addQueryItem(
"layers", layer );
806 urlQuery.addQueryItem(
"layers", layer );
807 downloadUrl.setQuery( urlQuery );
817 else if( d->mapProviderType == MapWizardPrivate::StaticUrlMap )
820 QUrl downloadUrl = QUrl( d->uiWidget.comboBoxStaticUrlServer->currentText() );
831 else if( d->mapProviderType == MapWizardPrivate::StaticImageMap )
833 QString image = d->uiWidget.lineEditSource->text();
834 d->format = image.right( image.length() - image.lastIndexOf(
'.' ) - 1 ).toLower();
839 int imageWidth = QImage( image ).width();
842 float approxMaxTileLevel = log( imageWidth / ( 2.0 * tileSize ) ) / log( 2.0 );
843 int maxTileLevel = 0;
844 if ( approxMaxTileLevel ==
int( approxMaxTileLevel ) ) {
845 maxTileLevel =
static_cast<int>( approxMaxTileLevel );
847 maxTileLevel =
static_cast<int>( approxMaxTileLevel + 1 );
852 GeoSceneLayer *layer =
new GeoSceneLayer( d->uiWidget.lineEditTheme->text() );
853 layer->setBackend(
"texture" );
854 layer->addDataset( texture );
856 GeoSceneLayer* secondLayer =
new GeoSceneLayer(
"standardplaces" );
857 secondLayer->setBackend(
"geodata" );
859 GeoSceneGeodata* cityplacemarks =
new GeoSceneGeodata(
"cityplacemarks" );
860 cityplacemarks->setSourceFile(
"cityplacemarks.kml" );
861 secondLayer->addDataset( cityplacemarks );
863 GeoSceneGeodata* baseplacemarks =
new GeoSceneGeodata(
"baseplacemarks" );
864 baseplacemarks->setSourceFile(
"baseplacemarks.kml" );
865 secondLayer->addDataset( baseplacemarks );
867 GeoSceneGeodata* elevplacemarks =
new GeoSceneGeodata(
"elevplacemarks" );
868 elevplacemarks->setSourceFile(
"elevplacemarks.kml" );
869 secondLayer->addDataset( elevplacemarks );
871 GeoSceneGeodata* observatoryplacemarks =
new GeoSceneGeodata(
"observatoryplacemarks" );
872 observatoryplacemarks->setSourceFile(
"observatoryplacemarks.kml" );
873 secondLayer->addDataset( observatoryplacemarks );
875 GeoSceneGeodata* otherplacemarks =
new GeoSceneGeodata(
"otherplacemarks" );
876 otherplacemarks->setSourceFile(
"otherplacemarks.kml" );
877 secondLayer->addDataset( otherplacemarks );
879 GeoSceneGeodata* boundaryplacemarks =
new GeoSceneGeodata(
"boundaryplacemarks" );
880 boundaryplacemarks->setSourceFile(
"boundaryplacemarks.kml" );
881 secondLayer->addDataset( boundaryplacemarks );
883 GeoSceneMap *map = document->
map();
885 map->addLayer( secondLayer );
887 GeoSceneSettings *settings = document->
settings();
888 GeoSceneLegend *legend = document->
legend();
890 if( d->uiWidget.checkBoxCoord->checkState() == Qt::Checked )
892 GeoSceneProperty *coorGrid =
new GeoSceneProperty(
"coordinate-grid" );
893 coorGrid->setDefaultValue(
true );
894 coorGrid->setAvailable(
true );
895 settings->addProperty( coorGrid );
897 GeoSceneSection *coorSection =
new GeoSceneSection(
"coordinate-grid" );
898 coorSection->setHeading(
"Coordinate Grid" );
899 coorSection->setCheckable(
true );
900 coorSection->setConnectTo(
"coordinate-grid" );
901 coorSection->setSpacing( 12 );
902 legend->addSection( coorSection );
905 if( d->uiWidget.checkBoxInterest->checkState() == Qt::Checked )
907 GeoSceneProperty *poiProperty =
new GeoSceneProperty(
"otherplaces" );
908 poiProperty->setDefaultValue(
true );
909 poiProperty->setAvailable(
true );
910 settings->addProperty( poiProperty );
912 GeoSceneSection *poiSection =
new GeoSceneSection(
"otherplaces" );
913 poiSection->setHeading(
"Places of Interest" );
914 poiSection->setCheckable(
true );
915 poiSection->setConnectTo(
"otherplaces" );
916 poiSection->setSpacing( 12 );
918 GeoSceneItem *geoPole =
new GeoSceneItem(
"geographic-pole" );
919 GeoSceneIcon *geoPoleIcon = geoPole->icon();
920 geoPole->setText( tr(
"Geographic Pole") );
921 geoPoleIcon->setPixmap(
"bitmaps/pole_1.png" );
922 poiSection->addItem( geoPole );
924 GeoSceneItem *magPole =
new GeoSceneItem(
"magnetic-pole" );
925 GeoSceneIcon *magPoleIcon = magPole->icon();
926 magPole->setText( tr(
"Magnetic Pole") );
927 magPoleIcon->setPixmap(
"bitmaps/pole_2.png" );
928 poiSection->addItem( magPole );
930 GeoSceneItem *airport =
new GeoSceneItem(
"airport" );
931 GeoSceneIcon *airportIcon = airport->icon();
932 airport->setText( tr(
"Airport") );
933 airportIcon->setPixmap(
"bitmaps/airport.png" );
934 poiSection->addItem( airport );
936 GeoSceneItem *shipwreck =
new GeoSceneItem(
"shipwreck" );
937 GeoSceneIcon *shipwreckIcon = shipwreck->icon();
938 shipwreck->setText( tr(
"Shipwreck") );
939 shipwreckIcon->setPixmap(
"bitmaps/shipwreck.png" );
940 poiSection->addItem( shipwreck );
942 GeoSceneItem *observatory =
new GeoSceneItem(
"observatory" );
943 GeoSceneIcon *observatoryIcon = observatory->icon();
944 observatory->setText( tr(
"Observatory") );
945 observatoryIcon->setPixmap(
"bitmaps/observatory.png" );
946 poiSection->addItem( observatory );
948 legend->addSection( poiSection );
951 if( d->uiWidget.checkBoxTer->checkState() == Qt::Checked )
953 GeoSceneProperty *terrainProperty =
new GeoSceneProperty(
"terrain" );
954 terrainProperty->setDefaultValue(
true );
955 terrainProperty->setAvailable(
true );
956 settings->addProperty( terrainProperty );
958 GeoSceneSection *terrainSection =
new GeoSceneSection(
"terrain" );
959 terrainSection->setHeading(
"Terrain" );
960 terrainSection->setCheckable(
true );
961 terrainSection->setConnectTo(
"terrain" );
962 terrainSection->setSpacing( 12 );
964 GeoSceneItem *mountain =
new GeoSceneItem(
"mountain" );
965 GeoSceneIcon *mountainIcon = mountain->icon();
966 mountain->setText( tr(
"Mountain") );
967 mountainIcon->setPixmap(
"bitmaps/mountain_1.png" );
968 terrainSection->addItem( mountain );
970 GeoSceneItem *volcano =
new GeoSceneItem(
"volcano" );
971 GeoSceneIcon *volcanoIcon = volcano->icon();
972 volcano->setText( tr(
"Volcano") );
973 volcanoIcon->setPixmap(
"bitmaps/volcano_1.png" );
974 terrainSection->addItem( volcano );
976 legend->addSection( terrainSection );
980 if( d->uiWidget.checkBoxPop->checkState() == Qt::Checked )
982 GeoSceneProperty *placesProperty =
new GeoSceneProperty(
"places" );
983 placesProperty->setDefaultValue(
true );
984 placesProperty->setAvailable(
true );
985 settings->addProperty( placesProperty );
987 GeoSceneProperty *citiesProperty =
new GeoSceneProperty(
"cities" );
988 citiesProperty->setDefaultValue(
true );
989 citiesProperty->setAvailable(
true );
990 settings->addProperty( citiesProperty );
993 if( d->uiWidget.checkBoxBorder->checkState() == Qt::Checked )
995 GeoSceneSection *bordersSection =
new GeoSceneSection(
"borders" );
996 bordersSection->setHeading(
"Boundaries" );
997 bordersSection->setCheckable(
true );
998 bordersSection->setConnectTo(
"borders" );
999 bordersSection->setSpacing( 12 );
1001 GeoSceneItem *internationalBoundary =
new GeoSceneItem(
"international-boundary" );
1002 GeoSceneIcon *internationalBoundaryIcon = internationalBoundary->icon();
1003 internationalBoundary->setText( tr(
"International") );
1004 internationalBoundaryIcon->setPixmap(
"bitmaps/border_1.png" );
1005 bordersSection->addItem( internationalBoundary );
1007 GeoSceneItem *stateBoundary =
new GeoSceneItem(
"state" );
1008 GeoSceneIcon *stateBoundaryIcon = stateBoundary->icon();
1009 stateBoundary->setText( tr(
"State") );
1010 stateBoundaryIcon->setPixmap(
"bitmaps/border_2.png" );
1011 bordersSection->addItem( stateBoundary );
1013 GeoSceneProperty *bordersProperty =
new GeoSceneProperty(
"borders" );
1014 bordersProperty->setDefaultValue(
false );
1015 bordersProperty->setAvailable(
true );
1016 settings->addProperty( bordersProperty );
1018 GeoSceneProperty *intBoundariesProperty =
new GeoSceneProperty(
"international-boundaries" );
1019 intBoundariesProperty->setDefaultValue(
false );
1020 intBoundariesProperty->setAvailable(
true );
1021 settings->addProperty( intBoundariesProperty );
1023 GeoSceneProperty *stateBounderiesProperty =
new GeoSceneProperty(
"state-boundaries" );
1024 stateBounderiesProperty->setDefaultValue(
false );
1025 stateBounderiesProperty->setAvailable(
true );
1026 settings->addProperty( stateBounderiesProperty );
1028 legend->addSection( bordersSection );
1030 GeoSceneLayer* mwdbii =
new GeoSceneLayer(
"mwdbii" );
1031 mwdbii->setBackend(
"vector" );
1032 mwdbii->setRole(
"polyline" );
1034 GeoSceneVector* vector =
new GeoSceneVector(
"pdiffborder" );
1035 vector->setFeature(
"border" );
1036 vector->setFileFormat(
"PNT" );
1037 vector->setSourceFile(
"earth/mwdbii/PDIFFBORDER.PNT" );
1038 vector->pen().setColor(
"#ffe300" );
1039 mwdbii->addDataset( vector );
1040 map->addLayer( mwdbii );
1043 GeoSceneProperty *overviewmap =
new GeoSceneProperty(
"overviewmap" );
1044 overviewmap->setDefaultValue(
true );
1045 overviewmap->setAvailable(
true );
1046 settings->addProperty( overviewmap );
1048 GeoSceneProperty *compass =
new GeoSceneProperty(
"compass" );
1049 compass->setDefaultValue(
true );
1050 compass->setAvailable(
true );
1051 settings->addProperty( compass );
1053 GeoSceneProperty *scalebar =
new GeoSceneProperty(
"scalebar" );
1054 scalebar->setDefaultValue(
true );
1055 scalebar->setAvailable(
true );
1056 settings->addProperty( scalebar );
1063 Q_ASSERT( d->mapProviderType != MapWizardPrivate::NoMap );
1065 Q_ASSERT( d->format == d->format.toLower() );
1066 Q_ASSERT( !d->mapTheme.isEmpty() );
1068 if ( d->mapProviderType == MapWizardPrivate::StaticImageMap )
1070 d->sourceImage = d->uiWidget.lineEditSource->text();
1071 Q_ASSERT( !d->sourceImage.isEmpty() );
1072 Q_ASSERT( QFile( d->sourceImage ).exists() );
1074 else if ( d->mapProviderType == MapWizardPrivate::WmsMap )
1076 Q_ASSERT( !d->wmsFetchedMaps.isEmpty() );
1077 Q_ASSERT( !d->levelZero.isNull() );
1078 Q_ASSERT( !QImage::fromData( d->levelZero ).isNull() );
1080 else if ( d->mapProviderType == MapWizardPrivate::StaticUrlMap )
1082 Q_ASSERT( !d->levelZero.isNull() );
1083 Q_ASSERT( !QImage::fromData( d->levelZero ).isNull() );
1086 QSharedPointer<GeoSceneDocument> document( createDocument() );
1087 Q_ASSERT( !document->head()->description().isEmpty() );
1088 Q_ASSERT( !document->head()->name().isEmpty() );
1090 if( createFiles( document.data() ) )
1092 if( d->mapProviderType == MapWizardPrivate::WmsMap )
1094 if( d->wmsLegends.isEmpty() && d->wmsLegends.at( d->uiWidget.listWidgetWmsMaps->currentRow() ).isEmpty() )
1096 downloadLegend( d->wmsLegends.at( d->uiWidget.listWidgetWmsMaps->currentRow() ) );
1098 }
else if( d->mapProviderType == MapWizardPrivate::StaticImageMap || d->mapProviderType == MapWizardPrivate::StaticUrlMap ) {
1103 d->uiWidget.lineEditTitle->clear();
1104 d->uiWidget.lineEditTheme->clear();
1105 d->uiWidget.textEditDesc->clear();
1106 d->uiWidget.labelPreview->clear();
1107 d->uiWidget.lineEditSource->clear();
1108 d->dgmlOutput.clear();
1109 QTimer::singleShot( 0,
this, SLOT(restart()) );
1114 QMessageBox::critical(
this, tr(
"Problem while creating files" ), tr(
"Check if a theme with the same name exists." ) );
1121 QSharedPointer<GeoSceneDocument> document( createDocument() );
1123 if( createFiles( document.data() ) )
1125 if( d->mapProviderType == MapWizardPrivate::WmsMap )
1127 if( d->wmsLegends.isEmpty() && d->wmsLegends.at( d->uiWidget.listWidgetWmsMaps->currentRow() ).isEmpty() )
1129 downloadLegend( d->wmsLegends.at( d->uiWidget.listWidgetWmsMaps->currentRow() ) );
1131 }
else if( d->mapProviderType == MapWizardPrivate::StaticImageMap || d->mapProviderType == MapWizardPrivate::StaticUrlMap ) {
1136 PreviewDialog *previewDialog =
new PreviewDialog(
this, document.data()->head()->mapThemeId() );
1137 previewDialog->exec();
1143 #include "MapWizard.moc"
Icon properties of a GeoScene document.
const GeoSceneMap * map() const
void setServerLayout(const ServerLayout *)
void setMaximum(int target)
void setWmsServers(const QStringList &uris)
General properties and identifiers of a GeoScene document.
void createWmsLegend(QNetworkReply *reply)
static QString createArchive(QWidget *parent, QString mapId)
QStringList wmsServers() const
void setTarget(const QString &target)
void setStaticUrlServers(const QStringList &uris)
void setInstallMap(const QString &installMap)
void parseServerCapabilities(QNetworkReply *reply)
Browsing mode, normal operation of Marble, like a web browser.
static QString localPath()
void setVisible(bool visible)
void setLevelZeroColumns(const int)
void setSourceDir(const QString &sourceDir)
void setName(const QString &name)
This file contains the header for MapWizard.
void setDescription(const QString &)
static void deleteArchive(QString mapId)
const GeoSceneLegend * legend() const
void setProjection(const Projection)
void setPixmap(const QString &)
const unsigned int c_defaultTileSize
const char * dgmlTag_nameSpace20
void setTheme(const QString &theme)
const GeoSceneHead * head() const
A container for features parsed from the DGML file.
QStringList staticUrlServers() const
virtual int nextId() const
void addLayer(GeoSceneLayer *)
Add a new layer to the map.
void setFileFormat(const QString &fileFormat)
const GeoSceneIcon * icon() const
This file contains the header for MarbleNavigator.
void setExpire(int expire)
void createLevelZero(QNetworkReply *reply=0)
void setMinimum(int name)
const GeoSceneZoom * zoom() const
static QString systemPath()
Zoom properties of a GeoScene document.
void addDownloadUrl(const QUrl &)
void setLevelZeroRows(const int)
QDebug mDebug()
a function to replace qDebug() in Marble library code
void setMaximumTileLevel(const int)
const GeoSceneSettings * settings() const
void setDiscrete(bool theme)
virtual bool validateCurrentPage()
Bulk download, for example "File/Download region".
MapWizard(QWidget *parent=0)
void addDownloadPolicy(const DownloadUsage usage, const int maximumConnections)
void queryServerCapabilities()