34
34
#include " qgslogger.h"
35
35
#include " qgsmapcanvas.h"
36
36
#include " qgsfieldcalculator.h"
37
+ #include " qgsfeatureaction.h"
37
38
38
39
class QgsAttributeTableDock : public QDockWidget
39
40
{
@@ -99,13 +100,16 @@ QgsAttributeTableDialog::QgsAttributeTableDialog( QgsVectorLayer *theLayer, QWid
99
100
bool canDeleteFeatures = mLayer ->dataProvider ()->capabilities () & QgsVectorDataProvider::DeleteFeatures;
100
101
bool canAddAttributes = mLayer ->dataProvider ()->capabilities () & QgsVectorDataProvider::AddAttributes;
101
102
bool canDeleteAttributes = mLayer ->dataProvider ()->capabilities () & QgsVectorDataProvider::DeleteAttributes;
103
+ bool canAddFeatures = mLayer ->dataProvider ()->capabilities () & QgsVectorDataProvider::AddFeatures;
102
104
mToggleEditingButton ->setCheckable ( true );
103
105
mToggleEditingButton ->setChecked ( mLayer ->isEditable () );
104
106
mToggleEditingButton ->setEnabled ( canChangeAttributes && !mLayer ->isReadOnly () );
105
107
mOpenFieldCalculator ->setEnabled ( canChangeAttributes && mLayer ->isEditable () );
106
108
mDeleteSelectedButton ->setEnabled ( canDeleteFeatures && mLayer ->isEditable () );
107
109
mAddAttribute ->setEnabled ( canAddAttributes && mLayer ->isEditable () );
108
110
mRemoveAttribute ->setEnabled ( canDeleteAttributes && mLayer ->isEditable () );
111
+ mAddFeature ->setEnabled ( canAddFeatures && mLayer ->isEditable () && mLayer ->geometryType () == QGis::NoGeometry );
112
+ mAddFeature ->setHidden ( !canAddFeatures || mLayer ->geometryType () != QGis::NoGeometry );
109
113
110
114
// info from table to application
111
115
connect ( this , SIGNAL ( editingToggled ( QgsMapLayer * ) ), QgisApp::instance (), SLOT ( toggleEditing ( QgsMapLayer * ) ) );
@@ -114,6 +118,7 @@ QgsAttributeTableDialog::QgsAttributeTableDialog( QgsVectorLayer *theLayer, QWid
114
118
connect ( mLayer , SIGNAL ( editingStopped () ), this , SLOT ( editingToggled () ) );
115
119
116
120
connect ( searchButton, SIGNAL ( clicked () ), this , SLOT ( search () ) );
121
+ connect ( mAddFeature , SIGNAL ( clicked () ), this , SLOT ( addFeature () ) );
117
122
118
123
connect ( mLayer , SIGNAL ( selectionChanged () ), this , SLOT ( updateSelectionFromLayer () ) );
119
124
connect ( mLayer , SIGNAL ( layerDeleted () ), this , SLOT ( close () ) );
@@ -674,10 +679,12 @@ void QgsAttributeTableDialog::editingToggled()
674
679
bool canDeleteFeatures = mLayer ->dataProvider ()->capabilities () & QgsVectorDataProvider::DeleteFeatures;
675
680
bool canAddAttributes = mLayer ->dataProvider ()->capabilities () & QgsVectorDataProvider::AddAttributes;
676
681
bool canDeleteAttributes = mLayer ->dataProvider ()->capabilities () & QgsVectorDataProvider::DeleteAttributes;
682
+ bool canAddFeatures = mLayer ->dataProvider ()->capabilities () & QgsVectorDataProvider::AddFeatures;
677
683
mOpenFieldCalculator ->setEnabled ( canChangeAttributes && mLayer ->isEditable () );
678
684
mDeleteSelectedButton ->setEnabled ( canDeleteFeatures && mLayer ->isEditable () );
679
685
mAddAttribute ->setEnabled ( canAddAttributes && mLayer ->isEditable () );
680
686
mRemoveAttribute ->setEnabled ( canDeleteAttributes && mLayer ->isEditable () );
687
+ mAddFeature ->setEnabled ( canAddFeatures && mLayer ->isEditable () && mLayer ->geometryType () == QGis::NoGeometry );
681
688
682
689
// (probably reload data if user stopped editing - possible revert)
683
690
mModel ->reload ( mModel ->index ( 0 , 0 ), mModel ->index ( mModel ->rowCount (), mModel ->columnCount () ) );
@@ -775,9 +782,18 @@ void QgsAttributeTableDialog::on_mRemoveAttribute_clicked()
775
782
void QgsAttributeTableDialog::on_mOpenFieldCalculator_clicked ()
776
783
{
777
784
QgsFieldCalculator calc ( mLayer );
778
- if ( calc.exec () == QDialog::Accepted )
785
+ calc.exec ();
786
+ }
787
+
788
+ void QgsAttributeTableDialog::addFeature ()
789
+ {
790
+ if ( !mLayer ->isEditable () )
791
+ return ;
792
+
793
+ QgsFeature f;
794
+ QgsFeatureAction action ( tr ( " Geometryless feature added" ), f, mLayer , -1 , this );
795
+ if ( action.addFeature () )
779
796
{
780
- // update model - a field has been added or updated
781
797
mModel ->reload ( mModel ->index ( 0 , 0 ), mModel ->index ( mModel ->rowCount (), mModel ->columnCount () ) );
782
798
}
783
799
}
0 commit comments