3
0
mirror of https://github.com/Qortal/Brooklyn.git synced 2025-02-23 07:35:54 +00:00
2022-03-05 22:41:29 +05:00

79 lines
2.2 KiB
C++

/*
SPDX-FileCopyrightText: 2015 Eike Hein <hein@kde.org>
SPDX-FileCopyrightText: 2017 Ivan Cukic <ivan.cukic@kde.org>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#pragma once
#include "abstractmodel.h"
#include <QPointer>
#include <QTimer>
class PlaceholderModel : public AbstractModel
{
Q_OBJECT
Q_PROPERTY(QAbstractItemModel *sourceModel READ sourceModel WRITE setSourceModel NOTIFY sourceModelChanged)
Q_PROPERTY(int dropPlaceholderIndex READ dropPlaceholderIndex WRITE setDropPlaceholderIndex NOTIFY dropPlaceholderIndexChanged)
public:
explicit PlaceholderModel(QObject *parent = nullptr);
~PlaceholderModel() override;
QString description() const override;
QAbstractItemModel *sourceModel() const;
virtual void setSourceModel(QAbstractItemModel *sourceModel);
bool canFetchMore(const QModelIndex &parent) const override;
void fetchMore(const QModelIndex &parent) override;
QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
QModelIndex parent(const QModelIndex &index) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
Q_INVOKABLE bool trigger(int row, const QString &actionId, const QVariant &argument) override;
Q_INVOKABLE QString labelForRow(int row) override;
Q_INVOKABLE AbstractModel *modelForRow(int row) override;
AbstractModel *favoritesModel() override;
int separatorCount() const override;
int dropPlaceholderIndex() const;
void setDropPlaceholderIndex(int index);
public Q_SLOTS:
void reset();
Q_SIGNALS:
void sourceModelChanged() const;
void dropPlaceholderIndexChanged();
protected:
void inhibitTriggering();
private:
QModelIndex indexToSourceIndex(const QModelIndex &index) const;
QModelIndex sourceIndexToIndex(const QModelIndex &index) const;
int sourceRowToRow(int sourceRow) const;
int rowToSourceRow(int row) const;
void connectSignals();
void disconnectSignals();
QPointer<QAbstractItemModel> m_sourceModel;
int m_dropPlaceholderIndex;
bool m_isTriggerInhibited;
QTimer m_triggerInhibitor;
};