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)
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)
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")
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
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()
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)
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))
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)