26#include <QListWidgetItem>
30#include "moc_qgsprocessingrastercalculatorexpressionlineedit.cpp"
32using namespace Qt::StringLiterals;
36QgsProcessingRasterCalculatorExpressionLineEdit::QgsProcessingRasterCalculatorExpressionLineEdit( QWidget *parent )
40 mLineEdit->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum );
42 mButton =
new QToolButton();
43 mButton->setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum );
45 connect( mButton, &QAbstractButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionLineEdit::editExpression );
47 QHBoxLayout *layout =
new QHBoxLayout();
48 layout->setContentsMargins( 0, 0, 0, 0 );
49 layout->addWidget( mLineEdit );
50 layout->addWidget( mButton );
53 setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum );
54 setFocusProxy( mLineEdit );
55 connect( mLineEdit, &QLineEdit::textChanged,
this,
static_cast<void ( QgsProcessingRasterCalculatorExpressionLineEdit::* )(
const QString & )
>( &QgsProcessingRasterCalculatorExpressionLineEdit::expressionEdited ) );
57 setExpression( expression() );
60QgsProcessingRasterCalculatorExpressionLineEdit::~QgsProcessingRasterCalculatorExpressionLineEdit() =
default;
62void QgsProcessingRasterCalculatorExpressionLineEdit::setLayers(
const QVariantList &layers )
67QString QgsProcessingRasterCalculatorExpressionLineEdit::expression()
const
70 return mLineEdit->text();
75void QgsProcessingRasterCalculatorExpressionLineEdit::setExpression(
const QString &newExpression )
78 mLineEdit->setText( newExpression );
81void QgsProcessingRasterCalculatorExpressionLineEdit::editExpression()
83 const QString currentExpression = expression();
84 QgsProcessingRasterCalculatorExpressionDialog dlg( mLayers );
85 dlg.setExpression( currentExpression );
89 const QString newExpression = dlg.expression();
90 setExpression( newExpression );
94void QgsProcessingRasterCalculatorExpressionLineEdit::expressionEdited()
96 emit expressionChanged( expression() );
99void QgsProcessingRasterCalculatorExpressionLineEdit::expressionEdited(
const QString &expression )
101 emit expressionChanged( expression );
105QgsProcessingRasterCalculatorExpressionDialog::QgsProcessingRasterCalculatorExpressionDialog(
const QVariantList &layers,
const QString &startExpression, QWidget *parent )
108 , mInitialText( startExpression )
115 connect( mLayersList, &QListWidget::itemDoubleClicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mLayersList_itemDoubleClicked );
117 connect( mBtnPlus, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnPlus_clicked );
118 connect( mBtnMinus, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnMinus_clicked );
119 connect( mBtnMultiply, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnMultiply_clicked );
120 connect( mBtnDivide, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnDivide_clicked );
121 connect( mBtnPower, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnPower_clicked );
122 connect( mBtnSqrt, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnSqrt_clicked );
123 connect( mBtnOpenBracket, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnOpenBracket_clicked );
124 connect( mBtnCloseBracket, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnCloseBracket_clicked );
125 connect( mBtnGreater, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnGreater_clicked );
126 connect( mBtnGreaterEqual, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnGreaterEqual_clicked );
127 connect( mBtnLess, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnLess_clicked );
128 connect( mBtnLessEqual, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnLessEqual_clicked );
129 connect( mBtnEqual, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnEqual_clicked );
130 connect( mBtnNotEqual, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnNotEqual_clicked );
131 connect( mBtnAnd, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnAnd_clicked );
132 connect( mBtnOr, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnOr_clicked );
133 connect( mBtnIf, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnIf_clicked );
134 connect( mBtnMin, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnMin_clicked );
135 connect( mBtnMax, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnMax_clicked );
136 connect( mBtnAbs, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnAbs_clicked );
137 connect( mBtnSin, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnSin_clicked );
138 connect( mBtnCos, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnCos_clicked );
139 connect( mBtnTan, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnTan_clicked );
140 connect( mBtnLog, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnLog_clicked );
141 connect( mBtnAsin, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnAsin_clicked );
142 connect( mBtnAcos, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnAcos_clicked );
143 connect( mBtnAtan, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnAtan_clicked );
144 connect( mBtnLn, &QPushButton::clicked,
this, &QgsProcessingRasterCalculatorExpressionDialog::mBtnLn_clicked );
146 mExpressionTextEdit->setPlainText( mInitialText );
149void QgsProcessingRasterCalculatorExpressionDialog::setExpression(
const QString &text )
151 mExpressionTextEdit->setPlainText( text );
154QString QgsProcessingRasterCalculatorExpressionDialog::expression()
156 return mExpressionTextEdit->toPlainText();
159void QgsProcessingRasterCalculatorExpressionDialog::populateLayers()
161 if ( mLayers.isEmpty() )
166 for (
const QVariant &layer : mLayers )
168 QListWidgetItem *item =
new QListWidgetItem( layer.toString(), mLayersList );
169 mLayersList->addItem( item );
173QString QgsProcessingRasterCalculatorExpressionDialog::quoteBandEntry(
const QString &layerName )
176 QString quotedName = layerName;
177 quotedName.replace(
'\"',
"\\\""_L1 );
178 quotedName.append(
'\"' );
179 quotedName.prepend(
'\"' );
183void QgsProcessingRasterCalculatorExpressionDialog::mLayersList_itemDoubleClicked( QListWidgetItem *item )
185 mExpressionTextEdit->insertPlainText( quoteBandEntry( u
"%1@1"_s.arg( item->text() ) ) );
188void QgsProcessingRasterCalculatorExpressionDialog::mBtnPlus_clicked()
190 mExpressionTextEdit->insertPlainText( u
" + "_s );
193void QgsProcessingRasterCalculatorExpressionDialog::mBtnMinus_clicked()
195 mExpressionTextEdit->insertPlainText( u
" - "_s );
198void QgsProcessingRasterCalculatorExpressionDialog::mBtnMultiply_clicked()
200 mExpressionTextEdit->insertPlainText( u
" * "_s );
203void QgsProcessingRasterCalculatorExpressionDialog::mBtnDivide_clicked()
205 mExpressionTextEdit->insertPlainText( u
" / "_s );
208void QgsProcessingRasterCalculatorExpressionDialog::mBtnPower_clicked()
210 mExpressionTextEdit->insertPlainText( u
" ^ "_s );
213void QgsProcessingRasterCalculatorExpressionDialog::mBtnSqrt_clicked()
215 mExpressionTextEdit->insertPlainText( u
" sqrt ( "_s );
218void QgsProcessingRasterCalculatorExpressionDialog::mBtnOpenBracket_clicked()
220 mExpressionTextEdit->insertPlainText( u
" ( "_s );
223void QgsProcessingRasterCalculatorExpressionDialog::mBtnCloseBracket_clicked()
225 mExpressionTextEdit->insertPlainText( u
" ) "_s );
228void QgsProcessingRasterCalculatorExpressionDialog::mBtnGreater_clicked()
230 mExpressionTextEdit->insertPlainText( u
" > "_s );
233void QgsProcessingRasterCalculatorExpressionDialog::mBtnGreaterEqual_clicked()
235 mExpressionTextEdit->insertPlainText( u
" >= "_s );
238void QgsProcessingRasterCalculatorExpressionDialog::mBtnLess_clicked()
240 mExpressionTextEdit->insertPlainText( u
" < "_s );
243void QgsProcessingRasterCalculatorExpressionDialog::mBtnLessEqual_clicked()
245 mExpressionTextEdit->insertPlainText( u
" <= "_s );
248void QgsProcessingRasterCalculatorExpressionDialog::mBtnEqual_clicked()
250 mExpressionTextEdit->insertPlainText( u
" = "_s );
253void QgsProcessingRasterCalculatorExpressionDialog::mBtnNotEqual_clicked()
255 mExpressionTextEdit->insertPlainText( u
" != "_s );
258void QgsProcessingRasterCalculatorExpressionDialog::mBtnAnd_clicked()
260 mExpressionTextEdit->insertPlainText( u
" AND "_s );
263void QgsProcessingRasterCalculatorExpressionDialog::mBtnOr_clicked()
265 mExpressionTextEdit->insertPlainText( u
" OR "_s );
268void QgsProcessingRasterCalculatorExpressionDialog::mBtnIf_clicked()
270 mExpressionTextEdit->insertPlainText( u
" if ( "_s );
273void QgsProcessingRasterCalculatorExpressionDialog::mBtnMin_clicked()
275 mExpressionTextEdit->insertPlainText( u
" MIN ( "_s );
278void QgsProcessingRasterCalculatorExpressionDialog::mBtnMax_clicked()
280 mExpressionTextEdit->insertPlainText( u
" MAX ( "_s );
283void QgsProcessingRasterCalculatorExpressionDialog::mBtnAbs_clicked()
285 mExpressionTextEdit->insertPlainText( u
" ABS ( "_s );
288void QgsProcessingRasterCalculatorExpressionDialog::mBtnSin_clicked()
290 mExpressionTextEdit->insertPlainText( u
" sin ( "_s );
293void QgsProcessingRasterCalculatorExpressionDialog::mBtnCos_clicked()
295 mExpressionTextEdit->insertPlainText( u
" cos ( "_s );
298void QgsProcessingRasterCalculatorExpressionDialog::mBtnTan_clicked()
300 mExpressionTextEdit->insertPlainText( u
" tan ( "_s );
303void QgsProcessingRasterCalculatorExpressionDialog::mBtnLog_clicked()
305 mExpressionTextEdit->insertPlainText( u
" log10 ( "_s );
308void QgsProcessingRasterCalculatorExpressionDialog::mBtnAsin_clicked()
310 mExpressionTextEdit->insertPlainText( u
" asin ( "_s );
313void QgsProcessingRasterCalculatorExpressionDialog::mBtnAcos_clicked()
315 mExpressionTextEdit->insertPlainText( u
" acos ( "_s );
318void QgsProcessingRasterCalculatorExpressionDialog::mBtnAtan_clicked()
320 mExpressionTextEdit->insertPlainText( u
" atan ( "_s );
323void QgsProcessingRasterCalculatorExpressionDialog::mBtnLn_clicked()
325 mExpressionTextEdit->insertPlainText( u
" ln ( "_s );
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...