3
3
import os
4
4
from typing import TYPE_CHECKING , Callable , cast
5
5
6
- from qgis .core import QgsProject , QgsWkbTypes
6
+ from qgis .core import QgsProject , QgsVectorLayer
7
7
from qgis .PyQt .QtCore import QCoreApplication , Qt , QTranslator
8
8
from qgis .PyQt .QtGui import QIcon
9
9
from qgis .PyQt .QtWidgets import QAction , QWidget
10
10
from qgis .utils import iface
11
11
12
12
from arho_feature_template .core .feature_template_library import FeatureTemplater , TemplateGeometryDigitizeMapTool
13
-
14
- # from arho_feature_template.core.update_plan import LandUsePlan, update_selected_plan
13
+ from arho_feature_template .core .update_plan import LandUsePlan , update_selected_plan
15
14
from arho_feature_template .qgis_plugin_tools .tools .custom_logging import setup_logger , teardown_logger
16
15
from arho_feature_template .qgis_plugin_tools .tools .i18n import setup_translation
17
16
from arho_feature_template .qgis_plugin_tools .tools .resources import plugin_name
@@ -139,7 +138,6 @@ def initGui(self) -> None: # noqa N802
139
138
140
139
iface .mapCanvas ().mapToolSet .connect (self .templater .digitize_map_tool .deactivate )
141
140
142
- # Add main plugin action to the toolbar
143
141
self .template_dock_action = self .add_action (
144
142
"" ,
145
143
"Feature Templates" ,
@@ -171,8 +169,18 @@ def on_map_tool_changed(self, new_tool: QgsMapTool, old_tool: QgsMapTool) -> Non
171
169
if not isinstance (new_tool , TemplateGeometryDigitizeMapTool ):
172
170
self .template_dock_action .setChecked (False )
173
171
172
+ def clear_all_filters (self ):
173
+ """Clear filters for all vector layers in the project."""
174
+ layers = QgsProject .instance ().mapLayers ().values ()
175
+
176
+ for layer in layers :
177
+ if isinstance (layer , QgsVectorLayer ):
178
+ layer .setSubsetString ("" )
179
+
174
180
def digitize_new_plan (self ):
175
- # Activate and start editing the Kaava-layer
181
+ # Filtered layers are not editable, so clear filters first.
182
+ self .clear_all_filters ()
183
+ # Find and set the "Kaava" layer
176
184
layers = QgsProject .instance ().mapLayersByName ("Kaava" )
177
185
if not layers :
178
186
iface .messageBar ().pushMessage ("Error" , "Layer 'Kaava' not found" , level = 3 )
@@ -185,23 +193,36 @@ def digitize_new_plan(self):
185
193
186
194
iface .setActiveLayer (kaava_layer )
187
195
188
- if kaava_layer .geometryType () != QgsWkbTypes .PolygonGeometry :
189
- iface .messageBar ().pushMessage ("Error" , "Layer 'Kaava' is not a polygon layer" , level = 3 )
190
- return
191
-
192
- kaava_layer .featureAdded .connect (self .commit_new_plan )
193
-
194
196
iface .actionAddFeature ().trigger ()
197
+ kaava_layer .featureAdded .connect (self .feature_added )
195
198
196
- def commit_new_plan (self ):
199
+ def feature_added (self ):
197
200
kaava_layer = iface .activeLayer ()
201
+ feature_ids_before_commit = kaava_layer .allFeatureIds ()
202
+ if kaava_layer .isEditable ():
203
+ if not kaava_layer .commitChanges ():
204
+ iface .messageBar ().pushMessage ("Error" , "Failed to commit changes to the layer." , level = 3 )
205
+ return
206
+ else :
207
+ iface .messageBar ().pushMessage ("Error" , "Layer is not editable." , level = 3 )
208
+ return
209
+ feature_ids_after_commit = kaava_layer .allFeatureIds ()
210
+
211
+ # Finds the feature id that was committed by comparing ids before commit to features after commit.
212
+ new_feature_id = next ((fid for fid in feature_ids_after_commit if fid not in feature_ids_before_commit ), None )
213
+ if new_feature_id is not None :
214
+ new_feature = kaava_layer .getFeature (new_feature_id )
198
215
199
- kaava_layer .featureAdded .disconnect ()
216
+ if new_feature .isValid ():
217
+ feature_id_value = new_feature ["id" ] # UUID of the new feature
218
+ iface .messageBar ().pushMessage ("Info" , f"Feature 'id' field value: { feature_id_value } " , level = 0 )
200
219
201
- if kaava_layer .commitChanges ():
202
- iface .messageBar ().pushMessage ("Info" , "Feature committed successfully" , level = 0 )
220
+ # plan = LandUsePlan(feature_id_value)
221
+ update_selected_plan (LandUsePlan (feature_id_value ))
222
+ else :
223
+ iface .messageBar ().pushMessage ("Error" , "Invalid feature retrieved." , level = 3 )
203
224
else :
204
- iface .messageBar ().pushMessage ("Error" , "Failed to commit feature" , level = 3 )
225
+ iface .messageBar ().pushMessage ("Error" , "No new feature was added. " , level = 3 )
205
226
206
227
def load_existing_land_use_plan (self ) -> None :
207
228
"""Open existing land use plan."""
0 commit comments