Skip to content

Commit f205b4d

Browse files
author
jef
committed
fix style selection in wms dialog (and a memory leak)
git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@13133 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent da60be1 commit f205b4d

File tree

3 files changed

+50
-40
lines changed

3 files changed

+50
-40
lines changed

src/app/qgisapp.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -2694,6 +2694,7 @@ void QgisApp::addWmsLayer()
26942694

26952695
QgsWMSSourceSelect *wmss = new QgsWMSSourceSelect( this );
26962696
wmss->exec();
2697+
delete wmss;
26972698
}
26982699

26992700

src/app/qgswmssourceselect.cpp

+47-40
Original file line numberDiff line numberDiff line change
@@ -155,12 +155,19 @@ QgsWMSSourceSelect::QgsWMSSourceSelect( QWidget * parent, Qt::WFlags fl )
155155

156156
connect( tableWidgetWMSList, SIGNAL( itemSelectionChanged() ), this, SLOT( wmsSelectionChanged() ) );
157157
connect( lstTilesets, SIGNAL( itemSelectionChanged() ), this, SLOT( updateButtons() ) );
158+
159+
QSettings settings;
160+
QgsDebugMsg( "restoring geometry" );
161+
restoreGeometry( settings.value( "/Windows/WMSSourceSelect/geometry" ).toByteArray() );
158162
}
159163

160164
QgsWMSSourceSelect::~QgsWMSSourceSelect()
161165
{
162-
166+
QSettings settings;
167+
QgsDebugMsg( "saving geometry" );
168+
settings.setValue( "/Windows/WMSSourceSelect/geometry", saveGeometry() );
163169
}
170+
164171
void QgsWMSSourceSelect::populateConnectionList()
165172
{
166173
QSettings settings;
@@ -574,67 +581,65 @@ void QgsWMSSourceSelect::applySelectionConstraints( QTreeWidgetItem *item )
574581
// layer group =>
575582
// process child layers and style selection first
576583
// 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
578585
// 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
585587
int n = 0;
586588
for ( int i = 0; i < item->childCount(); i++ )
587589
{
588-
if ( item->child( i )->isSelected() )
590+
QTreeWidgetItem *child = item->child( i );
591+
applySelectionConstraints( child );
592+
if ( child->isSelected() )
589593
n++;
590594
}
591595

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 )
600597
{
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+
}
602605
}
603606
}
604607
else if ( styleName.isEmpty() )
605608
{
606609
// 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
611612
QTreeWidgetItem *style = 0;
613+
QTreeWidgetItem *firstNewStyle = 0;
612614
for ( int i = 0; i < item->childCount(); i++ )
613615
{
614-
if ( item->child( i )->isSelected() )
616+
QTreeWidgetItem *child = item->child( i );
617+
if ( child->isSelected() )
615618
{
616-
n++;
619+
if ( !firstNewStyle && !mCurrentSelection.contains( child ) )
620+
firstNewStyle = child;
621+
617622
if ( !style )
618-
style = item->child( i );
619-
else
620-
item->child( i )->setSelected( false );
623+
style = child;
624+
625+
child->setSelected( false );
621626
}
622627
}
623628

624-
if ( n > 0 && n == item->childCount() )
629+
if ( firstNewStyle || style )
625630
{
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 );
638643
}
639644
}
640645
}
@@ -672,8 +677,10 @@ void QgsWMSSourceSelect::on_lstLayers_itemSelectionChanged()
672677
{
673678
applySelectionConstraints( lstLayers->topLevelItem( i ) );
674679
}
680+
mCurrentSelection = lstLayers->selectedItems();
675681
lstLayers->blockSignals( false );
676682

683+
677684
// selected layers with styles
678685
QStringList layers;
679686
QStringList styles;

src/app/qgswmssourceselect.h

+2
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,8 @@ class QgsWMSSourceSelect : public QDialog, private Ui::QgsWMSSourceSelectBase
182182
void collectSelectedLayers( QStringList &layers, QStringList &styles );
183183
QString selectedImageEncoding();
184184

185+
QList<QTreeWidgetItem*> mCurrentSelection;
186+
185187
private slots:
186188
void on_btnSearch_clicked();
187189
void on_btnAddWMS_clicked();

0 commit comments

Comments
 (0)