Skip to content

Commit ffbe002

Browse files
authored
dynamically setup parameters #1
dynamically setup parameters
1 parent 996968d commit ffbe002

File tree

3 files changed

+136
-99
lines changed

3 files changed

+136
-99
lines changed

oqtopus/gui/main_dialog.py

Lines changed: 13 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,9 @@ def __init__(self, modules_config, parent=None):
121121

122122
# Add menubar
123123
self.menubar = QMenuBar(self)
124+
# On macOS, setNativeMenuBar(False) to show the menu bar inside the dialog window
125+
if sys.platform == "darwin":
126+
self.menubar.setNativeMenuBar(False)
124127
self.layout().setMenuBar(self.menubar)
125128

126129
# Settings action
@@ -453,16 +456,7 @@ def __packagePrepareGetPUMConfig(self):
453456

454457
logger.info(f"PUM config loaded from '{pumConfigFilename}'")
455458

456-
for parameter in self.__pum_config.parameters():
457-
parameter_name = parameter.get("name", None)
458-
if parameter_name is None:
459-
continue
460-
461-
if parameter_name == "SRID":
462-
default_srid = parameter.get("default", None)
463-
if default_srid is not None:
464-
self.db_parameters_CRS_lineEdit.setText("")
465-
self.db_parameters_CRS_lineEdit.setPlaceholderText(str(default_srid))
459+
self.parameters_groupbox.setParameters(self.__pum_config.parameters())
466460

467461
sm = SchemaMigrations(self.__pum_config)
468462
migrationVersion = "0.0.0"
@@ -657,37 +651,18 @@ def __installModuleClicked(self):
657651
).exec()
658652
return
659653

660-
srid_string = self.db_parameters_CRS_lineEdit.text()
661-
if srid_string == "":
662-
srid_string = self.db_parameters_CRS_lineEdit.placeholderText()
663-
664-
if srid_string == "":
665-
CriticalMessageBox(
666-
self.tr("Error"), self.tr("Please provide a valid SRID."), None, self
667-
).exec()
668-
return
669-
670-
srid = int(srid_string)
654+
parameters = self.parameters_groupbox.parameters()
671655

