Пример #1
0
 def createEditor(self, parent, option, index):
     editor = QgsFieldExpressionWidget(parent)
     editor.setLayer(index.model().layer())
     editor.registerExpressionContextGenerator(index.model().contextGenerator())
     editor.fieldChanged.connect(self.on_expression_fieldChange)
     editor.setAutoFillBackground(True)
     return editor
Пример #2
0
    def addLayerFields(self, layer_source):
        layer = layer_source.layer

        if layer.type() != QgsMapLayer.VectorLayer:
            return

        for i, field in enumerate(layer.fields()):
            row = self.rowCount()
            ews = layer.editorWidgetSetup(i)

            if ews.type() == 'ExternalResource':
                # for later: if ews.config().get('DocumentViewer', QgsExternalResourceWidget.NoContent) == QgsExternalResourceWidget.Image:
                self.insertRow(row)
                item = QTableWidgetItem(layer.name())
                item.setData(Qt.UserRole, layer_source)
                self.setItem(row, 0, item)
                item = QTableWidgetItem(field.name())
                self.setItem(row, 1, item)
                ew = QgsFieldExpressionWidget()
                ew.setLayer(layer)
                expression = layer_source.photo_naming(field.name())
                ew.setExpression(expression)
                self.setCellWidget(row, 2, ew)

        self.resizeColumnsToContents()
Пример #3
0
 def createEditor(self, parent, option, index):
     editor = QgsFieldExpressionWidget(parent)
     editor.setLayer(index.model().layer())
     editor.registerExpressionContextGenerator(index.model().contextGenerator())
     editor.fieldChanged.connect(self.on_expression_fieldChange)
     editor.setAutoFillBackground(True)
     return editor
Пример #4
0
 def createEditor(self, parent, option, index):
     editor = QgsFieldExpressionWidget(parent)
     editor.setLayer(index.model().layer())
     editor.registerExpressionContextGenerator(index.model().contextGenerator())
     editor.fieldChanged.connect(self.on_expression_fieldChange)
     editor.setAutoFillBackground(True)
     editor.setAllowEvalErrors(self.parent().dialogType == DIALOG_MODELER)
     return editor
Пример #5
0
 def createEditor(self, parent, option, index):
     editor = QgsFieldExpressionWidget(parent)
     editor.setLayer(index.model().layer())
     editor.registerExpressionContextGenerator(index.model().contextGenerator())
     editor.fieldChanged.connect(self.on_expression_fieldChange)
     editor.setAutoFillBackground(True)
     editor.setAllowEvalErrors(self.parent().dialogType == DIALOG_MODELER)
     return editor
 def action_field_add(self):
     #self.bar.pushMessage("Trigger", "signal received", level=QgsMessageBar.INFO)
     field_expression_widget = QgsFieldExpressionWidget()
     field_expression_widget.setLayer(self.lyrCombobox.currentLayer())
     color_btn_widget = QgsColorButton()
     spinbox = QtGui.QSpinBox()
     presetrow = PresetRow(qgsfieldexpressionwidget=field_expression_widget,
                           qgscolorbutton=color_btn_widget,
                           qspinbox=spinbox)
     self._preset_rows.add_preset(presetrow)
     self.redraw_fields()
    def copy(self):
        field_expression_widget = QgsFieldExpressionWidget()
        field_expression_widget.setLayer(
            self._qgsfieldexpressionwidget.layer())
        field_expression_widget.setField(
            self._qgsfieldexpressionwidget.currentText())

        color_btn_widget = QgsColorButton()
        color_btn_widget.setColor(self._qgscolorbutton.color())
        spinbox = QtGui.QSpinBox()
        spinbox.setValue(self._qspinbox.value())
        return PresetRow(field_expression_widget, color_btn_widget, spinbox)
