diff options
Diffstat (limited to 'smtreemodel.cpp')
-rw-r--r-- | smtreemodel.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/smtreemodel.cpp b/smtreemodel.cpp index 2a230cc..2026902 100644 --- a/smtreemodel.cpp +++ b/smtreemodel.cpp @@ -107,6 +107,22 @@ bool SmTreeModel::setData(const QModelIndex &index, const QVariant &value, int r return true; } +QModelIndex SmTreeModel::find(const QVariant &value, int column, const QModelIndex &parent) const{ + SmTreeItem *parentItem = 0; + if(!parent.isValid()){ + parentItem = root(); + }else{ + parentItem = static_cast<SmTreeItem*>(parent.internalPointer()); + } + for(int i = 0; i < parentItem->childCount(); ++i){ + SmTreeItem *child = parentItem->child(i); + if(child->data(column) == value){ + return index(i, column, parent); + } + } + return QModelIndex(); +} + bool SmTreeModel::setRoot(SmTreeItem *rootItem){ if(mRootItem){ beginResetModel(); @@ -126,6 +142,25 @@ SmTreeItem *SmTreeModel::parentItem(const QModelIndex &child) const{ return static_cast<SmTreeItem*>(child.parent().internalPointer()); } +void SmTreeModel::reparent(const QModelIndex &idx, const QModelIndex &newParent){ + if(!idx.isValid()){ + return; + } + SmTreeItem *parentItem = 0; + SmTreeItem *item = static_cast<SmTreeItem*>(idx.internalPointer()); + if(newParent == QModelIndex()){ + parentItem = root(); + }else{ + parentItem = static_cast<SmTreeItem*>(newParent.internalPointer()); + } + removeRows(idx.row(), 1, idx.parent()); + QList<QVariant> data; + for(int i = 0; i < item->columnCount(); ++i){ + data << item->data(i); + } + addRow(data, newParent); +} + bool SmTreeModel::insertRows(int row, int count, const QModelIndex &parent){ SmTreeItem *parentItem = itemAt(parent); bool retval; |