def commitClicked(self):
        feature = self.listWidget.currentItem().feature
        geom = None
        self.attributesTable.setRowCount(len(feature))
        for idx, attrname in enumerate(feature):
            value = feature[attrname]
            font = QFont()
            font.setBold(True)
            font.setWeight(75)
            item = QTableWidgetItem(attrname)
            item.setFont(font)
            self.attributesTable.setItem(idx, 0, item)
            self.attributesTable.setItem(idx, 1, QTableWidgetItem(str(value)))
            if geom is None:
                try:
                    geom = QgsGeometry.fromWkt(value)
                except:
                    pass

        self.attributesTable.resizeRowsToContents()
        self.attributesTable.horizontalHeader().setMinimumSectionSize(150)
        self.attributesTable.horizontalHeader().setStretchLastSection(True)

        settings = QSettings()
        prjSetting = settings.value('/Projections/defaultBehaviour')
        settings.setValue('/Projections/defaultBehaviour', '')
        types = ["Point", "LineString", "Polygon"]
        layers = []
        if geom is not None:
            geomtype = types[int(geom.type())]
            layer = loadLayerNoCrsDialog(geomtype + "?crs=EPSG:4326", "temp",
                                         "memory")
            pr = layer.dataProvider()
            feat = QgsFeature()
            feat.setGeometry(geom)
            pr.addFeatures([feat])
            layer.updateExtents()
            layer.selectAll()
            layer.setExtent(layer.boundingBoxOfSelected())
            layer.invertSelection()
            symbol = QgsSymbolV2.defaultSymbol(layer.geometryType())
            symbol.setColor(Qt.green)
            symbol.setAlpha(0.5)
            if QGis.QGIS_VERSION_INT < 29900:
                layer.setRendererV2(QgsSingleSymbolRendererV2(symbol))
            else:
                layer.setRenderer(QgsSingleSymbolRenderer(symbol))
            self.mapCanvas.setRenderFlag(False)
            self.mapCanvas.setLayerSet([QgsMapCanvasLayer(layer)])
            QgsMapLayerRegistry.instance().addMapLayer(layer, False)
            self.mapCanvas.setExtent(layer.extent())
            self.mapCanvas.setRenderFlag(True)
            layers.append(layer)
        else:
            self.mapCanvas.setLayerSet([])
        settings.setValue('/Projections/defaultBehaviour', prjSetting)
    def showFeatureAttributes(self):
        conflictItem = self.lastSelectedItem
        self.oursgeom = None
        self.theirsgeom = None
        geoms = (self.oursgeom, self.theirsgeom)
        self.currentConflictedAttributes = []
        attribs = list(conflictItem.origin.keys())
        self.attributesTable.setRowCount(len(attribs))

        self.conflicted = []
        for idx, name in enumerate(attribs):
            font = QFont()
            font.setBold(True)
            font.setWeight(75)
            item = QTableWidgetItem(name)
            item.setFont(font)
            self.attributesTable.setItem(idx, 3, item);

            self.attributesTable.setItem(idx, 4, ValueItem(None, False));

            try:
                values = (conflictItem.origin[name], conflictItem.local[name], conflictItem.remote[name])
            except Exception: #Local has been deleted
                self._afterSolve(False)
                self.solveModifyAndDelete(conflictItem.conflict.path, self.REMOTE)
                return
            except TypeError: #Remote has been deleted
                self._afterSolve(False)
                self.solveModifyAndDelete(conflictItem.conflict.path,self.LOCAL)
                return
            try:
                geom = QgsGeometry.fromWkt(values[0])
            except:
                geom = None
            if geom is not None:
                self.theirsgeom = QgsGeometry().fromWkt(values[1])
                self.oursgeom = QgsGeometry.fromWkt(values[2])
                geoms = (self.oursgeom, self.theirsgeom)

            ok = values[0] == values[1] or values[1] == values[2] or values[0] == values[2]

            for i, v in enumerate(values):
                self.attributesTable.setItem(idx, i, ValueItem(v, not ok, geoms));

            if not ok:
                self.conflicted.append(name)
            else:
                if values[0] == values[1]:
                    newvalue = values[2]
                else:
                    newvalue = values[1]
                self.attributesTable.setItem(idx, 4, ValueItem(newvalue, False, geoms));

        self.attributesTable.resizeRowsToContents()
        self.attributesTable.horizontalHeader().setMinimumSectionSize(150)
        self.attributesTable.horizontalHeader().setStretchLastSection(True)
    def commitClicked(self):
        feature = self.listWidget.currentItem().feature
        geom = None
        self.attributesTable.setRowCount(len(feature))
        for idx, attrname in enumerate(feature):
            value = feature[attrname]
            font = QFont()
            font.setBold(True)
            font.setWeight(75)
            item = QTableWidgetItem(attrname)
            item.setFont(font)
            self.attributesTable.setItem(idx, 0, item);
            self.attributesTable.setItem(idx, 1, QTableWidgetItem(str(value)));
            if geom is None:
                try:
                    geom = QgsGeometry.fromWkt(value)
                except:
                    pass

        self.attributesTable.resizeRowsToContents()
        self.attributesTable.horizontalHeader().setMinimumSectionSize(150)
        self.attributesTable.horizontalHeader().setStretchLastSection(True)

        settings = QSettings()
        prjSetting = settings.value('/Projections/defaultBehaviour')
        settings.setValue('/Projections/defaultBehaviour', '')
        types = ["Point", "LineString", "Polygon"]
        layers = []
        if geom is not None:
            geomtype = types[int(geom.type())]
            layer = loadLayerNoCrsDialog(geomtype + "?crs=EPSG:4326", "temp", "memory")
            pr = layer.dataProvider()
            feat = QgsFeature()
            feat.setGeometry(geom)
            pr.addFeatures([feat])
            layer.updateExtents()
            layer.selectAll()
            layer.setExtent(layer.boundingBoxOfSelected())
            layer.invertSelection()
            symbol = QgsSymbolV2.defaultSymbol(layer.geometryType())
            symbol.setColor(Qt.green)
            symbol.setAlpha(0.5)
            if QGis.QGIS_VERSION_INT < 29900:
                layer.setRendererV2(QgsSingleSymbolRendererV2(symbol))
            else:
                layer.setRenderer(QgsSingleSymbolRenderer(symbol))
            self.mapCanvas.setRenderFlag(False)
            self.mapCanvas.setLayerSet([QgsMapCanvasLayer(layer)])
            QgsMapLayerRegistry.instance().addMapLayer(layer, False)
            self.mapCanvas.setExtent(layer.extent())
            self.mapCanvas.setRenderFlag(True)
            layers.append(layer)
        else:
            self.mapCanvas.setLayerSet([])
        settings.setValue('/Projections/defaultBehaviour', prjSetting)
