QSharedPointer<RLayer> RClipboardOperation::copyLayer( RLayer::Id layerId, RDocument& src, RDocument& dest, bool overwriteLayers, RTransaction& transaction) const { bool overwriteLinetypes = false; // add layer the entity is on, if the layer exists it is overwritten // if overwriteLayers is true: QSharedPointer<RLayer> srcLayer = src.queryLayer(layerId); if (srcLayer.isNull()) { qWarning("RClipboardOperation::copyLayer: " "layer is NULL."); return QSharedPointer<RLayer>(); } QSharedPointer<RLinetype> destLinetype = copyLinetype(srcLayer->getLinetypeId(), src, dest, overwriteLinetypes, transaction); QString srcLayerName = srcLayer->getName(); QSharedPointer<RLayer> destLayer; if (copiedLayers.contains(srcLayerName)) { destLayer = copiedLayers.value(srcLayerName); Q_ASSERT(!destLayer.isNull()); } else { if (!dest.hasLayer(srcLayerName) || overwriteLayers) { destLayer = QSharedPointer<RLayer>(srcLayer->clone()); destLayer->setDocument(&dest); if (destLayer->getDocument()!=srcLayer->getDocument()) { dest.getStorage().setObjectId(*destLayer.data(), RObject::INVALID_ID); dest.getStorage().setObjectHandle(*destLayer.data(), RObject::INVALID_HANDLE); } transaction.addObject(destLayer); } else { destLayer = dest.queryLayer(srcLayerName); Q_ASSERT(!destLayer.isNull()); } copiedLayers.insert(srcLayerName, destLayer); } if (!destLinetype.isNull()) { destLayer->setLinetypeId(destLinetype->getId()); } return destLayer; }
/** * Sets the current entity to the given entity and calls \ref exportEntity(). * Note that entity is a temporary clone. */ void RExporter::exportEntity(REntity& entity, bool preview, bool allBlocks) { RDocument* doc = entity.getDocument(); if (doc==NULL) { doc = document; } // entity not on current block and allBlocks==false, break: if (!allBlocks && doc->getCurrentBlockId()!=entity.getBlockId()) { //unexportEntity(entity.getId()); return; } entityStack.push(&entity); // find layer of the current entity QSharedPointer<RLayer> layer; if (layerSource!=NULL) { RLayer::Id layerId = entity.getLayerId(); layer = layerSource->queryLayer(layerId); Q_ASSERT(!layer.isNull()); } else { layer = doc->queryLayer(entity.getLayerId()); if (layer.isNull()) { qDebug() << "Document: " << *doc; qDebug() << "Layer ID: " << entity.getLayerId(); Q_ASSERT_X(false, "RExporter::exportEntity", "layer is NULL"); } } if (!layer.isNull()) { currentLayer = layer.data(); } // find block reference of the current entity, ignore this entity: bool blockRefSet = false; // check if this entity is a block reference: RBlockReferenceEntity* blockRef = dynamic_cast<RBlockReferenceEntity*>(&entity); if (blockRef!=NULL) { blockRefStack.push(blockRef); blockRefSet = true; } startEntity(/* topLevelEntity = */ blockRefSet || blockRefStack.isEmpty()); exportCurrentEntity(preview); endEntity(); if (blockRefSet) { blockRefStack.pop(); //blockRefBS.clear(); } currentLayer = NULL; entityStack.pop(); }
QSharedPointer<RLayer> RClipboardOperation::copyEntityLayer( REntity& entity, RDocument& src, RDocument& dest, bool overwriteLayers, RTransaction& transaction) const { // copy parent layers: QString layerName = entity.getLayerName(); if (layerName.contains(" ... ")) { QStringList l = layerName.split(" ... "); l.removeLast(); while (!l.isEmpty()) { QString parentLayerName = l.join(" ... "); QSharedPointer<RLayer> parentLayer = src.queryLayer(parentLayerName); if (parentLayer.isNull()) { break; } copyLayer(parentLayer->getId(), src, dest, overwriteLayers, transaction); l.removeLast(); } } return copyLayer(entity.getLayerId(), src, dest, overwriteLayers, transaction); }
QSharedPointer<RLayer> RClipboardOperation::copyLayer( RLayer::Id layerId, RDocument& src, RDocument& dest, bool overwriteLayers, RTransaction& transaction) const { // copy parent layers: QString layerName = src.getLayerName(layerId); if (layerName.contains(" ... ")) { QStringList l = layerName.split(" ... "); l.removeLast(); while (!l.isEmpty()) { QString parentLayerName = l.join(" ... "); QSharedPointer<RLayer> parentLayer = src.queryLayer(parentLayerName); if (!parentLayer.isNull()) { copyLayer(parentLayer->getId(), src, dest, overwriteLayers, transaction); } else { qWarning() << "parent layer of layer '" << layerName << "' not found: " << parentLayerName; } l.removeLast(); } } bool overwriteLinetypes = false; // add layer the entity is on, if the layer exists it is overwritten // if overwriteLayers is true: QSharedPointer<RLayer> srcLayer = src.queryLayer(layerId); if (srcLayer.isNull()) { qWarning("RClipboardOperation::copyLayer: " "layer is NULL."); return QSharedPointer<RLayer>(); } QSharedPointer<RLinetype> destLinetype = copyLinetype(srcLayer->getLinetypeId(), src, dest, overwriteLinetypes, transaction); QString srcLayerName = srcLayer->getName(); QSharedPointer<RLayer> destLayer; if (copiedLayers.contains(srcLayerName)) { destLayer = copiedLayers.value(srcLayerName); Q_ASSERT(!destLayer.isNull()); } else { if (!dest.hasLayer(srcLayerName) || overwriteLayers) { destLayer = QSharedPointer<RLayer>(srcLayer->clone()); destLayer->setDocument(&dest); if (destLayer->getDocument()!=srcLayer->getDocument()) { dest.getStorage().setObjectId(*destLayer.data(), RObject::INVALID_ID); dest.getStorage().setObjectHandle(*destLayer.data(), RObject::INVALID_HANDLE); } transaction.addObject(destLayer); } else { destLayer = dest.queryLayer(srcLayerName); Q_ASSERT(!destLayer.isNull()); } copiedLayers.insert(srcLayerName, destLayer); } if (!destLinetype.isNull()) { destLayer->setLinetypeId(destLinetype->getId()); } return destLayer; }