summaryrefslogtreecommitdiffstats
path: root/smtreemodel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'smtreemodel.cpp')
-rw-r--r--smtreemodel.cpp35
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;