Skip to content

Commit 84f4346

Browse files
committedApr 2, 2013
Added Filter search for WFS layers. Also improved the treeView to have better column and row layout
1 parent 16b1e93 commit 84f4346

File tree

3 files changed

+299
-159
lines changed

3 files changed

+299
-159
lines changed
 

‎src/providers/wfs/qgswfssourceselect.cpp‎

Lines changed: 172 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
#include <QMessageBox>
3636
#include <QSettings>
3737
#include <QFileDialog>
38+
#include <QPainter>
3839

3940

4041
QgsWFSSourceSelect::QgsWFSSourceSelect( QWidget* parent, Qt::WFlags fl, bool embeddedMode )
@@ -43,30 +44,57 @@ QgsWFSSourceSelect::QgsWFSSourceSelect( QWidget* parent, Qt::WFlags fl, bool emb
4344
{
4445
setupUi( this );
4546

46-
btnAdd = buttonBox->button( QDialogButtonBox::Apply );
47-
btnAdd->setEnabled( false );
48-
4947
if ( embeddedMode )
5048
{
51-
buttonBox->button( QDialogButtonBox::Apply )->hide();
5249
buttonBox->button( QDialogButtonBox::Close )->hide();
5350
}
5451

55-
connect( buttonBox->button( QDialogButtonBox::Apply ), SIGNAL( clicked() ), this, SLOT( addLayer() ) );
52+
mAddButton = new QPushButton( tr( "&Add" ) );
53+
mAddButton->setEnabled( false );
54+
55+
mBuildQueryButton = new QPushButton( tr( "&Build query" ) );
56+
mBuildQueryButton->setToolTip( tr( "Build query" ) );
57+
mBuildQueryButton->setDisabled( true );
58+
59+
60+
buttonBox->addButton( mAddButton, QDialogButtonBox::ActionRole );
61+
connect( mAddButton, SIGNAL( clicked() ), this, SLOT( addLayer() ) );
62+
63+
buttonBox->addButton( mBuildQueryButton, QDialogButtonBox::ActionRole );
64+
connect( mBuildQueryButton, SIGNAL( clicked() ), this, SLOT( on_mBuildQueryButton_clicked() ) );
65+
5666
connect( buttonBox, SIGNAL( rejected() ), this, SLOT( reject() ) );
5767
connect( btnNew, SIGNAL( clicked() ), this, SLOT( addEntryToServerList() ) );
5868
connect( btnEdit, SIGNAL( clicked() ), this, SLOT( modifyEntryOfServerList() ) );
5969
connect( btnDelete, SIGNAL( clicked() ), this, SLOT( deleteEntryOfServerList() ) );
6070
connect( btnConnect, SIGNAL( clicked() ), this, SLOT( connectToServer() ) );
6171
connect( btnChangeSpatialRefSys, SIGNAL( clicked() ), this, SLOT( changeCRS() ) );
62-
connect( treeWidget, SIGNAL( currentItemChanged( QTreeWidgetItem*, QTreeWidgetItem* ) ), this, SLOT( changeCRSFilter() ) );
72+
connect( lineFilter, SIGNAL( textChanged( QString ) ), this, SLOT( filterChanged( QString ) ) );
6373
populateConnectionList();
6474
mProjectionSelector = new QgsGenericProjectionSelector( this );
6575
mProjectionSelector->setMessage();
6676

77+
mItemDelegate = new QgsWFSItemDelegate( treeView );
78+
treeView->setItemDelegate( mItemDelegate );
79+
6780
QSettings settings;
6881
QgsDebugMsg( "restoring geometry" );
6982
restoreGeometry( settings.value( "/Windows/WFSSourceSelect/geometry" ).toByteArray() );
83+
84+
mModel = new QStandardItemModel();
85+
mModel->setHorizontalHeaderItem( 0, new QStandardItem( "Title" ) );
86+
mModel->setHorizontalHeaderItem( 1, new QStandardItem( "Name" ) );
87+
mModel->setHorizontalHeaderItem( 2, new QStandardItem( "Abstract" ) );
88+
mModel->setHorizontalHeaderItem( 3, new QStandardItem( "Cache Feature" ) );
89+
mModel->setHorizontalHeaderItem( 4, new QStandardItem( "Filter" ) );
90+
91+
mModelProxy = new QSortFilterProxyModel( this );
92+
mModelProxy->setSourceModel( mModel );
93+
mModelProxy->setSortCaseSensitivity( Qt::CaseInsensitive );
94+
treeView->setModel( mModelProxy );
95+
96+
connect( treeView, SIGNAL( doubleClicked(const QModelIndex&) ), this, SLOT( on_treeWidget_itemDoubleClicked(const QModelIndex&) ) );
97+
connect( treeView->selectionModel(), SIGNAL( currentRowChanged ( QModelIndex, QModelIndex) ), this, SLOT( on_treeWidget_currentRowChanged(const QModelIndex&, const QModelIndex&) ) );
7098
}
7199

72100
QgsWFSSourceSelect::~QgsWFSSourceSelect()
@@ -75,8 +103,13 @@ QgsWFSSourceSelect::~QgsWFSSourceSelect()
75103
QgsDebugMsg( "saving geometry" );
76104
settings.setValue( "/Windows/WFSSourceSelect/geometry", saveGeometry() );
77105

106+
delete mItemDelegate;
78107
delete mProjectionSelector;
79108
delete mCapabilities;
109+
delete mModel;
110+
delete mModelProxy;
111+
delete mAddButton;
112+
delete mBuildQueryButton;
80113
}
81114

