Skip to content

Commit a51c201

Browse files
authoredSep 4, 2020
Merge pull request #38383 from suricactus/new_feat_constraint
Allow adding new features via attribute form
2 parents d998bb3 + 718c09f commit a51c201

File tree

3 files changed

+71
-2
lines changed

3 files changed

+71
-2
lines changed
 

‎src/app/qgsattributetabledialog.cpp

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include <QMessageBox>
1818
#include <QGridLayout>
1919
#include <QDialogButtonBox>
20+
#include <QMenu>
2021

2122
#include "qgsattributetabledialog.h"
2223
#include "qgsattributetablemodel.h"
@@ -111,6 +112,8 @@ QgsAttributeTableDialog::QgsAttributeTableDialog( QgsVectorLayer *layer, QgsAttr
111112
connect( mActionDeleteSelected, &QAction::triggered, this, &QgsAttributeTableDialog::mActionDeleteSelected_triggered );
112113
connect( mMainView, &QgsDualView::currentChanged, this, &QgsAttributeTableDialog::mMainView_currentChanged );
113114
connect( mActionAddFeature, &QAction::triggered, this, &QgsAttributeTableDialog::mActionAddFeature_triggered );
115+
connect( mActionAddFeatureViaAttributeTable, &QAction::triggered, this, &QgsAttributeTableDialog::mActionAddFeatureViaAttributeTable_triggered );
116+
connect( mActionAddFeatureViaAttributeForm, &QAction::triggered, this, &QgsAttributeTableDialog::mActionAddFeatureViaAttributeForm_triggered );
114117
connect( mActionExpressionSelect, &QAction::triggered, this, &QgsAttributeTableDialog::mActionExpressionSelect_triggered );
115118
connect( mMainView, &QgsDualView::showContextMenuExternally, this, &QgsAttributeTableDialog::showContextMenu );
116119

@@ -123,6 +126,16 @@ QgsAttributeTableDialog::QgsAttributeTableDialog( QgsVectorLayer *layer, QgsAttr
123126
mActionPasteFeatures->setShortcuts( QKeySequence::Paste );
124127
mActionPasteFeatures->setShortcutContext( Qt::WidgetWithChildrenShortcut );
125128

129+
QgsSettings settings;
130+
131+
mActionAddFeature->setMenu( new QMenu( mActionAddFeature->parentWidget() ) );
132+
mActionAddFeature->menu()->addAction( mActionAddFeatureViaAttributeTable );
133+
mActionAddFeature->menu()->addAction( mActionAddFeatureViaAttributeForm );
134+
mActionAddFeature->setIcon(
135+
settings.value( QStringLiteral( "/qgis/attributeTableLastAddFeatureMethod" ) ) == QStringLiteral( "attributeForm" )
136+
? mActionAddFeatureViaAttributeForm->icon()
137+
: mActionAddFeatureViaAttributeTable->icon() );
138+
126139
const QgsFields fields = mLayer->fields();
127140
for ( const QgsField &field : fields )
128141
{
@@ -138,8 +151,6 @@ QgsAttributeTableDialog::QgsAttributeTableDialog( QgsVectorLayer *layer, QgsAttr
138151
layout()->setContentsMargins( 0, 0, 0, 0 );
139152
static_cast< QGridLayout * >( layout() )->setVerticalSpacing( 0 );
140153

141-
QgsSettings settings;
142-
143154
int size = settings.value( QStringLiteral( "/qgis/iconSize" ), 16 ).toInt();
144155
if ( size > 32 )
145156
{
@@ -586,10 +597,24 @@ void QgsAttributeTableDialog::mActionReload_triggered()
586597
}
587598

588599
void QgsAttributeTableDialog::mActionAddFeature_triggered()
600+
{
601+
QgsSettings s;
602+
603+
if ( s.value( QStringLiteral( "/qgis/attributeTableLastAddFeatureMethod" ) ) == QStringLiteral( "attributeForm" ) )
604+
mActionAddFeatureViaAttributeForm_triggered();
605+
else
606+
mActionAddFeatureViaAttributeTable_triggered();
607+
}
608+
609+
void QgsAttributeTableDialog::mActionAddFeatureViaAttributeTable_triggered()
589610
{
590611
if ( !mLayer->isEditable() )
591612
return;
592613

614+
QgsSettings s;
615+
s.setValue( QStringLiteral( "/qgis/attributeTableLastAddFeatureMethod" ), QStringLiteral( "attributeTable" ) );
616+
mActionAddFeature->setIcon( mActionAddFeatureViaAttributeTable->icon() );
617+
593618
QgsAttributeTableModel *masterModel = mMainView->masterModel();
594619

595620
QgsFeature f;
@@ -601,6 +626,27 @@ void QgsAttributeTableDialog::mActionAddFeature_triggered()
601626
}
602627
}
603628

629+
void QgsAttributeTableDialog::mActionAddFeatureViaAttributeForm_triggered()
630+
{
631+
if ( !mLayer->isEditable() )
632+
return;
633+
634+
QgsSettings s;
635+
s.setValue( QStringLiteral( "/qgis/attributeTableLastAddFeatureMethod" ), QStringLiteral( "attributeForm" ) );
636+
mActionAddFeature->setIcon( mActionAddFeatureViaAttributeForm->icon() );
637+
638+
QgsFeature f;
639+
640+
QgsFeatureAction action( tr( "Feature Added" ), f, mLayer, QString(), -1, this );
641+
QgsAttributeTableModel *masterModel = mMainView->masterModel();
642+
643+
if ( action.addFeature() )
644+
{
645+
masterModel->reload( masterModel->index( 0, 0 ), masterModel->index( masterModel->rowCount() - 1, masterModel->columnCount() - 1 ) );
646+
}
647+
}
648+
649+
604650
void QgsAttributeTableDialog::mActionExpressionSelect_triggered()
605651
{
606652
QgsExpressionSelectionDialog *dlg = new QgsExpressionSelectionDialog( mLayer );

‎src/app/qgsattributetabledialog.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,8 @@ class APP_EXPORT QgsAttributeTableDialog : public QDialog, private Ui::QgsAttrib
171171
* add feature
172172
*/
173173
void mActionAddFeature_triggered();
174+
void mActionAddFeatureViaAttributeTable_triggered();
175+
void mActionAddFeatureViaAttributeForm_triggered();
174176

175177
void mActionExpressionSelect_triggered();
176178

‎src/ui/qgsattributetabledialog.ui

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -532,6 +532,27 @@
532532
<string>Organize Columns</string>
533533
</property>
534534
</action>
535+
<action name="mActionAddFeatureViaAttributeTable">
536+
<property name="icon">
537+
<iconset resource="../../images/images.qrc">
538+
<normaloff>:/images/themes/default/mActionNewTableRow.svg</normaloff>:/images/themes/default/mActionNewTableRow.svg</iconset>
539+
</property>
540+
<property name="text">
541+
<string>Add feature via attribute table</string>
542+
</property>
543+
</action>
544+
<action name="mActionAddFeatureViaAttributeForm">
545+
<property name="icon">
546+
<iconset resource="../../images/images.qrc">
547+
<normaloff>:/images/themes/default/mIconFormSelect.svg</normaloff>:/images/themes/default/mIconFormSelect.svg</iconset>
548+
</property>
549+
<property name="text">
550+
<string>Add feature via attribute form</string>
551+
</property>
552+
<property name="toolTip">
553+
<string>Add feature via attribute form</string>
554+
</property>
555+
</action>
535556
</widget>
536557
<customwidgets>
537558
<customwidget>

0 commit comments

Comments
 (0)
Please sign in to comment.