Exemplo n.º 4
0
    def new_process_to_table(self, process_id):
        """
        Gets called if a new process is selected at the "add process" combo box.
        It loads all arguments with their types into the process table.
        """
        self.processTableWidget.clear()
        self.cur_process = None
        self.cur_node = None
        self.cur_row = None

        # Set label with the process name and the bold font

        pr = self.backend.get_process(process_id)

        p_id = self.processIdText.text()

        self.processLabel.setText("New Process: {}".format(p_id))
        my_font = QtGui.QFont()
        my_font.setBold(True)
        self.processLabel.setFont(my_font)

        self.init_process_table()
        self.processTableWidget.setRowCount(len(pr.parameters))

        par_row = 0
        for param in pr.parameters:
            qitem = QTableWidgetItem(param.name)
            qitem.setFlags(QtCore.Qt.ItemIsEnabled)

            if not param.optional:
                bold_font = QFont()
                bold_font.setBold(True)
                qitem.setFont(bold_font)

            self.processTableWidget.setItem(par_row, 0, qitem)

            p_type = QTableWidgetItem(str(param.get_type()))
            p_type.setFlags(QtCore.Qt.ItemIsEnabled)
            self.processTableWidget.setItem(par_row, 1, p_type)

            val_item = QTableWidgetItem("")

            if "process-graph" in str(param.get_type()):
                val_item = QTableWidgetItem('{ "process_graph": {} }')

            self.processTableWidget.setItem(par_row, 2, val_item)
            self.set_complex_edit_element(param, process_id, "", par_row)

            par_row += 1

        self.resultCheckBox.setChecked(False)
        self.processTableWidget.resizeRowsToContents()
        self.cloneprocessButton.setEnabled(False)