82115
void QgsWFSSourceSelect::populateConnectionList()
@@ -183,13 +216,18 @@ void QgsWFSSourceSelect::capabilitiesReplyFinished()
183216
foreach ( QgsWFSCapabilities::FeatureType featureType, caps.featureTypes )
184217
{
185218
// insert the typenames, titles and abstracts into the tree view
186-
QTreeWidgetItem* newItem = new QTreeWidgetItem();
187-
newItem->setText( 0, featureType.title );
188-
newItem->setText( 1, featureType.name );
189-
newItem->setText( 2, featureType.abstract );
190-
newItem->setToolTip( 2, "<font color=black>" + featureType.abstract + "</font>" );
191-
newItem->setCheckState( 3, Qt::Checked );
192-
treeWidget->addTopLevelItem( newItem );
219+
QStandardItem* titleItem = new QStandardItem( featureType.title );
220+
QStandardItem* nameItem = new QStandardItem( featureType.name );
221+
QStandardItem* abstractItem = new QStandardItem( featureType.abstract );
222+
abstractItem->setToolTip( "<font color=black>" + featureType.abstract + "</font>" );
223+
abstractItem->setTextAlignment( Qt::AlignLeft | Qt::AlignTop );
224+
QStandardItem* cachedItem = new QStandardItem();
225+
QStandardItem* filterItem = new QStandardItem();
226+
cachedItem->setCheckable( true );
227+
cachedItem->setCheckState( Qt::Checked );
228+
229+
typedef QList< QStandardItem* > StandardItemList;
230+
mModel->appendRow( StandardItemList() << titleItem << nameItem << abstractItem << cachedItem << filterItem);
193231

194232
// insert the available CRS into mAvailableCRS
195233
std::list<QString> currentCRSList;
@@ -202,14 +240,30 @@ void QgsWFSSourceSelect::capabilitiesReplyFinished()
202240

203241
if ( caps.featureTypes.count() > 0 )
204242
{
205-
btnAdd->setEnabled( true );
206-
treeWidget->setCurrentItem( treeWidget->topLevelItem( 0 ) );
243+
treeView->resizeColumnToContents( 0 );
244+
treeView->resizeColumnToContents( 1 );
245+
treeView->resizeColumnToContents( 2 );
246+
treeView->resizeColumnToContents( 3 );
247+
for ( int i = 0; i < 2; i++ )
248+
{
249+
if ( treeView->columnWidth( i ) > 300 )
250+
{
251+
treeView->setColumnWidth( i, 300 );
252+
}
253+
}
254+
if ( treeView->columnWidth( 2 ) > 150 )
255+
{
256+
treeView->setColumnWidth( 2, 150 );
257+
}
207258
btnChangeSpatialRefSys->setEnabled( true );
259+
treeView->selectionModel()->select( mModel->index( 0, 0 ), QItemSelectionModel::SelectCurrent | QItemSelectionModel::Rows );
260+
treeView->setFocus();
208261
}
209262
else
210263
{
211264
QMessageBox::information( 0, tr( "No Layers" ), tr( "capabilities document contained no layers." ) );
212-
btnAdd->setEnabled( false );
265+
mAddButton->setEnabled( false );
266+
mBuildQueryButton->setEnabled( false );
213267
}
214268
}
215269

