334QMimeData *QConcatenateTablesProxyModel::mimeData(
const QModelIndexList &indexes)
const
336 Q_D(
const QConcatenateTablesProxyModel);
337 if (indexes.isEmpty())
339 const QModelIndex firstIndex = indexes.first();
340 Q_ASSERT(checkIndex(firstIndex, CheckIndexOption::IndexIsValid));
341 const auto result = d->sourceModelForRow(firstIndex.row());
342 QModelIndexList sourceIndexes;
343 sourceIndexes.reserve(indexes.size());
344 for (
const QModelIndex &index : indexes) {
345 const QModelIndex sourceIndex = mapToSource(index);
346 Q_ASSERT(sourceIndex.model() == result.sourceModel);
347 sourceIndexes.append(sourceIndex);
349 return result.sourceModel->mimeData(sourceIndexes);
389bool QConcatenateTablesProxyModel::canDropMimeData(
const QMimeData *data, Qt::DropAction action,
int row,
int column,
const QModelIndex &parent)
const
391 Q_D(
const QConcatenateTablesProxyModel);
392 if (d->m_models.isEmpty())
395 int sourceRow, sourceColumn;
396 QModelIndex sourceParent;
397 QAbstractItemModel *sourceModel;
398 if (!d->mapDropCoordinatesToSource(row, column, parent, &sourceRow, &sourceColumn, &sourceParent, &sourceModel))
400 return sourceModel->canDropMimeData(data, action, sourceRow, sourceColumn, sourceParent);
412bool QConcatenateTablesProxyModel::dropMimeData(
const QMimeData *data, Qt::DropAction action,
int row,
int column,
const QModelIndex &parent)
414 Q_D(
const QConcatenateTablesProxyModel);
415 if (d->m_models.isEmpty())
417 int sourceRow, sourceColumn;
418 QModelIndex sourceParent;
419 QAbstractItemModel *sourceModel;
420 if (!d->mapDropCoordinatesToSource(row, column, parent, &sourceRow, &sourceColumn, &sourceParent, &sourceModel))
423 return sourceModel->dropMimeData(data, action, sourceRow, sourceColumn, sourceParent);
462void QConcatenateTablesProxyModel::addSourceModel(QAbstractItemModel *sourceModel)
464 Q_D(QConcatenateTablesProxyModel);
465 Q_ASSERT(sourceModel);
466 Q_ASSERT(!d->containsSourceModel(sourceModel));
468 const int newRows = sourceModel->rowCount();
470 beginInsertRows(QModelIndex(), d->m_rowCount, d->m_rowCount + newRows - 1);
471 d->m_rowCount += newRows;
472 d->m_models.emplace_back(sourceModel, std::array{
473 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::dataChanged,
474 d, &QConcatenateTablesProxyModelPrivate::slotDataChanged),
475 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::rowsInserted,
476 d, &QConcatenateTablesProxyModelPrivate::slotRowsInserted),
477 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::rowsRemoved,
478 d, &QConcatenateTablesProxyModelPrivate::slotRowsRemoved),
479 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::rowsAboutToBeInserted,
480 d, &QConcatenateTablesProxyModelPrivate::slotRowsAboutToBeInserted),
481 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::rowsAboutToBeRemoved,
482 d, &QConcatenateTablesProxyModelPrivate::slotRowsAboutToBeRemoved),
483 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::rowsMoved,
484 d, &QConcatenateTablesProxyModelPrivate::slotRowsMoved),
485 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::rowsAboutToBeMoved,
486 d, &QConcatenateTablesProxyModelPrivate::slotRowsAboutToBeMoved),
488 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::columnsInserted,
489 d, &QConcatenateTablesProxyModelPrivate::slotColumnsInserted),
490 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::columnsRemoved,
491 d, &QConcatenateTablesProxyModelPrivate::slotColumnsRemoved),
492 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::columnsAboutToBeInserted,
493 d, &QConcatenateTablesProxyModelPrivate::slotColumnsAboutToBeInserted),
494 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::columnsAboutToBeRemoved,
495 d, &QConcatenateTablesProxyModelPrivate::slotColumnsAboutToBeRemoved),
496 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::columnsMoved,
497 d, &QConcatenateTablesProxyModelPrivate::slotColumnsMoved),
498 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::columnsAboutToBeMoved,
499 d, &QConcatenateTablesProxyModelPrivate::slotColumnsAboutToBeMoved),
501 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::layoutAboutToBeChanged,
502 d, &QConcatenateTablesProxyModelPrivate::slotSourceLayoutAboutToBeChanged),
503 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::layoutChanged,
504 d, &QConcatenateTablesProxyModelPrivate::slotSourceLayoutChanged),
505 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::modelAboutToBeReset,
506 d, &QConcatenateTablesProxyModelPrivate::slotModelAboutToBeReset),
507 QObjectPrivate::connect(sourceModel, &QAbstractItemModel::modelReset,
508 d, &QConcatenateTablesProxyModelPrivate::slotModelReset),
513 d->updateColumnCount();
733 const QList<QPersistentModelIndex> &sourceParents, QAbstractItemModel::LayoutChangeHint hint)
735 Q_Q(QConcatenateTablesProxyModel);
737 if (!sourceParents.isEmpty() && !sourceParents.contains(QModelIndex()))
740 emit q->layoutAboutToBeChanged({}, hint);
742 const QModelIndexList persistentIndexList = q->persistentIndexList();
743 layoutChangePersistentIndexes.reserve(persistentIndexList.size());
744 layoutChangeProxyIndexes.reserve(persistentIndexList.size());
746 for (
const QModelIndex &proxyPersistentIndex : persistentIndexList) {
747 layoutChangeProxyIndexes.append(proxyPersistentIndex);
748 Q_ASSERT(proxyPersistentIndex.isValid());
749 const QPersistentModelIndex srcPersistentIndex = q->mapToSource(proxyPersistentIndex);
750 Q_ASSERT(srcPersistentIndex.isValid());
751 layoutChangePersistentIndexes << srcPersistentIndex;