aboutsummaryrefslogtreecommitdiff
path: root/lib/bookmarks
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2018-01-07 20:02:33 +0100
committerAqua-sama <aqua@iserlohn-fortress.net>2018-01-07 20:02:33 +0100
commit4d958ae602315fd9d78af35c40b27d9c6ae6e656 (patch)
tree18af9cfb87d2a432c850af39258d6c7294051df5 /lib/bookmarks
parentAdded BookmarksModel (diff)
downloadsmolbote-4d958ae602315fd9d78af35c40b27d9c6ae6e656.tar.xz
Searching through BookmarkModel elements
Diffstat (limited to 'lib/bookmarks')
-rw-r--r--lib/bookmarks/bookmarksmodel.cpp32
-rw-r--r--lib/bookmarks/bookmarksmodel.h6
2 files changed, 34 insertions, 4 deletions
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<BookmarkItem *>(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<BookmarkItem *>(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;