@@ -253,8 +307,10 @@ void QgsWFSSourceSelect::deleteEntryOfServerList()
253307
void QgsWFSSourceSelect::connectToServer()
254308
{
255309
btnConnect->setEnabled( false );
256-
treeWidget->clear();
257-
310+
if ( mModel )
311+
{
312+
mModel->removeRows( 0, mModel->rowCount() );
313+
}
258314
if ( mCapabilities )
259315
{
260316
mCapabilities->requestCapabilities();
@@ -264,16 +320,13 @@ void QgsWFSSourceSelect::connectToServer()
264320

265321
void QgsWFSSourceSelect::addLayer()
266322
{
267-
//get selected entry in lstWidget
268-
QTreeWidgetItem* tItem = treeWidget->currentItem();
269-
if ( !tItem )
323+
//get selected entry in treeview
324+
QModelIndex currentIndex = treeView->selectionModel()->currentIndex();
325+
if ( !currentIndex.isValid() )
270326
{
271327
return;
272328
}
273329

274-
QList<QTreeWidgetItem*> selectedItems = treeWidget->selectedItems();
275-
QList<QTreeWidgetItem*>::const_iterator sIt = selectedItems.constBegin();
276-
277330
QgsOWSConnection connection( "WFS", cmbConnections->currentText() );
278331
QgsWFSCapabilities conn( connection.uri().encodedUri() );
279332

@@ -312,13 +365,22 @@ void QgsWFSSourceSelect::addLayer()
312365
}
313366
}
314367
}
368+
315369
//create layers that user selected from this WFS source
316-
for ( ; sIt != selectedItems.constEnd(); ++sIt )
370+
QModelIndexList list = treeView->selectionModel()->selectedRows();
371+
for ( int i = 0; i < list.size(); i++ )
317372
{ //add a wfs layer to the map
318-
QString typeName = ( *sIt )->text( 1 ); //WFS repository's name for layer
319-
QString filter = ( *sIt )->text( 4 ); //optional filter specified by user
373+
QModelIndex idx = mModelProxy->mapToSource( list[i] );
374+
if ( !idx.isValid() )
375+
{
376+
continue;
377+
}
378+
int row = idx.row();
379+
QString typeName = mModel->item( row, 1 )->text(); //WFS repository's name for layer
380+
QString filter = mModel->item( row, 4 )->text(); //optional filter specified by user
381+
QgsDebugMsg( "Layer " + typeName + " Filter is " + filter );
320382
//is "cache features" checked?
321-
if (( *sIt )->checkState( 3 ) == Qt::Checked )
383+
if ( mModel->item( row, 3 )->checkState() == Qt::Checked )
322384
{ //yes: entire WFS layer will be retrieved and cached
323385
mUri = conn.uriGetFeature( typeName, pCrsString, filter );
324386
}
@@ -331,6 +393,48 @@ void QgsWFSSourceSelect::addLayer()
331393
accept();
332394
}
333395