Пример #8
0
 def __addRow(self):
     """
     Add a row for the fields
     """
     count = self.mTableWidget.rowCount()
     self.mTableWidget.insertRow(count)
     comboBox = QtWidgets.QComboBox()
     layer = self.mLayerOutput.currentLayer()
     comboBox.insertItems(0, [f.displayName() for f in layer.fields()])
     self.mTableWidget.setCellWidget(count, 0, comboBox)
     expr = QgsFieldExpressionWidget()
     expr.setLayer(layer)
     self.mTableWidget.setCellWidget(count, 1, expr)
Пример #9
0
    def createEditor(self, parent, option, index):
        column = index.column()

        fieldType = FieldsMappingModel.columns[column]['type']
        if fieldType == QtCore.QVariant.Type:
            editor = QtGui.QComboBox(parent)
            for key, text in FieldsMappingModel.fieldTypes.iteritems():
                editor.addItem(text, key)

        elif fieldType == QgsExpression:
            editor = QgsFieldExpressionWidget(parent)
            editor.setLayer(index.model().layer())
            # editor.fieldChanged.connect(self.on_expression_fieldChange)

        else:
            editor = QtGui.QStyledItemDelegate.createEditor(self, parent, option, index)

        editor.setAutoFillBackground(True)
        return editor
Пример #10
0
    def addExpressionWidget(self):
        hor = QHBoxLayout()
        fieldExp = QgsFieldExpressionWidget()
        combo = QComboBox()
        hor.addWidget(combo)
        self.combos.append(combo)
        hor.addWidget(fieldExp)
        del_btn = QPushButton(self.tr("Delete"))
        hor.addWidget(del_btn)
        self.dels.append(del_btn)
        self.verticalLayout.addLayout(hor)
        self.exps.append(fieldExp)
        self.hors.append(hor)
        if self.slave is not None:
            self.updateComboBoxFromLayerAttributes(combo, self.slave.fields())
        if self.master is not None:
            fieldExp.setLayer(self.master)

        del_btn.clicked.connect(self.removeExpressionWidget)
Пример #11
0
    def addExpressionWidget(self):
        hor = QtGui.QHBoxLayout()
        fieldExp = QgsFieldExpressionWidget()
        combo = QtGui.QComboBox()
        hor.addWidget(combo)
        self.combos.append(combo)
        hor.addWidget(fieldExp)
        del_btn = QtGui.QPushButton(self.tr("Delete"))
        hor.addWidget(del_btn)
        self.dels.append(del_btn)
        self.verticalLayout.addLayout(hor)
        self.exps.append(fieldExp)
        self.hors.append(hor)
        if self.slave is not None:
            self.updateComboBoxFromLayerAttributes(combo, self.slave.fields())
        if self.master is not None:
            fieldExp.setLayer(self.master)

        del_btn.clicked.connect(self.removeExpressionWidget)
Пример #12
0
    def createEditor(self, parent, option, index):
        column = index.column()

        fieldType = FieldsMappingModel.columns[column]['type']
        if fieldType == QtCore.QVariant.Type:
            editor = QtGui.QComboBox(parent)
            for key, text in FieldsMappingModel.fieldTypes.iteritems():
                editor.addItem(text, key)

        elif fieldType == QgsExpression:
            editor = QgsFieldExpressionWidget(parent)
            editor.setLayer(index.model().layer())
            editor.fieldChanged.connect(self.on_expression_fieldChange)

        else:
            editor = QtGui.QStyledItemDelegate.createEditor(
                self, parent, option, index)

        editor.setAutoFillBackground(True)
        return editor
