33
33
#include " qgsproject.h"
34
34
#include " qgsrasterlayer.h"
35
35
#include " qgsvectorlayer.h"
36
- #include " qgsprojectbadlayerguihandler .h"
36
+ #include " qgsgenericprojectionselector .h"
37
37
38
38
#include < QFont>
39
39
#include < QDomDocument>
@@ -525,16 +525,16 @@ void QgsLegend::mouseDoubleClickEvent( QMouseEvent* e )
525
525
{
526
526
QSettings settings;
527
527
528
- switch ( settings.value ( " /qgis/legendDoubleClickAction" , 0 ).toInt () )
528
+ switch ( settings.value ( " /qgis/legendDoubleClickAction" , 0 ).toInt () )
529
529
{
530
- case 0 :
531
- QgisApp::instance ()->layerProperties ();
532
- break ;
533
- case 1 :
534
- QgisApp::instance ()->attributeTable ();
535
- break ;
536
- default :
537
- break ;
530
+ case 0 :
531
+ QgisApp::instance ()->layerProperties ();
532
+ break ;
533
+ case 1 :
534
+ QgisApp::instance ()->attributeTable ();
535
+ break ;
536
+ default :
537
+ break ;
538
538
}
539
539
}
540
540
@@ -558,7 +558,6 @@ void QgsLegend::handleRightClickEvent( QTreeWidgetItem* item, const QPoint& posi
558
558
{
559
559
theMenu.addAction ( tr ( " &Make to toplevel item" ), this , SLOT ( makeToTopLevelItem () ) );
560
560
}
561
-
562
561
}
563
562
else if ( li->type () == QgsLegendItem::LEGEND_GROUP )
564
563
{
@@ -567,6 +566,9 @@ void QgsLegend::handleRightClickEvent( QTreeWidgetItem* item, const QPoint& posi
567
566
568
567
theMenu.addAction ( QgisApp::getThemeIcon ( " /mActionRemoveLayer.png" ),
569
568
tr ( " &Remove" ), this , SLOT ( legendGroupRemove () ) );
569
+
570
+ theMenu.addAction ( QgisApp::getThemeIcon ( " /mActionSetCRS.png" ),
571
+ tr ( " &Set group CRS" ), this , SLOT ( legendGroupSetCRS () ) );
570
572
}
571
573
572
574
if ( li->type () == QgsLegendItem::LEGEND_LAYER || li->type () == QgsLegendItem::LEGEND_GROUP )
@@ -739,6 +741,30 @@ void QgsLegend::legendGroupRemove()
739
741
}
740
742
}
741
743
744
+ void QgsLegend::legendGroupSetCRS ()
745
+ {
746
+ if ( !mMapCanvas || mMapCanvas ->isDrawing () )
747
+ {
748
+ return ;
749
+ }
750
+
751
+ QgsGenericProjectionSelector * mySelector = new QgsGenericProjectionSelector ( this );
752
+ mySelector->setMessage ();
753
+ if ( mySelector->exec () )
754
+ {
755
+ QgsCoordinateReferenceSystem crs ( mySelector->selectedCrsId (), QgsCoordinateReferenceSystem::InternalCrsId );
756
+
757
+ QgsLegendGroup* lg = dynamic_cast <QgsLegendGroup *>( currentItem () );
758
+ setGroupCRS ( lg, crs );
759
+ }
760
+ else
761
+ {
762
+ QApplication::restoreOverrideCursor ();
763
+ }
764
+
765
+ delete mySelector;
766
+ }
767
+
742
768
void QgsLegend::removeGroup ( QgsLegendGroup *lg )
743
769
{
744
770
if ( !mMapCanvas || mMapCanvas ->isDrawing () )
@@ -766,6 +792,36 @@ void QgsLegend::removeGroup( QgsLegendGroup *lg )
766
792
adjustIconSize ();
767
793
}
768
794
795
+ void QgsLegend::setGroupCRS ( QgsLegendGroup *lg, const QgsCoordinateReferenceSystem &crs )
796
+ {
797
+ if ( !mMapCanvas || mMapCanvas ->isDrawing () )
798
+ {
799
+ return ;
800
+ }
801
+
802
+ // delete the legend layers first
803
+ QTreeWidgetItem * child = lg->child ( 0 );
804
+ while ( child )
805
+ {
806
+ QgsLegendLayer *cl = dynamic_cast <QgsLegendLayer *>( child );
807
+ QgsLegendGroup *cg = dynamic_cast <QgsLegendGroup *>( child );
808
+
809
+ if ( cl )
810
+ {
811
+ cl->layer ()->setCrs ( crs );
812
+ }
813
+ else if ( cg )
814
+ {
815
+ setGroupCRS ( cg, crs );
816
+ }
817
+
818
+ child = lg->child ( 0 );
819
+ }
820
+
821
+ delete lg;
822
+ }
823
+
824
+
769
825
void QgsLegend::moveLayer ( QgsMapLayer *ml, int groupIndex )
770
826
{
771
827
if ( !ml )
@@ -999,20 +1055,11 @@ bool QgsLegend::readXML( QgsLegendGroup *parent, const QDomNode &node )
999
1055
{
1000
1056
bool isOpen;
1001
1057
QgsLegendLayer* currentLayer = readLayerFromXML ( childelem, isOpen );
1002
-
1003
- bool ignorePressed = QgsProjectBadLayerGuiHandler::mIgnore ;
1004
-
1005
1058
if ( !currentLayer )
1006
- {
1007
- if ( ignorePressed == true )
1008
- {
1009
- continue ;
1010
- }
1011
- else
1012
- {
1013
- return false ;
1014
- }
1059
+ {
1060
+ continue ;
1015
1061
}
1062
+
1016
1063
// add to tree - either as a top-level node or a child of a group
1017
1064
if ( parent )
1018
1065
{
@@ -1920,3 +1967,32 @@ void QgsLegend::removeSelectedLayers()
1920
1967
if ( renderFlagState )
1921
1968
mMapCanvas ->setRenderFlag ( true );
1922
1969
}
1970
+
1971
+ void QgsLegend::setCRSForSelectedLayers ( const QgsCoordinateReferenceSystem &crs )
1972
+ {
1973
+ // Turn off rendering to improve speed.
1974
+ bool renderFlagState = mMapCanvas ->renderFlag ();
1975
+ if ( renderFlagState )
1976
+ mMapCanvas ->setRenderFlag ( false );
1977
+
1978
+ foreach ( QTreeWidgetItem * item, selectedItems () )
1979
+ {
1980
+ QgsLegendGroup* lg = dynamic_cast <QgsLegendGroup *>( item );
1981
+ if ( lg )
1982
+ {
1983
+ setGroupCRS ( lg, crs );
1984
+ continue ;
1985
+ }
1986
+
1987
+ QgsLegendLayer *ll = dynamic_cast <QgsLegendLayer *>( item );
1988
+ if ( ll && ll->layer () )
1989
+ {
1990
+ ll->layer ()->setCrs ( crs );
1991
+ continue ;
1992
+ }
1993
+ }
1994
+
1995
+ // Turn on rendering (if it was on previously)
1996
+ if ( renderFlagState )
1997
+ mMapCanvas ->setRenderFlag ( true );
1998
+ }
0 commit comments