[processing] Use matrix editor panel value if open

When an algorithm is run and the editor panel is still open
for a matrix parameter, use the table defined in that panel
as for the parameter.

Fixes #60442
This commit is contained in:
Nyall Dawson 2025-02-12 10:38:36 +10:00
parent af393490eb
commit 02bf608b91
No known key found for this signature in database
GPG Key ID: 4C61673F0BF197FC
2 changed files with 16 additions and 6 deletions

View File

@ -179,6 +179,15 @@ QgsProcessingMatrixParameterPanel::QgsProcessingMatrixParameterPanel( QWidget *p
connect( mToolButton, &QToolButton::clicked, this, &QgsProcessingMatrixParameterPanel::showDialog );
}
QVariantList QgsProcessingMatrixParameterPanel::value() const
{
// if editing widget is still open, use the value currently shown in that widget
if ( mPanelWidget )
return mPanelWidget->table();
return mTable;
}
void QgsProcessingMatrixParameterPanel::setValue( const QVariantList &value )
{
mTable = value;
@ -190,14 +199,14 @@ void QgsProcessingMatrixParameterPanel::showDialog()
{
if ( QgsPanelWidget *panel = QgsPanelWidget::findParentPanel( this ) )
{
QgsProcessingMatrixParameterPanelWidget *widget = new QgsProcessingMatrixParameterPanelWidget( this, mParam, mTable );
mPanelWidget = new QgsProcessingMatrixParameterPanelWidget( this, mParam, mTable );
widget->setPanelTitle( mParam->description() );
mPanelWidget->setPanelTitle( mParam->description() );
panel->openPanel( widget );
panel->openPanel( mPanelWidget );
connect( widget, &QgsPanelWidget::widgetChanged, this, [=] {
setValue( widget->table() );
connect( mPanelWidget, &QgsPanelWidget::widgetChanged, this, [=] {
setValue( mPanelWidget->table() );
} );
}
}

View File

@ -82,7 +82,7 @@ class GUI_EXPORT QgsProcessingMatrixParameterPanel : public QWidget
public:
QgsProcessingMatrixParameterPanel( QWidget *parent = nullptr, const QgsProcessingParameterMatrix *param = nullptr );
QVariantList value() const { return mTable; }
QVariantList value() const;
void setValue( const QVariantList &value );
@ -102,6 +102,7 @@ class GUI_EXPORT QgsProcessingMatrixParameterPanel : public QWidget
QToolButton *mToolButton = nullptr;
QVariantList mTable;
QPointer< QgsProcessingMatrixParameterPanelWidget > mPanelWidget;
friend class TestProcessingGui;
};