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@14560 c8812cc2-4d05-0410-92ff-de0c093fc19c
  • Loading branch information
mwalker committed Nov 12, 2010
1 parent 9fa0f04 commit fab2b0f
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 <qgscontexthelp.h>
#include <qgsmaplayer.h> #include <qgsmaplayer.h>
#include <qgsmaplayerregistry.h> #include <qgsmaplayerregistry.h>
#include <qgsvectordataprovider.h>
#include <qgsvectorlayer.h>


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


QMap<QString, QgsMapLayer*> mapLayers = QgsMapLayerRegistry::instance()->mapLayers(); updateLayerList( checkboxShowEditableLayers->checkState() == Qt::Checked );
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() ) );
}
}
} }


QgsOfflineEditingPluginGui::~QgsOfflineEditingPluginGui() QgsOfflineEditingPluginGui::~QgsOfflineEditingPluginGui()
Expand All @@ -69,6 +63,36 @@ QStringList& QgsOfflineEditingPluginGui::selectedLayerIds()
return mSelectedLayerIds; 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() void QgsOfflineEditingPluginGui::on_butBrowse_clicked()
{ {
QString fileName = QFileDialog::getSaveFileName( this, 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() void QgsOfflineEditingPluginGui::on_buttonBox_accepted()
{ {
if ( QFile( QDir( mOfflineDataPath ).absoluteFilePath( mOfflineDbFile ) ).exists() ) 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(); QStringList& selectedLayerIds();


private: private:
void updateLayerList( bool filterEditableLayers );

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


private slots: private slots:
void on_butBrowse_clicked(); void on_butBrowse_clicked();
void on_checkboxShowEditableLayers_stateChanged( int state );
void on_buttonBox_accepted(); void on_buttonBox_accepted();
void on_buttonBox_rejected(); void on_buttonBox_rejected();
void on_buttonBox_helpRequested(); 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> </layout>
</item> </item>
<item> <item>
<widget class="QDialogButtonBox" name="buttonBox"> <layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="orientation"> <item>
<enum>Qt::Horizontal</enum> <widget class="QCheckBox" name="checkboxShowEditableLayers">
</property> <property name="text">
<property name="standardButtons"> <string>Show only editable layers</string>
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> </property>
</property> <property name="checked">
</widget> <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> </item>
</layout> </layout>
</widget> </widget>
Expand Down

0 comments on commit fab2b0f

Please sign in to comment.