Skip to content

Commit

Permalink
Offline editing plugin: add option to filter editable remote layers u…
Browse files Browse the repository at this point in the history
…sing capabilities

git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@14560 c8812cc2-4d05-0410-92ff-de0c093fc19c
  • Loading branch information
mwalker committed Nov 12, 2010
1 parent c922b88 commit 7f3d5af
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 17 deletions.
47 changes: 38 additions & 9 deletions src/plugins/offline_editing/offline_editing_plugin_gui.cpp
Expand Up @@ -21,6 +21,8 @@
#include <qgscontexthelp.h>
#include <qgsmaplayer.h>
#include <qgsmaplayerregistry.h>
#include <qgsvectordataprovider.h>
#include <qgsvectorlayer.h>

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

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

QgsOfflineEditingPluginGui::~QgsOfflineEditingPluginGui()
Expand All @@ -69,6 +63,36 @@ QStringList& QgsOfflineEditingPluginGui::selectedLayerIds()
return mSelectedLayerIds;
}

void QgsOfflineEditingPluginGui::updateLayerList( bool filterEditableLayers )
{
ui_layerList->clear();

QMap<QString, QgsMapLayer*> mapLayers = QgsMapLayerRegistry::instance()->mapLayers();
for ( QMap<QString, QgsMapLayer*>::iterator layer_it = mapLayers.begin() ; layer_it != mapLayers.end(); ++layer_it )
{
if ( layer_it.value()->type() == QgsMapLayer::VectorLayer )
{
QgsVectorLayer* layer = qobject_cast<QgsVectorLayer*>( layer_it.value() );

bool showLayer = true;
if ( filterEditableLayers )
{
int cap = layer->dataProvider()->capabilities();
showLayer = ( cap & QgsVectorDataProvider::AddFeatures ) &&
( cap & QgsVectorDataProvider::DeleteFeatures ) &&
( cap & QgsVectorDataProvider::ChangeAttributeValues ) &&
( cap & QgsVectorDataProvider::AddAttributes ) &&
( cap & QgsVectorDataProvider::ChangeGeometries );
}
if ( showLayer )
{
QListWidgetItem* item = new QListWidgetItem( layer->name(), ui_layerList );
item->setData( Qt::UserRole, QVariant( layer_it.key() ) );
}
}
}
}

void QgsOfflineEditingPluginGui::on_butBrowse_clicked()
{
QString fileName = QFileDialog::getSaveFileName( this,
Expand All @@ -85,6 +109,11 @@ void QgsOfflineEditingPluginGui::on_butBrowse_clicked()
}
}

void QgsOfflineEditingPluginGui::on_checkboxShowEditableLayers_stateChanged( int state )
{
updateLayerList( checkboxShowEditableLayers->checkState() == Qt::Checked );
}

void QgsOfflineEditingPluginGui::on_buttonBox_accepted()
{
if ( QFile( QDir( mOfflineDataPath ).absoluteFilePath( mOfflineDbFile ) ).exists() )
Expand Down
3 changes: 3 additions & 0 deletions src/plugins/offline_editing/offline_editing_plugin_gui.h
Expand Up @@ -35,13 +35,16 @@ class QgsOfflineEditingPluginGui : public QDialog, private Ui::QgsOfflineEditing
QStringList& selectedLayerIds();

private:
void updateLayerList( bool filterEditableLayers );

static const int context_id = 0;
QString mOfflineDataPath;
QString mOfflineDbFile;
QStringList mSelectedLayerIds;

private slots:
void on_butBrowse_clicked();
void on_checkboxShowEditableLayers_stateChanged( int state );
void on_buttonBox_accepted();
void on_buttonBox_rejected();
void on_buttonBox_helpRequested();
Expand Down
30 changes: 22 additions & 8 deletions src/plugins/offline_editing/offline_editing_plugin_guibase.ui
Expand Up @@ -63,14 +63,28 @@
</layout>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QCheckBox" name="checkboxShowEditableLayers">
<property name="text">
<string>Show only editable layers</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
Expand Down

0 comments on commit 7f3d5af

Please sign in to comment.