-
-
Notifications
You must be signed in to change notification settings - Fork 3k
/
qgsaction.h
177 lines (152 loc) · 5.4 KB
/
qgsaction.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
/***************************************************************************
qgsaction.h - QgsAction
---------------------
begin : 18.4.2016
copyright : (C) 2016 by Matthias Kuhn
email : matthias@opengis.ch
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef QGSACTION_H
#define QGSACTION_H
#include <QSet>
#include <QString>
#include <QIcon>
#include <QAction>
#include "qgsexpressioncontext.h"
class QgsExpressionContextScope;
/** \ingroup core
* Utility class that encapsulates an action based on vector attributes.
*/
class CORE_EXPORT QgsAction
{
public:
enum ActionType
{
Generic,
GenericPython,
Mac,
Windows,
Unix,
OpenUrl,
};
/**
* Default constructor
*/
QgsAction()
: mType( Generic )
{}
/**
* Create a new QgsAction
*
* @param type The type of this action
* @param description A human readable description string
* @param action The action text. Its interpretation depends on the type
* @param capture If this is set to true, the output will be captured when an action is run
*/
QgsAction( ActionType type, const QString& description, const QString& action, bool capture )
: mType( type )
, mDescription( description )
, mCommand( action )
, mCaptureOutput( capture )
{}
/**
* Create a new QgsAction
*
* @param type The type of this action
* @param description A human readable description string
* @param action The action text. Its interpretation depends on the type
* @param icon Path to an icon for this action
* @param capture If this is set to true, the output will be captured when an action is run
* @param shortTitle A short string used to label user interface elements like buttons
* @param actionScopes A set of scopes in which this action will be available
*/
QgsAction( ActionType type, const QString& description, const QString& action, const QString& icon, bool capture, const QString& shortTitle = QString(), const QSet<QString>& actionScopes = QSet<QString>() )
: mType( type )
, mDescription( description )
, mShortTitle( shortTitle )
, mIcon( icon )
, mCommand( action )
, mCaptureOutput( capture )
, mActionScopes( actionScopes )
{}
//! The name of the action. This may be a longer description.
QString name() const { return mDescription; }
//! The short title is used to label user interface elements like buttons
QString shortTitle() const { return mShortTitle; }
/**
* Returns a unique id for this action.
*
* @note Added in QGIS 3.0
*/
QString id() const { return mShortTitle; }
/**
* Returns true if this action was a default constructed one.
*
* @note Added in QGIS 3.0
*/
bool isValid() const { return !mShortTitle.isNull(); }
//! The path to the icon
QString iconPath() const { return mIcon; }
//! The icon
QIcon icon() const { return QIcon( mIcon ); }
/**
* Returns the command that is executed by this action.
* How the content is interpreted depends on the type() and
* the actionScope().
*
* @note Added in QGIS 3.0
*/
QString command() const { return mCommand; }
//! The action type
ActionType type() const { return mType; }
//! Whether to capture output for display when this action is run
bool capture() const { return mCaptureOutput; }
//! Checks if the action is runable on the current platform
bool runable() const;
/**
* Run this action.
*
* @note Added in QGIS 3.0
*/
void run( QgsVectorLayer* layer, const QgsFeature& feature, const QgsExpressionContext& expressionContext ) const;
/**
* Run this action.
*
* @note Added in QGIS 3.0
*/
void run( const QgsExpressionContext& expressionContext ) const;
/**
* The action scopes define where an action will be available.
* Action scopes may offer additional variables like the clicked
* coordinate.
*
* @see QgsActionScope
* @note Added in QGIS 3.0
*/
QSet<QString> actionScopes() const;
/**
* The action scopes define where an action will be available.
* Action scopes may offer additional variables like the clicked
* coordinate.
*
* @note Added in QGIS 3.0
*/
void setActionScopes( const QSet<QString>& actionScopes );
private:
ActionType mType;
QString mDescription;
QString mShortTitle;
QString mIcon;
QString mCommand;
bool mCaptureOutput;
QSet<QString> mActionScopes;
mutable QSharedPointer<QAction> mAction;
};
Q_DECLARE_METATYPE( QgsAction )
#endif // QGSACTION_H