Пример #13
0
class vectorLayerPropertyDlg(QDialog):
    '''
    classdocs
    '''
    def __init__(self, parent, layer):
        '''
        Constructor
        '''
        QDialog.__init__(self, parent)
        self.ui = Ui_VectorLayerProPertyDialog()
        self.ui.setupUi(self)

        self.ui.txtLayerName.setText(layer.name())
        self.ui.txtLayerSource.setText(layer.source())
        self.ui.txtCrs.setText(layer.crs().authid() + " - " +
                               layer.crs().description())
        self.ui.btnCrsSelect.clicked.connect(self.selectCrs)
        self.mCrs = layer.crs()
        self.vLayer = layer
        self.ui.mOptionsListWidget.currentRowChanged.connect(
            self.changeStackWidget)
        ''' init RenderV2 Widget'''
        self.mRendererDialog = QgsRendererV2PropertiesDialog(
            self.vLayer, QgsStyleV2.defaultStyle(), True)
        self.ui.stackedWidget.insertWidget(1, self.mRendererDialog)
        self.ui.buttonBox.accepted.connect(self.OK)

        frame_Label = QFrame()
        verticalLayout_Label = QVBoxLayout(frame_Label)
        self.mLabelWidget = QgsFieldExpressionWidget()
        self.mLabelWidget.setLayer(layer)
        verticalLayout_Label.addWidget(self.mLabelWidget)

        spacerItem = QSpacerItem(20, 40, QSizePolicy.Minimum,
                                 QSizePolicy.Expanding)
        verticalLayout_Label.addItem(spacerItem)
        frame_Label.setLayout(verticalLayout_Label)
        self.ui.stackedWidget.insertWidget(2, frame_Label)
#         self.ui.buttonBox.accepted.connect(self.OK)

    def selectCrs(self):
        projectionDlg = QgsGenericProjectionSelector(self)
        projectionDlg.setSelectedAuthId(self.mCrs.authid())
        if projectionDlg.exec_():
            self.mCrs = QgsCoordinateReferenceSystem(
                projectionDlg.selectedCrsId(),
                QgsCoordinateReferenceSystem.InternalCrsId)
            self.ui.txtCrs.setText(self.mCrs.authid() + " - " +
                                   self.mCrs.description())

    def changeStackWidget(self, index):
        self.ui.stackedWidget.setCurrentIndex(index)

    def OK(self):
        self.vLayer.setCrs(self.mCrs)
        self.mRendererDialog.apply()
        self.vLayer.triggerRepaint()
        if self.ui.stackedWidget.currentIndex(
        ) == 2 and self.mLabelWidget.currentText() != "":
            self.vLayer.setCustomProperty("labeling", "pal")
            self.vLayer.setCustomProperty("labeling/enabled", "true")
            self.vLayer.setCustomProperty("labeling/fontFamily", "Arial")
            self.vLayer.setCustomProperty("labeling/fontSize", "8")
            self.vLayer.setCustomProperty("labeling/fieldName",
                                          self.mLabelWidget.currentText())

            # palLayerSetting = QgsPalLayerSettings()
            # palLayerSetting.readFromLayer(self.vLayer)
            # palLayerSetting.enabled = True
            # palLayerSetting.fieldName = self.mLabelWidget.currentText()
            # palLayerSetting.isExpression = True
            if self.vLayer.geometryType() == QGis.Line:
                self.vLayer.setCustomProperty("labeling/placement", "2")
                self.vLayer.setCustomProperty(
                    "labeling/placementFlags",
                    str(QgsPalLayerSettings.AboveLine))
                # palLayerSetting.placement = QgsPalLayerSettings.Line
                # palLayerSetting.placementFlags = QgsPalLayerSettings.AboveLine
            elif self.vLayer.geometryType() == QGis.Point:
                self.vLayer.setCustomProperty("labeling/placement", "0")
                self.vLayer.setCustomProperty(
                    "labeling/placementFlags",
                    str(QgsPalLayerSettings.AroundPoint))
                # self.vLayer.setCustomProperty("labeling/placementFlags", "0")
                # palLayerSetting.placement = QgsPalLayerSettings.Points
                # palLayerSetting.placementFlags = QgsPalLayerSettings.AroundPoint
            else:
                self.vLayer.setCustomProperty("labeling/placement", "3")
                self.vLayer.setCustomProperty(
                    "labeling/placementFlags",
                    str(QgsPalLayerSettings.AboveLine))
                # palLayerSetting.placement = QgsPalLayerSettings.PolygonBoundary
                # palLayerSetting.placementFlags = QgsPalLayerSettings.AboveLine
            # palLayerSetting.setDataDefinedProperty(QgsPalLayerSettings.Size, True, True, '8', "")
            # palLayerSetting.writeToLayer(self.vLayer)
        elif self.ui.stackedWidget.currentIndex(
        ) == 2 and self.mLabelWidget.currentText() == "":
            self.vLayer.setCustomProperty("labeling", "")
        QgsProject.instance().dirty(True)
        QDialog.accept(self)
