QMimeData *LayerItemModel::mimeData(const QModelIndexList &indexes) const { auto mimeData = new QMimeData(); { QByteArray data; QDataStream stream(&data, QIODevice::WriteOnly); for (auto index : indexes) stream << d->scene->pathForLayer(layerForIndex(index)); mimeData->setData(_layerRefMimeType, data); } return mimeData; }
void QgsLayerTreeView::onCurrentChanged() { QgsMapLayer* layerCurrent = layerForIndex( currentIndex() ); QString layerCurrentID = layerCurrent ? layerCurrent->id() : QString(); if ( mCurrentLayerID == layerCurrentID ) return; // update the current index in model (the item will be underlined) QModelIndex nodeLayerIndex; if ( layerCurrent ) { QgsLayerTreeLayer* nodeLayer = layerTreeModel()->rootGroup()->findLayer( layerCurrentID ); nodeLayerIndex = layerTreeModel()->node2index( nodeLayer ); } layerTreeModel()->setCurrentIndex( nodeLayerIndex ); mCurrentLayerID = layerCurrentID; emit currentLayerChanged( layerCurrent ); }
QgsMapLayer* QgsLayerTreeView::currentLayer() const { return layerForIndex( currentIndex() ); }
stream << d->scene->pathForLayer(layerForIndex(index)); mimeData->setData(_layerRefMimeType, data); } return mimeData; } bool LayerItemModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) { Q_UNUSED(column) if (action == Qt::IgnoreAction) return true; auto parentLayer = layerForIndex(parent); if (data->hasFormat(_layerRefMimeType)) { if (row == -1) row = rowCount(parent); QByteArray encodedData = data->data(_layerRefMimeType); QDataStream stream(&encodedData, QIODevice::ReadOnly); QList<LayerConstRef> layers; while (!stream.atEnd()) { QList<int> path; stream >> path;