Skip to content

Commit

Permalink
Fix self.dlg Python error, generating folders in Processing
Browse files Browse the repository at this point in the history
  • Loading branch information
Gustry committed Oct 11, 2024
1 parent d007143 commit 0eb54ca
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 38 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

## Unreleased

* Fix different issues

## 0.6.7 - 2024-09-30

* Add a message to restart QGIS
Expand Down
4 changes: 4 additions & 0 deletions dynamic_layers/core/generate_projects.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,10 @@ def process(self) -> bool:
)
new_path = Path(f"{self.destination}/{new_file}")

# The new path can contain new folder, specific to the evaluated expression
if not new_path.parent.exists():
new_path.parent.mkdir()

# First copy side-car files, to avoid Lizmap to have question about a new project without CFG file
cfg_file = None
if self.copy_side_car_files:
Expand Down
55 changes: 19 additions & 36 deletions dynamic_layers/dynamic_layers_dialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,9 +114,7 @@ def __init__(self, parent: QDialog = None):
},
]

# Keep record of style widget
self.selectedLayerWidget = None
self.selectedLayer = None
self.selected_layer = None

# Variables
self.variableList = []
Expand Down Expand Up @@ -365,7 +363,7 @@ def on_cb_datasource_active_change(self):
Toggle the status "dynamicDatasourceActive" for the selected layer
when the user uses the checkbox
"""
if not self.selectedLayer:
if not self.selected_layer:
return

# Get selected lines
Expand All @@ -391,7 +389,7 @@ def on_cb_datasource_active_change(self):
self.twLayers.item(row, 1).setData(QtVar.EditRole, '✔' if input_value else '')

# Record the new value in the project
self.selectedLayer.setCustomProperty(CustomProperty.DynamicDatasourceActive, input_value)
self.selected_layer.setCustomProperty(CustomProperty.DynamicDatasourceActive, input_value)
self.project.setDirty(True)

def on_layer_property_change(self, key: str):
Expand All @@ -400,7 +398,7 @@ def on_layer_property_change(self, key: str):
when the user change the content
of the corresponding text input
"""
if not self.selectedLayer:
if not self.selected_layer:
return

# Get changed item
Expand All @@ -417,21 +415,21 @@ def on_layer_property_change(self, key: str):
input_value = ''

# Record the new value in the project
self.selectedLayer.setCustomProperty(item['xml'], input_value.strip())
self.selected_layer.setCustomProperty(item['xml'], input_value.strip())
self.project.setDirty(True)

def on_copy_from_layer(self):
"""
Get the layer datasource and copy it in the dynamic datasource text input
"""
if not self.selectedLayer:
if not self.selected_layer:
return

# Get the layer datasource
uri = format_expression(self.selectedLayer.dataProvider().dataSourceUri().split('|')[0], self.is_expression)
abstract = format_expression(self.selectedLayer.abstract(), self.is_expression)
title = format_expression(self.selectedLayer.title(), self.is_expression)
name = format_expression(self.selectedLayer.name(), self.is_expression)
uri = format_expression(self.selected_layer.dataProvider().dataSourceUri().split('|')[0], self.is_expression)
abstract = format_expression(self.selected_layer.abstract(), self.is_expression)
title = format_expression(self.selected_layer.title(), self.is_expression)
name = format_expression(self.selected_layer.name(), self.is_expression)

# Previous values
previous_uri = self.dynamicDatasourceContent.toPlainText()
Expand All @@ -450,7 +448,7 @@ def on_copy_from_layer(self):
ask = True

if ask:
box = QMessageBox(self.dlg)
box = QMessageBox(self)
box.setIcon(QMessageBox.Question)
box.setWindowIcon(QIcon(str(resources_path('icons', 'icon.png'))))
box.setWindowTitle(tr('Replace settings by layer properties'))
Expand Down Expand Up @@ -556,7 +554,7 @@ def on_copy_from_project_clicked(self):
ask = True

if ask:
box = QMessageBox(self.dlg)
box = QMessageBox(self)
box.setIcon(QMessageBox.Question)
# noinspection PyArgumentList
box.setWindowIcon(QIcon(str(resources_path('icons', 'icon.png'))))
Expand Down Expand Up @@ -792,41 +790,26 @@ def on_row_selection_changed(self):
Change content of dynamic properties group inputs
When the user selects a layer in the table
"""
show_layer_properties = True

# Get selected lines
lines = self.twLayers.selectionModel().selectedRows()
if len(lines) < 1:
return

layer = None
self.selected_layer = None

if show_layer_properties:
row = lines[0].row()

# Get layer
layer_id = self.twLayers.item(row, 0).data(QtVar.UserRole)
layer = self.project.mapLayer(layer_id)
if not layer:
show_layer_properties = False
else:
self.selected_layer = layer

if not lines or len(lines) != 1:
show_layer_properties = False
row = lines[0].row()
layer_id = self.twLayers.item(row, 0).data(QtVar.UserRole)
self.selected_layer = self.project.mapLayer(layer_id)

# Toggle the layer properties group
self.gbLayerDynamicProperties.setEnabled(show_layer_properties)
self.gbLayerDynamicProperties.setEnabled(self.selected_layer is not None)

if not layer:
if not self.selected_layer:
return

# Set the content of the layer properties inputs
# dynamic datasource text input content
for key, item in self.layerPropertiesInputs.items():
widget = item['widget']
val = layer.customProperty(item['xml'])
val = self.selected_layer.customProperty(item['xml'])
if not val:
val = ''
if item['wType'] == WidgetType.Text:
Expand All @@ -841,7 +824,7 @@ def on_row_selection_changed(self):
widget.setCurrentIndex(list_dic[val])

# "active" checkbox
is_active = layer.customProperty(CustomProperty.DynamicDatasourceActive)
is_active = self.selected_layer.customProperty(CustomProperty.DynamicDatasourceActive)
if is_active is None:
is_active = False

Expand Down
7 changes: 5 additions & 2 deletions dynamic_layers/processing_provider/generate_projects.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,10 +77,13 @@ def initAlgorithm(self, config=None):

parameter = QgsProcessingParameterExpression(
self.EXPRESSION_DESTINATION,
tr('QGIS Expression to format the final filename. It must end with .qgs or .qgz'),
tr('QGIS Expression to format the final filename. It must end with .qgs or .qgz.'),
parentLayerParameterName=self.INPUT,
)
parameter.setHelp(tr("The template must have the extension."))
parameter.setHelp(tr(
"The template must have the file extension. A set of new folder can be created on the fly by adding your "
"folder separator in the expression."
))
self.addParameter(parameter)

self.addParameter(
Expand Down

0 comments on commit 0eb54ca

Please sign in to comment.