Add the QAbstractItemModel::canDropMimeData method.
Can be used by views to indicate whether a drop is allowed (eg adequete permissions in a filesystem model). Change-Id: Iefedb5399e44c8edc5f5df1403c8d5c0da618612 Reviewed-by: Peter Penz <peter.penz19@gmail.com> Reviewed-by: Thorbjørn Lund Martsum <tmartsum@gmail.com> Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com> Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
This commit is contained in:
parent
3fe3d1dfdd
commit
be1867b6c4
@ -1752,6 +1752,23 @@ QMimeData *QAbstractItemModel::mimeData(const QModelIndexList &indexes) const
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Returns whether a model can accept a drop of data.
|
||||||
|
|
||||||
|
This can be used to indicate whether a drop of certain data is allowed, for example
|
||||||
|
by using a 'forbidden' emblem on a mouse cursor during a drag operation.
|
||||||
|
|
||||||
|
This method returns true by default.
|
||||||
|
|
||||||
|
\sa dropMimeData(), {Using drag and drop with item views}
|
||||||
|
*/
|
||||||
|
bool QAbstractItemModel::canDropMimeData(const QMimeData *data, Qt::DropAction action,
|
||||||
|
int row, int column,
|
||||||
|
const QModelIndex &parent) const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Handles the \a data supplied by a drag and drop operation that ended with
|
Handles the \a data supplied by a drag and drop operation that ended with
|
||||||
the given \a action.
|
the given \a action.
|
||||||
@ -1773,7 +1790,7 @@ QMimeData *QAbstractItemModel::mimeData(const QModelIndexList &indexes) const
|
|||||||
greater than or equal zero, it means that the drop occurred just before the
|
greater than or equal zero, it means that the drop occurred just before the
|
||||||
specified \a row and \a column in the specified \a parent.
|
specified \a row and \a column in the specified \a parent.
|
||||||
|
|
||||||
\sa supportedDropActions(), {Using drag and drop with item views}
|
\sa supportedDropActions(), canDropMimeData(), {Using drag and drop with item views}
|
||||||
*/
|
*/
|
||||||
bool QAbstractItemModel::dropMimeData(const QMimeData *data, Qt::DropAction action,
|
bool QAbstractItemModel::dropMimeData(const QMimeData *data, Qt::DropAction action,
|
||||||
int row, int column, const QModelIndex &parent)
|
int row, int column, const QModelIndex &parent)
|
||||||
|
@ -193,6 +193,8 @@ public:
|
|||||||
|
|
||||||
virtual QStringList mimeTypes() const;
|
virtual QStringList mimeTypes() const;
|
||||||
virtual QMimeData *mimeData(const QModelIndexList &indexes) const;
|
virtual QMimeData *mimeData(const QModelIndexList &indexes) const;
|
||||||
|
virtual bool canDropMimeData(const QMimeData *data, Qt::DropAction action,
|
||||||
|
int row, int column, const QModelIndex &parent) const;
|
||||||
virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action,
|
virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action,
|
||||||
int row, int column, const QModelIndex &parent);
|
int row, int column, const QModelIndex &parent);
|
||||||
virtual Qt::DropActions supportedDropActions() const;
|
virtual Qt::DropActions supportedDropActions() const;
|
||||||
|
@ -72,6 +72,7 @@ private slots:
|
|||||||
void match();
|
void match();
|
||||||
void dropMimeData_data();
|
void dropMimeData_data();
|
||||||
void dropMimeData();
|
void dropMimeData();
|
||||||
|
void canDropMimeData();
|
||||||
void changePersistentIndex();
|
void changePersistentIndex();
|
||||||
void movePersistentIndex();
|
void movePersistentIndex();
|
||||||
|
|
||||||
@ -150,6 +151,9 @@ public:
|
|||||||
const QModelIndex &destinationParent, int destinationChild);
|
const QModelIndex &destinationParent, int destinationChild);
|
||||||
void reset();
|
void reset();
|
||||||
|
|
||||||
|
bool canDropMimeData(const QMimeData *data, Qt::DropAction action,
|
||||||
|
int row, int column, const QModelIndex &parent) const;
|
||||||
|
|
||||||
int cCount, rCount;
|
int cCount, rCount;
|
||||||
mutable bool wrongIndex;
|
mutable bool wrongIndex;
|
||||||
QVector<QVector<QString> > table;
|
QVector<QVector<QString> > table;
|
||||||
@ -315,6 +319,25 @@ void QtTestModel::reset()
|
|||||||
QAbstractItemModel::reset();
|
QAbstractItemModel::reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool QtTestModel::canDropMimeData(const QMimeData *data, Qt::DropAction action,
|
||||||
|
int row, int column, const QModelIndex &parent) const
|
||||||
|
{
|
||||||
|
Q_UNUSED(data);
|
||||||
|
Q_UNUSED(action);
|
||||||
|
|
||||||
|
// For testing purposes, we impose some arbitrary rules on what may be dropped.
|
||||||
|
if (!parent.isValid() && row < 0 && column < 0) {
|
||||||
|
// a drop in emtpy space in the view is allowed.
|
||||||
|
// For example, in a filesystem view, a file may be dropped into empty space
|
||||||
|
// if it represents a writable directory.
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// We then arbitrarily decide to only allow drops on odd rows.
|
||||||
|
// A filesystem view/model might be able to drop onto (writable) directories.
|
||||||
|
return row % 2 == 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The source Model *must* be initialized before the _data function, since the _data function uses QModelIndexes to reference the items in the tables.
|
* The source Model *must* be initialized before the _data function, since the _data function uses QModelIndexes to reference the items in the tables.
|
||||||
* Therefore, we must initialize it globally.
|
* Therefore, we must initialize it globally.
|
||||||
@ -755,6 +778,15 @@ void tst_QAbstractItemModel::dropMimeData()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tst_QAbstractItemModel::canDropMimeData()
|
||||||
|
{
|
||||||
|
QtTestModel model(3, 3);
|
||||||
|
|
||||||
|
QVERIFY(model.canDropMimeData(0, Qt::CopyAction, -1, -1, QModelIndex()));
|
||||||
|
QVERIFY(model.canDropMimeData(0, Qt::CopyAction, 0, 0, QModelIndex()));
|
||||||
|
QVERIFY(!model.canDropMimeData(0, Qt::CopyAction, 1, 0, QModelIndex()));
|
||||||
|
}
|
||||||
|
|
||||||
void tst_QAbstractItemModel::changePersistentIndex()
|
void tst_QAbstractItemModel::changePersistentIndex()
|
||||||
{
|
{
|
||||||
QtTestModel model(3, 3);
|
QtTestModel model(3, 3);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user