18
18
19
19
#include " offline_editing_plugin_gui.h"
20
20
21
- #include < qgscontexthelp.h>
22
- #include < qgsmaplayer.h>
23
- #include < qgsmaplayerregistry.h>
24
- #include < qgsvectordataprovider.h>
25
- #include < qgsvectorlayer.h>
21
+ #include " qgscontexthelp.h"
22
+ #include " qgslayertree.h"
23
+ #include " qgslayertreemodel.h"
24
+ #include " qgsmaplayer.h"
25
+ #include " qgsmaplayerregistry.h"
26
+ #include " qgsproject.h"
27
+ #include " qgsvectordataprovider.h"
28
+ #include " qgsvectorlayer.h"
26
29
27
30
#include < QFileDialog>
28
31
#include < QMessageBox>
@@ -36,17 +39,23 @@ QgsOfflineEditingPluginGui::QgsOfflineEditingPluginGui( QWidget* parent /*= 0*/,
36
39
restoreState ();
37
40
38
41
mOfflineDbFile = " offline.sqlite" ;
39
- ui_offlineDataPath ->setText ( QDir ( mOfflineDataPath ).absoluteFilePath ( mOfflineDbFile ) );
42
+ mOfflineDataPathLineEdit ->setText ( QDir ( mOfflineDataPath ).absoluteFilePath ( mOfflineDbFile ) );
40
43
41
- updateLayerList ( checkboxShowEditableLayers->isChecked () );
44
+ QgsLayerTreeGroup* rootNode = QgsLayerTree::toGroup ( QgsProject::instance ()->layerTreeRoot ()->clone () );
45
+ QgsLayerTreeModel* treeModel = new QgsLayerTreeModel ( rootNode, this );
46
+ treeModel->setFlag ( QgsLayerTreeModel::ShowLegend, false );
47
+ treeModel->setFlag ( QgsLayerTreeModel::AllowNodeChangeVisibility, true );
48
+ mLayerTree ->setModel ( treeModel );
49
+
50
+ connect ( mSelectAllButton , SIGNAL ( clicked () ), this , SLOT ( selectAll () ) );
51
+ connect ( mUnselectAllButton , SIGNAL ( clicked () ), this , SLOT ( unSelectAll () ) );
42
52
}
43
53
44
54
QgsOfflineEditingPluginGui::~QgsOfflineEditingPluginGui ()
45
55
{
46
56
QSettings settings;
47
57
settings.setValue ( " Plugin-OfflineEditing/geometry" , saveGeometry () );
48
58
settings.setValue ( " Plugin-OfflineEditing/offline_data_path" , mOfflineDataPath );
49
- settings.setValue ( " Plugin-OfflineEditing/onlyEditableLayers" , checkboxShowEditableLayers->isChecked () );
50
59
}
51
60
52
61
QString QgsOfflineEditingPluginGui::offlineDataPath ()
@@ -64,37 +73,7 @@ QStringList& QgsOfflineEditingPluginGui::selectedLayerIds()
64
73
return mSelectedLayerIds ;
65
74
}
66
75
67
- void QgsOfflineEditingPluginGui::updateLayerList ( bool filterEditableLayers )
68
- {
69
- ui_layerList->clear ();
70
-
71
- QMap<QString, QgsMapLayer*> mapLayers = QgsMapLayerRegistry::instance ()->mapLayers ();
72
- for ( QMap<QString, QgsMapLayer*>::iterator layer_it = mapLayers.begin () ; layer_it != mapLayers.end (); ++layer_it )
73
- {
74
- if ( layer_it.value ()->type () == QgsMapLayer::VectorLayer )
75
- {
76
- QgsVectorLayer* layer = qobject_cast<QgsVectorLayer*>( layer_it.value () );
77
-
78
- bool showLayer = true ;
79
- if ( filterEditableLayers )
80
- {
81
- int cap = layer->dataProvider ()->capabilities ();
82
- showLayer = ( cap & QgsVectorDataProvider::AddFeatures ) &&
83
- ( cap & QgsVectorDataProvider::DeleteFeatures ) &&
84
- ( cap & QgsVectorDataProvider::ChangeAttributeValues ) &&
85
- ( cap & QgsVectorDataProvider::AddAttributes ) &&
86
- ( cap & QgsVectorDataProvider::ChangeGeometries );
87
- }
88
- if ( showLayer )
89
- {
90
- QListWidgetItem* item = new QListWidgetItem ( layer->name (), ui_layerList );
91
- item->setData ( Qt::UserRole, QVariant ( layer_it.key () ) );
92
- }
93
- }
94
- }
95
- }
96
-
97
- void QgsOfflineEditingPluginGui::on_butBrowse_clicked ()
76
+ void QgsOfflineEditingPluginGui::on_mBrowseButton_clicked ()
98
77
{
99
78
QString fileName = QFileDialog::getSaveFileName ( this ,
100
79
tr ( " Select target database for offline data" ),
@@ -110,16 +89,10 @@ void QgsOfflineEditingPluginGui::on_butBrowse_clicked()
110
89
}
111
90
mOfflineDbFile = QFileInfo ( fileName ).fileName ();
112
91
mOfflineDataPath = QFileInfo ( fileName ).absolutePath ();
113
- ui_offlineDataPath ->setText ( fileName );
92
+ mOfflineDataPathLineEdit ->setText ( fileName );
114
93
}
115
94
}
116
95
117
- void QgsOfflineEditingPluginGui::on_checkboxShowEditableLayers_stateChanged ( int state )
118
- {
119
- Q_UNUSED ( state );
120
- updateLayerList ( checkboxShowEditableLayers->isChecked () );
121
- }
122
-
123
96
void QgsOfflineEditingPluginGui::on_buttonBox_accepted ()
124
97
{
125
98
if ( QFile ( QDir ( mOfflineDataPath ).absoluteFilePath ( mOfflineDbFile ) ).exists () )
@@ -137,10 +110,13 @@ void QgsOfflineEditingPluginGui::on_buttonBox_accepted()
137
110
}
138
111
139
112
mSelectedLayerIds .clear ();
140
- QList<QListWidgetItem*> layers = ui_layerList->selectedItems ();
141
- for ( QList<QListWidgetItem*>::const_iterator it = layers.begin (); it != layers.end (); ++it )
113
+ foreach ( QgsLayerTreeLayer* nodeLayer, mLayerTree ->layerTreeModel ()->rootGroup ()->findLayers () )
142
114
{
143
- mSelectedLayerIds .append (( *it )->data ( Qt::UserRole ).toString () );
115
+ if ( nodeLayer->isVisible () )
116
+ {
117
+ QgsDebugMsg (nodeLayer->layerId ());
118
+ mSelectedLayerIds .append ( nodeLayer->layerId () );
119
+ }
144
120
}
145
121
146
122
accept ();
@@ -162,5 +138,17 @@ void QgsOfflineEditingPluginGui::restoreState()
162
138
QSettings settings;
163
139
mOfflineDataPath = settings.value ( " Plugin-OfflineEditing/offline_data_path" , QDir ().absolutePath () ).toString ();
164
140
restoreGeometry ( settings.value ( " Plugin-OfflineEditing/geometry" ).toByteArray () );
165
- checkboxShowEditableLayers->setChecked ( settings.value ( " Plugin-OfflineEditing/onlyEditableLayers" , true ).toBool () );
141
+ }
142
+
143
+ void QgsOfflineEditingPluginGui::selectAll ()
144
+ {
145
+ foreach ( QgsLayerTreeLayer* nodeLayer, mLayerTree ->layerTreeModel ()->rootGroup ()->findLayers () )
146
+ nodeLayer->setVisible ( Qt::Checked );
147
+ }
148
+
149
+
150
+ void QgsOfflineEditingPluginGui::unSelectAll ()
151
+ {
152
+ foreach ( QgsLayerTreeLayer* nodeLayer, mLayerTree ->layerTreeModel ()->rootGroup ()->findLayers () )
153
+ nodeLayer->setVisible ( Qt::Unchecked );
166
154
}
0 commit comments