diff --git a/qps/layerproperties.py b/qps/layerproperties.py index b5655e25..d6062980 100644 --- a/qps/layerproperties.py +++ b/qps/layerproperties.py @@ -931,7 +931,17 @@ def showLayerPropertiesDialog(layer: QgsMapLayer, dialog = QgsRasterLayerProperties(layer, canvas, parent=parent) elif isinstance(layer, QgsVectorLayer): + vector_layer_tools = VectorLayerTools() dialog = QgsVectorLayerProperties(canvas=canvas, messageBar=messageBar, lyr=layer, parent=parent) + btnToggle = dialog.findChildren(QToolButton, name='mToggleEditingButton') + btnSave = dialog.findChildren(QToolButton, name='mSaveLayerEditsButton') + + if len(btnToggle) == 1 and len(btnSave) == 1: + btnToggle: QToolButton = btnToggle[0] + btnSave: QToolButton = btnSave[0] + + btnToggle.toggled.connect(lambda *args, lyr=layer: vector_layer_tools.toggleEditing(lyr)) + btnSave.clicked.connect(lambda *args, lyr=layer: vector_layer_tools.saveEdits(lyr)) elif isinstance(layer, QgsVectorTileLayer): dialog = QgsVectorTileLayerProperties(lyr=layer, canvas=canvas, messageBar=messageBar, parent=parent) diff --git a/scripts/QGIS_issues/qgis_bug_45478_fieldformatter.py b/scripts/QGIS_issues/qgis_bug_45478_fieldformatter.py deleted file mode 100644 index 5be9fa3e..00000000 --- a/scripts/QGIS_issues/qgis_bug_45478_fieldformatter.py +++ /dev/null @@ -1,37 +0,0 @@ -# see https://github.com/qgis/QGIS/issues/45478 - -import pickle - -from qgis.PyQt.QtCore import QByteArray -from qgis.PyQt.QtCore import QVariant -from qgis.core import QgsVectorLayer, QgsField, QgsFeature, QgsProject -from qgis.utils import iface -from qps.qgisenums import QMETATYPE_QSTRING - -uri = "point?crs=epsg:4326" -lyr = QgsVectorLayer(uri, "Scratch point layer", "memory") -lyr.startEditing() -lyr.addAttribute(QgsField('f1_text', QMETATYPE_QSTRING)) -lyr.addAttribute(QgsField('f2_blob', QVariant.ByteArray)) -lyr.commitChanges(False) - -# add feature, so that QgsAttributeTableModel shows data -f = QgsFeature(lyr.fields()) -blob = pickle.dumps('some random stuff') -f.setAttribute('f1_text', 'foo') -f.setAttribute('f2_blob', QByteArray(blob)) -lyr.addFeature(f) -lyr.commitChanges() - -# add to legend -QgsProject.instance().addMapLayer(lyr, True) -iface.showAttributeTable(lyr) - -# add a new field -# activate debugger breakpoint in void QgsAttributeTableModel::loadAttributes() -# and observe length of mFieldFormatters compared to mWidgetFactories -lyr.startEditing() -lyr.addAttribute(QgsField('f3_text', QMETATYPE_QSTRING)) - -lyr.removeAttribute(1) -lyr.commitChanges(False) diff --git a/scripts/QGIS_issues/qgis_bug_45478_fieldformatterV2.py b/scripts/QGIS_issues/qgis_bug_45478_fieldformatterV2.py deleted file mode 100644 index 02d26e1f..00000000 --- a/scripts/QGIS_issues/qgis_bug_45478_fieldformatterV2.py +++ /dev/null @@ -1,54 +0,0 @@ -# see https://github.com/qgis/QGIS/issues/45478 - -import pickle - -from qgis.PyQt.QtCore import QByteArray -from qgis.PyQt.QtCore import QVariant -from qgis.core import QgsVectorLayer, QgsField, QgsFeature -from qgis.gui import QgsDualView -from qgis.gui import QgsMapCanvas -from qgis.testing import start_app, stop_app -from qps.qgisenums import QMETATYPE_QSTRING - -app = start_app() - -uri = "point?crs=epsg:4326" -lyr = QgsVectorLayer(uri, "Scratch point layer", "memory") -lyr.startEditing() -lyr.addAttribute(QgsField('blob', QVariant.ByteArray)) -lyr.addAttribute(QgsField('text1', QMETATYPE_QSTRING)) -lyr.addAttribute(QgsField('text2', QMETATYPE_QSTRING)) -lyr.commitChanges(False) - -canvas = QgsMapCanvas() -canvas.setLayers([lyr]) -view = QgsDualView() -view.init(lyr, canvas) -view.show() - -# add feature, so that QgsAttributeTableModel shows data -f = QgsFeature(lyr.fields()) -blob = pickle.dumps('some random stuff') -f.setAttribute('blob', QByteArray(blob)) -f.setAttribute('text1', 'foo') -f.setAttribute('text2', 'bar') -lyr.addFeature(f) -lyr.commitChanges(False) - -lyr.deleteAttribute(1) -s = "" - -# add to legend -# QgsProject.instance().addMapLayer(lyr, True) -# iface.showAttributeTable(lyr) - -# add a new field -# activate debugger breakpoint in void QgsAttributeTableModel::loadAttributes() -# and observe length of mFieldFormatters compared to mWidgetFactories -# lyr.startEditing() -# lyr.addAttribute(QgsField('text3', QMETATYPE_QSTRING)) -# lyr.commitChanges(False) - -app.exec_() - -stop_app() diff --git a/tests/test_layerproperties.py b/tests/test_layerproperties.py index d9f7b166..d235a15e 100644 --- a/tests/test_layerproperties.py +++ b/tests/test_layerproperties.py @@ -88,6 +88,12 @@ def test_layer_properties1(self): vl = TestObjects.createVectorLayer() showLayerPropertiesDialog(vl) + @unittest.skipIf(TestCase.runsInCI(), 'blocking dialog') + def test_vectorlayerproperties(self): + + vl = TestObjects.createVectorLayer() + showLayerPropertiesDialog(vl) + @unittest.skip('Crashes CI, unknown reason') def test_layerPropertiesDialog_RasterBandWidget(self):