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
+
+