From 4d958ae602315fd9d78af35c40b27d9c6ae6e656 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Sun, 7 Jan 2018 20:02:33 +0100 Subject: Searching through BookmarkModel elements --- lib/bookmarks/bookmarksmodel.cpp | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) (limited to 'lib/bookmarks/bookmarksmodel.cpp') diff --git a/lib/bookmarks/bookmarksmodel.cpp b/lib/bookmarks/bookmarksmodel.cpp index ddd136e..757612e 100644 --- a/lib/bookmarks/bookmarksmodel.cpp +++ b/lib/bookmarks/bookmarksmodel.cpp @@ -49,14 +49,14 @@ QVariant BookmarksModel::headerData(int section, Qt::Orientation orientation, in return QVariant(); } -QModelIndex BookmarksModel::index(BookmarkItem *node) const +QModelIndex BookmarksModel::index(BookmarkItem *node, int column) const { BookmarkItem *parentItem = node->parentItem(); if(!parentItem) { return QModelIndex(); } - return createIndex(parentItem->childIndex(node), 0, node); + return createIndex(parentItem->childIndex(node), column, node); } QModelIndex BookmarksModel::index(int row, int column, const QModelIndex &parent) const @@ -175,3 +175,31 @@ bool BookmarksModel::hasChildren(const QModelIndex &parent) const const BookmarkItem *parentItem = static_cast(parent.internalPointer()); return (parentItem->type() == BookmarkItem::Folder); } + +QModelIndexList BookmarksModel::match(const QModelIndex &start, int role, const QVariant &value, int hits, Qt::MatchFlags flags) const +{ + QModelIndexList list; + + // search root + BookmarkItem *searchRoot; + if(!start.isValid()) { + searchRoot = m_rootItem; + } else { + searchRoot = static_cast(start.internalPointer()); + } + + // iterate through searchRoot children + for(int i = 0; i < searchRoot->childCount(); ++i) { + BookmarkItem *item = searchRoot->child(i); + if(item->type() == BookmarkItem::Bookmark) { + if(item->href.contains(value.toString())) { + list.append(index(item, 1)); + } + } else if(item->type() == BookmarkItem::Folder) { + list.append(match(index(item), role, value, hits, flags)); + } + } + + + return list; +} -- cgit v1.2.1