16
16
#include < QKeyEvent>
17
17
#include < QSettings>
18
18
#include < QHeaderView>
19
+ #include < QMenu>
19
20
20
21
#include " qgsattributetableview.h"
21
22
#include " qgsattributetablemodel.h"
25
26
26
27
#include " qgsvectorlayer.h"
27
28
#include " qgsvectordataprovider.h"
28
-
29
+ # include " qgsattributeaction.h "
29
30
30
31
QgsAttributeTableView::QgsAttributeTableView ( QWidget* parent )
31
- : QTableView( parent )
32
+ : QTableView( parent ), mActionPopup( 0 )
32
33
{
33
34
QSettings settings;
34
35
restoreGeometry ( settings.value ( " /BetterTable/geometry" ).toByteArray () );
@@ -41,7 +42,6 @@ QgsAttributeTableView::QgsAttributeTableView( QWidget* parent )
41
42
setSelectionBehavior ( QAbstractItemView::SelectRows );
42
43
setSelectionMode ( QAbstractItemView::NoSelection );
43
44
setSortingEnabled ( true );
44
-
45
45
}
46
46
47
47
void QgsAttributeTableView::setLayer ( QgsVectorLayer* layer )
@@ -64,10 +64,55 @@ QgsAttributeTableView::~QgsAttributeTableView()
64
64
{
65
65
delete mModel ;
66
66
delete mFilterModel ;
67
+ delete mActionPopup ;
67
68
}
68
69
69
70
void QgsAttributeTableView::closeEvent ( QCloseEvent *event )
70
71
{
71
72
QSettings settings;
72
73
settings.setValue ( " /BetterAttributeTable/geometry" , QVariant ( saveGeometry () ) );
73
74
}
75
+
76
+ void QgsAttributeTableView::contextMenuEvent ( QContextMenuEvent *event )
77
+ {
78
+ if ( mActionPopup )
79
+ {
80
+ delete mActionPopup ;
81
+ mActionPopup = 0 ;
82
+ }
83
+
84
+ QModelIndex idx = indexAt ( event->pos () );
85
+ if ( !idx.isValid () )
86
+ {
87
+ return ;
88
+ }
89
+
90
+ QgsVectorLayer *vlayer = mModel ->layer ();
91
+ if ( !vlayer || vlayer->actions ()->size () == 0 )
92
+ {
93
+ return ;
94
+ }
95
+
96
+ mActionPopup = new QMenu ();
97
+
98
+ QAction *a = mActionPopup ->addAction ( tr ( " Run action" ) );
99
+ a->setEnabled ( false );
100
+
101
+ for ( int i = 0 ; i < vlayer->actions ()->size (); i++ )
102
+ {
103
+ const QgsAction &action = vlayer->actions ()->at ( i );
104
+
105
+ if ( !action.runable () )
106
+ continue ;
107
+
108
+ QgsAttributeTableAction *a = new QgsAttributeTableAction ( action.name (), this , mModel , i, idx );
109
+ mActionPopup ->addAction ( action.name (), a, SLOT ( execute () ) );
110
+ }
111
+
112
+ mActionPopup ->popup ( event->globalPos () );
113
+ }
114
+
115
+ void QgsAttributeTableAction::execute ()
116
+ {
117
+ mModel ->executeAction ( mAction , mFieldIdx );
118
+ }
0 commit comments