Processing raster calc: add missing btns and validate

Validate expression
This commit is contained in:
Alessandro Pasotti 2019-11-15 15:49:18 +01:00
parent 2eb410844f
commit 25edd83b0a
2 changed files with 167 additions and 116 deletions

View File

@ -34,38 +34,17 @@
<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="1" column="3">
<widget class="QPushButton" name="mASinButton">
<item row="3" column="5">
<widget class="QPushButton" name="mGreaterEqualButton">
<property name="text">
<string>asin</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QPushButton" name="mPlusPushButton">
<property name="text">
<string>+</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QPushButton" name="mExpButton">
<property name="text">
<string>^</string>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QPushButton" name="mEqualButton">
<property name="text">
<string>=</string>
<string>&gt;=</string>
</property>
</widget>
</item>
@ -76,58 +55,10 @@
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="mMinusPushButton">
<item row="1" column="3">
<widget class="QPushButton" name="mASinButton">
<property name="text">
<string>-</string>
</property>
</widget>
</item>
<item row="0" column="8">
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>2</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="1">
<widget class="QPushButton" name="mMultiplyPushButton">
<property name="text">
<string>*</string>
</property>
</widget>
</item>
<item row="3" column="4">
<widget class="QPushButton" name="mLesserEqualButton">
<property name="text">
<string>&lt;=</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="mDividePushButton">
<property name="text">
<string>/</string>
</property>
</widget>
</item>
<item row="2" column="5">
<widget class="QPushButton" name="mCloseBracketPushButton">
<property name="text">
<string>)</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QPushButton" name="mSinButton">
<property name="text">
<string>sin</string>
<string>asin</string>
</property>
</widget>
</item>
@ -145,20 +76,6 @@
</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="3">
<widget class="QPushButton" name="mNotEqualButton">
<property name="text">
<string>!=</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QPushButton" name="mGreaterButton">
<property name="text">
@ -166,10 +83,64 @@
</property>
</widget>
</item>
<item row="2" column="3">
<widget class="QPushButton" name="mATanButton">
<item row="0" column="4">
<widget class="QPushButton" name="mLogButton">
<property name="text">
<string>atan</string>
<string>log10</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QPushButton" name="mMultiplyPushButton">
<property name="text">
<string>*</string>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="QPushButton" name="mLnButton">
<property name="text">
<string>ln</string>
</property>
</widget>
</item>
<item row="0" column="8">
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>2</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="5" 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>
</property>
</spacer>
</item>
<item row="2" column="0">
<widget class="QPushButton" name="mExpButton">
<property name="text">
<string>^</string>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QPushButton" name="mEqualButton">
<property name="text">
<string>=</string>
</property>
</widget>
</item>
@ -187,10 +158,31 @@
</property>
</widget>
</item>
<item row="0" column="4">
<widget class="QPushButton" name="mLogButton">
<item row="3" column="4">
<widget class="QPushButton" name="mLesserEqualButton">
<property name="text">
<string>log10</string>
<string>&lt;=</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QPushButton" name="mSinButton">
<property name="text">
<string>sin</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QPushButton" name="mPlusPushButton">
<property name="text">
<string>+</string>
</property>
</widget>
</item>
<item row="3" column="3">
<widget class="QPushButton" name="mNotEqualButton">
<property name="text">
<string>!=</string>
</property>
</widget>
</item>
@ -201,32 +193,61 @@
</property>
</widget>
</item>
<item row="2" column="4">
<widget class="QPushButton" name="mOpenBracketPushButton">
<item row="1" column="2">
<widget class="QPushButton" name="mACosButton">
<property name="text">
<string>(</string>
<string>acos</string>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="QPushButton" name="mLnButton">
<item row="2" column="5">
<widget class="QPushButton" name="mCloseBracketPushButton">
<property name="text">
<string>ln</string>
<string>)</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="mMinusPushButton">
<property name="text">
<string>-</string>
</property>
</widget>
</item>
<item row="2" column="3">
<widget class="QPushButton" name="mATanButton">
<property name="text">
<string>atan</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="mDividePushButton">
<property name="text">
<string>/</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QPushButton" name="mAbsButton">
<property name="text">
<string>abs</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QPushButton" name="mMinButton">
<property name="text">
<string>min</string>
</property>
</widget>
</item>
<item row="4" column="2">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
<widget class="QPushButton" name="mMaxButton">
<property name="text">
<string>max</string>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</widget>
</item>
</layout>
</widget>
@ -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>

View File

@ -47,7 +47,7 @@ from processing.tools.system import userFolder
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(
@ -154,6 +154,25 @@ class ExpressionWidget(BASE, WIDGET):
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')