Skip to content

Commit 2287c42

Browse files
nmaarnioLKajan
authored andcommitted
implement remove plan regulation group button
1 parent 41e37e6 commit 2287c42

File tree

3 files changed

+120
-14
lines changed

3 files changed

+120
-14
lines changed

arho_feature_template/gui/plan_regulation_group_widget.py

+8-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
from qgis.core import QgsApplication
88
from qgis.PyQt import uic
9+
from qgis.PyQt.QtCore import pyqtSignal
910
from qgis.PyQt.QtGui import QFont, QIcon
1011
from qgis.PyQt.QtWidgets import QLabel, QLineEdit, QWidget
1112

@@ -24,6 +25,8 @@
2425
class PlanRegulationGroupWidget(QWidget, FormClass): # type: ignore
2526
"""A widget representation of a plan regulation group."""
2627

28+
delete_signal = pyqtSignal(QWidget)
29+
2730
def __init__(self, feature: Feature):
2831
super().__init__()
2932
self.setupUi(self)
@@ -62,16 +65,20 @@ def __init__(self, feature: Feature):
6265
if child.layer == "plan_requlation":
6366
self.create_widgets_for_plan_regulation(child)
6467

68+
def request_delete(self):
69+
self.delete_signal.emit(self)
70+
6571
def init_buttons(self):
6672
self.conf_btn.setIcon(QIcon(plugin_path("resources", "icons", "settings.svg")))
6773
self.del_btn.setIcon(QgsApplication.getThemeIcon("mActionDeleteSelected.svg"))
74+
self.del_btn.clicked.connect(self.request_delete)
6875

6976
def create_widgets_for_plan_regulation(self, plan_regulation_feature: Feature):
7077
row = self.plan_regulation_grid_layout.rowCount() + 1
7178
for plan_regulation_config in plan_regulation_feature.attributes:
7279
if plan_regulation_config.attribute == "type_of_plan_regulation_id":
7380
id_label = QLabel(plan_regulation_config.display())
74-
print(plan_regulation_config)
81+
# print(plan_regulation_config)
7582
self.plan_regulation_grid_layout.addWidget(id_label, row, 0)
7683
elif plan_regulation_config.attribute == "numeric_default":
7784
if not self.input_value_header:

arho_feature_template/gui/template_attribute_form.py

+38-13
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
if TYPE_CHECKING:
2121
from qgis.PyQt.QtWidgets import QWidget
2222

23-
from arho_feature_template.core.template_library_config import FeatureTemplate
23+
from arho_feature_template.core.template_library_config import Feature, FeatureTemplate
2424

2525
ui_path = resources.files(__package__) / "template_attribute_form.ui"
2626
FormClass, _ = uic.loadUiType(ui_path)
@@ -47,31 +47,56 @@ def __init__(self, feature_template_config: FeatureTemplate):
4747
self.button_box.accepted.connect(self._on_ok_clicked)
4848

4949
# INIT
50+
self.scroll_area_spacer = None
51+
self.available_plan_regulation_group_configs: list[Feature] = []
52+
5053
self.setWindowTitle(feature_template_config.name)
5154
self.init_plan_regulation_groups(feature_template_config)
55+
self.init_add_plan_regulation_group_btn()
56+
57+
def add_spacer(self):
5258
self.scroll_area_spacer = QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Expanding)
5359
self.plan_regulation_group_scrollarea_contents.layout().addItem(self.scroll_area_spacer)
54-
self.init_add_plan_regulation_group_btn()
60+
61+
def remove_spacer(self):
62+
if self.scroll_area_spacer is not None:
63+
self.plan_regulation_group_scrollarea_contents.layout().removeItem(self.scroll_area_spacer)
64+
self.scroll_area_spacer = None
65+
66+
def add_plan_regulation_group(self, feature_config: Feature):
67+
new_plan_regulation_group = PlanRegulationGroupWidget(feature_config)
68+
new_plan_regulation_group.delete_signal.connect(self.remove_plan_regulation_group)
69+
self.remove_spacer()
70+
self.plan_regulation_group_scrollarea_contents.layout().addWidget(new_plan_regulation_group)
71+
self.add_spacer()
72+
73+
def remove_plan_regulation_group(self, plan_regulation_group_widget: PlanRegulationGroupWidget):
74+
self.plan_regulation_group_scrollarea_contents.layout().removeWidget(plan_regulation_group_widget)
75+
plan_regulation_group_widget.deleteLater()
5576

