QSharedPointer<RLinetype> RClipboardOperation::copyEntityLinetype( REntity& entity, RDocument& src, RDocument& dest, bool overwriteLinetypes, RTransaction& transaction) const { return copyLinetype(entity.getLinetypeId(), src, dest, overwriteLinetypes, transaction); }
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; }
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; }