diff options
| author | Aqua-sama <aqua@iserlohn-fortress.net> | 2018-01-07 20:02:33 +0100 | 
|---|---|---|
| committer | Aqua-sama <aqua@iserlohn-fortress.net> | 2018-01-07 20:02:33 +0100 | 
| commit | 4d958ae602315fd9d78af35c40b27d9c6ae6e656 (patch) | |
| tree | 18af9cfb87d2a432c850af39258d6c7294051df5 /lib/bookmarks | |
| parent | Added BookmarksModel (diff) | |
| download | smolbote-4d958ae602315fd9d78af35c40b27d9c6ae6e656.tar.xz | |
Searching through BookmarkModel elements
Diffstat (limited to 'lib/bookmarks')
| -rw-r--r-- | lib/bookmarks/bookmarksmodel.cpp | 32 | ||||
| -rw-r--r-- | lib/bookmarks/bookmarksmodel.h | 6 | 
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;  | 
