diff --git a/src/app/qgsattributesformproperties.cpp b/src/app/qgsattributesformproperties.cpp index 0f16dc890f6..049f2b28d68 100644 --- a/src/app/qgsattributesformproperties.cpp +++ b/src/app/qgsattributesformproperties.cpp @@ -966,119 +966,162 @@ void DnDTree::onItemDoubleClicked( QTreeWidgetItem *item, int column ) QWidget *baseWidget = new QWidget(); baseWidget->setLayout( baseLayout ); - if ( itemData.type() == QgsAttributesFormProperties::DnDTreeItemData::Container ) + switch ( itemData.type() ) { - QDialog dlg; - dlg.setWindowTitle( tr( "Configure Container" ) ); - QFormLayout *layout = new QFormLayout() ; - dlg.setLayout( layout ); - layout->addRow( baseWidget ); - - QCheckBox *showAsGroupBox = nullptr; - QLineEdit *title = new QLineEdit( itemData.name() ); - QSpinBox *columnCount = new QSpinBox(); - QGroupBox *visibilityExpressionGroupBox = new QGroupBox( tr( "Control visibility by expression" ) ); - visibilityExpressionGroupBox->setCheckable( true ); - visibilityExpressionGroupBox->setChecked( itemData.visibilityExpression().enabled() ); - visibilityExpressionGroupBox->setLayout( new QGridLayout ); - QgsFieldExpressionWidget *visibilityExpressionWidget = new QgsFieldExpressionWidget; - visibilityExpressionWidget->setLayer( mLayer ); - visibilityExpressionWidget->setExpressionDialogTitle( tr( "Visibility Expression" ) ); - visibilityExpressionWidget->setExpression( itemData.visibilityExpression()->expression() ); - visibilityExpressionGroupBox->layout()->addWidget( visibilityExpressionWidget ); - - columnCount->setRange( 1, 5 ); - columnCount->setValue( itemData.columnCount() ); - - layout->addRow( tr( "Title" ), title ); - layout->addRow( tr( "Column count" ), columnCount ); - layout->addRow( visibilityExpressionGroupBox ); - - if ( !item->parent() ) + case QgsAttributesFormProperties::DnDTreeItemData::Container: { - showAsGroupBox = new QCheckBox( tr( "Show as group box" ) ); - showAsGroupBox->setChecked( itemData.showAsGroupBox() ); - layout->addRow( showAsGroupBox ); + QDialog dlg; + dlg.setWindowTitle( tr( "Configure Container" ) ); + QFormLayout *layout = new QFormLayout() ; + dlg.setLayout( layout ); + layout->addRow( baseWidget ); + + QCheckBox *showAsGroupBox = nullptr; + QLineEdit *title = new QLineEdit( itemData.name() ); + QSpinBox *columnCount = new QSpinBox(); + QGroupBox *visibilityExpressionGroupBox = new QGroupBox( tr( "Control visibility by expression" ) ); + visibilityExpressionGroupBox->setCheckable( true ); + visibilityExpressionGroupBox->setChecked( itemData.visibilityExpression().enabled() ); + visibilityExpressionGroupBox->setLayout( new QGridLayout ); + QgsFieldExpressionWidget *visibilityExpressionWidget = new QgsFieldExpressionWidget; + visibilityExpressionWidget->setLayer( mLayer ); + visibilityExpressionWidget->setExpressionDialogTitle( tr( "Visibility Expression" ) ); + visibilityExpressionWidget->setExpression( itemData.visibilityExpression()->expression() ); + visibilityExpressionGroupBox->layout()->addWidget( visibilityExpressionWidget ); + + columnCount->setRange( 1, 5 ); + columnCount->setValue( itemData.columnCount() ); + + layout->addRow( tr( "Title" ), title ); + layout->addRow( tr( "Column count" ), columnCount ); + layout->addRow( visibilityExpressionGroupBox ); + + if ( !item->parent() ) + { + showAsGroupBox = new QCheckBox( tr( "Show as group box" ) ); + showAsGroupBox->setChecked( itemData.showAsGroupBox() ); + layout->addRow( showAsGroupBox ); + } + + QDialogButtonBox *buttonBox = new QDialogButtonBox( QDialogButtonBox::Ok + | QDialogButtonBox::Cancel ); + + connect( buttonBox, &QDialogButtonBox::accepted, &dlg, &QDialog::accept ); + connect( buttonBox, &QDialogButtonBox::rejected, &dlg, &QDialog::reject ); + + layout->addWidget( buttonBox ); + + if ( dlg.exec() ) + { + itemData.setColumnCount( columnCount->value() ); + itemData.setShowAsGroupBox( showAsGroupBox ? showAsGroupBox->isChecked() : true ); + itemData.setName( title->text() ); + itemData.setShowLabel( showLabelCheckbox->isChecked() ); + + QgsOptionalExpression visibilityExpression; + visibilityExpression.setData( QgsExpression( visibilityExpressionWidget->expression() ) ); + visibilityExpression.setEnabled( visibilityExpressionGroupBox->isChecked() ); + itemData.setVisibilityExpression( visibilityExpression ); + + item->setData( 0, QgsAttributesFormProperties::DnDTreeRole, itemData ); + item->setText( 0, title->text() ); + } } + break; - QDialogButtonBox *buttonBox = new QDialogButtonBox( QDialogButtonBox::Ok - | QDialogButtonBox::Cancel ); - - connect( buttonBox, &QDialogButtonBox::accepted, &dlg, &QDialog::accept ); - connect( buttonBox, &QDialogButtonBox::rejected, &dlg, &QDialog::reject ); - - layout->addWidget( buttonBox ); - - if ( dlg.exec() ) + case QgsAttributesFormProperties::DnDTreeItemData::Relation: { - itemData.setColumnCount( columnCount->value() ); - itemData.setShowAsGroupBox( showAsGroupBox ? showAsGroupBox->isChecked() : true ); - itemData.setName( title->text() ); - itemData.setShowLabel( showLabelCheckbox->isChecked() ); + QDialog dlg; + dlg.setWindowTitle( tr( "Configure Relation Editor" ) ); + QFormLayout *layout = new QFormLayout() ; + dlg.setLayout( layout ); + layout->addWidget( baseWidget ); - QgsOptionalExpression visibilityExpression; - visibilityExpression.setData( QgsExpression( visibilityExpressionWidget->expression() ) ); - visibilityExpression.setEnabled( visibilityExpressionGroupBox->isChecked() ); - itemData.setVisibilityExpression( visibilityExpression ); + QCheckBox *showLinkButton = new QCheckBox( tr( "Show link button" ) ); + showLinkButton->setChecked( itemData.relationEditorConfiguration().showLinkButton ); + QCheckBox *showUnlinkButton = new QCheckBox( tr( "Show unlink button" ) ); + showUnlinkButton->setChecked( itemData.relationEditorConfiguration().showUnlinkButton ); + layout->addRow( showLinkButton ); + layout->addRow( showUnlinkButton ); - item->setData( 0, QgsAttributesFormProperties::DnDTreeRole, itemData ); - item->setText( 0, title->text() ); + QDialogButtonBox *buttonBox = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel ); + + connect( buttonBox, &QDialogButtonBox::accepted, &dlg, &QDialog::accept ); + connect( buttonBox, &QDialogButtonBox::rejected, &dlg, &QDialog::reject ); + + dlg.layout()->addWidget( buttonBox ); + + if ( dlg.exec() ) + { + QgsAttributesFormProperties::RelationEditorConfiguration relEdCfg; + relEdCfg.showLinkButton = showLinkButton->isChecked(); + relEdCfg.showUnlinkButton = showUnlinkButton->isChecked(); + itemData.setShowLabel( showLabelCheckbox->isChecked() ); + itemData.setRelationEditorConfiguration( relEdCfg ); + + item->setData( 0, QgsAttributesFormProperties::DnDTreeRole, itemData ); + } } - } - else if ( itemData.type() == QgsAttributesFormProperties::DnDTreeItemData::Relation ) - { - QDialog dlg; - dlg.setWindowTitle( tr( "Configure Relation Editor" ) ); - QFormLayout *layout = new QFormLayout() ; - dlg.setLayout( layout ); - layout->addWidget( baseWidget ); + break; - QCheckBox *showLinkButton = new QCheckBox( tr( "Show link button" ) ); - showLinkButton->setChecked( itemData.relationEditorConfiguration().showLinkButton ); - QCheckBox *showUnlinkButton = new QCheckBox( tr( "Show unlink button" ) ); - showUnlinkButton->setChecked( itemData.relationEditorConfiguration().showUnlinkButton ); - layout->addRow( showLinkButton ); - layout->addRow( showUnlinkButton ); - - QDialogButtonBox *buttonBox = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel ); - - connect( buttonBox, &QDialogButtonBox::accepted, &dlg, &QDialog::accept ); - connect( buttonBox, &QDialogButtonBox::rejected, &dlg, &QDialog::reject ); - - dlg.layout()->addWidget( buttonBox ); - - if ( dlg.exec() ) + case QgsAttributesFormProperties::DnDTreeItemData::QmlWidget: { - QgsAttributesFormProperties::RelationEditorConfiguration relEdCfg; - relEdCfg.showLinkButton = showLinkButton->isChecked(); - relEdCfg.showUnlinkButton = showUnlinkButton->isChecked(); - itemData.setShowLabel( showLabelCheckbox->isChecked() ); - itemData.setRelationEditorConfiguration( relEdCfg ); + QDialog dlg; + dlg.setWindowTitle( tr( "Configure QML Widget" ) ); + QFormLayout *layout = new QFormLayout() ; + dlg.setLayout( layout ); + layout->addWidget( baseWidget ); - item->setData( 0, QgsAttributesFormProperties::DnDTreeRole, itemData ); + QCheckBox *showLinkButton = new QCheckBox( tr( "Show link button" ) ); + showLinkButton->setChecked( itemData.relationEditorConfiguration().showLinkButton ); + QCheckBox *showUnlinkButton = new QCheckBox( tr( "Show unlink button" ) ); + showUnlinkButton->setChecked( itemData.relationEditorConfiguration().showUnlinkButton ); + layout->addRow( showLinkButton ); + layout->addRow( showUnlinkButton ); + + QDialogButtonBox *buttonBox = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel ); + + connect( buttonBox, &QDialogButtonBox::accepted, &dlg, &QDialog::accept ); + connect( buttonBox, &QDialogButtonBox::rejected, &dlg, &QDialog::reject ); + + dlg.layout()->addWidget( buttonBox ); + + if ( dlg.exec() ) + { + QgsAttributesFormProperties::RelationEditorConfiguration relEdCfg; + relEdCfg.showLinkButton = showLinkButton->isChecked(); + relEdCfg.showUnlinkButton = showUnlinkButton->isChecked(); + itemData.setShowLabel( showLabelCheckbox->isChecked() ); + itemData.setRelationEditorConfiguration( relEdCfg ); + + item->setData( 0, QgsAttributesFormProperties::DnDTreeRole, itemData ); + } } - } - else - { - QDialog dlg; - dlg.setWindowTitle( tr( "Configure Field" ) ); - dlg.setLayout( new QGridLayout() ); - dlg.layout()->addWidget( baseWidget ); + break; - QDialogButtonBox *buttonBox = new QDialogButtonBox( QDialogButtonBox::Ok - | QDialogButtonBox::Cancel ); - - connect( buttonBox, &QDialogButtonBox::accepted, &dlg, &QDialog::accept ); - connect( buttonBox, &QDialogButtonBox::rejected, &dlg, &QDialog::reject ); - - dlg.layout()->addWidget( buttonBox ); - - if ( dlg.exec() ) + case QgsAttributesFormProperties::DnDTreeItemData::Field: { - itemData.setShowLabel( showLabelCheckbox->isChecked() ); + QDialog dlg; + dlg.setWindowTitle( tr( "Configure Field" ) ); + dlg.setLayout( new QGridLayout() ); + dlg.layout()->addWidget( baseWidget ); - item->setData( 0, QgsAttributesFormProperties::DnDTreeRole, itemData ); + QDialogButtonBox *buttonBox = new QDialogButtonBox( QDialogButtonBox::Ok + | QDialogButtonBox::Cancel ); + + connect( buttonBox, &QDialogButtonBox::accepted, &dlg, &QDialog::accept ); + connect( buttonBox, &QDialogButtonBox::rejected, &dlg, &QDialog::reject ); + + dlg.layout()->addWidget( buttonBox ); + + if ( dlg.exec() ) + { + itemData.setShowLabel( showLabelCheckbox->isChecked() ); + + item->setData( 0, QgsAttributesFormProperties::DnDTreeRole, itemData ); + } } + break; } }