From 17b967bfa6897dee592e4ee0d50c113a6a081ddd Mon Sep 17 00:00:00 2001 From: Niko Aarnio Date: Mon, 11 Nov 2024 11:03:01 +0200 Subject: [PATCH] improve template attribute form --- .../gui/template_attribute_form.py | 42 +- .../gui/template_attribute_form.ui | 482 +++++++++--------- 2 files changed, 247 insertions(+), 277 deletions(-) diff --git a/arho_feature_template/gui/template_attribute_form.py b/arho_feature_template/gui/template_attribute_form.py index 915554c..3d8a28b 100644 --- a/arho_feature_template/gui/template_attribute_form.py +++ b/arho_feature_template/gui/template_attribute_form.py @@ -3,23 +3,23 @@ from importlib import resources from typing import TYPE_CHECKING -from qgis.core import QgsApplication, QgsFeature from qgis.gui import QgsSpinBox from qgis.PyQt import uic from qgis.PyQt.QtWidgets import ( QDialog, QDialogButtonBox, QLineEdit, - QPushButton, QScrollArea, QSizePolicy, QSpacerItem, QTreeWidget, + QTreeWidgetItem, ) from arho_feature_template.gui.plan_regulation_group_widget import PlanRegulationGroupWidget if TYPE_CHECKING: + from qgis.core import QgsFeature from qgis.PyQt.QtWidgets import QWidget from arho_feature_template.core.template_library_config import Feature, FeatureTemplate @@ -39,65 +39,61 @@ def __init__(self, feature_template_config: FeatureTemplate): self.feature_name: QLineEdit self.feature_description: QLineEdit self.feature_underground: QLineEdit - self.feature_vertical_boundaries: QLineEdit self.plan_regulation_group_scrollarea: QScrollArea self.plan_regulation_group_scrollarea_contents: QWidget self.plan_regulation_groups_tree: QTreeWidget - self.add_plan_regulation_group_btn: QPushButton self.button_box: QDialogButtonBox # SIGNALS self.button_box.accepted.connect(self._on_ok_clicked) - self.add_plan_regulation_group_btn.clicked.connect(self._on_add_plan_regulation_group_clicked) + self.plan_regulation_groups_tree.itemDoubleClicked.connect(self.add_selected_plan_regulation_group) # INIT self.attribute_widgets = { "name": self.feature_name, "description": self.feature_description, "type_of_underground_id": self.feature_underground, - # self.feature_vertical_boundaries } + # TODO: The 'configs' could be a mapping where keys are plan regulation group names and + # values are the related configurations + self.configs: dict[str, Feature] = {} self.scroll_area_spacer = None self.available_plan_regulation_group_configs: list[Feature] = [] - self.add_plan_regulation_group_btn.setIcon(QgsApplication.getThemeIcon("mActionAdd.svg")) self.setWindowTitle(feature_template_config.name) self.init_feature_attributes_from_template(feature_template_config) self.init_plan_regulation_groups_from_template(feature_template_config) self.init_plan_regulation_group_library() - def add_spacer(self): + def _add_spacer(self): self.scroll_area_spacer = QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Expanding) self.plan_regulation_group_scrollarea_contents.layout().addItem(self.scroll_area_spacer) - def remove_spacer(self): + def _remove_spacer(self): if self.scroll_area_spacer is not None: self.plan_regulation_group_scrollarea_contents.layout().removeItem(self.scroll_area_spacer) self.scroll_area_spacer = None + def add_selected_plan_regulation_group(self, item: QTreeWidgetItem, column: int): + if not item.parent(): + return + config = self.configs.get(item.text(column)) + if not config: + print(f"Could not find plan regulation group configuration for {item.text(column)}") # noqa: T201 + return + self.add_plan_regulation_group(config) + def add_plan_regulation_group(self, feature_config: Feature): new_plan_regulation_group = PlanRegulationGroupWidget(feature_config) new_plan_regulation_group.delete_signal.connect(self.remove_plan_regulation_group) - self.remove_spacer() + self._remove_spacer() self.plan_regulation_group_scrollarea_contents.layout().addWidget(new_plan_regulation_group) - self.add_spacer() + self._add_spacer() def remove_plan_regulation_group(self, plan_regulation_group_widget: PlanRegulationGroupWidget): self.plan_regulation_group_scrollarea_contents.layout().removeWidget(plan_regulation_group_widget) plan_regulation_group_widget.deleteLater() - def _on_add_plan_regulation_group_clicked(self): - selected = self.plan_regulation_groups_tree.selectedItems() - if len(selected) == 0: - # Nothing selected - return - if len(selected) > 1: - # Too many selected, but should allow selecting only 1 item at a time - return - selected_plan_regulation_group = selected[0] - print(f"Trying to add plan regulation group {selected_plan_regulation_group.text(0)}") # noqa: T201 - # self.add_plan_regulation_group() # TODO: Implement - def init_plan_regulation_group_library(self): # Now plan regulation group tree widget/view is just static placeholder for demo pass diff --git a/arho_feature_template/gui/template_attribute_form.ui b/arho_feature_template/gui/template_attribute_form.ui index 5ee8156..0e16853 100644 --- a/arho_feature_template/gui/template_attribute_form.ui +++ b/arho_feature_template/gui/template_attribute_form.ui @@ -15,299 +15,273 @@ - - - - - Kohteen nimi - - - - - - - - - - Kohteen kuvaus - - - - - - - - - - Maanalaisuus - - - - - - - Pystysuuntainen rajaus - - - - - - - - - - - - - - - Qt::Vertical - - - QSizePolicy::Preferred - - - - 20 - 10 - - - - - - - - Qt::Horizontal - - - - - - - Qt::Vertical + + + 0 - - QSizePolicy::Preferred - - - - 20 - 10 - - - - - - - - - - + + + Kaavakohteen tiedot + + + + - Lisää kaavamääräysryhmä + Kaavakohteen nimi - - - - - 0 - 0 - - - - Suodata kaavamääräysryhmiä - - - true - - - true - - - + + + + + + + Kaavakohteen kuvaus - - + + - + 0 0 - - QFrame::StyledPanel - - - QFrame::Sunken - - - QAbstractItemView::NoEditTriggers - - - QAbstractItemView::NoDragDrop - - - false + + + + + + Maanalaisuus - - false - - - - 1 - - + + + + + + + + + + Kaavamääräysryhmät + + + + - - Aluevaraukset - - + - Asuinrakennusten alue + Kaavamääräysryhmäkirjastot - - - - Asuinkerrostalojen alue - - - - - Asuinpientalojen alue - - - - - Rivitalojen ja muiden kytkettyjen asuinrakennusten alue - - - - - Erillispientalojen alue - - + - - Rakennusalat - - - - Kunnan tai kaupunginosas raja + + + + Katja + + + + + Omat + + + + + + + + + 0 + 0 + - - - - Korttelialue tai korttelialueen osa + + Suodata kaavamääräysryhmiä - - - - Sitovan tonttijaon mukainen tontti + + true - - - - Ohjeellinen tontti / rakennusala + + true - - - - Rakennusala + + - + - - Numeeriset ja tekstimuotoiset määräykset - - - - Kaupungin- tai kunnanosan numero + + + + 0 + 0 + - - - - Kaupungin- tai kunnanosan nimi + + QFrame::StyledPanel - - - - Korttelin numero + + QFrame::Sunken - - - - Tontin tai rakennuspaikan numero + + QAbstractItemView::NoEditTriggers - - - - Ohjeellisen tontin tai rakennuspaikan numero + + QAbstractItemView::NoDragDrop - - - - Kadun tai tien nimi + + false - + + false + + + + 1 + + + + + Aluevaraukset + + + + Asuinrakennusten alue + + + + + Asuinkerrostalojen alue + + + + + Asuinpientalojen alue + + + + + Rivitalojen ja muiden kytkettyjen asuinrakennusten alue + + + + + Erillispientalojen alue + + + + + + Rakennusalat + + + + Kunnan tai kaupunginosas raja + + + + + Korttelialue tai korttelialueen osa + + + + + Sitovan tonttijaon mukainen tontti + + + + + Ohjeellinen tontti / rakennusala + + + + + Rakennusala + + + + + + Numeeriset ja tekstimuotoiset määräykset + + + + Kaupungin- tai kunnanosan numero + + + + + Kaupungin- tai kunnanosan nimi + + + + + Korttelin numero + + + + + Tontin tai rakennuspaikan numero + + + + + Ohjeellisen tontin tai rakennuspaikan numero + + + + + Kadun tai tien nimi + + + + - - - - - - Lisää kaavamääräysryhmä - - + - - - - - - - Kaavamääräykset - - - - - - - true - - - - - 0 - 0 - 469 - 501 - - - - - + + + + + Kaavamääräysryhmät + + + + + + + true + + + + + 0 + 0 + 449 + 624 + + + + + + + - - + + - - - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + +