29 #include <QPlainTextEdit>
31 #include <QFileDialog>
32 #include <QImageWriter>
34 QgsAttributeActionPropertiesDialog::QgsAttributeActionPropertiesDialog(
QgsAction::ActionType type,
const QString &description,
const QString &shortTitle,
const QString &iconPath,
const QString &actionText,
bool capture,
const QSet<QString> &actionScopes,
const QString ¬ificationMessage,
bool isEnabledOnlyWhenEditable,
QgsVectorLayer *layer, QWidget *parent )
40 mActionType->setCurrentIndex(
type );
44 mIconPreview->setPixmap( QPixmap(
iconPath ) );
46 mCaptureOutput->setChecked(
capture );
59 QSet<QString> defaultActionScopes;
60 defaultActionScopes << QStringLiteral(
"Canvas" )
61 << QStringLiteral(
"FieldSpecific" )
62 << QStringLiteral(
"Feature" )
63 << QStringLiteral(
"FeatureForm" );
65 init( defaultActionScopes );
75 return mActionName->text();
80 return mShortTitle->text();
85 return mActionIcon->text();
90 return mActionText->text();
97 const auto constMActionScopeCheckBoxes = mActionScopeCheckBoxes;
98 for ( QCheckBox *cb : constMActionScopeCheckBoxes )
100 if ( cb->isChecked() )
101 actionScopes.insert( cb->property(
"ActionScopeName" ).toString() );
109 return mNotificationMessage->text();
114 return mIsEnabledOnlyWhenEditable->isChecked();
119 return mCaptureOutput->isChecked();
126 const auto constMActionScopeCheckBoxes = mActionScopeCheckBoxes;
127 for ( QCheckBox *cb : constMActionScopeCheckBoxes )
129 if ( cb->isChecked() )
141 void QgsAttributeActionPropertiesDialog::browse()
144 const QString action = QFileDialog::getOpenFileName(
145 this, tr(
"Select an action",
"File dialog window title" ), QDir::homePath() );
147 if ( !action.isNull() )
148 mActionText->insertText( action );
151 void QgsAttributeActionPropertiesDialog::insertExpressionOrField()
153 QString selText = mActionText->selectedText();
156 if ( selText.startsWith( QLatin1String(
"[%" ) ) && selText.endsWith( QLatin1String(
"%]" ) ) )
157 selText = selText.mid( 2, selText.size() - 4 );
159 mActionText->insertText(
"[%" + mFieldExpression->currentField() +
"%]" );
162 void QgsAttributeActionPropertiesDialog::chooseIcon()
164 const QList<QByteArray> list = QImageWriter::supportedImageFormats();
165 QStringList formatList;
166 const auto constList = list;
167 for (
const QByteArray &format : constList )
168 formatList << QStringLiteral(
"*.%1" ).arg( QString( format ) );
170 const QString filter = tr(
"Images( %1 ); All( *.* )" ).arg( formatList.join( QLatin1Char(
' ' ) ) );
171 const QString icon = QFileDialog::getOpenFileName(
this, tr(
"Choose Icon…" ), mActionIcon->text(), filter );
173 if ( !icon.isNull() )
175 mActionIcon->setText( icon );
176 mIconPreview->setPixmap( QPixmap( icon ) );
180 void QgsAttributeActionPropertiesDialog::updateButtons()
182 if ( mActionName->text().isEmpty() || mActionText->text().isEmpty() )
184 mButtonBox->button( QDialogButtonBox::Ok )->setEnabled(
false );
188 mButtonBox->button( QDialogButtonBox::Ok )->setEnabled(
true );
192 void QgsAttributeActionPropertiesDialog::init(
const QSet<QString> &actionScopes )
196 const auto constAvailableActionScopes = availableActionScopes;
199 QCheckBox *actionScopeCheckBox =
new QCheckBox( scope.title() );
201 actionScopeCheckBox->setChecked(
true );
202 const QStringList variables = scope.expressionContextScope().variableNames();
204 QString tooltip = scope.description();
205 if ( !variables.empty() )
207 tooltip += QLatin1String(
"<br><br>" );
208 tooltip += tr(
"Additional variables" );
209 tooltip += QLatin1String(
"<ul><li>" );
210 tooltip += variables.join( QLatin1String(
"</li><li>" ) );
211 tooltip += QLatin1String(
"</ul></li>" );
213 actionScopeCheckBox->setToolTip( tooltip );
214 actionScopeCheckBox->setProperty(
"ActionScopeName", scope.id() );
215 mActionScopeCheckBoxes.append( actionScopeCheckBox );
216 mActionScopesGroupBox->layout()->addWidget( actionScopeCheckBox );
223 mFieldExpression->setLayer( mLayer );
224 mFieldExpression->setGeomCalculator( myDa );
225 mFieldExpression->registerExpressionContextGenerator(
this );
227 connect( mBrowseButton, &QAbstractButton::clicked,
this, &QgsAttributeActionPropertiesDialog::browse );
228 connect( mInsertFieldOrExpression, &QAbstractButton::clicked,
this, &QgsAttributeActionPropertiesDialog::insertExpressionOrField );
229 connect( mActionName, &QLineEdit::textChanged,
this, &QgsAttributeActionPropertiesDialog::updateButtons );
230 connect( mActionText, &QsciScintilla::textChanged,
this, &QgsAttributeActionPropertiesDialog::updateButtons );
231 connect( mChooseIconButton, &QAbstractButton::clicked,
this, &QgsAttributeActionPropertiesDialog::chooseIcon );
233 connect( mButtonBox, &QDialogButtonBox::helpRequested,
this, &QgsAttributeActionPropertiesDialog::showHelp );
238 void QgsAttributeActionPropertiesDialog::showHelp()
240 QgsHelp::openHelp( QStringLiteral(
"working_with_vector/vector_properties.html#actions-properties" ) );