QListWidget/QTableWidget: extract method view()

Change-Id: Ie6505e2aea2c3a7a10f91be19dfc66197bf97556
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
This commit is contained in:
David Faure 2024-10-20 13:05:37 +02:00
parent c74cba1117
commit c82ad28125
4 changed files with 24 additions and 21 deletions

View File

@ -69,7 +69,7 @@ void QListModel::insert(int row, QListWidgetItem *item)
if (!item)
return;
item->view = qobject_cast<QListWidget*>(QObject::parent());
item->view = this->view();
if (item->view && item->view->isSortingEnabled()) {
// sorted insertion
QList<QListWidgetItem*>::iterator it;
@ -93,7 +93,7 @@ void QListModel::insert(int row, const QStringList &labels)
const int count = labels.size();
if (count <= 0)
return;
QListWidget *view = qobject_cast<QListWidget*>(QObject::parent());
QListWidget *view = this->view();
if (view && view->isSortingEnabled()) {
// sorted insertion
for (int i = 0; i < count; ++i) {
@ -109,7 +109,7 @@ void QListModel::insert(int row, const QStringList &labels)
for (int i = 0; i < count; ++i) {
QListWidgetItem *item = new QListWidgetItem(labels.at(i));
item->d->theid = row;
item->view = qobject_cast<QListWidget*>(QObject::parent());
item->view = this->view();
items.insert(row++, item);
}
endInsertRows();
@ -223,7 +223,7 @@ bool QListModel::insertRows(int row, int count, const QModelIndex &parent)
return false;
beginInsertRows(QModelIndex(), row, row + count - 1);
QListWidget *view = qobject_cast<QListWidget*>(QObject::parent());
QListWidget *view = this->view();
QListWidgetItem *itm = nullptr;
for (int r = row; r < row + count; ++r) {
@ -387,7 +387,7 @@ void QListModel::itemChanged(QListWidgetItem *item, const QList<int> &roles)
QStringList QListModel::mimeTypes() const
{
const QListWidget *view = qobject_cast<const QListWidget*>(QObject::parent());
const QListWidget *view = this->view();
if (view)
return view->mimeTypes();
return {};
@ -405,10 +405,9 @@ QMimeData *QListModel::mimeData(const QModelIndexList &indexes) const
itemlist.reserve(indexesCount);
for (int i = 0; i < indexesCount; ++i)
itemlist << at(indexes.at(i).row());
const QListWidget *view = qobject_cast<const QListWidget*>(QObject::parent());
cachedIndexes = indexes;
QMimeData *mimeData = view->mimeData(itemlist);
QMimeData *mimeData = view()->mimeData(itemlist);
cachedIndexes.clear();
return mimeData;
}
@ -418,19 +417,17 @@ bool QListModel::dropMimeData(const QMimeData *data, Qt::DropAction action,
int row, int column, const QModelIndex &index)
{
Q_UNUSED(column);
QListWidget *view = qobject_cast<QListWidget*>(QObject::parent());
if (index.isValid())
row = index.row();
else if (row == -1)
row = items.size();
return view->dropMimeData(row, data, action);
return view()->dropMimeData(row, data, action);
}
Qt::DropActions QListModel::supportedDropActions() const
{
const QListWidget *view = qobject_cast<const QListWidget*>(QObject::parent());
return view->supportedDropActions();
return view()->supportedDropActions();
}
#endif // QT_CONFIG(draganddrop)

View File

@ -50,6 +50,8 @@ public:
QListModel(QListWidget *parent);
~QListModel();
inline QListWidget *view() const { return qobject_cast<QListWidget *>(QObject::parent()); }
void clear();
QListWidgetItem *at(int row) const;
void insert(int row, QListWidgetItem *item);

View File

@ -168,7 +168,7 @@ void QTableModel::setItem(int row, int column, QTableWidgetItem *item)
oldItem->view = nullptr;
delete tableItems.at(i);
QTableWidget *view = qobject_cast<QTableWidget*>(QObject::parent());
QTableWidget *view = this->view();
// set new
if (item)
@ -264,7 +264,7 @@ void QTableModel::setHorizontalHeaderItem(int section, QTableWidgetItem *item)
oldItem->view = nullptr;
delete oldItem;
QTableWidget *view = qobject_cast<QTableWidget*>(QObject::parent());
QTableWidget *view = this->view();
if (item) {
item->view = view;
@ -286,7 +286,7 @@ void QTableModel::setVerticalHeaderItem(int section, QTableWidgetItem *item)
oldItem->view = nullptr;
delete oldItem;
QTableWidget *view = qobject_cast<QTableWidget*>(QObject::parent());
QTableWidget *view = this->view();
if (item) {
item->view = view;
@ -405,7 +405,7 @@ bool QTableModel::setData(const QModelIndex &index, const QVariant &value, int r
if (!value.isValid())
return false;
QTableWidget *view = qobject_cast<QTableWidget*>(QObject::parent());
QTableWidget *view = this->view();
if (!view)
return false;
@ -434,7 +434,7 @@ bool QTableModel::setItemData(const QModelIndex &index, const QMap<int, QVariant
if (!index.isValid())
return false;
QTableWidget *view = qobject_cast<QTableWidget*>(QObject::parent());
QTableWidget *view = this->view();
QTableWidgetItem *itm = item(index);
if (itm) {
itm->view = nullptr; // prohibits item from calling itemChanged()
@ -817,8 +817,10 @@ void QTableModel::setItemPrototype(const QTableWidgetItem *item)
QStringList QTableModel::mimeTypes() const
{
const QTableWidget *view = qobject_cast<const QTableWidget*>(QObject::parent());
return (view ? view->mimeTypes() : QStringList());
auto v = view();
if (v)
return v->mimeTypes();
return {};
}
QMimeData *QTableModel::internalMimeData() const
@ -833,7 +835,7 @@ QMimeData *QTableModel::mimeData(const QModelIndexList &indexes) const
items.reserve(indexesCount);
for (int i = 0; i < indexesCount; ++i)
items << item(indexes.at(i));
const QTableWidget *view = qobject_cast<const QTableWidget*>(QObject::parent());
const QTableWidget *view = this->view();
// cachedIndexes is a little hack to avoid copying from QModelIndexList to
// QList<QTreeWidgetItem*> and back again in the view
@ -857,13 +859,13 @@ bool QTableModel::dropMimeData(const QMimeData *data, Qt::DropAction action,
column = 0;
}
QTableWidget *view = qobject_cast<QTableWidget*>(QObject::parent());
QTableWidget *view = this->view();
return (view ? view->dropMimeData(row, column, data, action) : false);
}
Qt::DropActions QTableModel::supportedDropActions() const
{
const QTableWidget *view = qobject_cast<const QTableWidget*>(QObject::parent());
const QTableWidget *view = this->view();
return (view ? view->supportedDropActions() : Qt::DropActions(Qt::IgnoreAction));
}

View File

@ -58,6 +58,8 @@ public:
QTableModel(int rows, int columns, QTableWidget *parent);
~QTableModel();
inline QTableWidget *view() const { return qobject_cast<QTableWidget *>(QObject::parent()); }
bool insertRows(int row, int count = 1, const QModelIndex &parent = QModelIndex()) override;
bool insertColumns(int column, int count = 1, const QModelIndex &parent = QModelIndex()) override;