sc/source/core/tool/sharedformula.cxx | 36 ++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-)
New commits: commit 478868c419491dd5ad0921fe8b4e7f71d946dd10 Author: Kohei Yoshida <[email protected]> Date: Mon Aug 12 16:42:53 2013 -0400 Ungroup a cell when the group length becomes 1. Change-Id: Ic656d4837ab1fc5feb4b19765ae427371dfdfe10 diff --git a/sc/source/core/tool/sharedformula.cxx b/sc/source/core/tool/sharedformula.cxx index 07d9029..6583ac9 100644 --- a/sc/source/core/tool/sharedformula.cxx +++ b/sc/source/core/tool/sharedformula.cxx @@ -38,13 +38,25 @@ void SharedFormulaUtil::splitFormulaCellGroup(const CellStoreType::position_type ScFormulaCellGroupRef xGroup = rTop.GetCellGroup(); - ScFormulaCellGroupRef xGroup2(new ScFormulaCellGroup); - xGroup2->mbInvariant = xGroup->mbInvariant; - xGroup2->mnStart = nRow; - xGroup2->mnLength = xGroup->mnStart + xGroup->mnLength - nRow; - xGroup2->mpCode = xGroup->mpCode->Clone(); + SCROW nLength2 = xGroup->mnStart + xGroup->mnLength - nRow; + ScFormulaCellGroupRef xGroup2; + if (nLength2 > 1) + { + xGroup2.reset(new ScFormulaCellGroup); + xGroup2->mbInvariant = xGroup->mbInvariant; + xGroup2->mnStart = nRow; + xGroup2->mnLength = nLength2; + xGroup2->mpCode = xGroup->mpCode->Clone(); + } xGroup->mnLength = nRow - xGroup->mnStart; + if (xGroup->mnLength == 1) + { + // The top group consists of only one cell. Ungroup this. + ScFormulaCellGroupRef xNone; + ScFormulaCell& rPrev = *sc::formula_block::at(*aPos.first->data, aPos.second-1); + rPrev.SetCellGroup(xNone); + } // Apply the lower group object to the lower cells. #if DEBUG_COLUMN_STORAGE @@ -56,7 +68,7 @@ void SharedFormulaUtil::splitFormulaCellGroup(const CellStoreType::position_type } #endif sc::formula_block::iterator itEnd = it; - std::advance(itEnd, xGroup2->mnLength); + std::advance(itEnd, nLength2); for (; it != itEnd; ++it) { ScFormulaCell& rCell = **it; commit 8da8c604a3715c9f1b1cd4e720649db52d6816c5 Author: Kohei Yoshida <[email protected]> Date: Mon Aug 12 16:28:29 2013 -0400 Fix indentation. Change-Id: I2caebb42d92bf81e3ba8809a47f833a9379e769d diff --git a/sc/source/core/tool/sharedformula.cxx b/sc/source/core/tool/sharedformula.cxx index 9299e33..07d9029 100644 --- a/sc/source/core/tool/sharedformula.cxx +++ b/sc/source/core/tool/sharedformula.cxx @@ -48,12 +48,12 @@ void SharedFormulaUtil::splitFormulaCellGroup(const CellStoreType::position_type // Apply the lower group object to the lower cells. #if DEBUG_COLUMN_STORAGE - if (xGroup2->mnStart + xGroup2->mnLength > aPos.first->position + aPos.first->size) - { - cerr << "ScColumn::SplitFormulaCellGroup: Shared formula region goes beyond the formula block. Not good." << endl; - cerr.flush(); - abort(); - } + if (xGroup2->mnStart + xGroup2->mnLength > aPos.first->position + aPos.first->size) + { + cerr << "ScColumn::SplitFormulaCellGroup: Shared formula region goes beyond the formula block. Not good." << endl; + cerr.flush(); + abort(); + } #endif sc::formula_block::iterator itEnd = it; std::advance(itEnd, xGroup2->mnLength); _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
