summaryrefslogtreecommitdiff
path: root/svx/source/svdraw/svdobj.cxx
diff options
context:
space:
mode:
authorJim Raykowski <raykowj@gmail..com>2019-08-15 00:31:25 -0800
committerNoel Grandin <noel.grandin@collabora.co.uk>2019-10-28 10:22:59 +0100
commit9f86b320a997c77069cf93dcb32fb71f09ad1348 (patch)
treec7767f9da6a3fbd465d80f36fee8ec2a9bd567fa /svx/source/svdraw/svdobj.cxx
parent2d8efd1afe03a4009600e914910144b70982e98d (diff)
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 <noel.grandin@collabora.co.uk>
Diffstat (limited to 'svx/source/svdraw/svdobj.cxx')
-rw-r--r--svx/source/svdraw/svdobj.cxx40
1 files changed, 40 insertions, 0 deletions
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 <svdobjplusdata.hxx>
#include <svdobjuserdatalist.hxx>
+#include <unordered_set>
+
#include <boost/optional.hpp>
#include <libxml/xmlwriter.h>
#include <memory>
@@ -3016,6 +3018,44 @@ bool SdrObject::IsTextBox() const
return false;
}
+void SdrObject::MakeNameUnique(std::unordered_set<OUString>& 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 };