@@ -116,11 +116,15 @@ void QgsLegend::handleCurrentItemChanged( QTreeWidgetItem* current, QTreeWidgetI
116116 emit currentLayerChanged ( layer );
117117}
118118
119- void QgsLegend::addGroup ()
119+ int QgsLegend::addGroup ( QString name, bool expand )
120120{
121- QgsLegendGroup* group = new QgsLegendGroup ( this , tr ( " group" ) );
121+ if ( name.isEmpty () )
122+ name = tr ( " group" ); // some default name if none specified
123+ QgsLegendGroup* group = new QgsLegendGroup ( this , name );
122124 group->setData ( 0 , Qt::UserRole, Qt::Checked );
123- setExpanded ( indexFromItem ( group ), true );
125+ QModelIndex groupIndex = indexFromItem ( group );
126+ setExpanded ( groupIndex, expand );
127+ return groupIndex.row ();
124128}
125129
126130void QgsLegend::removeAll ()
@@ -159,6 +163,15 @@ void QgsLegend::selectAll( bool select )
159163 mMapCanvas ->setRenderFlag ( renderFlagState );
160164}
161165
166+ void QgsLegend::removeGroup ( int groupIndex )
167+ {
168+ QgsLegendGroup * lg = dynamic_cast <QgsLegendGroup *>( topLevelItem ( groupIndex ) );
169+ if ( lg )
170+ {
171+ removeGroup ( lg );
172+ }
173+ }
174+
162175void QgsLegend::removeLayer ( QString layer_key )
163176{
164177 if ( !mMapCanvas || mMapCanvas ->isDrawing () )
@@ -351,6 +364,7 @@ void QgsLegend::mouseReleaseEvent( QMouseEvent * e )
351364
352365 QgsLegendItem* origin = dynamic_cast <QgsLegendItem *>( mItemBeingMoved );
353366 mItemBeingMoved = NULL ;
367+ QModelIndex oldIndex = indexFromItem ( origin );
354368
355369 QgsLegendItem* dest = dynamic_cast <QgsLegendItem *>( destItem );
356370
@@ -371,6 +385,7 @@ void QgsLegend::mouseReleaseEvent( QMouseEvent * e )
371385 {
372386 moveItem ( origin, dest );
373387 setCurrentItem ( origin );
388+ emit itemMoved ( oldIndex, indexFromItem ( origin ) );
374389 }
375390 }
376391 else if ( mDropAction == BEFORE )// below center of item
@@ -381,6 +396,7 @@ void QgsLegend::mouseReleaseEvent( QMouseEvent * e )
381396 moveItem ( origin, dest ); // Insert after, as above...
382397 moveItem ( dest, origin ); // ... and then switch places!
383398 setCurrentItem ( origin );
399+ emit itemMoved ( oldIndex, indexFromItem ( origin ) );
384400 }
385401 }
386402 else if ( mDropAction == INTO_GROUP )
@@ -390,6 +406,7 @@ void QgsLegend::mouseReleaseEvent( QMouseEvent * e )
390406 {
391407 insertItem ( origin, dest );
392408 setCurrentItem ( origin );
409+ emit itemMoved ( oldIndex, indexFromItem ( origin ) );
393410 }
394411 }
395412 else // no action
@@ -585,19 +602,29 @@ void QgsLegend::legendGroupRemove()
585602 QgsLegendGroup* lg = dynamic_cast <QgsLegendGroup *>( currentItem () );
586603 if ( lg )
587604 {
588- // delete the legend layers first
589- QTreeWidgetItem * child = lg->child ( 0 );
590- while ( child )
591- {
592- setCurrentItem ( child );
593- removeCurrentLayer ();
594- child = lg->child ( 0 );
595- }
596- delete lg;
597- adjustIconSize ();
605+ removeGroup ( lg );
598606 }
599607}
600608
609+ void QgsLegend::removeGroup ( QgsLegendGroup * lg )
610+ {
611+ if ( !mMapCanvas || mMapCanvas ->isDrawing () )
612+ {
613+ return ;
614+ }
615+
616+ // delete the legend layers first
617+ QTreeWidgetItem * child = lg->child ( 0 );
618+ while ( child )
619+ {
620+ setCurrentItem ( child );
621+ removeCurrentLayer ();
622+ child = lg->child ( 0 );
623+ }
624+ delete lg;
625+ adjustIconSize ();
626+ }
627+
601628void QgsLegend::removeCurrentLayer ()
602629{
603630 if ( !mMapCanvas || mMapCanvas ->isDrawing () )
@@ -668,7 +695,15 @@ bool QgsLegend::removeLayer( QgsMapLayer* ml, bool askCancelOnEditable )
668695 return true ;
669696}
670697
671-
698+ void QgsLegend::moveLayer ( QgsMapLayer * ml, int groupIndex )
699+ {
700+ QgsLegendLayer *layer = findLegendLayer ( ml->getLayerID () );
701+ QgsLegendGroup *group = dynamic_cast <QgsLegendGroup*>( topLevelItem ( groupIndex ) );
702+ if ( layer && group )
703+ {
704+ insertItem ( layer, group );
705+ }
706+ }
672707
673708void QgsLegend::legendLayerShowProperties ()
674709{
@@ -1199,6 +1234,30 @@ bool QgsLegend::yCoordAboveCenter( QgsLegendItem* it, int ycoord )
11991234 }
12001235}
12011236
1237+ bool QgsLegend::isLegendGroup ( const QModelIndex &index )
1238+ {
1239+ return dynamic_cast <QgsLegendGroup *>( itemFromIndex ( index ) );
1240+ }
1241+
1242+ QStringList QgsLegend::groups ()
1243+ {
1244+ QStringList groupList;
1245+ QTreeWidgetItem *current = firstItem ();
1246+
1247+ while ( current )
1248+ {
1249+ QgsLegendGroup *group = dynamic_cast <QgsLegendGroup *>( current );
1250+ if ( group )
1251+ {
1252+ groupList.append ( group->text ( 0 ) );
1253+ }
1254+
1255+ current = nextItem ( current );
1256+ }
1257+
1258+ return groupList;
1259+ }
1260+
12021261/* *Returns the first item in the hierarchy*/
12031262QTreeWidgetItem* QgsLegend::firstItem ()
12041263{
0 commit comments