class PresetRow():
    def __init__(self,
                 qgsfieldexpressionwidget=None,
                 qgscolorbutton=None,
                 qspinbox=None):
        self._qgsfieldexpressionwidget = qgsfieldexpressionwidget
        if qgsfieldexpressionwidget is None:
            self._qgsfieldexpressionwidget = QgsFieldExpressionWidget()
        self._qgscolorbutton = qgscolorbutton
        if qgscolorbutton is None:
            self._qgscolorbutton = QgsColorButton()
        self._qspinbox = qspinbox
        if qspinbox is None:
            self._qspinbox = QtGui.QSpinBox()
        self._last_feature = None

    def set_layer(self, layer_id):
        self._qgsfieldexpressionwidget.setLayer(layer_id)

    def __del__(self):
        self._qgsfieldexpressionwidget.deleteLater()
        self._qgsfieldexpressionwidget = None
        self._qgscolorbutton.deleteLater()
        self._qgscolorbutton = None
        self._qspinbox.deleteLater()
        self._qspinbox = None

    def __str__(self):
        return "{}-{}-{}".format(str(self._qgsfieldexpressionwidget),
                                 str(self._qgscolorbutton),
                                 str(self._qspinbox))

    def __repr__(self):
        return self.__str__()

    def asLst(self):
        return self._qgscolorbutton, self._qgsfieldexpressionwidget, self._qspinbox

    @property
    def qgsfieldexp(self):
        return self._qgsfieldexpressionwidget

    @property
    def exp_txt(self):
        return self._qgsfieldexpressionwidget.currentText()

    @property
    def qgscolorbutton(self):
        return self._qgscolorbutton

    @property
    def qspinbox(self):
        return self._qspinbox

    @property
    def lvl(self):
        return self._qspinbox.value()

    def copy(self):
        field_expression_widget = QgsFieldExpressionWidget()
        field_expression_widget.setLayer(
            self._qgsfieldexpressionwidget.layer())
        field_expression_widget.setField(
            self._qgsfieldexpressionwidget.currentText())

        color_btn_widget = QgsColorButton()
        color_btn_widget.setColor(self._qgscolorbutton.color())
        spinbox = QtGui.QSpinBox()
        spinbox.setValue(self._qspinbox.value())
        return PresetRow(field_expression_widget, color_btn_widget, spinbox)

    #===========================================================================
    #
    #===========================================================================
    def dump(self):
        exp = self._qgsfieldexpressionwidget.currentText()
        #color=self._qgscolorbutton.color().name()
        color = self._qgscolorbutton.color().rgba()
        idx = self._qspinbox.value()
        res = {"exp": exp, "color": color, "idx": idx}
        return json.dumps(res)

    #=======================================================================
    #
    #=======================================================================
    def load(self, str_dump):
        res = json.loads(str_dump)
        self._qgsfieldexpressionwidget.setField(res["exp"])
        #self._qgscolorbutton.color().setNamedColor(res["color"])
        qcolor = self._qgscolorbutton.color()
        qcolor.setRgba(res["color"])
        self._qgscolorbutton.setColor(qcolor)
        self._qspinbox.setValue(res["idx"])

    @property
    def exp(self):
        return QgsExpression(self._qgsfieldexpressionwidget.asExpression())

    @property
    def qcolor(self):
        return self._qgscolorbutton.color()

    @property
    def color_rgba(self):
        return self._qgscolorbutton.color().rgba()

    @property
    def color_hex(self):
        return self._qgscolorbutton.color().name()

    def setFeature(self, feature):
        self._last_feature = feature

    def execute(self, feature=None):
        if feature is not None:
            self.setFeature(feature)
        if self._last_feature is None: return None
        else: return self.exp.evaluate(self._last_feature)