def on_mInsertExpressionButton_clicked(self): if self.timeStart != 0: self.timeEnd = time.time() print self.timeEnd if self.timeEnd - self.timeStart <= 2: self.timeStart = 0 return if (not self.mComposerLabel): return selText = self.mTextEdit.textCursor().selectedText() #edit the selected expression if there's one if (selText.startsWith("[%") and selText.endsWith("%]")): selText = selText.mid(2, selText.size() - 4) #use the atlas coverage layer, if any coverageLayer = self.atlasCoverageLayer() context = self.mComposerLabel.createExpressionContext() exprDlg = QgsExpressionBuilderDialog(coverageLayer, selText, self, "generic", context) exprDlg.setWindowTitle(QString("Insert expression")) if (exprDlg.exec_() == QDialog.Accepted): expression = exprDlg.expressionText() if (not expression.isEmpty()): self.mComposerLabel.beginCommand(QString("Insert expression")) self.mTextEdit.insertPlainText("[%" + expression + "%]") self.mComposerLabel.endCommand() self.timeStart = time.time()
def showExpressionsBuilder(self): context = self.param.expressionContext() dlg = QgsExpressionBuilderDialog(None, self.leText.text(), self, 'generic', context) if self.modelParametersDialog is not None: context.popScope() values = self.modelParametersDialog.getAvailableValuesOfType( ParameterNumber, OutputNumber) variables = {} for value in values: if isinstance(value, ValueFromInput): name = value.name element = self.modelParametersDialog.model.inputs[ name].param desc = element.description else: name = "%s_%s" % (value.alg, value.output) alg = self.modelParametersDialog.model.algs[value.alg] out = alg.algorithm.getOutputFromName(value.output) desc = "Output '%s' from algorithm '%s" % (out.description, alg.description) variables[name] = desc values = self.modelParametersDialog.getAvailableValuesOfType( ParameterVector, OutputVector) values.extend( self.modelParametersDialog.getAvailableValuesOfType( ParameterRaster, OutputRaster)) for value in values: if isinstance(value, ValueFromInput): name = value.name element = self.modelParametersDialog.model.inputs[ name].param desc = element.description else: name = "%s_%s" % (value.alg, value.output) alg = self.modelParametersDialog.model.algs[value.alg] element = alg.algorithm.getOutputFromName(value.output) desc = "Output '%s' from algorithm '%s" % ( element.description, alg.description) variables['%s_minx' % name] = "Minimum X of %s" % desc variables['%s_miny' % name] = "Maximum X of %s" % desc variables['%s_maxx' % name] = "Minimum Y of %s" % desc variables['%s_maxy' % name] = "Maximum Y of %s" % desc if isinstance(element, (ParameterRaster, OutputRaster)): variables['%s_min' % name] = "Minimum value of %s" % desc variables['%s_max' % name] = "Maximum value of %s" % desc variables['%s_avg' % name] = "Mean value of %s" % desc variables['%s_stddev' % name] = "Standard deviation of %s" % desc for variable, desc in variables.iteritems(): dlg.expressionBuilder().registerItem("Modeler", variable, "@" + variable, desc, highlightedItem=True) dlg.setWindowTitle(self.tr('Expression based input')) if dlg.exec_() == QDialog.Accepted: exp = QgsExpression(dlg.expressionText()) if not exp.hasParserError(): self.setValue(dlg.expressionText())
def _on_insert_expression(self): # Slot raised to insert an expression. if not isinstance(self._item_widget, QgsLayoutItemBaseWidget): return qrcode_item = self._item_widget.layoutObject() if not qrcode_item: return sel_txt = self._value_text_edit.textCursor().selectedText() # Edit expression text if specified if sel_txt.startswith('[%') and sel_txt.endswith('%]'): sel_txt = sel_txt.lstrip('[%') sel_txt = sel_txt.rstrip('%]') cov_layer = self._item_widget.coverageLayer() exp_ctx = qrcode_item.createExpressionContext() exp_dlg = QgsExpressionBuilderDialog(cov_layer, sel_txt, self, 'generic', exp_ctx) exp_dlg.setWindowTitle(self.tr('Insert Expression for Barcode Data')) exp_dlg.setAllowEvalErrors(False) if exp_dlg.exec_() == QDialog.Accepted: exp = exp_dlg.expressionText() if exp: self._value_text_edit.setPlainText('[%{0}%]'.format(exp))
def showExpressionsBuilder(self): dlg = QgsExpressionBuilderDialog( None, self.leText.text(), self, 'generic', self.output.expressionContext(self.alg)) dlg.setWindowTitle(self.tr('Expression based output')) if dlg.exec_() == QDialog.Accepted: self.leText.setText(dlg.expressionText())
def showExpressionsBuilder(self): context = self.alg.createExpressionContext({}, createContext()) dlg = QgsExpressionBuilderDialog(None, self.leText.text(), self, 'generic', context) dlg.setWindowTitle(self.tr('Expression based output')) if dlg.exec_() == QDialog.Accepted: expression = QgsExpression(dlg.expressionText()) self.leText.setText(expression.evaluate(context))
def showExpressionsBuilder(self): context = self.param.expressionContext() dlg = QgsExpressionBuilderDialog(None, self.leText.text(), self, 'generic', context) dlg.setWindowTitle(self.tr('Expression based input')) if dlg.exec_() == QDialog.Accepted: exp = QgsExpression(dlg.expressionText()) if not exp.hasParserError(): self.setValue(dlg.expressionText())
def showExpressionsBuilder(self): context = self.param.expressionContext() value = self.value() if not isinstance(value, str): value = '' dlg = QgsExpressionBuilderDialog(None, value, self.widget, 'generic', context) dlg.setWindowTitle(self.tr('Expression based input')) if dlg.exec_() == QDialog.Accepted: exp = QgsExpression(dlg.expressionText()) if not exp.hasParserError(): self.setValue(dlg.expressionText())
def on_advanced_search(self): # Slot raised to show the expression editor. filter_col = self.cbo_column.itemData(self.cbo_column.currentIndex()) start_txt = '"{0}" = '.format(filter_col) exp_dlg = QgsExpressionBuilderDialog(self._ds_mgr.vector_layer, start_txt, self, self._config.display_name) exp_dlg.setWindowTitle('{0} Expression Editor'.format( self._config.display_name)) if exp_dlg.exec_() == QDialog.Accepted: exp_text = exp_dlg.expressionText() self.exec_search(exp_text)
def showExpressionsBuilder(self): context = createExpressionContext() dlg = QgsExpressionBuilderDialog(None, str(self.spnValue.value()), self, 'generic', context) dlg.setWindowTitle(self.tr('Expression based input')) if dlg.exec_() == QDialog.Accepted: exp = QgsExpression(dlg.expressionText()) if not exp.hasParserError(): try: val = float(exp.evaluate(context)) self.setValue(val) except: return
def showExpressionsBuilder(self): context = self.expressionContext() dlg = QgsExpressionBuilderDialog(None, self.spnValue.text(), self, 'generic', context) dlg.setWindowTitle(self.tr('Expression based input')) if dlg.exec_() == QDialog.Accepted: exp = QgsExpression(dlg.expressionText()) if not exp.hasParserError(): result = exp.evaluate(context) if not exp.hasEvalError(): try: self.spnValue.setValue(float(result)) except: pass
def showExpressionsBuilder(self): context = self.param.expressionContext() dlg = QgsExpressionBuilderDialog(None, str(self.spnValue.value()), self, 'generic', context) dlg.setWindowTitle(self.tr('Expression based input')) if dlg.exec_() == QDialog.Accepted: exp = QgsExpression(dlg.expressionText()) if not exp.hasParserError(): try: val = float(exp.evaluate(context)) self.setValue(val) except: return
def showExpressionsBuilder(self): context = createExpressionContext() dlg = QgsExpressionBuilderDialog(None, str(self.leText.text()), self, 'generic', context) context.popScope() values = self.modelParametersDialog.getAvailableValuesOfType(QgsProcessingParameterNumber, QgsProcessingOutputNumber) variables = {} for value in values: if isinstance(value, QgsProcessingModelAlgorithm.ChildParameterSource): if value.source() == QgsProcessingModelAlgorithm.ChildParameterSource.ModelParameter: name = value.parameterName() element = self.modelParametersDialog.model.parameterDefinition(name) desc = element.description() elif value.source() == QgsProcessingModelAlgorithm.ChildParameterSource.ChildOutput: name = "%s_%s" % (value.outputChildId(), value.outputName()) alg = self.modelParametersDialog.model.childAlgorithm(value.outputChildId()) out = alg.algorithm().outputDefinition(value.outputName()) desc = self.tr("Output '{0}' from algorithm '{1}'").format(out.description(), alg.description()) variables[name] = desc values = self.modelParametersDialog.getAvailableValuesOfType([QgsProcessingParameterFeatureSource, QgsProcessingParameterRasterLayer], [QgsProcessingOutputVectorLayer, QgsProcessingOutputRasterLayer]) for value in values: if isinstance(value, QgsProcessingModelAlgorithm.ChildParameterSource): if value.source() == QgsProcessingModelAlgorithm.ChildParameterSource.ModelParameter: name = value.parameterName() element = self.modelParametersDialog.model.parameterDefinition(name) desc = element.description() elif value.source() == QgsProcessingModelAlgorithm.ChildParameterSource.ChildOutput: name = "%s_%s" % (value.outputChildId(), value.outputName()) alg = self.modelParametersDialog.model.childAlgorithm(value.outputChildId()) out = alg.algorithm().outputDefinition(value.outputName()) desc = self.tr("Output '{0}' from algorithm '{1}'").format(out.description(), alg.description()) variables['%s_minx' % name] = self.tr("Minimum X of {0}").format(desc) variables['%s_miny' % name] = self.tr("Minimum Y of {0}").format(desc) variables['%s_maxx' % name] = self.tr("Maximum X of {0}").format(desc) variables['%s_maxy' % name] = self.tr("Maximum Y of {0}").format(desc) if isinstance(element, (QgsProcessingParameterRasterLayer, QgsProcessingOutputRasterLayer)): variables['%s_min' % name] = self.tr("Minimum value of {0}").format(desc) variables['%s_max' % name] = self.tr("Maximum value of {0}").format(desc) variables['%s_avg' % name] = self.tr("Mean value of {0}").format(desc) variables['%s_stddev' % name] = self.tr("Standard deviation of {0}").format(desc) for variable, desc in variables.items(): dlg.expressionBuilder().registerItem("Modeler", variable, "@" + variable, desc, highlightedItem=True) dlg.setWindowTitle(self.tr('Expression based input')) if dlg.exec_() == QDialog.Accepted: exp = QgsExpression(dlg.expressionText()) if not exp.hasParserError(): self.setValue(dlg.expressionText())
def showExpressionsBuilder(self): context = createExpressionContext() processing_context = createContext() scope = self.modelParametersDialog.model.createExpressionContextScopeForChildAlgorithm(self.modelParametersDialog.childId, processing_context) context.appendScope(scope) highlighted = scope.variableNames() context.setHighlightedVariables(highlighted) dlg = QgsExpressionBuilderDialog(None, str(self.leText.text()), self, 'generic', context) dlg.setWindowTitle(self.tr('Expression Based Input')) if dlg.exec_() == QDialog.Accepted: exp = QgsExpression(dlg.expressionText()) if not exp.hasParserError(): self.setValue(dlg.expressionText())
def showExpressionsBuilder(self): context = self.param.expressionContext() dlg = QgsExpressionBuilderDialog(None, str(self.leText.text()), self, 'generic', context) context.popScope() values = self.modelParametersDialog.getAvailableValuesOfType(ParameterNumber, OutputNumber) variables = {} for value in values: if isinstance(value, ValueFromInput): name = value.name element = self.modelParametersDialog.model.inputs[name].param desc = element.description else: name = "%s_%s" % (value.alg, value.output) alg = self.modelParametersDialog.model.algs[value.alg] out = alg.algorithm.getOutputFromName(value.output) desc = "Output '%s' from algorithm '%s" % (out.description, alg.description) variables[name] = desc values = self.modelParametersDialog.getAvailableValuesOfType(ParameterVector, OutputVector) values.extend(self.modelParametersDialog.getAvailableValuesOfType(ParameterRaster, OutputRaster)) for value in values: if isinstance(value, ValueFromInput): name = value.name element = self.modelParametersDialog.model.inputs[name].param desc = element.description else: name = "%s_%s" % (value.alg, value.output) alg = self.modelParametersDialog.model.algs[value.alg] element = alg.algorithm.getOutputFromName(value.output) desc = "Output '%s' from algorithm '%s" % (element.description, alg.description) variables['%s_minx' % name] = "Minimum X of %s" % desc variables['%s_miny' % name] = "Maximum X of %s" % desc variables['%s_maxx' % name] = "Minimum Y of %s" % desc variables['%s_maxy' % name] = "Maximum Y of %s" % desc if isinstance(element, (ParameterRaster, OutputRaster)): variables['%s_min' % name] = "Minimum value of %s" % desc variables['%s_max' % name] = "Maximum value of %s" % desc variables['%s_avg' % name] = "Mean value of %s" % desc variables['%s_stddev' % name] = "Standard deviation of %s" % desc for variable, desc in variables.items(): dlg.expressionBuilder().registerItem("Modeler", variable, "@" + variable, desc, highlightedItem=True) dlg.setWindowTitle(self.tr('Expression based input')) if dlg.exec_() == QDialog.Accepted: exp = QgsExpression(dlg.expressionText()) if not exp.hasParserError(): self.setValue(dlg.expressionText())
def on_mAtlasFeatureFilterButton_clicked(self): atlasMap = self.mComposition.atlasComposition() vl = self.mAtlasCoverageLayerComboBox.currentLayer() if (not atlasMap or not vl): return # QScopedPointer<QgsExpressionContext> context( mComposition.createExpressionContext() ); exprDlg = QgsExpressionBuilderDialog( vl, self.mAtlasFeatureFilterEdit.text(), self, "generic") exprDlg.setWindowTitle("Expression based filter") if (exprDlg.exec_() == QtGui.QDialog.Accepted): expression = exprDlg.expressionText() if (not expression.isEmpty()): self.mAtlasFeatureFilterEdit.setText(expression) atlasMap.setFeatureFilter(self.mAtlasFeatureFilterEdit.text()) self.updateAtlasFeatures()
class ExpressionFieldCombo(FieldCombo): def __init__(self, widget, expressionWidget, vectorLayerCombo, initField="", options={}): FieldCombo.__init__(self, widget, vectorLayerCombo, initField, options) expressionWidget.clicked.connect(self.editExpression) self.windowTitle = "Expression based label" def editExpression(self): expr = "" if self.widget.currentIndex() >= self.nFields: expr = self.widget.currentText() self.exprDlg = QgsExpressionBuilderDialog(self.layer, expr) self.exprDlg.setWindowTitle(self.windowTitle) if self.exprDlg.exec_() == QDialog.Accepted: expression = self.exprDlg.expressionText() self.addExpression(expression) def getExpression(self): if self.widget.currentIndex() < 0: return None, None if self.widget.currentIndex() <= self.nFields - 1: return self.getFieldName(), False else: return self.widget.currentText(), True def setExpression(self, expr): if self.setField(expr) != -1: return self.addExpression(expr) def addExpression(self, expr): # Only add the expression if the user has entered some text. if expr != "": self.widget.addItem(expr) self.widget.setCurrentIndex(self.widget.count() - 1)
class ExpressionFieldCombo(FieldCombo): def __init__(self, widget, expressionWidget, vectorLayerCombo, initField="", options={}): FieldCombo.__init__(self, widget, vectorLayerCombo, initField, options) expressionWidget.clicked.connect(self.editExpression) self.windowTitle = "Expression based label" def editExpression(self): expr = "" if self.widget.currentIndex() >= self.nFields: expr = self.widget.currentText() self.exprDlg = QgsExpressionBuilderDialog(self.layer, expr) self.exprDlg.setWindowTitle(self.windowTitle) if self.exprDlg.exec_() == QDialog.Accepted: expression = self.exprDlg.expressionText() self.addExpression(expression) def getExpression(self): if self.widget.currentIndex() < 0: return None,None if self.widget.currentIndex() <= self.nFields-1: return self.getFieldName(), False else: return self.widget.currentText(), True def setExpression(self, expr): if self.setField(expr) != -1: return self.addExpression(expr) def addExpression(self, expr): # Only add the expression if the user has entered some text. if expr != "": self.widget.addItem(expr) self.widget.setCurrentIndex(self.widget.count() - 1)
def on_mAtlasFilenameExpressionButton_clicked(self): atlasMap = self.mComposition.atlasComposition() if (not atlasMap or not atlasMap.coverageLayer()): return # QScopedPointer<QgsExpressionContext> context( mComposition.createExpressionContext() ); exprDlg = QgsExpressionBuilderDialog( atlasMap.coverageLayer(), self.mAtlasFilenamePatternEdit.text(), self, "generic") exprDlg.setWindowTitle("Expression based filename") if (exprDlg.exec_() == QtGui.QDialog.Accepted): expression = exprDlg.expressionText() if (not expression.isEmpty()): # //set atlas filename expression self.mAtlasFilenamePatternEdit.setText(expression) if (not atlasMap.setFilenamePattern(expression)): # //expression could not be set QMessageBox.warning( self, "Could not evaluate filename pattern", QString( "Could not set filename pattern as '%1'.\nParser error:\n%2" ).arg(expression, atlasMap.filenamePatternErrorString()))
def showExpressionsBuilder(self): dlg = QgsExpressionBuilderDialog(None, self.leText.text(), self, 'generic', self.output.expressionContext(self.alg)) dlg.setWindowTitle(self.tr('Expression based output')) if dlg.exec_() == QDialog.Accepted: self.leText.setText(dlg.expressionText())