22#include <QApplication>
29#ifdef BOOKMARKSMODEL_DEBUG
34 : QAbstractItemModel(parent)
36 , m_bookmarks(bookmarks)
42#ifdef BOOKMARKSMODEL_DEBUG
52 Q_ASSERT(row <= parent->children().count());
75 if (!
index.isValid() || !itm) {
76 return Qt::NoItemFlags;
79 Qt::ItemFlags
flags = Qt::ItemIsEnabled | Qt::ItemIsSelectable;
82 flags |= Qt::ItemIsDropEnabled;
86 flags |= Qt::ItemIsDragEnabled;
119 case Qt::ToolTipRole:
121 return QSL(
"%1\n%2").arg(itm->
title(), QString::fromUtf8(itm->
url().toEncoded()));
124 case Qt::DisplayRole:
125 switch (
index.column()) {
129 return QString::fromUtf8(itm->
url().toEncoded());
133 case Qt::DecorationRole:
134 if (
index.column() == 0) {
145 if (orientation == Qt::Horizontal && role == Qt::DisplayRole) {
150 return tr(
"Address");
154 return QAbstractItemModel::headerData(section, orientation, role);
159 if (
parent.column() > 0) {
169 if (
parent.column() > 0) {
184 return Qt::CopyAction | Qt::MoveAction;
187#define MIMETYPE QLatin1String("application/falkon.bookmarks")
199 QByteArray encodedData;
201 QDataStream stream(&encodedData, QIODevice::WriteOnly);
203 for (
const QModelIndex &
index : indexes) {
205 if (
index.isValid() &&
index.column() == 0 && !indexes.contains(
index.parent())) {
206 stream <<
index.row() << (quintptr)
index.internalPointer();
218 if (action == Qt::IgnoreAction) {
230 QDataStream stream(&encodedData, QIODevice::ReadOnly);
231 QList<BookmarkItem*> items;
233 while (!stream.atEnd()) {
237 stream >> row >> ptr;
239 QModelIndex
index = createIndex(row, 0, (
void*) ptr);
242 Q_ASSERT(
index.isValid());
243 Q_ASSERT(itm != m_bookmarks->
rootItem());
246 if (itm == parentItm) {
258 if (itm->parent() == parentItm && itm->
parent()->
children().indexOf(itm) < row) {
271 if (!child.isValid()) {
281 if (!hasIndex(row, column,
parent)) {
286 return createIndex(row, column, parentItem->
children().at(row));
297 return createIndex(
parent->children().indexOf(
item), column,
item);
303 return itm ? itm : m_root;
309 Q_EMIT dataChanged(idx, idx);
315 : QSortFilterProxyModel(parent)
317 setSourceModel(parent);
318 setFilterCaseSensitivity(Qt::CaseInsensitive);
320 m_filterTimer =
new QTimer(
this);
321 m_filterTimer->setSingleShot(
true);
322 m_filterTimer->setInterval(300);
324 connect(m_filterTimer, &QTimer::timeout,
this, &BookmarksFilterModel::startFiltering);
331 m_filterTimer->start();
336 const QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent);
348void BookmarksFilterModel::startFiltering()
350 QSortFilterProxyModel::setFilterFixedString(m_pattern);
380 return QSL(
"application/falkon.bookmarktoolbutton.bookmarkitem");
QString urlString() const
void removeChild(BookmarkItem *child)
QString description() const
BookmarkItem * parent() const
QList< BookmarkItem * > children() const
bool isSidebarExpanded() const
void setFilterFixedString(const QString &pattern)
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override
BookmarksFilterModel(QAbstractItemModel *parent)
BookmarkItem * rootItem() const
void bookmarkChanged(BookmarkItem *item)
bool canBeModified(BookmarkItem *item) const
bool removeBookmark(BookmarkItem *item)
void insertBookmark(BookmarkItem *parent, int row, BookmarkItem *item)
int columnCount(const QModelIndex &parent) const override
void removeBookmark(BookmarkItem *item)
QStringList mimeTypes() const override
int rowCount(const QModelIndex &parent) const override
bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override
QMimeData * mimeData(const QModelIndexList &indexes) const override
BookmarkItem * item(const QModelIndex &index) const
QVariant data(const QModelIndex &index, int role) const override
QModelIndex parent(const QModelIndex &child) const override
BookmarksModel(BookmarkItem *root, Bookmarks *bookmarks, QObject *parent=nullptr)
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
Qt::ItemFlags flags(const QModelIndex &index) const override
void addBookmark(BookmarkItem *parent, int row, BookmarkItem *item)
QVariant headerData(int section, Qt::Orientation orientation, int role) const override
bool hasChildren(const QModelIndex &parent) const override
Qt::DropActions supportedDropActions() const override