From 9f86b320a997c77069cf93dcb32fb71f09ad1348 Mon Sep 17 00:00:00 2001 From: Jim Raykowski Date: Thu, 15 Aug 2019 00:31:25 -0800 Subject: tdf#125191 Give object copies unique names This patch makes a unique name for a copy of an object having a user given name. Change-Id: I14a7f45cc02962fc34a1532dd5db1cb9657b41d3 Reviewed-on: https://gerrit.libreoffice.org/77500 Tested-by: Jenkins Reviewed-by: Noel Grandin --- svx/source/svdraw/svdobj.cxx | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'svx/source/svdraw/svdobj.cxx') diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx index 7b3d0bac73c8..eaa5abfa177a 100644 --- a/svx/source/svdraw/svdobj.cxx +++ b/svx/source/svdraw/svdobj.cxx @@ -136,6 +136,8 @@ #include #include +#include + #include #include #include @@ -3016,6 +3018,44 @@ bool SdrObject::IsTextBox() const return false; } +void SdrObject::MakeNameUnique(std::unordered_set& rNameSet) +{ + if (GetName().isEmpty()) + return; + + if (rNameSet.empty()) + { + SdrPage* pPage; + SdrObject* pObj; + for (sal_uInt16 nPage(0); nPage < mrSdrModelFromSdrObject.GetPageCount(); ++nPage) + { + pPage = mrSdrModelFromSdrObject.GetPage(nPage); + SdrObjListIter aIter(pPage, SdrIterMode::DeepWithGroups); + while (aIter.IsMore()) + { + pObj = aIter.Next(); + if (pObj != this) + rNameSet.insert(pObj->GetName()); + } + } + } + + OUString sName(GetName()); + OUString sRootName(GetName()); + sal_Int32 index = sName.lastIndexOf("_"); + if ( index > 0) + sRootName = sRootName.copy(0, index); + + sal_uInt32 n = 0; + while (rNameSet.find(sName) != rNameSet.end()) + { + sName = sRootName + "_" + OUString::number(n++); + } + rNameSet.insert(sName); + + SetName(sName); +} + SdrObject* SdrObjFactory::CreateObjectFromFactory(SdrModel& rSdrModel, SdrInventor nInventor, sal_uInt16 nObjIdentifier) { SdrObjCreatorParams aParams { nInventor, nObjIdentifier, rSdrModel }; -- cgit