Exemplo n.º 5
0
 def set_property_widget(self, prop, row):
     """
     Sets the property name into the given row of the job table.
     :param prop: str: Property name of the row.
     :param row: int: Row number to but the value in
     """
     qitem = QTableWidgetItem(str(prop))
     font = QFont()
     font.setBold(True)
     qitem.setFont(font)
     qitem.setFlags(QtCore.Qt.ItemIsEnabled)
     self.jobInfoTableWidget.setItem(row, 0, qitem)
    def process_selected(self):
        """
        Gets called if a new process is selected at the process combobox.
        It loads all agruments with their type and an example (if exist) into the value
        """
        self.processTableWidget.clear()
        for p in self.processes:
            if "id" in p:
                if p['id'] == str(self.processBox.currentText()):
                    process = p
                    if "parameters" in process:
                        #info(self.iface, "New Process {}".format(process['parameters']))
                        self.processTableWidget.setRowCount(
                            len(process['parameters']))
                        self.processTableWidget.setColumnCount(3)
                        self.processTableWidget.setHorizontalHeaderLabels(
                            ['Parameter', 'Type', 'Value'])
                        header = self.processTableWidget.horizontalHeader()
                        header.setSectionResizeMode(
                            0, QtWidgets.QHeaderView.ResizeToContents)
                        header.setSectionResizeMode(
                            1, QtWidgets.QHeaderView.ResizeToContents)
                        header.setSectionResizeMode(
                            2, QtWidgets.QHeaderView.Stretch)

                        counter = 0
                        for key, val in process['parameters'].items():
                            # if key != "data" and key != "imagery":
                            qitem = QTableWidgetItem(key)
                            qitem.setFlags(QtCore.Qt.ItemIsEnabled)
                            if "required" in val:
                                if val["required"]:
                                    boldFont = QtGui.QFont()
                                    boldFont.setBold(True)
                                    qitem.setFont(boldFont)

                            self.processTableWidget.setItem(counter, 0, qitem)
                            if "schema" in val:
                                if "type" in val["schema"]:
                                    type = QTableWidgetItem(
                                        str(val['schema']['type']))
                                    type.setFlags(QtCore.Qt.ItemIsEnabled)
                                    self.processTableWidget.setItem(
                                        counter, 1, type)
                                if "examples" in val["schema"]:
                                    example = QTableWidgetItem(
                                        str(val['schema']['examples'][0]))
                                    self.processTableWidget.setItem(
                                        counter, 2, example)
                            counter += 1
                        return
                    else:
                        info(self.iface, "New Process: Parameters not found")
Exemplo n.º 7
0
    def process_selected(self):
        """
        Gets called if a new process is selected at the process combobox.
        It loads all arguments with their type and an example (if exist) into the value
        """
        self.processTableWidget.clear()
        pr = self.backend.get_process(str(self.processBox.currentText()))

        myFont = QtGui.QFont()
        myFont.setBold(True)
        self.label_9.setFont(myFont)

        if not pr:
            self.label_9.setText("Returns:")
            return

        self.label_9.setText("Returns: {}".format(str(pr.get_return_type())))

        self.processTableWidget.setRowCount(len(pr.parameters))
        self.processTableWidget.setColumnCount(3)
        self.processTableWidget.setHorizontalHeaderLabels(['Parameter', 'Type', 'Description'])
        header = self.processTableWidget.horizontalHeader()
        header.setSectionResizeMode(0, QtWidgets.QHeaderView.ResizeToContents)
        header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents)
        header.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch)

        counter = 0
        for param in pr.parameters:
            qitem = QTableWidgetItem(param.name)
            qitem.setFlags(QtCore.Qt.ItemIsEnabled)

            if not param.optional:
                bold_font = QtGui.QFont()
                bold_font.setBold(True)
                qitem.setFont(bold_font)

            self.processTableWidget.setItem(counter, 0, qitem)

            param_type = QTableWidgetItem(str(param.get_type()))
            param_type.setFlags(QtCore.Qt.ItemIsEnabled)
            self.processTableWidget.setItem(counter, 1, param_type)

            if param.description:
                desc = QTableWidgetItem(str(param.description))
                desc.setFlags(QtCore.Qt.ItemIsEnabled)
                self.processTableWidget.setItem(counter, 2, desc)
            else:
                desc = QTableWidgetItem("")
                desc.setFlags(QtCore.Qt.ItemIsEnabled)
                self.processTableWidget.setItem(counter, 2, desc)

            counter += 1
