Skip to content

Commit

Permalink
Merge pull request #32890 from elpaso/processing-raster-calc-expressi…
Browse files Browse the repository at this point in the history
…on-check

[feature] Processing raster calc: add missing btns and validate
  • Loading branch information
elpaso committed Nov 16, 2019
2 parents 81e6459 + 25edd83 commit 29824c1
Show file tree
Hide file tree
Showing 2 changed files with 131 additions and 80 deletions.
190 changes: 111 additions & 79 deletions python/plugins/processing/algs/qgis/ui/RasterCalculatorWidget.ui
Expand Up @@ -34,10 +34,24 @@
<string>Operators</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="2">
<widget class="QPushButton" name="mACosButton">
<item row="2" column="4">
<widget class="QPushButton" name="mOpenBracketPushButton">
<property name="text">
<string>acos</string>
<string>(</string>
</property>
</widget>
</item>
<item row="3" column="5">
<widget class="QPushButton" name="mGreaterEqualButton">
<property name="text">
<string>&gt;=</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QPushButton" name="mLessButton">
<property name="text">
<string>&lt;</string>
</property>
</widget>
</item>
Expand All @@ -48,38 +62,45 @@
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QPushButton" name="mPlusPushButton">
<item row="0" column="5">
<widget class="QPushButton" name="mAndButton">
<property name="text">
<string>+</string>
<string>AND</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QPushButton" name="mExpButton">
<item row="2" column="2">
<widget class="QPushButton" name="mTanButton">
<property name="text">
<string>^</string>
<string>tan</string>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QPushButton" name="mEqualButton">
<item row="3" column="1">
<widget class="QPushButton" name="mGreaterButton">
<property name="text">
<string>=</string>
<string>&gt;</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QPushButton" name="mLessButton">
<item row="0" column="4">
<widget class="QPushButton" name="mLogButton">
<property name="text">
<string>&lt;</string>
<string>log10</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="mMinusPushButton">
<item row="0" column="1">
<widget class="QPushButton" name="mMultiplyPushButton">
<property name="text">
<string>-</string>
<string>*</string>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="QPushButton" name="mLnButton">
<property name="text">
<string>ln</string>
</property>
</widget>
</item>
Expand All @@ -96,59 +117,65 @@
</property>
</spacer>
</item>
<item row="0" column="1">
<widget class="QPushButton" name="mMultiplyPushButton">
<property name="text">
<string>*</string>
<item row="5" column="2">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="3" column="4">
<widget class="QPushButton" name="mLesserEqualButton">
<item row="2" column="0">
<widget class="QPushButton" name="mExpButton">
<property name="text">
<string>&lt;=</string>
<string>^</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="mDividePushButton">
<item row="3" column="2">
<widget class="QPushButton" name="mEqualButton">
<property name="text">
<string>/</string>
<string>=</string>
</property>
</widget>
</item>
<item row="2" column="5">
<widget class="QPushButton" name="mCloseBracketPushButton">
<item row="0" column="2">
<widget class="QPushButton" name="mCosButton">
<property name="text">
<string>)</string>
<string>cos</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QPushButton" name="mSinButton">
<item row="2" column="1">
<widget class="QPushButton" name="mSqrtButton">
<property name="text">
<string>sin</string>
<string>sqrt</string>
</property>
</widget>
</item>
<item row="0" column="5">
<widget class="QPushButton" name="mAndButton">
<item row="3" column="4">
<widget class="QPushButton" name="mLesserEqualButton">
<property name="text">
<string>AND</string>
<string>&lt;=</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QPushButton" name="mTanButton">
<item row="0" column="3">
<widget class="QPushButton" name="mSinButton">
<property name="text">
<string>tan</string>
<string>sin</string>
</property>
</widget>
</item>
<item row="3" column="5">
<widget class="QPushButton" name="mGreaterEqualButton">
<item row="0" column="0">
<widget class="QPushButton" name="mPlusPushButton">
<property name="text">
<string>&gt;=</string>
<string>+</string>
</property>
</widget>
</item>
Expand All @@ -159,74 +186,68 @@
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QPushButton" name="mGreaterButton">
<item row="1" column="5">
<widget class="QPushButton" name="mOrButton">
<property name="text">
<string>&gt;</string>
<string>OR</string>
</property>
</widget>
</item>
<item row="2" column="3">
<widget class="QPushButton" name="mATanButton">
<item row="1" column="2">
<widget class="QPushButton" name="mACosButton">
<property name="text">
<string>atan</string>
<string>acos</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QPushButton" name="mCosButton">
<item row="2" column="5">
<widget class="QPushButton" name="mCloseBracketPushButton">
<property name="text">
<string>cos</string>
<string>)</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QPushButton" name="mSqrtButton">
<item row="1" column="0">
<widget class="QPushButton" name="mMinusPushButton">
<property name="text">
<string>sqrt</string>
<string>-</string>
</property>
</widget>
</item>
<item row="0" column="4">
<widget class="QPushButton" name="mLogButton">
<item row="2" column="3">
<widget class="QPushButton" name="mATanButton">
<property name="text">
<string>log10</string>
<string>atan</string>
</property>
</widget>
</item>
<item row="1" column="5">
<widget class="QPushButton" name="mOrButton">
<item row="1" column="1">
<widget class="QPushButton" name="mDividePushButton">
<property name="text">
<string>OR</string>
<string>/</string>
</property>
</widget>
</item>
<item row="2" column="4">
<widget class="QPushButton" name="mOpenBracketPushButton">
<item row="4" column="0">
<widget class="QPushButton" name="mAbsButton">
<property name="text">
<string>(</string>
<string>abs</string>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="QPushButton" name="mLnButton">
<item row="4" column="1">
<widget class="QPushButton" name="mMinButton">
<property name="text">
<string>ln</string>
<string>min</string>
</property>
</widget>
</item>
<item row="4" column="2">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
<widget class="QPushButton" name="mMaxButton">
<property name="text">
<string>max</string>
</property>
</spacer>
</widget>
</item>
</layout>
</widget>
Expand All @@ -239,7 +260,18 @@
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QPlainTextEdit" name="text"/>
<widget class="QPlainTextEdit" name="text">
<property name="placeholderText">
<string>Please enter a valid expression by clicking on one or more layer bands and operators.</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="expressionErrorLabel">
<property name="text">
<string>Expression is empty</string>
</property>
</widget>
</item>
</layout>
</widget>
Expand Down
Expand Up @@ -47,7 +47,7 @@

from processing.gui.wrappers import InvalidParameterValue

from qgis.analysis import QgsRasterCalculatorEntry
from qgis.analysis import QgsRasterCalculatorEntry, QgsRasterCalcNode

pluginPath = os.path.dirname(__file__)
WIDGET_ADD_NEW, BASE_ADD_NEW = uic.loadUiType(
Expand Down Expand Up @@ -154,6 +154,25 @@ def addButtonText(text):
self.buttonAddPredefined.clicked.connect(self.addPredefined)

self.buttonSavePredefined.clicked.connect(self.savePredefined)
self.text.textChanged.connect(self.expressionValid)

def expressionValid(self):
errorString = ''
testNode = QgsRasterCalcNode.parseRasterCalcString(self.text.toPlainText(), errorString)

if not self.text.toPlainText():
self.expressionErrorLabel.setText(self.tr('Expression is empty'))
self.expressionErrorLabel.setStyleSheet("QLabel { color: black; }")
return False

if testNode:
self.expressionErrorLabel.setText(self.tr('Expression is valid'))
self.expressionErrorLabel.setStyleSheet("QLabel { color: green; font-weight: bold; }")
return True

self.expressionErrorLabel.setText(self.tr('Expression is not valid ') + errorString)
self.expressionErrorLabel.setStyleSheet("QLabel { color : red; font-weight: bold; }")
return False

def expsFile(self):
return os.path.join(userFolder(), 'rastercalcexpressions.json')
Expand Down

0 comments on commit 29824c1

Please sign in to comment.