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 ++++++++++++++++++++++++++++++-- lib/bookmarks/bookmarksmodel.h | 6 ++++-- 2 files changed, 34 insertions(+), 4 deletions(-) (limited to 'lib/bookmarks') 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; +} diff --git a/lib/bookmarks/bookmarksmodel.h b/lib/bookmarks/bookmarksmodel.h index 7493f1c..9d884fb 100644 --- a/lib/bookmarks/bookmarksmodel.h +++ b/lib/bookmarks/bookmarksmodel.h @@ -30,14 +30,16 @@ public: QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; - QModelIndex index(BookmarkItem *node) const; + QModelIndex index(BookmarkItem *node, int column = 0) const; QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; QModelIndex parent(const QModelIndex &index) const override; int rowCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role) const override; - bool hasChildren(const QModelIndex &parent) const override ; + bool hasChildren(const QModelIndex &parent) const override; + + QModelIndexList match(const QModelIndex &start, int role, const QVariant &value, int hits, Qt::MatchFlags flags) const override; private: QIcon folderIcon; -- cgit v1.2.1