Exemplo n.º 8
0
    def populate_function_table_1(self):
        """Populate the tblFunctions1 table with available functions."""
        hazards = deepcopy(hazard_all)
        exposures = exposure_all

        self.lblAvailableFunctions1.clear()
        self.tblFunctions1.clear()
        self.tblFunctions1.setColumnCount(len(hazards))
        self.tblFunctions1.setRowCount(len(exposures))
        for i in range(len(hazards)):
            hazard = hazards[i]
            item = QTableWidgetItem()
            item.setIcon(QIcon(get_image_path(hazard)))
            item.setText(hazard['name'].capitalize())
            item.setTextAlignment(Qt.AlignLeft)
            self.tblFunctions1.setHorizontalHeaderItem(i, item)
        for i in range(len(exposures)):
            exposure = exposures[i]
            item = QTableWidgetItem()
            item.setIcon(QIcon(get_image_path(exposure)))
            item.setText(exposure['name'].capitalize())
            self.tblFunctions1.setVerticalHeaderItem(i, item)
        developer_mode = setting('developer_mode', False, bool)
        for hazard in hazards:
            for exposure in exposures:
                item = QTableWidgetItem()
                if (exposure in hazard['disabled_exposures'] and not
                        developer_mode):
                    background_colour = unavailable_option_color
                    # Set it disable and un-selectable
                    item.setFlags(
                        item.flags() & ~
                        Qt.ItemIsEnabled & ~
                        Qt.ItemIsSelectable
                    )
                else:
                    background_colour = available_option_color
                item.setBackground(QBrush(background_colour))
                item.setFont(big_font)
                item.setTextAlignment(Qt.AlignCenter | Qt.AlignHCenter)
                item.setData(RoleHazard, hazard)
                item.setData(RoleExposure, exposure)
                self.tblFunctions1.setItem(
                    exposures.index(exposure), hazards.index(hazard), item)
        self.parent.pbnNext.setEnabled(False)
