def parent(self, index): if not index.isValid(): return QModelIndex() parent = index.internalPointer() if parent == Root: return QModelIndex() grandparent, row = self.model.index_manager.get_parent_and_row(parent) return self.createIndex(row, 0, grandparent)
def rowCount(self, index=QModelIndex()): row_index = self._to_row_index(index) try: if self.model.can_have_children(row_index): return self.model.get_row_count(row_index) except Exception: logger.exception("Error in rowCount") return 0
def columnCount(self, index=QModelIndex()): row_index = self._to_row_index(index) try: # the number of columns is constant; leaf rows return 0 if self.model.can_have_children(row_index): return self.model.get_column_count() + 1 except Exception: logger.exception("Error in columnCount") return 0
def _to_model_index(self, row_index, column_index): if len(row_index) == 0: return QModelIndex() index = self.model.index_manager.from_sequence(row_index[:-1]) row = row_index[-1] if len(column_index) == 0: column = 0 else: column = column_index[0] + 1 return self.createIndex(row, column, index)