@@ -220,7 +220,7 @@ _getExtents( QDomDocument const & doc, QgsRect & aoi )
220
220
221
221
222
222
/* *
223
- Get the project title
223
+ Get the project map units
224
224
225
225
XML in file has this form:
226
226
<units>feet</units>
@@ -363,6 +363,44 @@ _findQgisApp()
363
363
364
364
365
365
366
+ /* *
367
+ locate a qgsMapCanvas object
368
+ */
369
+ static QgsMapCanvas *_findMapCanvas (QString const &canonicalMapCanvasName)
370
+ {
371
+ QgsMapCanvas *theMapCanvas;
372
+
373
+ QWidgetList *list = QApplication::topLevelWidgets ();
374
+ QWidgetListIt it (*list); // iterate over the widgets
375
+ QWidget *w;
376
+
377
+ while ((w = it.current ()) != 0 )
378
+ { // for each top level widget...
379
+ ++it;
380
+ theMapCanvas = dynamic_cast < QgsMapCanvas * >(w->child (canonicalMapCanvasName, 0 , true ));
381
+
382
+ if (theMapCanvas)
383
+ {
384
+ break ;
385
+ }
386
+ }
387
+ delete list; // delete the list, not the widgets
388
+
389
+ if (theMapCanvas)
390
+ {
391
+ return theMapCanvas;
392
+ }
393
+ else
394
+ {
395
+ qDebug (" Unable to find canvas widget " + canonicalMapCanvasName);
396
+
397
+ return 0x0 ; // XXX some sort of error value? Exception?
398
+ }
399
+
400
+ } // _findMapCanvas
401
+
402
+
403
+
366
404
/* *
367
405
Read map layers from project file
368
406
@@ -408,6 +446,8 @@ static
408
446
bool
409
447
_getMapLayers ( QDomDocument const & doc )
410
448
{
449
+ // Layer order is implicit in the order they are stored in the project file
450
+
411
451
QDomNodeList nl = doc.elementsByTagName (" maplayer" );
412
452
413
453
// XXX what is this used for? QString layerCount( QString::number(nl.count()) );
@@ -469,9 +509,6 @@ _getMapLayers( QDomDocument const & doc )
469
509
// }
470
510
// }
471
511
472
- // XXX set z order here? Or in readXML()? Leaning to latter.
473
- // XXX Or, how about Z order being implicit in order of layer
474
- // XXX information stored in project file?
475
512
}
476
513
477
514
return true ;
@@ -491,24 +528,8 @@ static
491
528
void
492
529
_setCanvasExtent ( QString const & canonicalMapCanvasName, QgsRect const & newExtent )
493
530
{
494
- // first find the canonical map canvas
495
-
496
- QgsMapCanvas * theMapCanvas;
497
-
498
- QWidgetList * list = QApplication::topLevelWidgets ();
499
- QWidgetListIt it ( *list ); // iterate over the widgets
500
- QWidget * w;
501
-
502
- while ( (w=it.current ()) != 0 )
503
- { // for each top level widget...
504
- ++it;
505
- theMapCanvas = dynamic_cast <QgsMapCanvas*>(w->child ( canonicalMapCanvasName, 0 , true ));
506
-
507
- if ( theMapCanvas )
508
- { break ; }
509
- }
510
- delete list; // delete the list, not the widgets
511
-
531
+ // first find the canonical map canvas
532
+ QgsMapCanvas *theMapCanvas = _findMapCanvas (canonicalMapCanvasName);
512
533
513
534
if ( ! theMapCanvas )
514
535
{
@@ -544,24 +565,8 @@ QgsRect _getFullExtent( QString const & canonicalMapCanvasName )
544
565
{
545
566
// XXX since this is a cut-n-paste from above, maybe generalize to a
546
567
// XXX separate function?
547
- // first find the canonical map canvas
548
-
549
- QgsMapCanvas * theMapCanvas;
550
-
551
- QWidgetList * list = QApplication::topLevelWidgets ();
552
- QWidgetListIt it ( *list ); // iterate over the widgets
553
- QWidget * w;
554
-
555
- while ( (w=it.current ()) != 0 )
556
- { // for each top level widget...
557
- ++it;
558
- theMapCanvas = dynamic_cast <QgsMapCanvas*>(w->child ( canonicalMapCanvasName, 0 , true ));
559
-
560
- if ( theMapCanvas )
561
- { break ; }
562
- }
563
- delete list; // delete the list, not the widgets
564
-
568
+ // first find the canonical map canvas
569
+ QgsMapCanvas *theMapCanvas = _findMapCanvas (canonicalMapCanvasName);
565
570
566
571
if ( ! theMapCanvas )
567
572
{
@@ -596,24 +601,8 @@ QgsRect _getExtent( QString const & canonicalMapCanvasName )
596
601
{
597
602
// XXX since this is a cut-n-paste from above, maybe generalize to a
598
603
// XXX separate function?
599
- // first find the canonical map canvas
600
-
601
- QgsMapCanvas * theMapCanvas;
602
-
603
- QWidgetList * list = QApplication::topLevelWidgets ();
604
- QWidgetListIt it ( *list ); // iterate over the widgets
605
- QWidget * w;
606
-
607
- while ( (w=it.current ()) != 0 )
608
- { // for each top level widget...
609
- ++it;
610
- theMapCanvas = dynamic_cast <QgsMapCanvas*>(w->child ( canonicalMapCanvasName, 0 , true ));
611
-
612
- if ( theMapCanvas )
613
- { break ; }
614
- }
615
- delete list; // delete the list, not the widgets
616
-
604
+ // first find the canonical map canvas
605
+ QgsMapCanvas *theMapCanvas = _findMapCanvas (canonicalMapCanvasName);
617
606
618
607
if ( ! theMapCanvas )
619
608
{
@@ -706,9 +695,6 @@ QgsProject::read( )
706
695
return false ;
707
696
}
708
697
709
- // XXX insert code for handling z order
710
-
711
-
712
698
// restore the canvas' area of interest
713
699
714
700
// restor the area of interest, or extent
@@ -785,25 +771,25 @@ QgsProject::write( )
785
771
786
772
QDomDocumentType documentType = DOMImplementation.createDocumentType (" qgis" ," http://mrcc.com/qgis.dtd" ," SYSTEM" );
787
773
std::auto_ptr<QDomDocument> doc =
788
- std::auto_ptr<QDomDocument>( new QDomDocument ( documentType ) );
774
+ std::auto_ptr<QDomDocument>( new QDomDocument ( documentType ) );
789
775
790
776
791
- QDomElement qgis = doc->createElement ( " qgis" );
792
- qgis .setAttribute ( " projectname" , title () );
777
+ QDomElement qgisNode = doc->createElement ( " qgis" );
778
+ qgisNode .setAttribute ( " projectname" , title () );
793
779
794
- doc->appendChild ( qgis );
780
+ doc->appendChild ( qgisNode );
795
781
796
782
// title
797
783
QDomElement titleNode = doc->createElement ( " title" );
798
- qgis .appendChild ( titleNode );
784
+ qgisNode .appendChild ( titleNode );
799
785
800
786
QDomText titleText = doc->createTextNode ( title () ); // XXX why have title TWICE?
801
787
titleNode.appendChild ( titleText );
802
788
803
789
// units
804
790
805
791
QDomElement unitsNode = doc->createElement ( " units" );
806
- qgis .appendChild ( unitsNode );
792
+ qgisNode .appendChild ( unitsNode );
807
793
808
794
QString unitsString;
809
795
@@ -825,52 +811,17 @@ QgsProject::write( )
825
811
826
812
QDomText unitsText = doc->createTextNode ( unitsString );
827
813
unitsNode.appendChild ( unitsText );
828
-
829
- // extent
830
-
831
- // XXX there should eventually be a QgsMapCanvas::writeXML() that does this
832
- QDomElement extentNode = doc->createElement ( " extent" );
833
- qgis.appendChild ( extentNode );
834
-
835
- QDomElement xMin = doc->createElement ( " xmin" );
836
- QDomElement yMin = doc->createElement ( " ymin" );
837
- QDomElement xMax = doc->createElement ( " xmax" );
838
- QDomElement yMax = doc->createElement ( " ymax" );
839
-
840
- QgsRect mapCanvasExtent = _getExtent ( " theMapCanvas" );
841
- QDomText xMinText = doc->createTextNode ( QString::number (mapCanvasExtent.xMin (),' f' ) );
842
- QDomText yMinText = doc->createTextNode ( QString::number (mapCanvasExtent.yMin (),' f' ) );
843
- QDomText xMaxText = doc->createTextNode ( QString::number (mapCanvasExtent.xMax (),' f' ) );
844
- QDomText yMaxText = doc->createTextNode ( QString::number (mapCanvasExtent.yMax (),' f' ) );
845
-
846
- xMin.appendChild ( xMinText );
847
- yMin.appendChild ( yMinText );
848
- xMax.appendChild ( xMaxText );
849
- yMax.appendChild ( yMaxText );
850
-
851
- extentNode.appendChild ( xMin );
852
- extentNode.appendChild ( yMin );
853
- extentNode.appendChild ( xMax );
854
- extentNode.appendChild ( yMax );
855
-
856
- // layers
857
-
858
- // XXX QgsMapLayerRegistry should have a writeXML(), which then calls
859
- // XXX QgsMapLayer::writeXML()
860
- QDomElement projectLayersNode = doc->createElement ( " projectlayers" );
861
- projectLayersNode.setAttribute ( " layercount" ,
862
- QgsMapLayerRegistry::instance ()->mapLayers ().size () );
863
-
864
- qgis.appendChild ( projectLayersNode );
865
-
866
-
867
- for ( std::map<QString,QgsMapLayer*>::iterator i =
868
- QgsMapLayerRegistry::instance ()->mapLayers ().begin ();
869
- i != QgsMapLayerRegistry::instance ()->mapLayers ().end ();
870
- i++ )
814
+
815
+ // extents and layers info are written by the map canvas
816
+ // find the canonical map canvas
817
+ QgsMapCanvas *theMapCanvas = _findMapCanvas ( " theMapCanvas" );
818
+ theMapCanvas->writeXML (qgisNode, *doc);
819
+
820
+ if ( ! theMapCanvas )
871
821
{
872
- if ( i->first )
873
- { i->second ->writeXML ( projectLayersNode, *doc ); }
822
+ qDebug ( " Unable to find canvas widget theMapCanvas" );
823
+
824
+ return false ; // XXX some sort of error value? Exception?
874
825
}
875
826
876
827
doc->normalize (); // XXX I'm not entirely sure what this does
@@ -900,6 +851,3 @@ QgsProject::properties()
900
851
{
901
852
return imp_->properties_ ;
902
853
} // QgsProject::properties
903
-
904
-
905
-
0 commit comments