Exemplo n.º 9
0
    def populate_function_table_1(self):
        """Populate the tblFunctions1 table with available functions."""
        hazards = deepcopy(hazard_all)
        exposures = exposure_all

        self.lblAvailableFunctions1.clear()
        self.tblFunctions1.clear()
        self.tblFunctions1.setColumnCount(len(hazards))
        self.tblFunctions1.setRowCount(len(exposures))
        for i in range(len(hazards)):
            hazard = hazards[i]
            item = QTableWidgetItem()
            item.setIcon(QIcon(get_image_path(hazard)))
            item.setText(hazard['name'].capitalize())
            item.setTextAlignment(Qt.AlignLeft)
            self.tblFunctions1.setHorizontalHeaderItem(i, item)
        for i in range(len(exposures)):
            exposure = exposures[i]
            item = QTableWidgetItem()
            item.setIcon(QIcon(get_image_path(exposure)))
            item.setText(exposure['name'].capitalize())
            self.tblFunctions1.setVerticalHeaderItem(i, item)
        developer_mode = setting('developer_mode', False, bool)
        for hazard in hazards:
            for exposure in exposures:
                item = QTableWidgetItem()
                if (exposure in hazard['disabled_exposures'] and not
                        developer_mode):
                    background_colour = unavailable_option_color
                    # Set it disable and un-selectable
                    item.setFlags(
                        item.flags() & ~
                        Qt.ItemIsEnabled & ~
                        Qt.ItemIsSelectable
                    )
                else:
                    background_colour = available_option_color
                item.setBackground(QBrush(background_colour))
                item.setFont(big_font)
                item.setTextAlignment(Qt.AlignCenter | Qt.AlignHCenter)
                item.setData(RoleHazard, hazard)
                item.setData(RoleExposure, exposure)
                self.tblFunctions1.setItem(
                    exposures.index(exposure), hazards.index(hazard), item)
        self.parent.pbnNext.setEnabled(False)
    def commitClicked(self):
        feature = self.listWidget.currentItem().feature()
        geom = feature.geometry()
        attributes = feature.attributes()
        self.attributesTable.setRowCount(len(attributes))
        props = [f.name() for f in feature.fields()]
        for idx in range(len(props)):
            value = attributes[idx]
            font = QFont()
            font.setBold(True)
            font.setWeight(75)
            item = QTableWidgetItem(props[idx])
            item.setFont(font)
            self.attributesTable.setItem(idx, 0, item)
            self.attributesTable.setItem(idx, 1, QTableWidgetItem(str(value)))

        self.attributesTable.resizeRowsToContents()
        self.attributesTable.horizontalHeader().setMinimumSectionSize(150)
        self.attributesTable.horizontalHeader().setStretchLastSection(True)

        self.removeLayer()
        types = ["Point", "LineString", "Polygon"]
        geomtype = types[int(geom.type())]
        self.layer = loadLayerNoCrsDialog(geomtype + "?crs=EPSG:4326", "temp",
                                          "memory")
        pr = self.layer.dataProvider()
        feat = QgsFeature()
        feat.setGeometry(geom)
        pr.addFeatures([feat])
        self.layer.updateExtents()
        self.layer.selectAll()
        self.layer.setExtent(self.layer.boundingBoxOfSelected())
        self.layer.invertSelection()
        symbol = QgsSymbol.defaultSymbol(self.layer.geometryType())
        symbol.setColor(Qt.green)
        symbol.setOpacity(0.5)
        self.layer.setRenderer(QgsSingleSymbolRenderer(symbol))
        self.mapCanvas.setRenderFlag(False)
        self.mapCanvas.setLayers([self.layer])
        QgsProject.instance().addMapLayer(self.layer, False)
        self.mapCanvas.setExtent(self.layer.extent())
        self.mapCanvas.setRenderFlag(True)
        self.mapCanvas.refresh()
Exemplo n.º 11
0
    def process_to_table(self, node_id, row):
        """
        Loads a process from the process graph table to the process table.
        :param node_id: str: Identifier of the node
        :param row: int: Row of the process graph table of the process to load.
        """
        self.clear_process_add_fields()
        self.processTableWidget.clear()
        self.cur_process = self.get_process_by_node_id(node_id)
        self.cur_node = node_id
        self.cur_row = row

        if not self.cur_process:
            return

        # Set label with the process name and the bold font

        pr = self.backend.get_process(self.cur_process["process_id"])

        my_font = QtGui.QFont()
        my_font.setBold(True)

        if not pr:
            self.processLabel.setText(
                "Process: {} (not compatible with the backend)".format(
                    node_id))
            self.processLabel.setFont(my_font)
            warning(
                self.iface,
                "Process '{}' not available at this backend".format(
                    str(self.cur_process["process_id"])))
            self.incompatible_process_to_table(node_id, row)
            return

        self.processLabel.setText("Process: {}".format(node_id))
        self.processLabel.setFont(my_font)

        self.mark_pg_row(row)

        self.init_process_table()
        self.processTableWidget.setRowCount(len(pr.parameters))

        par_row = 0
        for param in pr.parameters:
            qitem = QTableWidgetItem(param.name)
            qitem.setFlags(QtCore.Qt.ItemIsEnabled)

            if not param.optional:
                bold_font = QFont()
                bold_font.setBold(True)
                qitem.setFont(bold_font)

            self.processTableWidget.setItem(par_row, 0, qitem)

            p_type = QTableWidgetItem(str(param.get_type()))
            p_type.setFlags(QtCore.Qt.ItemIsEnabled)
            self.processTableWidget.setItem(par_row, 1, p_type)

            if "arguments" in self.cur_process:
                value = self.cur_process["arguments"]
                if param.name in value:
                    value = value[param.name]
                else:
                    value = ""
            if value:
                val_item = QTableWidgetItem(json.dumps(value))
            elif isinstance(value, int):
                val_item = QTableWidgetItem(json.dumps(0))
            else:
                val_item = QTableWidgetItem("")

            self.processTableWidget.setItem(par_row, 2, val_item)
            self.set_complex_edit_element(param, node_id, value, par_row)

            par_row += 1

        if "result" in self.cur_process:
            if self.cur_process["result"]:
                self.resultCheckBox.setChecked(True)
            else:
                self.resultCheckBox.setChecked(False)
        else:
            self.resultCheckBox.setChecked(False)

        self.processTableWidget.cellChanged.connect(
            self.enable_save_changes_button)
        self.processTableWidget.resizeRowsToContents()
        self.cloneprocessButton.setEnabled(True)
        self.saveprocessButton.setEnabled(False)
