Kaydet (Commit) d473a369 authored tarafından Kohei Yoshida's avatar Kohei Yoshida

Modify dup count correctly when dimensions are removed.

Though normally dimensions don't get removed, since the entire save data
gets re-built whenever the pivot model is modified.  So, this is probably
for limited use cases...
üst 513edaa4
...@@ -37,6 +37,8 @@ public: ...@@ -37,6 +37,8 @@ public:
static bool isDuplicateDimension(const rtl::OUString& rName); static bool isDuplicateDimension(const rtl::OUString& rName);
static rtl::OUString getSourceDimensionName(const rtl::OUString& rName); static rtl::OUString getSourceDimensionName(const rtl::OUString& rName);
static rtl::OUString createDuplicateDimensionName(const rtl::OUString& rOriginal, size_t nDupCount);
}; };
#endif #endif
......
...@@ -1277,12 +1277,7 @@ void ScDPSaveData::CheckDuplicateName(ScDPSaveDimension& rDim) ...@@ -1277,12 +1277,7 @@ void ScDPSaveData::CheckDuplicateName(ScDPSaveDimension& rDim)
DupNameCountType::iterator it = maDupNameCounts.find(aName); DupNameCountType::iterator it = maDupNameCounts.find(aName);
if (it != maDupNameCounts.end()) if (it != maDupNameCounts.end())
{ {
it->second = it->second + 1; rDim.SetName(ScDPUtil::createDuplicateDimensionName(aName, ++it->second));
// This is a duplicate name. Up the counter and append '*' to make the name unique.
rtl::OUStringBuffer aBuf(aName);
for (size_t i = 0, n = it->second; i < n; ++i)
aBuf.append(sal_Unicode('*'));
rDim.SetName(aBuf.makeStringAndClear());
rDim.SetDupFlag(true); rDim.SetDupFlag(true);
} }
else else
...@@ -1292,6 +1287,22 @@ void ScDPSaveData::CheckDuplicateName(ScDPSaveDimension& rDim) ...@@ -1292,6 +1287,22 @@ void ScDPSaveData::CheckDuplicateName(ScDPSaveDimension& rDim)
void ScDPSaveData::RemoveDuplicateNameCount(const rtl::OUString& rName) void ScDPSaveData::RemoveDuplicateNameCount(const rtl::OUString& rName)
{ {
rtl::OUString aCoreName = rName;
if (ScDPUtil::isDuplicateDimension(rName))
aCoreName = ScDPUtil::getSourceDimensionName(rName);
DupNameCountType::iterator it = maDupNameCounts.find(aCoreName);
if (it == maDupNameCounts.end())
return;
if (!it->second)
{
maDupNameCounts.erase(it);
return;
}
--it->second;
return;
} }
ScDPSaveDimension* ScDPSaveData::AppendNewDimension(const rtl::OUString& rName, bool bDataLayout) ScDPSaveDimension* ScDPSaveData::AppendNewDimension(const rtl::OUString& rName, bool bDataLayout)
......
...@@ -44,4 +44,16 @@ rtl::OUString ScDPUtil::getSourceDimensionName(const rtl::OUString& rName) ...@@ -44,4 +44,16 @@ rtl::OUString ScDPUtil::getSourceDimensionName(const rtl::OUString& rName)
return comphelper::string::removeTrailingChars(rName, sal_Unicode('*')); return comphelper::string::removeTrailingChars(rName, sal_Unicode('*'));
} }
rtl::OUString ScDPUtil::createDuplicateDimensionName(const rtl::OUString& rOriginal, size_t nDupCount)
{
if (!nDupCount)
return rOriginal;
rtl::OUStringBuffer aBuf(rOriginal);
for (size_t i = 0; i < nDupCount; ++i)
aBuf.append(sal_Unicode('*'));
return aBuf.makeStringAndClear();
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment