Skip to content

Commit 059c997

Browse files
authored
Merge pull request #5687 from elpaso/bugfix-16753-offline-editing-wfs-warning
[offline-editing] Add a warning icon and tooltip to WFS sources
2 parents 58bfbd5 + 5f6c1ba commit 059c997

File tree

2 files changed

+52
-19
lines changed

2 files changed

+52
-19
lines changed

src/plugins/offline_editing/offline_editing_plugin_gui.cpp

Lines changed: 51 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -30,33 +30,66 @@
3030
#include <QFileDialog>
3131
#include <QMessageBox>
3232

33-
3433
QgsSelectLayerTreeModel::QgsSelectLayerTreeModel( QgsLayerTree *rootNode, QObject *parent )
3534
: QgsLayerTreeModel( rootNode, parent )
3635
{
3736
setFlag( QgsLayerTreeModel::ShowLegend, false );
3837
setFlag( QgsLayerTreeModel::AllowNodeChangeVisibility, true );
3938
}
4039

40+
int QgsSelectLayerTreeModel::columnCount( const QModelIndex &parent ) const
41+
{
42+
return QgsLayerTreeModel::columnCount( parent ) + 1;
43+
}
44+
45+
4146
QVariant QgsSelectLayerTreeModel::data( const QModelIndex &index, int role ) const
4247
{
43-
if ( role == Qt::CheckStateRole )
48+
QgsLayerTreeNode *node = index2node( index );
49+
if ( index.column() == 0 )
4450
{
45-
QgsLayerTreeNode *node = index2node( index );
46-
if ( QgsLayerTree::isLayer( node ) )
51+
if ( role == Qt::CheckStateRole )
4752
{
48-
QgsLayerTreeLayer *nodeLayer = QgsLayerTree::toLayer( node );
49-
return nodeLayer->isVisible();
53+
if ( QgsLayerTree::isLayer( node ) )
54+
{
55+
QgsLayerTreeLayer *nodeLayer = QgsLayerTree::toLayer( node );
56+
return nodeLayer->isVisible();
57+
}
58+
else if ( QgsLayerTree::isGroup( node ) )
59+
{
60+
QgsLayerTreeGroup *nodeGroup = QgsLayerTree::toGroup( node );
61+
return nodeGroup->isVisible();
62+
}
63+
else
64+
{
65+
return QVariant();
66+
}
5067
}
51-
else if ( QgsLayerTree::isGroup( node ) )
52-
{
53-
QgsLayerTreeGroup *nodeGroup = QgsLayerTree::toGroup( node );
54-
return nodeGroup->isVisible();
55-
}
56-
else
68+
}
69+
else
70+
{
71+
if ( QgsLayerTree::isLayer( node ) && index.column() > 0 )
5772
{
58-
return QVariant();
73+
QgsLayerTreeLayer *nodeLayer = QgsLayerTree::toLayer( node );
74+
if ( nodeLayer->layer()->dataProvider()->name() == QStringLiteral( "WFS" ) )
75+
{
76+
switch ( role )
77+
{
78+
case Qt::ToolTipRole:
79+
return tr( "The source of this layer is a <b>WFS</b> server.<br>"
80+
"Some WFS layers are not suitable for offline<br>"
81+
"editing due to unstable primary keys<br>"
82+
"please check with your system administrator<br>"
83+
"if this WFS layer can be used for offline<br>"
84+
"editing." );
85+
break;
86+
case Qt::DecorationRole:
87+
return QgsApplication::getThemeIcon( "/mIconWarning.svg" );
88+
break;
89+
}
90+
}
5991
}
92+
return QVariant();
6093
}
6194
return QgsLayerTreeModel::data( index, role );
6295
}
@@ -79,6 +112,7 @@ QgsOfflineEditingPluginGui::QgsOfflineEditingPluginGui( QWidget *parent, Qt::Win
79112
QgsLayerTree *rootNode = QgsProject::instance()->layerTreeRoot()->clone();
80113
QgsLayerTreeModel *treeModel = new QgsSelectLayerTreeModel( rootNode, this );
81114
mLayerTree->setModel( treeModel );
115+
mLayerTree->header()->setResizeMode( QHeaderView::ResizeToContents );
82116

83117
connect( mSelectAllButton, &QAbstractButton::clicked, this, &QgsOfflineEditingPluginGui::selectAll );
84118
connect( mDeselectAllButton, &QAbstractButton::clicked, this, &QgsOfflineEditingPluginGui::deSelectAll );
@@ -87,8 +121,8 @@ QgsOfflineEditingPluginGui::QgsOfflineEditingPluginGui( QWidget *parent, Qt::Win
87121
QgsOfflineEditingPluginGui::~QgsOfflineEditingPluginGui()
88122
{
89123
QgsSettings settings;
90-
settings.setValue( QStringLiteral( "Plugin-OfflineEditing/geometry" ), saveGeometry() );
91-
settings.setValue( QStringLiteral( "Plugin-OfflineEditing/offline_data_path" ), mOfflineDataPath );
124+
settings.setValue( QStringLiteral( "OfflineEditing/geometry" ), saveGeometry(), QgsSettings::Section::Plugins );
125+
settings.setValue( QStringLiteral( "OfflineEditing/offline_data_path" ), mOfflineDataPath, QgsSettings::Section::Plugins );
92126
}
93127

94128
QString QgsOfflineEditingPluginGui::offlineDataPath()
@@ -172,8 +206,8 @@ void QgsOfflineEditingPluginGui::showHelp()
172206
void QgsOfflineEditingPluginGui::restoreState()
173207
{
174208
QgsSettings settings;
175-
mOfflineDataPath = settings.value( QStringLiteral( "Plugin-OfflineEditing/offline_data_path" ), QDir::homePath() ).toString();
176-
restoreGeometry( settings.value( QStringLiteral( "Plugin-OfflineEditing/geometry" ) ).toByteArray() );
209+
mOfflineDataPath = settings.value( QStringLiteral( "OfflineEditing/offline_data_path" ), QDir::homePath(), QgsSettings::Section::Plugins ).toString();
210+
restoreGeometry( settings.value( QStringLiteral( "OfflineEditing/geometry" ), QgsSettings::Section::Plugins ).toByteArray() );
177211
}
178212

179213
void QgsOfflineEditingPluginGui::selectAll()

src/plugins/offline_editing/offline_editing_plugin_gui.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,8 @@ class QgsSelectLayerTreeModel : public QgsLayerTreeModel
3030
Q_OBJECT
3131
public:
3232
QgsSelectLayerTreeModel( QgsLayerTree *rootNode, QObject *parent = nullptr );
33-
33+
int columnCount( const QModelIndex &parent = QModelIndex() ) const override;
3434
QVariant data( const QModelIndex &index, int role = Qt::DisplayRole ) const override;
35-
// bool setData( const QModelIndex &index, const QVariant &value, int role = Qt::EditRole ) override;
3635
};
3736

3837
class QgsOfflineEditingPluginGui : public QDialog, private Ui::QgsOfflineEditingPluginGuiBase

0 commit comments

Comments
 (0)