672656
try:
673657
service_name = self.db_services_comboBox.currentText()
674-
with psycopg.connect(f"service={service_name}") as connection:
675-
# Check if the connection is successful
676-
if not connection:
677-
raise Exception(
678-
f"Could not connect to the database using service: {service_name}"
679-
)
680-
681-
upgrader = Upgrader(config=self.__pum_config)
682-
with OverrideCursor(Qt.CursorShape.WaitCursor):
683-
upgrader.install(
684-
connection=connection,
685-
parameters={"SRID": srid},
686-
roles=self.db_parameters_CreateAndGrantRoles_checkBox.isChecked(),
687-
grant=self.db_parameters_CreateAndGrantRoles_checkBox.isChecked(),
688-
demo_data=self.db_parameter_demoData_comboBox.currentData(),
689-
dir=self.__data_model_dir,
690-
)
658+
upgrader = Upgrader(
659+
pg_service=service_name,
660+
config=self.__pum_config,
661+
dir=self.__data_model_dir,
662+
parameters=parameters,
663+
)
664+
with OverrideCursor(Qt.CursorShape.WaitCursor):
665+
upgrader.install()
691666
except Exception as exception:
692667
CriticalMessageBox(
693668
self.tr("Error"), self.tr("Can't install the module:"), exception, self

oqtopus/gui/parameters_groupbox.py

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import logging
2+
3+
from pum import ParameterDefinition, ParameterType
4+
from qgis.PyQt.QtWidgets import (
5+
QCheckBox,
6+
QGridLayout,
7+
QGroupBox,
8+
QHBoxLayout,
9+
QLabel,
10+
QLineEdit,
11+
QWidget,
12+
)
13+
14+
logger = logging.getLogger(__name__)
15+
16+
17+
class ParameterWidget(QWidget):
18+
def __init__(self, parameter_definition: ParameterDefinition, parent):
19+
QWidget.__init__(self, parent)
20+
self.layout = QHBoxLayout(self)
21+
self.setLayout(self.layout)
22+
self.value = None
23+
24+
if parameter_definition.type != ParameterType.BOOLEAN:
25+
self.layout.addWidget(QLabel(parameter_definition.name, self))
26+
27+
if parameter_definition.type == ParameterType.BOOLEAN:
28+
self.widget = QCheckBox(parameter_definition.name, self)
29+
self.widget.setChecked(parameter_definition.default)
30+
self.layout.addWidget(self.widget)
31+
self.value = lambda: self.widget.isChecked()
32+
elif parameter_definition.type in (
33+
ParameterType.DECIMAL,
34+
ParameterType.INTEGER,
35+
ParameterType.TEXT,
36+
):
37+
self.widget = QLineEdit(self)
38+
self.widget.setPlaceholderText(parameter_definition.default.as_string())
39+
self.layout.addWidget(self.widget)
40+
if parameter_definition.type == ParameterType.TEXT:
41+
self.value = lambda: self.widget.text()
42+
else:
43+
self.value = lambda: self.widget.value()
44+
45+
46+
class ParametersGroupBox(QGroupBox):
47+
def __init__(self, parent):
48+
QGroupBox.__init__(self, parent)
49+
self.layout = QGridLayout(self)
50+
self.setLayout(self.layout)
51+
self.parameter_widgets = {}
52+
53+
def setParameters(self, parameters: list[ParameterDefinition]):
54+
logger.info("Setting parameters in ParametersGroupBox (%s)", len(parameters))
55+
self.clean()
56+
self.parameters = parameters
57+
# Remove all widgets from the parameters_group_box layout
58+
for parameter in parameters:
59+
pw = ParameterWidget(parameter, self)
60+
self.layout.addWidget(pw)
61+
self.parameter_widgets[parameter.name] = pw
62+
63+
def parameters_values(self):
64+
values = {}
65+
for parameter in self.parameters:
66+
values[parameter.name] = self.parameter_widgets[parameter.name].value()
67+
return values
68+
69+
def clean(self):
70+
for widget in self.parameter_widgets:
71+
widget.deleteLater()
72+
self.parameter_widgets = {}

oqtopus/ui/main_dialog.ui

Lines changed: 51 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<rect>
77
<x>0</x>
88
<y>0</y>
9-
<width>1255</width>
9+
<width>1407</width>
1010
<height>797</height>
1111
</rect>
1212
</property>
@@ -82,7 +82,7 @@
8282
<item row="4" column="1">
8383
<spacer name="verticalSpacer_6">
8484
<property name="orientation">
85-
<enum>Qt::Vertical</enum>
85+
<enum>Qt::Orientation::Vertical</enum>
8686
</property>
8787
<property name="sizeHint" stdset="0">
8888
<size>
@@ -137,7 +137,7 @@
137137
<item row="3" column="1">
138138
<spacer name="verticalSpacer_9">
139139
<property name="orientation">
140-
<enum>Qt::Vertical</enum>
140+
<enum>Qt::Orientation::Vertical</enum>
141141
</property>
142142
<property name="sizeHint" stdset="0">
143143
<size>
@@ -150,7 +150,7 @@
150150
<item row="0" column="0" rowspan="4">
151151
<widget class="QTreeWidget" name="logs_treeWidget">
152152
<property name="selectionMode">
153-
<enum>QAbstractItemView::ContiguousSelection</enum>
153+
<enum>QAbstractItemView::SelectionMode::ContiguousSelection</enum>
154154
</property>
155155
<column>
156156
<property name="text">
@@ -191,7 +191,7 @@
191191
<string>-</string>
192192
</property>
193193
<property name="textInteractionFlags">
194-
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
194+
<set>Qt::TextInteractionFlag::LinksAccessibleByMouse|Qt::TextInteractionFlag::TextSelectableByKeyboard|Qt::TextInteractionFlag::TextSelectableByMouse</set>
195195
</property>
196196
</widget>
197197
</item>
@@ -205,7 +205,7 @@
205205
<item row="2" column="0">
206206
<spacer name="verticalSpacer_7">
207207
<property name="orientation">
208-
<enum>Qt::Vertical</enum>
208+
<enum>Qt::Orientation::Vertical</enum>
209209
</property>
210210
<property name="sizeHint" stdset="0">
211211
<size>
@@ -221,7 +221,7 @@
221221
<item row="5" column="0" colspan="3">
222222
<widget class="QDialogButtonBox" name="buttonBox">
223223
<property name="standardButtons">
224-
<set>QDialogButtonBox::Close|QDialogButtonBox::Help</set>
224+
<set>QDialogButtonBox::StandardButton::Close|QDialogButtonBox::StandardButton::Help</set>
225225
</property>
226226
</widget>
227227
</item>
@@ -269,10 +269,10 @@
269269
<item row="4" column="0">
270270
<spacer name="verticalSpacer_8">
271271
<property name="orientation">
272-
<enum>Qt::Vertical</enum>
272+
<enum>Qt::Orientation::Vertical</enum>
273273
</property>
274274
<property name="sizeType">
275-
<enum>QSizePolicy::Fixed</enum>
275+
<enum>QSizePolicy::Policy::Fixed</enum>
276276
</property>
277277
<property name="sizeHint" stdset="0">
278278
<size>
@@ -332,7 +332,7 @@
332332
<item row="9" column="0">
333333
<spacer name="verticalSpacer">
334334
<property name="orientation">
335-
<enum>Qt::Vertical</enum>
335+
<enum>Qt::Orientation::Vertical</enum>
336336
</property>
337337
<property name="sizeHint" stdset="0">
338338
<size>
@@ -398,7 +398,7 @@
398398
<string>-</string>
399399
</property>
400400
<property name="textInteractionFlags">
401-
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
401+
<set>Qt::TextInteractionFlag::LinksAccessibleByMouse|Qt::TextInteractionFlag::TextSelectableByKeyboard|Qt::TextInteractionFlag::TextSelectableByMouse</set>
402402
</property>
403403
</widget>
404404
</item>
@@ -408,7 +408,7 @@
408408
<item row="3" column="2">
409409
<spacer name="verticalSpacer_5">
410410
<property name="orientation">
411-
<enum>Qt::Vertical</enum>
411+
<enum>Qt::Orientation::Vertical</enum>
412412
</property>
413413
<property name="sizeHint" stdset="0">
414414
<size>
@@ -435,7 +435,7 @@
435435
<string>/Users/denisrouzaud/.pg_service.conf</string>
436436
</property>
437437
<property name="textInteractionFlags">
438-
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
438+
<set>Qt::TextInteractionFlag::LinksAccessibleByMouse|Qt::TextInteractionFlag::TextSelectableByKeyboard|Qt::TextInteractionFlag::TextSelectableByMouse</set>
439439
</property>
440440
</widget>
441441
</item>
@@ -524,7 +524,7 @@
524524
<string>...</string>
525525
</property>
526526
<property name="popupMode">
527-
<enum>QToolButton::InstantPopup</enum>
527+
<enum>QToolButton::ToolButtonPopupMode::InstantPopup</enum>
528528
</property>
529529
</widget>
530530
</item>
@@ -538,7 +538,7 @@
538538
<item row="4" column="0">
539539
<spacer name="verticalSpacer_2">
540540
<property name="orientation">
541-
<enum>Qt::Vertical</enum>
541+
<enum>Qt::Orientation::Vertical</enum>
542542
</property>
543543
<property name="sizeHint" stdset="0">
544544
<size>
@@ -574,53 +574,35 @@
574574
</property>
575575
<layout class="QVBoxLayout" name="verticalLayout">
576576
<item>
577-
<widget class="QGroupBox" name="groupBox_5">
577+
<widget class="QCheckBox" name="db_parameters_CreateAndGrantRoles_checkBox">
578+
<property name="text">
579+
<string>Create and grant roles</string>
580+
</property>
581+
<property name="checked">
582+
<bool>true</bool>
583+
</property>
584+
</widget>
585+
</item>
586+
<item>
587+
<layout class="QHBoxLayout" name="horizontalLayout">
588+
<item>
589+
<widget class="QLabel" name="label_20">
590+
<property name="text">
591+
<string>Demo data:</string>
592+
</property>
593+
</widget>
594+
</item>
595+
<item>
596+
<widget class="QComboBox" name="db_parameter_demoData_comboBox"/>
597+
</item>
598+
</layout>
599+
</item>
600+
<item>
601+
<widget class="ParametersGroupBox" name="parameters_groupbox">
578602
<property name="title">
579603
<string>Parameters</string>
580604
</property>
581-
<layout class="QGridLayout" name="gridLayout_6">
582-
<item row="0" column="1">
583-
<widget class="QLineEdit" name="db_parameters_CRS_lineEdit">
584-
<property name="text">
585-
<string/>
586-
</property>
587-
</widget>
588-
</item>
589-
<item row="0" column="0">
590-
<widget class="QLabel" name="label_14">
591-
<property name="text">
592-
<string>CRS:</string>
593-
</property>
594-
</widget>
595-
</item>
596-
<item row="2" column="0">
597-
<widget class="QLabel" name="label_20">
598-
<property name="text">
599-
<string>Demo data:</string>
600-
</property>
601-
</widget>
602-
</item>
603-
<item row="2" column="1">
604-
<widget class="QComboBox" name="db_parameter_demoData_comboBox"/>
605-
</item>
606-
<item row="1" column="1">
607-
<widget class="QCheckBox" name="db_parameters_CreateAndGrantRoles_checkBox">
608-
<property name="text">
609-
<string/>
610-
</property>
611-
<property name="checked">
612-
<bool>true</bool>
613-
</property>
614-
</widget>
615-
</item>
616-
<item row="1" column="0">
617-
<widget class="QLabel" name="label_21">
618-
<property name="text">
619-
<string>Create and grant roles</string>
620-
</property>
621-
</widget>
622-
</item>
623-
</layout>
605+
<layout class="QGridLayout" name="gridLayout_6"/>
624606
</widget>
625607
</item>
626608
<item>
@@ -643,7 +625,7 @@
643625
<item row="1" column="0">
644626
<spacer name="verticalSpacer_3">
645627
<property name="orientation">
646-
<enum>Qt::Vertical</enum>
628+
<enum>Qt::Orientation::Vertical</enum>
647629
</property>
648630
<property name="sizeHint" stdset="0">
649631
<size>
@@ -702,7 +684,7 @@
702684
<item row="2" column="0">
703685
<spacer name="verticalSpacer_4">
704686
<property name="orientation">
705-
<enum>Qt::Vertical</enum>
687+
<enum>Qt::Orientation::Vertical</enum>
706688
</property>
707689
<property name="sizeHint" stdset="0">
708690
<size>
@@ -721,6 +703,14 @@
721703
</item>
722704
</layout>
723705
</widget>
706+
<customwidgets>
707+
<customwidget>
708+
<class>ParametersGroupBox</class>
709+
<extends>QGroupBox</extends>
710+
<header>oqtopus.gui.parameters_groupbox</header>
711+
<container>1</container>
712+
</customwidget>
713+
</customwidgets>
724714
<resources/>
725715
<connections/>
726716
</ui>

0 commit comments

Comments
 (0)