summaryrefslogtreecommitdiffstats
path: root/archivemodel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'archivemodel.cpp')
-rw-r--r--archivemodel.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/archivemodel.cpp b/archivemodel.cpp
index c317c32..de95328 100644
--- a/archivemodel.cpp
+++ b/archivemodel.cpp
@@ -57,6 +57,31 @@ QVariant ArchiveModel::data(const QModelIndex &index, int role) const{
return SmTreeModel::data(index, role);
}
+QStringList ArchiveModel::indexToPath(const QModelIndex &idx) const {
+ QStringList retval;
+ SmTreeItem *item = itemAt(idx);
+ while (item) {
+ retval << item->data(Name).toString();
+ item = item->parent();
+ }
+ std::reverse(retval.begin(), retval.end());
+ return retval;
+}
+
+QModelIndexList ArchiveModel::pathToIndex(const QStringList &path) const {
+ QModelIndexList retval;
+ QModelIndex parentIdx = QModelIndex();
+ for(int i = 0; i < path.count(); ++i){
+ QString curItem = path.at(i);
+ QModelIndex found = find(curItem, Name, parentIdx);
+ if(found.isValid()){
+ retval << found;
+ parentIdx = found;
+ }
+ }
+ return retval;
+}
+
void ArchiveModel::setOrder(int order) {
mOrder = order;
SmTreeItem *rootItem = new SmTreeItem(NumFields);