Skip to content

Commit 7f3d5af

Browse files
author
mwalker
committed
Offline editing plugin: add option to filter editable remote layers using capabilities
git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@14560 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent c922b88 commit 7f3d5af

File tree

3 files changed

+63
-17
lines changed

3 files changed

+63
-17
lines changed

src/plugins/offline_editing/offline_editing_plugin_gui.cpp

Lines changed: 38 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
#include <qgscontexthelp.h>
2222
#include <qgsmaplayer.h>
2323
#include <qgsmaplayerregistry.h>
24+
#include <qgsvectordataprovider.h>
25+
#include <qgsvectorlayer.h>
2426

2527
#include <QFileDialog>
2628
#include <QMessageBox>
@@ -39,15 +41,7 @@ QgsOfflineEditingPluginGui::QgsOfflineEditingPluginGui( QWidget* parent /*= 0*/,
3941
mOfflineDbFile = "offline.sqlite";
4042
ui_offlineDataPath->setText( QDir( mOfflineDataPath ).absoluteFilePath( mOfflineDbFile ) );
4143

42-
QMap<QString, QgsMapLayer*> mapLayers = QgsMapLayerRegistry::instance()->mapLayers();
43-
for ( QMap<QString, QgsMapLayer*>::iterator layer_it = mapLayers.begin() ; layer_it != mapLayers.end(); ++layer_it )
44-
{
45-
if ( layer_it.value()->type() == QgsMapLayer::VectorLayer )
46-
{
47-
QListWidgetItem* item = new QListWidgetItem( layer_it.value()->name(), ui_layerList );
48-
item->setData( Qt::UserRole, QVariant( layer_it.key() ) );
49-
}
50-
}
44+
updateLayerList( checkboxShowEditableLayers->checkState() == Qt::Checked );
5145
}
5246

5347
QgsOfflineEditingPluginGui::~QgsOfflineEditingPluginGui()
@@ -69,6 +63,36 @@ QStringList& QgsOfflineEditingPluginGui::selectedLayerIds()
6963
return mSelectedLayerIds;
7064
}
7165

66+
void QgsOfflineEditingPluginGui::updateLayerList( bool filterEditableLayers )
67+
{
68+
ui_layerList->clear();
69+
70+
QMap<QString, QgsMapLayer*> mapLayers = QgsMapLayerRegistry::instance()->mapLayers();
71+
for ( QMap<QString, QgsMapLayer*>::iterator layer_it = mapLayers.begin() ; layer_it != mapLayers.end(); ++layer_it )
72+
{
73+
if ( layer_it.value()->type() == QgsMapLayer::VectorLayer )
74+
{
75+
QgsVectorLayer* layer = qobject_cast<QgsVectorLayer*>( layer_it.value() );
76+
77+
bool showLayer = true;
78+
if ( filterEditableLayers )
79+
{
80+
int cap = layer->dataProvider()->capabilities();
81+
showLayer = ( cap & QgsVectorDataProvider::AddFeatures ) &&
82+
( cap & QgsVectorDataProvider::DeleteFeatures ) &&
83+
( cap & QgsVectorDataProvider::ChangeAttributeValues ) &&
84+
( cap & QgsVectorDataProvider::AddAttributes ) &&
85+
( cap & QgsVectorDataProvider::ChangeGeometries );
86+
}
87+
if ( showLayer )
88+
{
89+
QListWidgetItem* item = new QListWidgetItem( layer->name(), ui_layerList );
90+
item->setData( Qt::UserRole, QVariant( layer_it.key() ) );
91+
}
92+
}
93+
}
94+
}
95+
7296
void QgsOfflineEditingPluginGui::on_butBrowse_clicked()
7397
{
7498
QString fileName = QFileDialog::getSaveFileName( this,
@@ -85,6 +109,11 @@ void QgsOfflineEditingPluginGui::on_butBrowse_clicked()
85109
}
86110
}
87111

112+
void QgsOfflineEditingPluginGui::on_checkboxShowEditableLayers_stateChanged( int state )
113+
{
114+
updateLayerList( checkboxShowEditableLayers->checkState() == Qt::Checked );
115+
}
116+
88117
void QgsOfflineEditingPluginGui::on_buttonBox_accepted()
89118
{
90119
if ( QFile( QDir( mOfflineDataPath ).absoluteFilePath( mOfflineDbFile ) ).exists() )

src/plugins/offline_editing/offline_editing_plugin_gui.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,16 @@ class QgsOfflineEditingPluginGui : public QDialog, private Ui::QgsOfflineEditing
3535
QStringList& selectedLayerIds();
3636

3737
private:
38+
void updateLayerList( bool filterEditableLayers );
39+
3840
static const int context_id = 0;
3941
QString mOfflineDataPath;
4042
QString mOfflineDbFile;
4143
QStringList mSelectedLayerIds;
4244

4345
private slots:
4446
void on_butBrowse_clicked();
47+
void on_checkboxShowEditableLayers_stateChanged( int state );
4548
void on_buttonBox_accepted();
4649
void on_buttonBox_rejected();
4750
void on_buttonBox_helpRequested();

src/plugins/offline_editing/offline_editing_plugin_guibase.ui

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,28 @@
6363
</layout>
6464
</item>
6565
<item>
66-
<widget class="QDialogButtonBox" name="buttonBox">
67-
<property name="orientation">
68-
<enum>Qt::Horizontal</enum>
69-
</property>
70-
<property name="standardButtons">
71-
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
72-
</property>
73-
</widget>
66+
<layout class="QHBoxLayout" name="horizontalLayout_2">
67+
<item>
68+
<widget class="QCheckBox" name="checkboxShowEditableLayers">
69+
<property name="text">
70+
<string>Show only editable layers</string>
71+
</property>
72+
<property name="checked">
73+
<bool>true</bool>
74+
</property>
75+
</widget>
76+
</item>
77+
<item>
78+
<widget class="QDialogButtonBox" name="buttonBox">
79+
<property name="orientation">
80+
<enum>Qt::Horizontal</enum>
81+
</property>
82+
<property name="standardButtons">
83+
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
84+
</property>
85+
</widget>
86+
</item>
87+
</layout>
7488
</item>
7589
</layout>
7690
</widget>

0 commit comments

Comments
 (0)