/* * This file is part of smolbote. It's copyrighted by the contributors recorded * in the version control history of the file, available from its original * location: https://neueland.iserlohn-fortress.net/gitea/aqua/smolbote * * SPDX-License-Identifier: GPL-3.0 */ #ifndef SMOLBOTE_BOOKMARKMODEL_H #define SMOLBOTE_BOOKMARKMODEL_H #include "bookmarkformat.h" #include "bookmarkitem.h" #include class BookmarkModel : public QAbstractItemModel { Q_OBJECT template friend void operator<<(BookmarkModel *model, const BookmarkFormat &format); template friend void operator>>(const BookmarkFormat &format, BookmarkModel *model); public: explicit BookmarkModel(QObject *parent = nullptr); ~BookmarkModel() override; QVariant headerData(int section, Qt::Orientation orientation, int role) const override; QVariant data(const QModelIndex &index, int role) const override; QVariant data(const QModelIndex &index, int column, int role) const; bool setData(const QModelIndex &index, const QVariant &value, int role) override; bool setData(const QModelIndex &index, const QVariant &value, BookmarkItem::Fields column, int role); Qt::ItemFlags flags(const QModelIndex &index) const override; bool isItemExpanded(const QModelIndex &index) const; void setItemExpanded(const QModelIndex &index, bool expanded); int rowCount(const QModelIndex &index) const override; QModelIndex appendBookmark(const QString &title, const QString &url, const QModelIndex &parent); QModelIndex appendFolder(const QString &title, const QModelIndex &parent); bool removeRows(int position, int rows, const QModelIndex &parent) override; int columnCount(const QModelIndex &index) const override; Qt::DropActions supportedDropActions() const override; QStringList mimeTypes() const override; QMimeData *mimeData(const QModelIndexList &indexes) const override; bool dropMimeData(const QMimeData *mimeData, Qt::DropAction action, int row, int column, const QModelIndex &parent) override; QModelIndex index(int row, int column, const QModelIndex &parent) const override; QModelIndex parent(const QModelIndex &index) const override; QModelIndex parentFolder(const QModelIndex &index) const; const BookmarkItem *root() const { return rootItem; } QStringList search(const QString &term) const; void resetModified() { m_isModified = false; } bool isModified() const { return m_isModified; } private: const QLatin1String mimeType = QLatin1String("application/xbel"); BookmarkItem *getItem(const QModelIndex &index) const; BookmarkItem *rootItem; bool m_isModified = false; }; template void operator<<(BookmarkModel *model, const BookmarkFormat &format) { format.read(model->rootItem); } template void operator>>(const BookmarkFormat &format, BookmarkModel *model) { format.read(model->rootItem); } template void operator<<(BookmarkFormat &format, BookmarkModel *model) { format.write(model->root()); model->resetModified(); } template void operator>>(BookmarkModel *model, BookmarkFormat &format) { format.write(model->root()); model->resetModified(); } #endif // SMOLBOTE_BOOKMARKMODEL_H