From 356e4c9c00a5c3b39ff3d49dd63ec4a1ade21fb8 Mon Sep 17 00:00:00 2001 From: Mathieu Pellerin Date: Mon, 1 Nov 2021 06:17:15 -0700 Subject: [PATCH] Avoid showing first feature by default, defer attribute form creation until first feature shown (#5) --- .../gui/ordered_relation_editor_widget.py | 31 ++++++++++++------- .../ui/ordered_relation_editor_widget.ui | 6 ++++ 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/ordered_relation_editor/gui/ordered_relation_editor_widget.py b/ordered_relation_editor/gui/ordered_relation_editor_widget.py index 6645bf9..0428be2 100644 --- a/ordered_relation_editor/gui/ordered_relation_editor_widget.py +++ b/ordered_relation_editor/gui/ordered_relation_editor_widget.py @@ -47,6 +47,8 @@ def __init__(self, config, parent): # QML display of images layout = QVBoxLayout() self.mListView.setLayout(layout) + self.mListView.setMinimumHeight(200) + self.mListView.setMaximumWidth(300) self.view = QQuickWidget(self.mListView) self.view.rootContext().setContextProperty("orderedModel", self.model) self.view.setSource(QUrl.fromLocalFile(os.path.join(os.path.dirname(__file__), '../qml/OrderedImageList.qml'))) @@ -92,32 +94,37 @@ def updateUiTimeout(self): self.model.init(self.relation(), self.ordering_field, self.feature(), self.image_path, self.description) - # form view + # we defer attribute form creation on the first valid feature passed on if self.attribute_form: self.attribute_form.deleteLater() - self.attribute_form = QgsAttributeForm(self.relation().referencingLayer(), QgsFeature(), self.editorContext()) - if not self.editorContext().parentContext(): - attribute_editor_scroll_area = QgsScrollArea() - attribute_editor_scroll_area.setWidgetResizable(True) - self.mAttributeFormView.layout().addWidget(attribute_editor_scroll_area) - attribute_editor_scroll_area.setWidget(self.attribute_form) - else: - self.mAttributeFormView.layout().addWidget(self.attribute_form) self.update_buttons() - self.view.rootObject().setCurrentIndex(0) + self.view.rootObject().setCurrentIndex(-1) def parentFormValueChanged(self, attribute, newValue): if self.attribute_form: self.attribute_form.parentFormValueChanged(attribute, newValue) def onCurrentFeatureChanged(self, feature): - if self.attribute_form: + if not self.attribute_form and feature.isValid(): + self.attribute_form = QgsAttributeForm(self.relation().referencingLayer(), feature, self.editorContext()) + if not self.editorContext().parentContext(): + attribute_editor_scroll_area = QgsScrollArea() + attribute_editor_scroll_area.setWidgetResizable(True) + self.mAttributeFormView.layout().addWidget(attribute_editor_scroll_area) + attribute_editor_scroll_area.setWidget(self.attribute_form) + else: + self.mAttributeFormView.layout().addWidget(self.attribute_form) + else: if self.relation().referencingLayer().isEditable(): if self.attribute_form.save(): self.model.reloadData() - self.attribute_form.setFeature(feature) + if feature.isValid(): + self.attribute_form.setFeature(feature) + else: + self.attribute_form.deleteLater() + self.update_buttons() def deleteSelectedFeature(self): diff --git a/ordered_relation_editor/ui/ordered_relation_editor_widget.ui b/ordered_relation_editor/ui/ordered_relation_editor_widget.ui index cb0a2b9..704577a 100644 --- a/ordered_relation_editor/ui/ordered_relation_editor_widget.ui +++ b/ordered_relation_editor/ui/ordered_relation_editor_widget.ui @@ -31,6 +31,12 @@ + + + 1 + 0 + + 0