int TreeModel::rowCount(const QModelIndex &parent) const { if (parent.isValid() && parent.column() != 0) return 0; TaskItem *parentItem = itemForIndex(parent); return parentItem ? parentItem->childCount() : 0; }
QModelIndex TreeModel::moveDown(const QModelIndex &index) { if (!index.isValid()) return index; TaskItem *item = itemForIndex(index); Q_ASSERT(item); TaskItem *parent = item->parent(); int newRow = index.row() + 1; if (!parent || parent->childCount() <= newRow) return index; return moveItem(parent, index.row(), newRow); }
QModelIndex TreeModel::demote(const QModelIndex &index) { if (!index.isValid()) return index; TaskItem *item = itemForIndex(index); Q_ASSERT(item); TaskItem *parent = item->parent(); Q_ASSERT(parent); int row = parent->rowOfChild(item); if (row == 0) return index; // No preceding sibling to move this under TaskItem *child = parent->takeChild(row); Q_ASSERT(child == item); TaskItem *sibling = parent->childAt(row - 1); Q_ASSERT(sibling); sibling->addChild(child); QModelIndex newIndex = createIndex(sibling->childCount() - 1, 0, child); emit dataChanged(newIndex, newIndex); return newIndex; }