def __select_wfs_layer(self) -> None: indexes = self.tbl_wdgt_stored_queries.selectedIndexes() if not indexes: LOGGER.warning( tr("Could not execute select"), extra=bar_msg(tr("Data source must be selected first!")), ) return self.selected_stored_query = self.stored_queries[indexes[0].row()] LOGGER.info( tr("Selected query id: {}", self.selected_stored_query.id)) # type: ignore # noqa E501 self.sq_factory.expand(self.selected_stored_query) # type: ignore for widget_set in self.parameter_rows.values(): for widget in widget_set: if isinstance(widget, QVBoxLayout): self.grid.removeItem(widget) else: self.grid.removeWidget(widget) widget.hide() widget.setParent(None) widget = None self.parameter_rows = {} row_idx = -1 self.extent_group_box_bbox.setEnabled(False) for param_name, parameter in self.selected_stored_query.parameters.items( ): # type: ignore # noqa E501 possible_values = parameter.possible_values widgets = set() # type: ignore if parameter.type in (QVariant.Rect, QVariant.RectF): self.parameter_rows[param_name] = widgets self.extent_group_box_bbox.setEnabled(True) if possible_values: dataset_extent = QgsRectangle( *(map(float, possible_values[0].split(",")))) current_extent: QgsRectangle = ( self.extent_group_box_bbox.outputExtent()) extent_msg = tr( "Your extent: {}, dataset maximum extent: {}", current_extent.toString(2), dataset_extent.toString(2), ) if dataset_extent.area() / current_extent.area() > 100: LOGGER.warning( tr("Big difference in bounding boxes"), extra=bar_msg( tr( "You might want to get a larger extent. {}", extent_msg, )), ) elif current_extent.area() / dataset_extent.area() > 100: LOGGER.warning( tr("Big difference in bounding boxes"), extra=bar_msg( tr( "You might want to get a smaller extent. {}", extent_msg, )), ) if not current_extent.toRectF().intersects( dataset_extent.toRectF()): LOGGER.warning( tr("Your bounding box and dataset bounding " "box do not intersect"), extra=bar_msg( tr( "You might want to change your extent. {}", extent_msg, )), ) continue row_idx += 1 widget: QWidget = widget_for_field(parameter.type) # type: ignore if (isinstance(widget, QComboBox) or isinstance(widget, QSpinBox) or isinstance(widget, QgsDoubleSpinBox)): widget = QLineEdit() if possible_values: if len(possible_values) == 1: widget.setText(possible_values[0]) else: widget = QComboBox() widget.addItems(possible_values) widget.setEditable(True) if isinstance(widget, QgsDateTimeEdit) and possible_values: widget.setDateTimeRange(min(possible_values), max(possible_values)) if param_name.startswith("end"): widget.setDateTime(max(possible_values)) else: widget.setDateTime(min(possible_values)) if len(possible_values) == 1: widget.setEnabled(False) widget.setToolTip(parameter.abstract) if parameter.type == QVariant.StringList: if parameter.has_variables(): widget = QVBoxLayout() widget.addStretch(1) for variable in parameter.variables: box = QCheckBox(text=variable.alias) box.setToolTip(variable.label) widgets.add(box) widget.addWidget(box) LOGGER.info(tr("Variables: {}", variable.alias)) # TODO: all others if widget is None: LOGGER.error( tr("Unknown parameter type"), extra=bar_msg( tr('With parameter"{}": {}', param_name, parameter.type)), ) return label = QLabel(text=parameter.name) label.setToolTip(parameter.abstract) widgets.update({label, widget}) self.grid.addWidget(label, row_idx, 1) if isinstance(widget, QVBoxLayout): self.grid.addLayout(widget, row_idx, 2) else: self.grid.addWidget(widget, row_idx, 2) self.parameter_rows[param_name] = widgets