@@ -155,12 +155,19 @@ QgsWMSSourceSelect::QgsWMSSourceSelect( QWidget * parent, Qt::WFlags fl )
155
155
156
156
connect ( tableWidgetWMSList, SIGNAL ( itemSelectionChanged () ), this , SLOT ( wmsSelectionChanged () ) );
157
157
connect ( lstTilesets, SIGNAL ( itemSelectionChanged () ), this , SLOT ( updateButtons () ) );
158
+
159
+ QSettings settings;
160
+ QgsDebugMsg ( " restoring geometry" );
161
+ restoreGeometry ( settings.value ( " /Windows/WMSSourceSelect/geometry" ).toByteArray () );
158
162
}
159
163
160
164
QgsWMSSourceSelect::~QgsWMSSourceSelect ()
161
165
{
162
-
166
+ QSettings settings;
167
+ QgsDebugMsg ( " saving geometry" );
168
+ settings.setValue ( " /Windows/WMSSourceSelect/geometry" , saveGeometry () );
163
169
}
170
+
164
171
void QgsWMSSourceSelect::populateConnectionList ()
165
172
{
166
173
QSettings settings;
@@ -574,67 +581,65 @@ void QgsWMSSourceSelect::applySelectionConstraints( QTreeWidgetItem *item )
574
581
// layer group =>
575
582
// process child layers and style selection first
576
583
// then
577
- // if all child layers are selected, deselect them and select the group instead
584
+ // if all child layers of a group are selected, deselect them and select the group and collapse it
578
585
// if some child layers are selected, deselect the group
579
- // if none child layers are selected, keep the selection state of the group
580
- for ( int i = 0 ; i < item->childCount (); i++ )
581
- {
582
- applySelectionConstraints ( item->child ( i ) );
583
- }
584
-
586
+ // otherwise keep the selection state of the group
585
587
int n = 0 ;
586
588
for ( int i = 0 ; i < item->childCount (); i++ )
587
589
{
588
- if ( item->child ( i )->isSelected () )
590
+ QTreeWidgetItem *child = item->child ( i );
591
+ applySelectionConstraints ( child );
592
+ if ( child->isSelected () )
589
593
n++;
590
594
}
591
595
592
- if ( n == item->childCount () )
593
- {
594
- for ( int i = 0 ; i < item->childCount (); i++ )
595
- item->child ( i )->setSelected ( false );
596
- item->setSelected ( true );
597
- item->setExpanded ( false );
598
- }
599
- else if ( n > 0 )
596
+ if ( n > 0 )
600
597
{
601
- item->setSelected ( false );
598
+ item->setSelected ( n == item->childCount () );
599
+ if ( item->isSelected () )
600
+ {
601
+ for ( int i = 0 ; i < n; i++ )
602
+ item->child ( i )->setSelected ( false );
603
+ item->setExpanded ( false );
604
+ }
602
605
}
603
606
}
604
607
else if ( styleName.isEmpty () )
605
608
{
606
609
// named layer =>
607
- // if all styles are selected, deselect all and selected named layer
608
- // else if some styles are selected, deselect all, but the first and deselect the named layer
609
- // else if no style is selected, keep layer selection
610
- int n = 0 ;
610
+ // if styles are selected, deselect the layer and all styles but the first newly selected or the first if there no new,
611
+ // else if no styles are selected, keep the layer selection
611
612
QTreeWidgetItem *style = 0 ;
613
+ QTreeWidgetItem *firstNewStyle = 0 ;
612
614
for ( int i = 0 ; i < item->childCount (); i++ )
613
615
{
614
- if ( item->child ( i )->isSelected () )
616
+ QTreeWidgetItem *child = item->child ( i );
617
+ if ( child->isSelected () )
615
618
{
616
- n++;
619
+ if ( !firstNewStyle && !mCurrentSelection .contains ( child ) )
620
+ firstNewStyle = child;
621
+
617
622
if ( !style )
618
- style = item-> child ( i ) ;
619
- else
620
- item-> child ( i ) ->setSelected ( false );
623
+ style = child;
624
+
625
+ child->setSelected ( false );
621
626
}
622
627
}
623
628
624
- if ( n > 0 && n == item-> childCount () )
629
+ if ( firstNewStyle || style )
625
630
{
626
- // all styles were selected =>
627
- // deselect all styles and select named layer
628
- if ( style )
629
- style-> setSelected ( false );
630
- item ->setSelected ( true );
631
- item-> setExpanded ( false );
632
- }
633
- else if ( style )
634
- {
635
- // leave first style selected
636
- // and deselect named layer
637
- item ->setSelected ( false );
631
+ // individual style selected => unselect layer and all parent groups
632
+ QTreeWidgetItem *parent = item;
633
+ while ( parent )
634
+ {
635
+ parent ->setSelected ( false );
636
+ parent = parent-> parent ( );
637
+ }
638
+
639
+ if ( firstNewStyle )
640
+ firstNewStyle-> setSelected ( true );
641
+ else if ( style )
642
+ style ->setSelected ( true );
638
643
}
639
644
}
640
645
}
@@ -672,8 +677,10 @@ void QgsWMSSourceSelect::on_lstLayers_itemSelectionChanged()
672
677
{
673
678
applySelectionConstraints ( lstLayers->topLevelItem ( i ) );
674
679
}
680
+ mCurrentSelection = lstLayers->selectedItems ();
675
681
lstLayers->blockSignals ( false );
676
682
683
+
677
684
// selected layers with styles
678
685
QStringList layers;
679
686
QStringList styles;
0 commit comments