Exemplo n.º 12
0
    def showFeatureAttributes(self):
        conflictItem = self.lastSelectedItem
        try:
            resolvedFeature = self.resolvedConflicts[conflictItem.path][
                conflictItem.fid]
        except KeyError:
            # resolvedFeature = conflictItem.conflict["local"]
            resolvedFeature = self.resolve(self.lastSelectedItem.conflict,
                                           ConflictDialog.LOCAL)
        self.currentConflictedAttributes = []
        attribs = [
            f.name()
            for f in conflictItem.conflict["origin"].fields().toList()
        ]
        attribs.append("geometry")
        self.attributesTable.setRowCount(len(attribs))

        self.conflicted = []
        self.singleChangeProperties = []

        features = [
            conflictItem.conflict["origin"], conflictItem.conflict["remote"],
            conflictItem.conflict["local"], resolvedFeature
        ]
        for idx, name in enumerate(attribs):
            font = QFont()
            font.setBold(True)
            font.setWeight(75)
            item = QTableWidgetItem(name)
            item.setFont(font)
            self.attributesTable.setItem(idx, 3, item)
            self.attributesTable.setItem(idx, 4, ValueItem(None, False))

            if name == "geometry":  # geometry column
                values = []
                if conflictItem.conflict[
                        "origin"] is not None:  # be deleted aware
                    values.append(conflictItem.conflict["origin"].geometry())
                else:
                    values.append(None)
                if conflictItem.conflict["remote"] is not None:
                    values.append(conflictItem.conflict["remote"].geometry())
                else:
                    values.append(None)
                if conflictItem.conflict["local"] is not None:
                    values.append(conflictItem.conflict["local"].geometry())
                else:
                    values.append(None)
            else:
                values = []
                if conflictItem.conflict["origin"] is not None:
                    values.append(conflictItem.conflict["origin"][name])
                else:
                    values.append(None)
                if conflictItem.conflict["remote"] is not None:
                    values.append(conflictItem.conflict["remote"][name])
                else:
                    values.append(None)
                if conflictItem.conflict["local"] is not None:
                    values.append(conflictItem.conflict["local"][name])
                else:
                    values.append(None)
            tocompare = []
            if isinstance(values[0], QgsGeometry):
                tocompare = [
                    v.asWkt() if v is not None else None for v in values
                ]
                ok = tocompare[0] == tocompare[1] or tocompare[1] == tocompare[
                    2] or tocompare[0] == tocompare[2]
                singleChange = ok and (tocompare[0] != tocompare[1]
                                       or tocompare[0] != tocompare[2])
            else:
                ok = values[0] == values[1] or values[1] == values[
                    2] or values[0] == values[2]
                singleChange = ok and (values[0] != values[1]
                                       or values[0] != values[2])

            for i, v in enumerate(values):
                f = features[i]
                geomidx = None
                if name == "geometry" and v is not None:
                    geomidx = tocompare.index(v.asWkt()) + 1
                if f is not None:  # be deleted aware
                    self.attributesTable.setItem(
                        idx, i,
                        ValueItem(v,
                                  not ok,
                                  i + 1,
                                  refidx=geomidx,
                                  singleModified=singleChange))
                else:
                    self.attributesTable.setItem(
                        idx, i,
                        ValueItem(None,
                                  not ok,
                                  i + 1,
                                  deleted=True,
                                  singleModified=singleChange))
            # setup resolved (be deleted aware)
            if name == "geometry":
                v = resolvedFeature.geometry(
                ) if resolvedFeature is not None else None
                if resolvedFeature is not None:
                    #geomidx = len(tocompare) - tocompare[::-1].index(v.asWkt()) - 1
                    geomidx = tocompare[::-1].index(v.asWkt()) + 1
                else:
                    geomidx = None
                self.attributesTable.setItem(
                    idx, 4,
                    ValueItem(v,
                              not ok,
                              idx=geomidx,
                              deleted=resolvedFeature is None,
                              singleModified=singleChange))
            else:
                v = resolvedFeature[
                    name] if resolvedFeature is not None else None
                self.attributesTable.setItem(
                    idx, 4,
                    ValueItem(v,
                              not ok,
                              deleted=resolvedFeature is None,
                              singleModified=singleChange))

            if not ok:
                self.conflicted.append(name)
            if singleChange:
                self.singleChangeProperties.append(name)

        self.attributesTable.horizontalHeader().setMinimumSectionSize(100)
        self.attributesTable.horizontalHeader().setStretchLastSection(True)
        self.attributesTable.resizeColumnsToContents()
        header = self.attributesTable.horizontalHeader()
        for column in range(header.count()):
            header.setSectionResizeMode(
                column, QHeaderView.Fixed
            )  # can set this to ResizeToContents or Stretch
            width = header.sectionSize(column)
            header.setSectionResizeMode(column, QHeaderView.Interactive)
            header.resizeSection(column, min(150, width))
