25
25
#include " qgslogger.h"
26
26
27
27
#include < QFileInfo>
28
+ #include < QFileDialog>
28
29
#include < QMessageBox>
29
30
#include < QSettings>
30
31
#include < QPushButton>
@@ -47,10 +48,20 @@ QgsBookmarks::QgsBookmarks( QWidget *parent, Qt::WindowFlags fl )
47
48
QPushButton *btnAdd = new QPushButton ( tr ( " &Add" ) );
48
49
QPushButton *btnDelete = new QPushButton ( tr ( " &Delete" ) );
49
50
QPushButton *btnZoomTo = new QPushButton ( tr ( " &Zoom to" ) );
51
+ QPushButton *btnImpExp = new QPushButton ( tr ( " &Share" ) );
52
+
50
53
btnZoomTo->setDefault ( true );
51
54
buttonBox->addButton ( btnAdd, QDialogButtonBox::ActionRole );
52
55
buttonBox->addButton ( btnDelete, QDialogButtonBox::ActionRole );
53
56
buttonBox->addButton ( btnZoomTo, QDialogButtonBox::ActionRole );
57
+ buttonBox->addButton ( btnImpExp, QDialogButtonBox::ActionRole );
58
+
59
+ QMenu *share = new QMenu ();
60
+ QAction *btnExport = share->addAction ( tr ( " &Export" ) );
61
+ QAction *btnImport = share->addAction ( tr ( " &Import" ) );
62
+ connect ( btnExport, SIGNAL ( triggered () ), this , SLOT ( exportToXML () ) );
63
+ connect ( btnImport, SIGNAL ( triggered () ), this , SLOT ( importFromXML () ) );
64
+ btnImpExp->setMenu ( share );
54
65
55
66
connect ( btnAdd, SIGNAL ( clicked () ), this , SLOT ( addClicked () ) );
56
67
connect ( btnDelete, SIGNAL ( clicked () ), this , SLOT ( deleteClicked () ) );
@@ -251,3 +262,130 @@ void QgsBookmarks::zoomToBookmark()
251
262
QgisApp::instance ()->setExtent ( rect );
252
263
QgisApp::instance ()->mapCanvas ()->refresh ();
253
264
}
265
+
266
+ void QgsBookmarks::importFromXML ()
267
+ {
268
+ QString fileName = QFileDialog::getOpenFileName ( this , tr ( " Import Bookmarks" ), " ." ,
269
+ tr ( " XML files (*.xml *XML)" ) );
270
+ if ( fileName.isEmpty () )
271
+ {
272
+ return ;
273
+ }
274
+
275
+ QFile f ( fileName );
276
+ if ( !f.open ( QIODevice::ReadOnly | QIODevice::Text ) )
277
+ {
278
+ return ;
279
+ }
280
+
281
+ QDomDocument doc;
282
+ if ( !doc.setContent ( &f ) )
283
+ {
284
+ return ;
285
+ }
286
+ f.close ();
287
+
288
+ QDomElement docElem = doc.documentElement ();
289
+ QDomNodeList nodeList = docElem.elementsByTagName ( " bookmark" );
290
+
291
+ QSqlTableModel *model = qobject_cast<QSqlTableModel *>( lstBookmarks->model () );
292
+ Q_ASSERT ( model );
293
+
294
+ QString queries;
295
+
296
+ for ( int i = 0 ;i < nodeList.count (); i++ )
297
+ {
298
+ QDomNode bookmark = nodeList.at ( i );
299
+ QDomElement name = bookmark.firstChildElement ( " Name" );
300
+ QDomElement prjname = bookmark.firstChildElement ( " Project" );
301
+ QDomElement xmin = bookmark.firstChildElement ( " xMin" );
302
+ QDomElement xmax = bookmark.firstChildElement ( " xMax" );
303
+ QDomElement ymin = bookmark.firstChildElement ( " yMin" );
304
+ QDomElement ymax = bookmark.firstChildElement ( " yMax" );
305
+ QDomElement srid = bookmark.firstChildElement ( " SRID" );
306
+
307
+ queries += " INSERT INTO tbl_bookmarks(bookmark_id,name,project_name,xmin,ymin,xmax,ymax,projection_srid)"
308
+ " VALUES (NULL,"
309
+ " '" + name.text () + " ',"
310
+ " '" + prjname.text () + " ',"
311
+ + xmin.text () + " ,"
312
+ + xmax.text () + " ,"
313
+ + ymin.text () + " ,"
314
+ + ymax.text () + " ,"
315
+ + srid.text () + " );" ;
316
+ }
317
+
318
+ QStringList queriesList = queries.split ( " ;" );
319
+ QSqlQuery query ( model->database () );
320
+
321
+ foreach ( QString queryTxt, queriesList )
322
+ {
323
+ if ( queryTxt.trimmed ().isEmpty () )
324
+ {
325
+ continue ;
326
+ }
327
+ if ( !query.exec ( queryTxt ) )
328
+ {
329
+ QMessageBox::warning ( this , tr ( " Error" ), tr ( " Unable to create the bookmark.\n Driver: %1\n Database: %2" )
330
+ .arg ( query.lastError ().driverText () )
331
+ .arg ( query.lastError ().databaseText () ) );
332
+ }
333
+ query.finish ();
334
+ }
335
+ model->setSort ( 0 , Qt::AscendingOrder );
336
+ model->select ();
337
+ }
338
+
339
+ void QgsBookmarks::exportToXML ()
340
+ {
341
+ QString fileName = QFileDialog::getSaveFileName ( this , tr ( " Export bookmarks" ), " ." ,
342
+ tr ( " XML files( *.xml *.XML )" ) );
343
+ if ( fileName.isEmpty () )
344
+ {
345
+ return ;
346
+ }
347
+
348
+ // ensure the user never ommited the extension from the file name
349
+ if ( !fileName.toLower ().endsWith ( " .xml" ) )
350
+ {
351
+ fileName += " .xml" ;
352
+ }
353
+
354
+ QDomDocument doc ( " qgis_bookmarks" );
355
+ QDomElement root = doc.createElement ( " qgis_bookmarks" );
356
+ doc.appendChild ( root );
357
+
358
+ int rowCount = lstBookmarks->model ()->rowCount ();
359
+ int colCount = lstBookmarks->model ()->columnCount ();
360
+
361
+ for ( int i = 0 ; i < rowCount; ++i )
362
+ {
363
+ QDomElement bookmark = doc.createElement ( " bookmark" );
364
+ root.appendChild ( bookmark );
365
+ for ( int j = 0 ; j < colCount; j++ )
366
+ {
367
+ QModelIndex idx = lstBookmarks->model ()->index ( i, j );
368
+ if ( idx.isValid () )
369
+ {
370
+ QString value = idx.data ( Qt::DisplayRole ).toString ();
371
+ QDomText idText = doc.createTextNode ( value );
372
+ QVariant header = lstBookmarks->model ()->headerData ( j, Qt::Horizontal );
373
+ QDomElement id = doc.createElement ( header.toString () );
374
+ id.appendChild ( idText );
375
+ bookmark.appendChild ( id );
376
+ }
377
+ }
378
+ }
379
+
380
+ QFile f ( fileName );
381
+ if ( !f.open ( QFile::WriteOnly ) )
382
+ {
383
+ f.close ();
384
+ return ;
385
+ }
386
+
387
+ QTextStream out ( &f );
388
+ out.setCodec ( " UTF - 8" );
389
+ doc.save ( out, 2 );
390
+ f.close ();
391
+ }
0 commit comments