예제 #1
0
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;
}
예제 #2
0
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 );
}
예제 #3
0
QgsMapLayer* QgsLayerTreeView::currentLayer() const
{
  return layerForIndex( currentIndex() );
}
예제 #4
0
			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;