QMimeData * SourceFileModel::mimeData(QModelIndexList const &indexes) const { auto valuesToStore = QSet<quint64>{}; for (auto const &index : indexes) if (index.isValid()) valuesToStore << storageValueFromIndex(index); if (valuesToStore.isEmpty()) return nullptr; auto data = new QMimeData{}; auto encoded = QByteArray{}; QDataStream stream{&encoded, QIODevice::WriteOnly}; mxinfo(boost::format("mimeData %1% entries\n") % valuesToStore.size()); for (auto const &value : valuesToStore) { mxinfo(boost::format(" store %|1$08x|\n") % value); stream << value; } data->setData(MIME_TYPE, encoded); return data; }
SourceFilePtr SourceFileModel::fromIndex(QModelIndex const &idx) const { if (!idx.isValid()) return nullptr; return m_sourceFileMap[storageValueFromIndex(idx)]; }
QModelIndex SourceFileModel::indexFromSourceFile(quint64 value, QModelIndex const &parent) const { auto currentValue = storageValueFromIndex(parent); if (currentValue == value) return parent; auto invalidIdx = QModelIndex{}; for (auto row = 0, numRows = rowCount(parent); row < numRows; ++row) { auto idx = indexFromSourceFile(value, index(row, 0, parent)); if (idx != invalidIdx) return idx; } return invalidIdx; }
QMimeData * SourceFileModel::mimeData(QModelIndexList const &indexes) const { auto valuesToStore = QSet<quint64>{}; for (auto const &index : indexes) if (index.isValid()) valuesToStore << storageValueFromIndex(index); if (valuesToStore.isEmpty()) return nullptr; auto data = new QMimeData{}; auto encoded = QByteArray{}; QDataStream stream{&encoded, QIODevice::WriteOnly}; for (auto const &value : valuesToStore) stream << value; data->setData(mtx::gui::MimeTypes::MergeSourceFileModelItem, encoded); return data; }