5677
def init_add_plan_regulation_group_btn(self):
5778
menu = QMenu()
58-
self.new_mineral_system_action = menu.addAction("Kaavamääräysryhmä 1")
59-
self.new_mineral_system_action = menu.addAction("Kaavamääräysryhmä 2")
60-
self.new_mineral_system_action = menu.addAction("Kaavamääräysryhmä 3")
61-
self.new_mineral_system_action = menu.addAction("Kaavamääräysryhmä 4")
62-
self.new_mineral_system_action = menu.addAction("Kaavamääräysryhmä 5")
63-
self.new_mineral_system_action = menu.addAction("Kaavamääräysryhmä 6")
64-
self.new_mineral_system_action = menu.addAction("Kaavamääräysryhmä 7")
65-
self.new_mineral_system_action = menu.addAction("Kaavamääräysryhmä 8")
66-
self.new_mineral_system_action = menu.addAction("Kaavamääräysryhmä 9")
79+
for config in self.available_plan_regulation_group_configs:
80+
plan_regulation_group_name = ""
81+
for attribute in config.attributes:
82+
if attribute.attribute == "name":
83+
plan_regulation_group_name = attribute.display()
84+
85+
action = menu.addAction(plan_regulation_group_name)
86+
action.triggered.connect(lambda _, config=config: self.add_plan_regulation_group(config))
6787

6888
self.add_plan_regulation_group_btn.setMenu(menu)
6989

7090
def init_plan_regulation_groups(self, feature_template_config: FeatureTemplate):
91+
if feature_template_config.feature.child_features is None:
92+
return
7193
for child_feature in feature_template_config.feature.child_features:
7294
if child_feature.layer == "plan_requlation_group":
73-
plan_regulation_group_entry = PlanRegulationGroupWidget(child_feature)
74-
self.plan_regulation_group_scrollarea_contents.layout().addWidget(plan_regulation_group_entry)
95+
# Collect encountered plan regulation groups in init
96+
# This does not need to be done if Katja config file is read beforehand and
97+
# that handles available plan regulation groups
98+
self.available_plan_regulation_group_configs.append(child_feature)
99+
self.add_plan_regulation_group(child_feature)
75100
else:
76101
# TODO
77102
print(f"Encountered child feature with unrecognized layer: {child_feature.layer}")
+74
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
aluevaraukset:
2+
- geometria: Alue
3+
värikoodi: #000000
4+
kirjaintunnus: A
5+
kaavamääräyksen_otsikko: Asuinrakennusten alue
6+
kaavamääräykset:
7+
- nimi: Asumisen alue
8+
lisätiedot:
9+
- laji: Pääkäyttötarkoitus
10+
11+
- geometria: Alue
12+
värikoodi: #000000
13+
kirjaintunnus: AK
14+
kaavamääräyksen_otsikko: Asuinkerrostalojen alue
15+
kaavamääräykset:
16+
- nimi: Asuinkerrostaloalue
17+
lisätiedot:
18+
- laji: Pääkäyttötarkoitus
19+
20+
- geometria: Alue
21+
värikoodi: "#A9D08E"
22+
kirjaintunnus: AP
23+
kaavamääräyksen_otsikko: Asuinpientalojen alue
24+
kaavamääräykset:
25+
- nimi: Asuinpientaloalue
26+
lisätiedot:
27+
- laji: Pääkäyttötarkoitus
28+
29+
- geometria: Alue
30+
värikoodi: "#FFD966"
31+
kirjaintunnus: AR
32+
kaavamääräyksen_otsikko: Rivitalojen ja muiden kytkettyjen asuinrakennusten alue
33+
kaavamääräykset:
34+
- nimi: Rivitalojen ja muiden kytkettyjen asuinpientalojen alue
35+
lisätiedot:
36+
- laji: Pääkäyttötarkoitus
37+
38+
- geometria: Alue
39+
värikoodi: "#E06666"
40+
kirjaintunnus: AO
41+
kaavamääräyksen_otsikko: Erillispientalojen alue
42+
kaavamääräykset:
43+
- nimi: Erillisten asuinpientalojen alue
44+
lisätiedot:
45+
- laji: Pääkäyttötarkoitus
46+
47+
- geometria: Alue
48+
värikoodi: "#5B9BD5"
49+
kirjaintunnus: AL
50+
kaavamääräyksen_otsikko: Asuin-, liike- ja toimistorakennusten alue
51+
kaavamääräykset:
52+
- nimi: Asumisen alue
53+
- nimi: Liikerakennusten alue
54+
- nimi: Toimistorakennusten alue
55+
lisätiedot:
56+
- laji: Pääkäyttötarkoitus
57+
58+
- geometria: Alue
59+
värikoodi: "#9BC2E6"
60+
kirjaintunnus: AH
61+
kaavamääräyksen_otsikko: Asumista palveleva yhteiskäyttöinen alue
62+
kaavamääräykset:
63+
- nimi: Asumista palveleva yhteiskäyttöinen alue
64+
lisätiedot:
65+
- laji: Pääkäyttötarkoitus
66+
67+
- geometria: Alue
68+
värikoodi: "#FFD966"
69+
kirjaintunnus: AM
70+
kaavamääräyksen_otsikko: Maatilojen talouskeskusten alue
71+
kaavamääräykset:
72+
- nimi: Maatilan talouskeskuksen alue
73+
lisätiedot:
74+
- laji: Pääkäyttötarkoitus

0 commit comments

Comments
 (0)