26#include <QListWidgetItem>
29#include "moc_qgsprocessingrastercalculatorexpressionlineedit.cpp"
33QgsProcessingRasterCalculatorExpressionLineEdit::QgsProcessingRasterCalculatorExpressionLineEdit( QWidget *parent )
37 mLineEdit->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum );
39 mButton =
new QToolButton();
40 mButton->setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum );
42 connect( mButton, &QAbstractButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionLineEdit::editExpression );
44 QHBoxLayout *layout =
new QHBoxLayout();
45 layout->setContentsMargins( 0, 0, 0, 0 );
46 layout->addWidget( mLineEdit );
47 layout->addWidget( mButton );
50 setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum );
51 setFocusProxy( mLineEdit );
52 connect( mLineEdit, &QLineEdit::textChanged,
this,
static_cast<void ( QgsProcessingRasterCalculatorExpressionLineEdit::* )(
const QString & )
>( &QgsProcessingRasterCalculatorExpressionLineEdit::expressionEdited ) );
54 setExpression( expression() );
57QgsProcessingRasterCalculatorExpressionLineEdit::~QgsProcessingRasterCalculatorExpressionLineEdit() =
default;
59void QgsProcessingRasterCalculatorExpressionLineEdit::setLayers(
const QVariantList &layers )
64QString QgsProcessingRasterCalculatorExpressionLineEdit::expression()
const
67 return mLineEdit->text();
72void QgsProcessingRasterCalculatorExpressionLineEdit::setExpression(
const QString &newExpression )
75 mLineEdit->setText( newExpression );
78void QgsProcessingRasterCalculatorExpressionLineEdit::editExpression()
80 const QString currentExpression = expression();
81 QgsProcessingRasterCalculatorExpressionDialog dlg( mLayers );
82 dlg.setExpression( currentExpression );
86 const QString newExpression = dlg.expression();
87 setExpression( newExpression );
91void QgsProcessingRasterCalculatorExpressionLineEdit::expressionEdited()
93 emit expressionChanged( expression() );
96void QgsProcessingRasterCalculatorExpressionLineEdit::expressionEdited(
const QString &expression )
98 emit expressionChanged( expression );
102QgsProcessingRasterCalculatorExpressionDialog::QgsProcessingRasterCalculatorExpressionDialog(
const QVariantList &layers,
const QString &startExpression, QWidget *parent )
105 , mInitialText( startExpression )
112 connect( mLayersList, &QListWidget::itemDoubleClicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mLayersList_itemDoubleClicked );
114 connect( mBtnPlus, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnPlus_clicked );
115 connect( mBtnMinus, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnMinus_clicked );
116 connect( mBtnMultiply, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnMultiply_clicked );
117 connect( mBtnDivide, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnDivide_clicked );
118 connect( mBtnPower, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnPower_clicked );
119 connect( mBtnSqrt, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnSqrt_clicked );
120 connect( mBtnOpenBracket, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnOpenBracket_clicked );
121 connect( mBtnCloseBracket, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnCloseBracket_clicked );
122 connect( mBtnGreater, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnGreater_clicked );
123 connect( mBtnGreaterEqual, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnGreaterEqual_clicked );
124 connect( mBtnLess, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnLess_clicked );
125 connect( mBtnLessEqual, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnLessEqual_clicked );
126 connect( mBtnEqual, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnEqual_clicked );
127 connect( mBtnNotEqual, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnNotEqual_clicked );
128 connect( mBtnAnd, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnAnd_clicked );
129 connect( mBtnOr, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnOr_clicked );
130 connect( mBtnIf, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnIf_clicked );
131 connect( mBtnMin, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnMin_clicked );
132 connect( mBtnMax, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnMax_clicked );
133 connect( mBtnAbs, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnAbs_clicked );
134 connect( mBtnSin, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnSin_clicked );
135 connect( mBtnCos, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnCos_clicked );
136 connect( mBtnTan, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnTan_clicked );
137 connect( mBtnLog, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnLog_clicked );
138 connect( mBtnAsin, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnAsin_clicked );
139 connect( mBtnAcos, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnAcos_clicked );
140 connect( mBtnAtan, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnAtan_clicked );
141 connect( mBtnLn, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnLn_clicked );
143 mExpressionTextEdit->setPlainText( mInitialText );
146void QgsProcessingRasterCalculatorExpressionDialog::setExpression(
const QString &text )
148 mExpressionTextEdit->setPlainText( text );
151QString QgsProcessingRasterCalculatorExpressionDialog::expression()
153 return mExpressionTextEdit->toPlainText();
156void QgsProcessingRasterCalculatorExpressionDialog::populateLayers()
158 if ( mLayers.isEmpty() )
163 for (
const QVariant &layer : mLayers )
165 QListWidgetItem *item =
new QListWidgetItem( layer.toString(), mLayersList );
166 mLayersList->addItem( item );
170QString QgsProcessingRasterCalculatorExpressionDialog::quoteBandEntry(
const QString &layerName )
173 QString quotedName = layerName;
174 quotedName.replace(
'\"', QLatin1String(
"\\\"" ) );
175 quotedName.append(
'\"' );
176 quotedName.prepend(
'\"' );
180void QgsProcessingRasterCalculatorExpressionDialog::mLayersList_itemDoubleClicked( QListWidgetItem *item )
182 mExpressionTextEdit->insertPlainText( quoteBandEntry( QStringLiteral(
"%1@1" ).arg( item->text() ) ) );
185void QgsProcessingRasterCalculatorExpressionDialog::mBtnPlus_clicked()
187 mExpressionTextEdit->insertPlainText( QStringLiteral(
" + " ) );
190void QgsProcessingRasterCalculatorExpressionDialog::mBtnMinus_clicked()
192 mExpressionTextEdit->insertPlainText( QStringLiteral(
" - " ) );
195void QgsProcessingRasterCalculatorExpressionDialog::mBtnMultiply_clicked()
197 mExpressionTextEdit->insertPlainText( QStringLiteral(
" * " ) );
200void QgsProcessingRasterCalculatorExpressionDialog::mBtnDivide_clicked()
202 mExpressionTextEdit->insertPlainText( QStringLiteral(
" / " ) );
205void QgsProcessingRasterCalculatorExpressionDialog::mBtnPower_clicked()
207 mExpressionTextEdit->insertPlainText( QStringLiteral(
" ^ " ) );
210void QgsProcessingRasterCalculatorExpressionDialog::mBtnSqrt_clicked()
212 mExpressionTextEdit->insertPlainText( QStringLiteral(
" sqrt ( " ) );
215void QgsProcessingRasterCalculatorExpressionDialog::mBtnOpenBracket_clicked()
217 mExpressionTextEdit->insertPlainText( QStringLiteral(
" ( " ) );
220void QgsProcessingRasterCalculatorExpressionDialog::mBtnCloseBracket_clicked()
222 mExpressionTextEdit->insertPlainText( QStringLiteral(
" ) " ) );
225void QgsProcessingRasterCalculatorExpressionDialog::mBtnGreater_clicked()
227 mExpressionTextEdit->insertPlainText( QStringLiteral(
" > " ) );
230void QgsProcessingRasterCalculatorExpressionDialog::mBtnGreaterEqual_clicked()
232 mExpressionTextEdit->insertPlainText( QStringLiteral(
" >= " ) );
235void QgsProcessingRasterCalculatorExpressionDialog::mBtnLess_clicked()
237 mExpressionTextEdit->insertPlainText( QStringLiteral(
" < " ) );
240void QgsProcessingRasterCalculatorExpressionDialog::mBtnLessEqual_clicked()
242 mExpressionTextEdit->insertPlainText( QStringLiteral(
" <= " ) );
245void QgsProcessingRasterCalculatorExpressionDialog::mBtnEqual_clicked()
247 mExpressionTextEdit->insertPlainText( QStringLiteral(
" = " ) );
250void QgsProcessingRasterCalculatorExpressionDialog::mBtnNotEqual_clicked()
252 mExpressionTextEdit->insertPlainText( QStringLiteral(
" != " ) );
255void QgsProcessingRasterCalculatorExpressionDialog::mBtnAnd_clicked()
257 mExpressionTextEdit->insertPlainText( QStringLiteral(
" AND " ) );
260void QgsProcessingRasterCalculatorExpressionDialog::mBtnOr_clicked()
262 mExpressionTextEdit->insertPlainText( QStringLiteral(
" OR " ) );
265void QgsProcessingRasterCalculatorExpressionDialog::mBtnIf_clicked()
267 mExpressionTextEdit->insertPlainText( QStringLiteral(
" if ( " ) );
270void QgsProcessingRasterCalculatorExpressionDialog::mBtnMin_clicked()
272 mExpressionTextEdit->insertPlainText( QStringLiteral(
" MIN ( " ) );
275void QgsProcessingRasterCalculatorExpressionDialog::mBtnMax_clicked()
277 mExpressionTextEdit->insertPlainText( QStringLiteral(
" MAX ( " ) );
280void QgsProcessingRasterCalculatorExpressionDialog::mBtnAbs_clicked()
282 mExpressionTextEdit->insertPlainText( QStringLiteral(
" ABS ( " ) );
285void QgsProcessingRasterCalculatorExpressionDialog::mBtnSin_clicked()
287 mExpressionTextEdit->insertPlainText( QStringLiteral(
" sin ( " ) );
290void QgsProcessingRasterCalculatorExpressionDialog::mBtnCos_clicked()
292 mExpressionTextEdit->insertPlainText( QStringLiteral(
" cos ( " ) );
295void QgsProcessingRasterCalculatorExpressionDialog::mBtnTan_clicked()
297 mExpressionTextEdit->insertPlainText( QStringLiteral(
" tan ( " ) );
300void QgsProcessingRasterCalculatorExpressionDialog::mBtnLog_clicked()
302 mExpressionTextEdit->insertPlainText( QStringLiteral(
" log10 ( " ) );
305void QgsProcessingRasterCalculatorExpressionDialog::mBtnAsin_clicked()
307 mExpressionTextEdit->insertPlainText( QStringLiteral(
" asin ( " ) );
310void QgsProcessingRasterCalculatorExpressionDialog::mBtnAcos_clicked()
312 mExpressionTextEdit->insertPlainText( QStringLiteral(
" acos ( " ) );
315void QgsProcessingRasterCalculatorExpressionDialog::mBtnAtan_clicked()
317 mExpressionTextEdit->insertPlainText( QStringLiteral(
" atan ( " ) );
320void QgsProcessingRasterCalculatorExpressionDialog::mBtnLn_clicked()
322 mExpressionTextEdit->insertPlainText( QStringLiteral(
" ln ( " ) );
static QIcon getThemeIcon(const QString &name, const QColor &fillColor=QColor(), const QColor &strokeColor=QColor())
Helper to get a theme icon.
QLineEdit subclass with built in support for clearing the widget's value and handling custom null val...
static void enableAutoGeometryRestore(QWidget *widget, const QString &key=QString())
Register the widget to allow its position to be automatically saved and restored when open and closed...