Exemplo n.º 13
0
    def showFeatureAttributes(self):
        conflictItem = self.lastSelectedItem
        self.oursgeom = None
        self.theirsgeom = None
        geoms = (self.oursgeom, self.theirsgeom)
        self.currentConflictedAttributes = []
        attribs = list(conflictItem.origin.keys())
        self.attributesTable.setRowCount(len(attribs))

        self.conflicted = []
        for idx, name in enumerate(attribs):
            font = QFont()
            font.setBold(True)
            font.setWeight(75)
            item = QTableWidgetItem(name)
            item.setFont(font)
            self.attributesTable.setItem(idx, 3, item)

            self.attributesTable.setItem(idx, 4, ValueItem(None, False))

            try:
                values = (conflictItem.origin[name], conflictItem.local[name],
                          conflictItem.remote[name])
            except Exception:  #Local has been deleted
                self._afterSolve(False)
                self.solveModifyAndDelete(conflictItem.conflict.path,
                                          self.REMOTE)
                return
            except TypeError:  #Remote has been deleted
                self._afterSolve(False)
                self.solveModifyAndDelete(conflictItem.conflict.path,
                                          self.LOCAL)
                return
            try:
                geom = QgsGeometry.fromWkt(values[0])
            except:
                geom = None
            if geom is not None:
                self.theirsgeom = QgsGeometry().fromWkt(values[1])
                self.oursgeom = QgsGeometry.fromWkt(values[2])
                geoms = (self.oursgeom, self.theirsgeom)

            ok = values[0] == values[1] or values[1] == values[2] or values[
                0] == values[2]

            for i, v in enumerate(values):
                self.attributesTable.setItem(idx, i,
                                             ValueItem(v, not ok, geoms))

            if not ok:
                self.conflicted.append(name)
            else:
                if values[0] == values[1]:
                    newvalue = values[2]
                else:
                    newvalue = values[1]
                self.attributesTable.setItem(idx, 4,
                                             ValueItem(newvalue, False, geoms))

        self.attributesTable.resizeRowsToContents()
        self.attributesTable.horizontalHeader().setMinimumSectionSize(150)
        self.attributesTable.horizontalHeader().setStretchLastSection(True)