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:
static bool isDuplicateDimension(const rtl::OUString& rName);
static rtl::OUString getSourceDimensionName(const rtl::OUString& rName);
static rtl::OUString createDuplicateDimensionName(const rtl::OUString& rOriginal, size_t nDupCount);
};
#endif
......
......@@ -1277,12 +1277,7 @@ void ScDPSaveData::CheckDuplicateName(ScDPSaveDimension& rDim)
DupNameCountType::iterator it = maDupNameCounts.find(aName);
if (it != maDupNameCounts.end())
{
it->second = it->second + 1;
// 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.SetName(ScDPUtil::createDuplicateDimensionName(aName, ++it->second));
rDim.SetDupFlag(true);
}
else
......@@ -1292,6 +1287,22 @@ void ScDPSaveData::CheckDuplicateName(ScDPSaveDimension& rDim)
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)
......
......@@ -44,4 +44,16 @@ rtl::OUString ScDPUtil::getSourceDimensionName(const rtl::OUString& rName)
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: */
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