def setData(self, index: QModelIndex, value, role: int = Qt.EditRole) -> bool: if index.row() < 0 or index.row() >= self.rowCount(QModelIndex()): return False return False
def data( self, # pylint: disable=missing-function-docstring, too-many-return-statements index: QModelIndex, role: int = Qt.DisplayRole): if index.row() < 0 or index.row() >= len(self.vertices): return None if role in (Qt.DisplayRole, Qt.ToolTipRole, Qt.EditRole): if index.column() == VertexModel.COLUMN_ID: return index.row() + 1 context = QgsNumericFormatContext() if index.column() == VertexModel.COLUMN_X: return self.number_format.formatDouble( self.vertices[index.row()][1].x(), context) if index.column() == VertexModel.COLUMN_Y: return self.number_format.formatDouble( self.vertices[index.row()][1].y(), context) if index.column() == VertexModel.COLUMN_Y + 1 and self.has_z: return self.number_format.formatDouble( self.vertices[index.row()][1].z(), context) return self.number_format.formatDouble( self.vertices[index.row()][1].m(), context) if role == VertexModel.VERTEX_NUMBER_ROLE: return index.row() + 1 if role == VertexModel.VERTEX_POINT_ROLE: return self.vertices[index.row()][1] return None
def data(self, index: QModelIndex, role: int): # Qt QAbstractListModel virtual method if index.row() < 0 or index.row() >= len(self._veri_meta_layers): return None if role == Qt.DisplayRole: return self._veri_meta_layers[index.row()].display_name if role == Qt.CheckStateRole: return self._veri_meta_layers[index.row()].loaded return None
def data(self, # pylint: disable=missing-function-docstring, too-many-return-statements index: QModelIndex, role: int = Qt.DisplayRole): if index.row() < 0 or index.row() >= len(self.features): return None if role in (Qt.DisplayRole, Qt.ToolTipRole, Qt.EditRole): return f'{self.features[index.row()].id()}: {self.display_expressions[index.row()]}' if role == FeatureModel.FEATURE_ID_ROLE: return self.features[index.row()].id() if role == FeatureModel.FEATURE_ROLE: return self.features[index.row()] return None
def dataChanged(self, t_l: QModelIndex, b_r: QModelIndex, roles: Optional[List[int]] = None) -> None: # This may need to go at end of slot super().dataChanged(t_l, b_r, roles=roles) # Note: empty roles indicates *everything* has changed, not nothing if roles is not None and (roles == [] or Qt.CheckStateRole in roles): if LOG_VERBOSE: log.debug('Node (un)checked') checked = set() unchecked = set() def update_queues(indx): node: PlanetNode = self._search_model.get_node(indx) if node.is_base_image() and node.can_be_downloaded(): if node.checked_state() == Qt.Checked: checked.add(node) elif node.checked_state() == Qt.Unchecked: unchecked.add(node) # Note: if parent of t_l and b_r differ, we ignore undefined input if t_l == b_r: if LOG_VERBOSE: log.debug('Nodes (un)checked is single') update_queues(t_l) elif t_l.parent() == b_r.parent(): if LOG_VERBOSE: log.debug('Nodes (un)checked have same parent') parent = t_l.parent() col = t_l.column() for row in range(b_r.row(), t_l.row() + 1): m_indx = self._search_model.index(row, col, parent=parent) update_queues(m_indx) if checked or unchecked: if LOG_VERBOSE: log.debug(f'Nodes checked: {checked}') log.debug(f'Nodes unchecked: {unchecked}') self._update_checked_queue(checked, unchecked)
def __unload_layer(self, index: QModelIndex): if Debug: print("Unload") veri_meta_layer = self._veri_meta_layers[index.row()] self.__is_removing_layer = True for layer in veri_meta_layer.qgis_layers: QgsProject.instance().removeMapLayer(layer) self.__is_removing_layer = False if veri_meta_layer.layer_tree_group is not None and len( veri_meta_layer.layer_tree_group.children()) == 0: QgsProject.instance().layerTreeRoot().removeChildNode( veri_meta_layer.layer_tree_group) veri_meta_layer.layer_tree_group = None veri_meta_layer.qgis_layers = [] veri_meta_layer.loaded = Qt.Unchecked
def data(self, index: QModelIndex, role=Qt.DisplayRole) -> Union[ str, QIcon, None]: """ Returns data from the table cell? """ if not index.isValid() or not 0 <= index.row() < self.rowCount(): return None row = index.row() if role == Qt.DisplayRole: return self.tab[row][1] elif role == Qt.DecorationRole: if self.tab[row][0] == 'geometry': icon = QIcon(':/plugins/groupstats/icons/geom.png') elif self.tab[row][0] == 'calculation': icon = QIcon(':/plugins/groupstats/icons/calc.png') elif self.tab[row][0] == 'text': icon = QIcon(':/plugins/groupstats/icons/alpha.png') else: icon = QIcon(':/plugins/groupstats/icons/digits.png') return icon return None
def __load_layer(self, index: QModelIndex): if Debug: print("Load layer") if not self.spatialite_data: return veri_meta_layer = self._veri_meta_layers[index.row()] group_name = self.group_name(veri_meta_layer.display_name) veri_meta_layer.layer_tree_group = QgsProject.instance().layerTreeRoot( ).insertGroup(0, group_name) veri_meta_layer.layer_tree_group.setExpanded(False) layer_infos = self.layer_infos(veri_meta_layer.name) layers = self.spatialite_data.create_layers(veri_meta_layer.name, layer_infos) veri_meta_layer.qgis_layers = [] i = 0 loaded_layers = [] for layer_info, qgis_layer in layers.items(): if qgis_layer is None: print("no layer loaded for {}".format(layer_info.display_name)) continue self.post_process_layer(qgis_layer, i) added_qgis_layer = QgsProject.instance().addMapLayer( qgis_layer, False) veri_meta_layer.layer_tree_group.insertLayer(i, added_qgis_layer) if not layer_info.visibility: node = QgsProject.instance().layerTreeRoot().findLayer( added_qgis_layer.id()) if node: node.setItemVisibilityChecked(False) else: raise Exception('La couche "{}" n' 'a pas été chargée.'.format( layer_info.display_name)) loaded_layers.append(layer_info) veri_meta_layer.qgis_layers.append(added_qgis_layer) i += 1 veri_meta_layer.loaded = Qt.Checked if i > 0: self.layers_loaded.emit(group_name, loaded_layers)
def setData(self, index: QModelIndex, value, role: int = Qt.EditRole) -> bool: if index.row() < 0 or index.row() >= self.rowCount(QModelIndex()): return False if index.column() == Column.TitleColumn.value: self.custom_aggregates[index.row()].title = value return True if index.column() == Column.RelationColumn.value: self.custom_aggregates[index.row()].relation_id = value return True if index.column() == Column.AggregateColumn.value: self.custom_aggregates[index.row()].aggregate = value return True if index.column() == Column.FieldColumn.value: self.custom_aggregates[index.row()].field = value return True return False
def data(self, index: QModelIndex, role: int = ...): if index.row() < 0 or index.row() >= self.rowCount(QModelIndex()): return None if role == Qt.DisplayRole: if index.column() == Column.TitleColumn.value: return self.custom_aggregates[index.row()].title if index.column() == Column.RelationColumn.value: return self.custom_aggregates[index.row()].relation_name() if index.column() == Column.AggregateColumn.value: return self.custom_aggregates[index.row()].aggregate if index.column() == Column.FieldColumn.value: return self.custom_aggregates[index.row()].field if role == Qt.EditRole and index.column() == Column.TitleColumn.value: return self.custom_aggregates[index.row()].title if role == Role.RelationRole.value: return self.custom_aggregates[index.row()].relation() if role == Role.RelationIdRole.value: return self.custom_aggregates[index.row()].relation_id if role == Role.AggregateRole.value: return self.custom_aggregates[index.row()].aggregate if role == Role.FieldRole.value: return self.custom_aggregates[index.row()].field return None
def remove_custom_aggregate(self, index: QModelIndex): if not index.isValid(): return self.beginRemoveRows(QModelIndex(), index.row(), index.row()) del self.custom_aggregates[index.row()] self.endRemoveRows()
def data(self, index: QModelIndex, role: Qt.ItemDataRole = Qt.DisplayRole) -> Union[ None, QBrush, QFont, Qt.AlignmentFlag, str]: """ Returns data from the table cell? """ if not index.isValid() or not 0 <= index.row() < self.rowCount(): return None row = index.row() - self.offsetY column = index.column() - self.offsetX if role == Qt.DisplayRole: # Table cell data if row >= 0 and column >= 0: return self.tab[row][column][0] # Row descriptions? elif column < 0 and row >= 0 and self.rows[0]: return self.rows[row + 1][column] # Row title field? elif row == -1 and column < 0 and self.rows[0]: return self.rows[0][column] # Column description and names? elif column >= -1 and row < 0 and self.columns[0]: if self.rows[0]: # Break line? if row == -1: return '' # Descriptions and column names if there is a break line? return self.columns[column + 1][row + 1] # Column descriptions and names if there is no break line? return self.columns[column + 1][row] elif role == Qt.UserRole: if row >= 0 and column >= 0: return self.tab[row][column][1] elif role == Qt.UserRole + 1: if row < 0 and column >= 0: return 'column' elif row >= 0 and column < 0: return 'row' elif row >= 0 and column >= 0: return 'data' # Cell filling elif role == Qt.BackgroundRole: if row < 0 or column < 0: # Gray for cells with descriptions and names color = QColor(245, 235, 235) brush = QBrush(color) return brush elif role == Qt.TextAlignmentRole: if column < 0 and row < -1 and self.rows: return Qt.AlignRight | Qt.AlignVCenter elif column >= 0 and row < 0: return Qt.AlignHCenter | Qt.AlignVCenter elif column >= 0 and row >= 0: return Qt.AlignRight | Qt.AlignVCenter elif role == Qt.FontRole: if row < 0 and column < 0: font = QFont() font.setBold(True) return font return None
def data(self, index: QModelIndex, role: int = ...): if index.row() < 0 or index.row() >= self.rowCount(QModelIndex()): return None return self._document_list[index.row()][role]