Skip to content

Commit

Permalink
move relation editor widget specific config to its own class
Browse files Browse the repository at this point in the history
  • Loading branch information
3nids authored and signedav committed Aug 5, 2020
1 parent c0becb4 commit 897c749
Show file tree
Hide file tree
Showing 4 changed files with 148 additions and 106 deletions.
72 changes: 46 additions & 26 deletions src/gui/attributeformconfig/qgsattributewidgetedit.cpp
Expand Up @@ -29,18 +29,18 @@ QgsAttributeWidgetEdit::QgsAttributeWidgetEdit( QTreeWidgetItem *item, QWidget *
// common configs
mShowLabelCheckBox->setChecked( itemData.showLabel() );


switch ( itemData.type() )
{
case QgsAttributesFormProperties::DnDTreeItemData::Relation:
{
showRelationButtons( true );
mRelationShowLinkCheckBox->setChecked( itemData.relationEditorConfiguration().buttons.testFlag( QgsAttributeEditorRelation::Button::Link ) );
mRelationShowUnlinkCheckBox->setChecked( itemData.relationEditorConfiguration().buttons.testFlag( QgsAttributeEditorRelation::Button::Unlink ) );
mRelationShowAddChildCheckBox->setChecked( itemData.relationEditorConfiguration().buttons.testFlag( QgsAttributeEditorRelation::Button::AddChildFeature ) );
mRelationShowDuplicateChildFeatureCheckBox->setChecked( itemData.relationEditorConfiguration().buttons.testFlag( QgsAttributeEditorRelation::Button::DuplicateChildFeature ) );
mRelationShowZoomToFeatureCheckBox->setChecked( itemData.relationEditorConfiguration().buttons.testFlag( QgsAttributeEditorRelation::Button::ZoomToChildFeature ) );
mRelationDeleteChildFeatureCheckBox->setChecked( itemData.relationEditorConfiguration().buttons.testFlag( QgsAttributeEditorRelation::Button::DeleteChildFeature ) );
mRelationShowSaveChildEditsCheckBox->setChecked( itemData.relationEditorConfiguration().buttons.testFlag( QgsAttributeEditorRelation::Button::SaveChildEdits ) );
QGridLayout *layout = new QGridLayout;
QgsAttributeWidgetRelationEditWidget *editWidget = new QgsAttributeWidgetRelationEditWidget( this );
editWidget->setRelationEditorConfiguration( itemData.relationEditorConfiguration() );
mSpecificEditWidget = editWidget;
layout->addWidget( mSpecificEditWidget );
mWidgetSpecificConfigGroupBox->setLayout( layout );

}
break;

Expand All @@ -49,11 +49,9 @@ QgsAttributeWidgetEdit::QgsAttributeWidgetEdit( QTreeWidgetItem *item, QWidget *
case QgsAttributesFormProperties::DnDTreeItemData::QmlWidget:
case QgsAttributesFormProperties::DnDTreeItemData::HtmlWidget:
case QgsAttributesFormProperties::DnDTreeItemData::WidgetType:
showRelationButtons( false );
mWidgetSpecificConfigGroupBox->hide();
break;
}


}

void QgsAttributeWidgetEdit::updateItemData()
Expand All @@ -68,17 +66,11 @@ void QgsAttributeWidgetEdit::updateItemData()
{
case QgsAttributesFormProperties::DnDTreeItemData::Relation:
{
QgsAttributesFormProperties::RelationEditorConfiguration relEdCfg;
QgsAttributeEditorRelation::Buttons buttons;
buttons.setFlag( QgsAttributeEditorRelation::Button::Link, mRelationShowLinkCheckBox->isChecked() );
buttons.setFlag( QgsAttributeEditorRelation::Button::Unlink, mRelationShowUnlinkCheckBox->isChecked() );
buttons.setFlag( QgsAttributeEditorRelation::Button::AddChildFeature, mRelationShowAddChildCheckBox->isChecked() );
buttons.setFlag( QgsAttributeEditorRelation::Button::DuplicateChildFeature, mRelationShowDuplicateChildFeatureCheckBox->isChecked() );
buttons.setFlag( QgsAttributeEditorRelation::Button::ZoomToChildFeature, mRelationShowZoomToFeatureCheckBox->isChecked() );
buttons.setFlag( QgsAttributeEditorRelation::Button::DeleteChildFeature, mRelationDeleteChildFeatureCheckBox->isChecked() );
buttons.setFlag( QgsAttributeEditorRelation::Button::SaveChildEdits, mRelationShowSaveChildEditsCheckBox->isChecked() );
relEdCfg.buttons = buttons;
itemData.setRelationEditorConfiguration( relEdCfg );
QgsAttributeWidgetRelationEditWidget *editWidget = qobject_cast<QgsAttributeWidgetRelationEditWidget *>( mWidgetSpecificConfigGroupBox );
if ( editWidget )
{
itemData.setRelationEditorConfiguration( editWidget->relationEditorConfiguration() );
}
}
break;

Expand All @@ -93,9 +85,37 @@ void QgsAttributeWidgetEdit::updateItemData()
mTreeItem->setData( 0, QgsAttributesFormProperties::DnDTreeRole, itemData );
}

void QgsAttributeWidgetEdit::showRelationButtons( bool show )

// Relation Widget Specific Edit

QgsAttributeWidgetRelationEditWidget::QgsAttributeWidgetRelationEditWidget( QWidget *parent )
: QWidget( parent )
{
setupUi( this );
}

void QgsAttributeWidgetRelationEditWidget::setRelationEditorConfiguration( const QgsAttributesFormProperties::RelationEditorConfiguration &config )
{
mRelationShowLinkCheckBox->setChecked( config.buttons.testFlag( QgsAttributeEditorRelation::Button::Link ) );
mRelationShowUnlinkCheckBox->setChecked( config.buttons.testFlag( QgsAttributeEditorRelation::Button::Unlink ) );
mRelationShowAddChildCheckBox->setChecked( config.buttons.testFlag( QgsAttributeEditorRelation::Button::AddChildFeature ) );
mRelationShowDuplicateChildFeatureCheckBox->setChecked( config.buttons.testFlag( QgsAttributeEditorRelation::Button::DuplicateChildFeature ) );
mRelationShowZoomToFeatureCheckBox->setChecked( config.buttons.testFlag( QgsAttributeEditorRelation::Button::ZoomToChildFeature ) );
mRelationDeleteChildFeatureCheckBox->setChecked( config.buttons.testFlag( QgsAttributeEditorRelation::Button::DeleteChildFeature ) );
mRelationShowSaveChildEditsCheckBox->setChecked( config.buttons.testFlag( QgsAttributeEditorRelation::Button::SaveChildEdits ) );
}

QgsAttributesFormProperties::RelationEditorConfiguration QgsAttributeWidgetRelationEditWidget::relationEditorConfiguration() const
{
const QList<QAbstractButton *> buttons = mRelationButtonGroup->buttons();
for ( QAbstractButton *button : buttons )
button->setVisible( show );
QgsAttributesFormProperties::RelationEditorConfiguration relEdCfg;
QgsAttributeEditorRelation::Buttons buttons;
buttons.setFlag( QgsAttributeEditorRelation::Button::Link, mRelationShowLinkCheckBox->isChecked() );
buttons.setFlag( QgsAttributeEditorRelation::Button::Unlink, mRelationShowUnlinkCheckBox->isChecked() );
buttons.setFlag( QgsAttributeEditorRelation::Button::AddChildFeature, mRelationShowAddChildCheckBox->isChecked() );
buttons.setFlag( QgsAttributeEditorRelation::Button::DuplicateChildFeature, mRelationShowDuplicateChildFeatureCheckBox->isChecked() );
buttons.setFlag( QgsAttributeEditorRelation::Button::ZoomToChildFeature, mRelationShowZoomToFeatureCheckBox->isChecked() );
buttons.setFlag( QgsAttributeEditorRelation::Button::DeleteChildFeature, mRelationDeleteChildFeatureCheckBox->isChecked() );
buttons.setFlag( QgsAttributeEditorRelation::Button::SaveChildEdits, mRelationShowSaveChildEditsCheckBox->isChecked() );
relEdCfg.buttons = buttons;
return relEdCfg;
}
28 changes: 25 additions & 3 deletions src/gui/attributeformconfig/qgsattributewidgetedit.h
Expand Up @@ -21,17 +21,20 @@

#include <QWidget>

#include "qgsattributesformproperties.h"

#include "ui_qgsattributewidgeteditgroupbox.h"
#include "ui_qgsattributewidgetrelationeditwidget.h"

#include "qgis_gui.h"

class QTreeWidgetItem;

/**
* Widget to edit a container (tab or group box) of a form configuration
* Widget to edit the configuration (tab or group box, any field or relation, QML, …) of a form item
* \since QGIS 3.14
*/
class GUI_EXPORT QgsAttributeWidgetEdit: public QgsCollapsibleGroupBox, private Ui_QgsAttributeWidgetEditGroupBox
class GUI_EXPORT QgsAttributeWidgetEdit : public QgsCollapsibleGroupBox, private Ui_QgsAttributeWidgetEditGroupBox
{
Q_OBJECT

Expand All @@ -45,7 +48,26 @@ class GUI_EXPORT QgsAttributeWidgetEdit: public QgsCollapsibleGroupBox, private
private:
void showRelationButtons( bool show );

QTreeWidgetItem *mTreeItem;
QTreeWidgetItem *mTreeItem = nullptr;
QWidget *mSpecificEditWidget = nullptr;
};


/**
* Widget to edit a relation specific config for a form item
* \since QGIS 3.14
*/
class GUI_EXPORT QgsAttributeWidgetRelationEditWidget : public QWidget, private Ui_QgsAttributeWidgetRelationEditWidget
{
Q_OBJECT

public:
explicit QgsAttributeWidgetRelationEditWidget( QWidget *parent = nullptr );

void setRelationEditorConfiguration( const QgsAttributesFormProperties::RelationEditorConfiguration &config );

QgsAttributesFormProperties::RelationEditorConfiguration relationEditorConfiguration() const;

};

#endif // QGSATTRIBUTEWIDGETEDIT_H
84 changes: 7 additions & 77 deletions src/ui/attributeformconfig/qgsattributewidgeteditgroupbox.ui
Expand Up @@ -6,92 +6,29 @@
<rect>
<x>0</x>
<y>0</y>
<width>385</width>
<height>209</height>
<width>283</width>
<height>278</height>
</rect>
</property>
<property name="windowTitle">
<string>gsCollapsibleGroupBox</string>
<string>QgsCollapsibleGroupBox</string>
</property>
<property name="title">
<string>Widget Display</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="6" column="0">
<widget class="QCheckBox" name="mRelationDeleteChildFeatureCheckBox">
<property name="text">
<string>Delete child feature</string>
</property>
<attribute name="buttonGroup">
<string notr="true">mRelationButtonGroup</string>
</attribute>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="mRelationShowUnlinkCheckBox">
<property name="text">
<string>Show unlink button</string>
</property>
<attribute name="buttonGroup">
<string notr="true">mRelationButtonGroup</string>
</attribute>
</widget>
</item>
<item row="4" column="0">
<widget class="QCheckBox" name="mRelationShowAddChildCheckBox">
<property name="text">
<string>Add child feature</string>
</property>
<attribute name="buttonGroup">
<string notr="true">mRelationButtonGroup</string>
</attribute>
</widget>
</item>
<item row="5" column="0">
<widget class="QCheckBox" name="mRelationShowDuplicateChildFeatureCheckBox">
<property name="text">
<string>Duplicate child feature</string>
</property>
<attribute name="buttonGroup">
<string notr="true">mRelationButtonGroup</string>
</attribute>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="mRelationShowLinkCheckBox">
<property name="text">
<string>Show link button</string>
</property>
<attribute name="buttonGroup">
<string notr="true">mRelationButtonGroup</string>
</attribute>
</widget>
</item>
<item row="3" column="0">
<widget class="QCheckBox" name="mRelationShowSaveChildEditsCheckBox">
<property name="text">
<string>Show save child layer edits button</string>
</property>
<attribute name="buttonGroup">
<string notr="true">mRelationButtonGroup</string>
</attribute>
</widget>
</item>
<item row="0" column="0">
<widget class="QCheckBox" name="mShowLabelCheckBox">
<property name="text">
<string>Show label</string>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QCheckBox" name="mRelationShowZoomToFeatureCheckBox">
<property name="text">
<string>Zoom to child feature</string>
<item row="3" column="0">
<widget class="QgsCollapsibleGroupBox" name="mWidgetSpecificConfigGroupBox">
<property name="title">
<string>GroupBox</string>
</property>
<attribute name="buttonGroup">
<string notr="true">mRelationButtonGroup</string>
</attribute>
</widget>
</item>
</layout>
Expand All @@ -106,11 +43,4 @@
</customwidgets>
<resources/>
<connections/>
<buttongroups>
<buttongroup name="mRelationButtonGroup">
<property name="exclusive">
<bool>false</bool>
</property>
</buttongroup>
</buttongroups>
</ui>
70 changes: 70 additions & 0 deletions src/ui/attributeformconfig/qgsattributewidgetrelationeditwidget.ui
@@ -0,0 +1,70 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QgsAttributeWidgetRelationEditWidget</class>
<widget class="QWidget" name="QgsAttributeWidgetRelationEditWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>340</width>
<height>163</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="5" column="0">
<widget class="QCheckBox" name="mRelationDeleteChildFeatureCheckBox">
<property name="text">
<string>Delete child feature</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QCheckBox" name="mRelationShowDuplicateChildFeatureCheckBox">
<property name="text">
<string>Duplicate child feature</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QCheckBox" name="mRelationShowAddChildCheckBox">
<property name="text">
<string>Add child feature</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QCheckBox" name="mRelationShowLinkCheckBox">
<property name="text">
<string>Show link button</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="mRelationShowUnlinkCheckBox">
<property name="text">
<string>Show unlink button</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QCheckBox" name="mRelationShowZoomToFeatureCheckBox">
<property name="text">
<string>Zoom to child feature</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="mRelationShowSaveChildEditsCheckBox">
<property name="text">
<string>Show save child layer edits button</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

0 comments on commit 897c749

Please sign in to comment.