396+
void QgsWFSSourceSelect::buildQuery( const QModelIndex& index )
397+
{
398+
if ( !index.isValid() )
399+
{
400+
return;
401+
}
402+
QModelIndex filterIndex = index.sibling( index.row(), 4 );
403+
QString typeName = index.sibling( index.row(), 1 ).data().toString();
404+
405+
//get available fields for wfs layer
406+
QgsWFSProvider p( "" ); //bypasses most provider instantiation logic
407+
QgsOWSConnection connection( "WFS", cmbConnections->currentText() );
408+
QgsWFSCapabilities conn( connection.uri().encodedUri() );
409+
QString uri = conn.uriDescribeFeatureType( typeName );
410+
411+
QgsFields fields;
412+
QString geometryAttribute;
413+
QGis::WkbType geomType;
414+
if ( p.describeFeatureType( uri, geometryAttribute, fields, geomType ) != 0 )
415+
{
416+
return;
417+
}
418+
419+
//show expression builder
420+
QgsExpressionBuilderDialog d( 0, filterIndex.data().toString() );
421+
422+
//add available attributes to expression builder
423+
QgsExpressionBuilderWidget* w = d.expressionBuilder();
424+
if ( !w )
425+
{
426+
return;
427+
}
428+
429+
w->loadFieldNames( fields );
430+
431+
if ( d.exec() == QDialog::Accepted )
432+
{
433+
QgsDebugMsg( "Expression text = " + w->expressionText() );
434+
mModelProxy->setData( filterIndex, QVariant( w->expressionText() ) );
435+
}
436+
}
437+
334438
void QgsWFSSourceSelect::changeCRS()
335439
{
336440
if ( mProjectionSelector->exec() )
@@ -342,11 +446,12 @@ void QgsWFSSourceSelect::changeCRS()
342446

343447
void QgsWFSSourceSelect::changeCRSFilter()
344448
{
449+
QgsDebugMsg("changeCRSFilter called");
345450
//evaluate currently selected typename and set the CRS filter in mProjectionSelector
346-
QTreeWidgetItem* currentTreeItem = treeWidget->currentItem();
347-
if ( currentTreeItem )
451+
QModelIndex currentIndex = treeView->selectionModel()->currentIndex();
452+
if ( currentIndex.isValid() )
348453
{
349-
QString currentTypename = currentTreeItem->text( 1 );
454+
QString currentTypename = currentIndex.sibling( currentIndex.row(), 1 ).data().toString();
350455
QgsDebugMsg( QString( "the current typename is: %1" ).arg( currentTypename ) );
351456

352457
std::map<QString, std::list<QString> >::const_iterator crsIterator = mAvailableCRS.find( currentTypename );
@@ -410,39 +515,47 @@ void QgsWFSSourceSelect::on_btnLoad_clicked()
410515
emit connectionsChanged();
411516
}
412517

413-
void QgsWFSSourceSelect::on_treeWidget_itemDoubleClicked( QTreeWidgetItem* item, int column )
518+
void QgsWFSSourceSelect::on_treeWidget_itemDoubleClicked( const QModelIndex& index )
414519
{
415-
if ( item && column == 4 )
416-
{
417-
//get available fields for wfs layer
418-
QgsWFSProvider p( "" ); //bypasses most provider instantiation logic
419-
QgsOWSConnection connection( "WFS", cmbConnections->currentText() );
420-
QgsWFSCapabilities conn( connection.uri().encodedUri() );
421-
QString uri = conn.uriDescribeFeatureType( item->text( 1 ) );
422-
423-
QgsFields fields;
424-
QString geometryAttribute;
425-
QGis::WkbType geomType;
426-
if ( p.describeFeatureType( uri, geometryAttribute, fields, geomType ) != 0 )
427-
{
428-
return;
429-
}
520+
QgsDebugMsg( "double click called" );
521+
buildQuery( index );
522+
}
430523

431-
//show expression builder
432-
QgsExpressionBuilderDialog d( 0, item->text( 3 ) );
524+
void QgsWFSSourceSelect::on_treeWidget_currentRowChanged( const QModelIndex & current, const QModelIndex & previous)
525+
{
526+
Q_UNUSED( previous )
527+
QgsDebugMsg( "treeWidget_currentRowChanged called" );
528+
changeCRSFilter();
529+
mBuildQueryButton->setEnabled( current.isValid() );
530+
mAddButton->setEnabled( current.isValid() );
531+
}
433532

434-
//add available attributes to expression builder
435-
QgsExpressionBuilderWidget* w = d.expressionBuilder();
436-
if ( !w )
437-
{
438-
return;
439-
}
533+
void QgsWFSSourceSelect::on_mBuildQueryButton_clicked()
534+
{
535+
QgsDebugMsg( "mBuildQueryButton click called" );
536+
buildQuery( treeView->selectionModel()->currentIndex() );
537+
}
440538

441-
w->loadFieldNames( fields );
539+
void QgsWFSSourceSelect::filterChanged(QString text)
540+
{
541+
QgsDebugMsg( "WFS FeatureType filter changed to :" + text );
542+
QRegExp::PatternSyntax mySyntax = QRegExp::PatternSyntax( QRegExp::RegExp );
543+
Qt::CaseSensitivity myCaseSensitivity = Qt::CaseInsensitive;
544+
QRegExp myRegExp( text, myCaseSensitivity, mySyntax );
545+
mModelProxy->setFilterRegExp( myRegExp );
546+
mModelProxy->sort( mModelProxy->sortColumn(), mModelProxy->sortOrder() );
547+
}
442548

443-
if ( d.exec() == QDialog::Accepted )
549+
QSize QgsWFSItemDelegate::sizeHint ( const QStyleOptionViewItem & option, const QModelIndex & index ) const
550+
{
551+
QVariant indexData;
552+
indexData = index.data(Qt::DisplayRole);
553+
if ( indexData.isNull() )
444554
{
445-
item->setText( 4, w->expressionText() );
555+
return QSize();
446556
}
447-
}
557+
QString data = indexData.toString();
558+
QSize size = option.fontMetrics.boundingRect(data).size();
559+
size.setHeight(size.height() + 2);
560+
return size;
448561
}

‎src/providers/wfs/qgswfssourceselect.h‎

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,25 @@
2121
#include "ui_qgswfssourceselectbase.h"
2222
#include "qgscontexthelp.h"
2323

24+
#include <QItemDelegate>
25+
#include <QStandardItemModel>
26+
#include <QSortFilterProxyModel>
27+
2428
class QgsGenericProjectionSelector;
2529
class QgsWFSCapabilities;
2630

31+
class QgsWFSItemDelegate : public QItemDelegate
32+
{
33+
Q_OBJECT
34+
35+
public:
36+
37+
QgsWFSItemDelegate(QObject *parent=0) : QItemDelegate(parent){ }
38+
39+
virtual QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
40+
41+
};
42+
2743
class QgsWFSSourceSelect: public QDialog, private Ui::QgsWFSSourceSelectBase
2844
{
2945
Q_OBJECT
@@ -47,6 +63,11 @@ class QgsWFSSourceSelect: public QDialog, private Ui::QgsWFSSourceSelectBase
4763
QAbstractButton* btnAdd;
4864
QgsWFSCapabilities* mCapabilities;
4965
QString mUri; // data source URI
66+
QgsWFSItemDelegate* mItemDelegate;
67+
QStandardItemModel* mModel;
68+
QSortFilterProxyModel* mModelProxy;
69+
QPushButton *mBuildQueryButton;
70+
QPushButton *mAddButton;
5071

5172
void populateConnectionList();
5273

@@ -63,16 +84,21 @@ class QgsWFSSourceSelect: public QDialog, private Ui::QgsWFSSourceSelectBase
6384
void deleteEntryOfServerList();
6485
void connectToServer();
6586
void addLayer();
87+
void buildQuery( const QModelIndex& index );
6688
void changeCRS();
6789
void changeCRSFilter();
6890
void on_cmbConnections_activated( int index );
6991
void capabilitiesReplyFinished();
7092
void on_btnSave_clicked();
7193
void on_btnLoad_clicked();
72-
void on_treeWidget_itemDoubleClicked( QTreeWidgetItem* item, int column );
94+
void on_treeWidget_itemDoubleClicked( const QModelIndex & index );
95+
void on_treeWidget_currentRowChanged( const QModelIndex & current, const QModelIndex & previous);
96+
void on_mBuildQueryButton_clicked();
97+
void filterChanged(QString text);
7398

7499
void on_buttonBox_helpRequested() { QgsContextHelp::run( metaObject()->className() ); }
75100

76101
};
77102

103+
78104
#endif

‎src/ui/qgswfssourceselectbase.ui‎

Lines changed: 100 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,94 @@
1414
<string>Add WFS Layer from a Server</string>
1515
</property>
1616
<layout class="QGridLayout" name="gridLayout">
17+
<item row="3" column="0">
18+
<widget class="QGroupBox" name="gbCRS">
19+
<property name="title">
20+
<string>Coordinate reference system</string>
21+
</property>
22+
<layout class="QHBoxLayout">
23+
<property name="spacing">
24+
<number>6</number>
25+
</property>
26+
<property name="margin">
27+
<number>9</number>
28+
</property>
29+
<item>
30+
<widget class="QLabel" name="labelCoordRefSys">
31+
<property name="text">
32+
<string/>
33+
</property>
34+
</widget>
35+
</item>
36+
<item>
37+
<spacer>
38+
<property name="orientation">
39+
<enum>Qt::Horizontal</enum>
40+
</property>
41+
<property name="sizeType">
42+
<enum>QSizePolicy::Expanding</enum>
43+
</property>
44+
<property name="sizeHint" stdset="0">
45+
<size>
46+
<width>441</width>
47+
<height>23</height>
48+
</size>
49+
</property>
50+
</spacer>
51+
</item>
52+
<item>
53+
<widget class="QPushButton" name="btnChangeSpatialRefSys">
54+
<property name="enabled">
55+
<bool>false</bool>
56+
</property>
57+
<property name="text">
58+
<string>Change ...</string>
59+
</property>
60+
</widget>
61+
</item>
62+
</layout>
63+
</widget>
64+
</item>
65+
<item row="4" column="0">
66+
<widget class="QDialogButtonBox" name="buttonBox">
67+
<property name="orientation">
68+
<enum>Qt::Horizontal</enum>
69+
</property>
70+
<property name="standardButtons">
71+
<set>QDialogButtonBox::Close|QDialogButtonBox::Help</set>
72+
</property>
73+
</widget>
74+
</item>
75+
<item row="1" column="0">
76+
<layout class="QHBoxLayout" name="horizontalLayoutFilter">
77+
<item>
78+
<widget class="QLabel" name="labelFilter">
79+
<property name="enabled">
80+
<bool>true</bool>
81+
</property>
82+
<property name="text">
83+
<string>Filter:</string>
84+
</property>
85+
<property name="buddy">
86+
<cstring>lineFilter</cstring>
87+
</property>
88+
</widget>
89+
</item>
90+
<item>
91+
<widget class="QLineEdit" name="lineFilter">
92+
<property name="enabled">
93+
<bool>true</bool>
94+
</property>
95+
<property name="toolTip">
96+
<string>Display WFS FeatureTypes containing this word in the title, name or abstract</string>
97+
</property>
98+
<property name="whatsThis">
99+
<string>Display WFS FeatureTypes containing this word in the title, name or abstract</string>
100+
</property>
101+
</widget>
102+
</item>
103+
</layout>
104+
</item>
17105
<item row="0" column="0">
18106
<widget class="QGroupBox" name="GroupBox1">
19107
<property name="title">
@@ -103,110 +191,23 @@
103191
</layout>
104192
</widget>
105193
</item>
106-
<item row="1" column="0">
107-
<widget class="QTreeWidget" name="treeWidget">
194+
<item row="2" column="0">
195+
<widget class="QTreeView" name="treeView">
196+
<property name="editTriggers">
197+
<set>QAbstractItemView::NoEditTriggers</set>
198+
</property>
199+
<property name="alternatingRowColors">
200+
<bool>true</bool>
201+
</property>
108202
<property name="selectionMode">
109-
<enum>QAbstractItemView::ExtendedSelection</enum>
203+
<enum>QAbstractItemView::MultiSelection</enum>
110204
</property>
111205
<property name="sortingEnabled">
112206
<bool>true</bool>
113207
</property>
114-
<property name="columnCount">
115-
<number>5</number>
116-
</property>
117-
<attribute name="headerMinimumSectionSize">
118-
<number>27</number>
119-
</attribute>
120-
<attribute name="headerMinimumSectionSize">
121-
<number>27</number>
208+
<attribute name="headerVisible">
209+
<bool>true</bool>
122210
</attribute>
123-
<column>
124-
<property name="text">
125-
<string>Title</string>
126-
</property>
127-
</column>
128-
<column>
129-
<property name="text">
130-
<string>Name</string>
131-
</property>
132-
</column>
133-
<column>
134-
<property name="text">
135-
<string>Abstract</string>
136-
</property>
137-
</column>
138-
<column>
139-
<property name="text">
140-
<string>Cache
141-
Features</string>
142-
</property>
143-
<property name="textAlignment">
144-
<set>AlignHCenter|AlignVCenter|AlignCenter</set>
145-
</property>
146-
</column>
147-
<column>
148-
<property name="text">
149-
<string>Filter</string>
150-
</property>
151-
</column>
152-
</widget>
153-
</item>
154-
<item row="2" column="0">
155-
<widget class="QGroupBox" name="gbCRS">
156-
<property name="title">
157-
<string>Coordinate reference system</string>
158-
</property>
159-
<layout class="QHBoxLayout">
160-
<property name="spacing">
161-
<number>6</number>
162-
</property>
163-
<property name="margin">
164-
<number>9</number>
165-
</property>
166-
<item>
167-
<widget class="QLabel" name="labelCoordRefSys">
168-
<property name="text">
169-
<string/>
170-
</property>
171-
</widget>
172-
</item>
173-
<item>
174-
<spacer>
175-
<property name="orientation">
176-
<enum>Qt::Horizontal</enum>
177-
</property>
178-
<property name="sizeType">
179-
<enum>QSizePolicy::Expanding</enum>
180-
</property>
181-
<property name="sizeHint" stdset="0">
182-
<size>
183-
<width>441</width>
184-
<height>23</height>
185-
</size>
186-
</property>
187-
</spacer>
188-
</item>
189-
<item>
190-
<widget class="QPushButton" name="btnChangeSpatialRefSys">
191-
<property name="enabled">
192-
<bool>false</bool>
193-
</property>
194-
<property name="text">
195-
<string>Change ...</string>
196-
</property>
197-
</widget>
198-
</item>
199-
</layout>
200-
</widget>
201-
</item>
202-
<item row="3" column="0">
203-
<widget class="QDialogButtonBox" name="buttonBox">
204-
<property name="orientation">
205-
<enum>Qt::Horizontal</enum>
206-
</property>
207-
<property name="standardButtons">
208-
<set>QDialogButtonBox::Apply|QDialogButtonBox::Close|QDialogButtonBox::Help</set>
209-
</property>
210211
</widget>
211212
</item>
212213
</layout>
@@ -217,7 +218,7 @@ Features</string>
217218
<tabstop>btnNew</tabstop>
218219
<tabstop>btnEdit</tabstop>
219220
<tabstop>btnDelete</tabstop>
220-
<tabstop>treeWidget</tabstop>
221+
<tabstop>treeView</tabstop>
221222
<tabstop>btnChangeSpatialRefSys</tabstop>
222223
<tabstop>buttonBox</tabstop>
223224
</tabstops>

0 commit comments

Comments
 (0)
Please sign in to comment.