def __init__(self, parent=None): super(LCDefineDegradationWidget, self).__init__(parent) self.setupUi(self) self.classes = [self.tr("Tree-covered"), self.tr("Grassland"), self.tr("Cropland"), self.tr("Wetland"), self.tr("Artificial"), self.tr("Bare land"), self.tr("Water body")] self.deg_def_matrix.setRowCount(len(self.classes)) self.deg_def_matrix.setColumnCount(len(self.classes)) self.deg_def_matrix.setHorizontalHeaderLabels(self.classes) self.deg_def_matrix.setVerticalHeaderLabels(self.classes) self.trans_matrix_default = [0, -1, -1, -1, -1, -1, 0, # Tree-covered 1, 0, 1, -1, -1, -1, 0, # grassland 1, -1, 0, -1, -1, -1, 0, # cropland -1, -1, -1, 0, -1, -1, 0, # wetland 1, 1, 1, 1, 0, 1, 0, # artificial 1, 1, 1, 1, -1, 0, 0, # Other land 0, 0, 0, 0, 0, 0, 0] # water body for row in range(0, self.deg_def_matrix.rowCount()): for col in range(0, self.deg_def_matrix.columnCount()): line_edit = TransMatrixEdit() line_edit.setValidator(QRegExpValidator(QRegExp("[-0+]"))) line_edit.setAlignment(Qt.AlignHCenter) self.deg_def_matrix.setCellWidget(row, col, line_edit) self.trans_matrix_set() # Setup the vertical label for the rows of the table label_lc_baseline_year = VerticalLabel(self) label_lc_baseline_year.setText(QtWidgets.QApplication.translate("DlgCalculateLC", "Land cover in initial year ", None)) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.label_lc_target_year.sizePolicy().hasHeightForWidth()) label_lc_baseline_year.setSizePolicy(sizePolicy) font = QFont() font.setBold(True) font.setWeight(75) label_lc_baseline_year.setFont(font) self.lc_trans_table_layout.addWidget(label_lc_baseline_year, 1, 0, 1, 1, Qt.AlignCenter) self.deg_def_matrix.setStyleSheet('QTableWidget {border: 0px;}') self.deg_def_matrix.horizontalHeader().setStyleSheet('QHeaderView::section {background-color: white;border: 0px;}') self.deg_def_matrix.verticalHeader().setStyleSheet('QHeaderView::section {background-color: white;border: 0px;}') self.deg_def_matrix.horizontalHeader().setResizeMode(QtWidgets.QHeaderView.Stretch) self.deg_def_matrix.verticalHeader().setResizeMode(QtWidgets.QHeaderView.Stretch) self.btn_transmatrix_reset.clicked.connect(self.trans_matrix_set) self.btn_transmatrix_loadfile.clicked.connect(self.trans_matrix_loadfile) self.btn_transmatrix_savefile.clicked.connect(self.trans_matrix_savefile) self.legend_deg.setStyleSheet('QLineEdit {background: #AB2727;} QLineEdit:hover {border: 1px solid gray; background: #AB2727;}') self.legend_imp.setStyleSheet('QLineEdit {background: #45A146;} QLineEdit:hover {border: 1px solid gray; background: #45A146;}') self.legend_stable.setStyleSheet('QLineEdit {background: #FFFFE0;} QLineEdit:hover {border: 1px solid gray; background: #FFFFE0;}')
def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize( QtCore.QSize(QtCore.QRect(0, 0, 440, 660).size()).expandedTo( Dialog.minimumSizeHint())) self.gridlayout = QGridLayout(Dialog) self.gridlayout.setObjectName("gridlayout") font = QFont() font.setPointSize(15) font.setWeight(50) font.setBold(True) self.label_2 = QLabel(Dialog) self.label_2.setFont(font) self.label_2.setTextFormat(QtCore.Qt.RichText) self.label_2.setObjectName("label_2") self.gridlayout.addWidget(self.label_2, 1, 1, 1, 2) self.textEdit = QTextEdit(Dialog) palette = QPalette() brush = QBrush(QColor(0, 0, 0, 0)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QPalette.Active, QPalette.Base, brush) brush = QBrush(QColor(0, 0, 0, 0)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QPalette.Inactive, QPalette.Base, brush) brush = QBrush(QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QPalette.Disabled, QPalette.Base, brush) self.textEdit.setPalette(palette) self.textEdit.setAutoFillBackground(True) self.textEdit.width = 320 self.textEdit.height = 360 self.textEdit.setFrameShape(QFrame.NoFrame) self.textEdit.setFrameShadow(QFrame.Plain) self.textEdit.setReadOnly(True) self.textEdit.setObjectName("textEdit") self.textEdit.setTextInteractionFlags(QtCore.Qt.TextBrowserInteraction) self.gridlayout.addWidget(self.textEdit, 2, 1, 5, 2) self.pushButton = QPushButton(Dialog) self.pushButton.setObjectName("pushButton") self.gridlayout.addWidget(self.pushButton, 4, 2, 1, 1) spacerItem = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) self.gridlayout.addItem(spacerItem, 3, 1, 1, 1) self.retranslateUi(Dialog) self.pushButton.clicked.connect(Dialog.reject) QtCore.QMetaObject.connectSlotsByName(Dialog)
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 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 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 std_font_to_qfont(font): # pylint: disable=too-many-branches """ Converts STD font to QFont """ name = font.font_name style_name = None # we need to sometimes strip 'Italic' or 'Bold' suffixes from the font name stored in the ESRI object # in order to match against actual font families keep_scanning = True while name not in QFontDatabase().families() and keep_scanning: keep_scanning = False if name.lower().endswith(' italic'): name = name[:-len(' italic')] keep_scanning = True elif name.lower().endswith(' bold'): name = name[:-len(' bold')] keep_scanning = True elif name.lower().endswith(' black'): name = name[:-len(' black')] style_name = 'Black' res = QFont(name) res.setWeight(font.weight) if font.weight > 400: res.setBold(True) if font.italic: res.setItalic(True) # pretty annoying, but because qgis relies on style strings, we need to convert the raw bools to style names if possible... if res.italic() and not res.bold(): styles = QFontDatabase().styles(res.family()) for s in styles: if s.lower() in ['oblique', 'italic']: res.setStyleName(s) break elif res.italic() and res.bold(): styles = QFontDatabase().styles(res.family()) for s in styles: if ('oblique' in s.lower() or 'italic' in s.lower()) and 'bold' in s.lower(): res.setStyleName(s) break elif res.bold(): styles = QFontDatabase().styles(res.family()) for s in styles: if s.lower() == 'bold': res.setStyleName(s) break if style_name is not None and style_name in QFontDatabase().styles( res.family()): res.setStyleName(style_name) if font.underline: res.setUnderline(True) if font.strikethrough: res.setStrikeOut(True) res.setPointSizeF(font.size) return res
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 populate_classified_values( unassigned_values, assigned_values, default_classes, list_unique_values, tree_mapping_widget): """Populate lstUniqueValues and treeClasses.from the parameters. :param unassigned_values: List of values that haven't been assigned to a class. It will be put in list_unique_values. :type unassigned_values: list :param assigned_values: Dictionary with class as the key and list of value as the value of the dictionary. It will be put in tree_mapping_widget. :type assigned_values: dict :param default_classes: Default classes from unit. :type default_classes: list :param list_unique_values: List Widget for unique values :type list_unique_values: QListWidget :param tree_mapping_widget: Tree Widget for classifying. :type tree_mapping_widget: QTreeWidget """ # Populate the unique values list list_unique_values.clear() list_unique_values.setSelectionMode( QAbstractItemView.ExtendedSelection) for value in unassigned_values: value_as_string = value is not None and str(value) or 'NULL' list_item = QListWidgetItem(list_unique_values) list_item.setFlags( Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsDragEnabled) list_item.setData(Qt.UserRole, value) list_item.setText(value_as_string) list_unique_values.addItem(list_item) # Populate assigned values tree tree_mapping_widget.clear() bold_font = QFont() bold_font.setItalic(True) bold_font.setBold(True) bold_font.setWeight(75) tree_mapping_widget.invisibleRootItem().setFlags( Qt.ItemIsEnabled) for default_class in default_classes: # Create branch for class tree_branch = QTreeWidgetItem(tree_mapping_widget) tree_branch.setFlags( Qt.ItemIsDropEnabled | Qt.ItemIsEnabled) tree_branch.setExpanded(True) tree_branch.setFont(0, bold_font) if 'name' in default_class: default_class_name = default_class['name'] else: default_class_name = default_class['key'] tree_branch.setText(0, default_class_name) tree_branch.setData(0, Qt.UserRole, default_class['key']) if 'description' in default_class: tree_branch.setToolTip(0, default_class['description']) # Assign known values for value in assigned_values[default_class['key']]: string_value = value is not None and str(value) or 'NULL' tree_leaf = QTreeWidgetItem(tree_branch) tree_leaf.setFlags( Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsDragEnabled) tree_leaf.setData(0, Qt.UserRole, value) tree_leaf.setText(0, string_value)
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)
# coding=utf-8 """Fonts which are used in InaSAFE.""" from qgis.PyQt.QtGui import QFont big_font = QFont() big_font.setPointSize(80) bold_font = QFont() bold_font.setItalic(True) bold_font.setBold(True) bold_font.setWeight(75)