diff options
author | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2012-10-06 00:03:35 +0200 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2012-10-06 00:26:42 +0200 |
commit | fa02cce6800cd6021e0160e4698b9e90496a94c5 (patch) | |
tree | bcccc7b6c8fdf79e0da0def99522ee1a554efefa /sc/source/core/data/attarray.cxx | |
parent | 4921d9650d2ec41e3973e346ed73a20991255cde (diff) |
also support removing of conditional formats
Change-Id: I47ba632ccf752611a41b29c0da8e5d0f28a88565
Diffstat (limited to 'sc/source/core/data/attarray.cxx')
-rw-r--r-- | sc/source/core/data/attarray.cxx | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/sc/source/core/data/attarray.cxx b/sc/source/core/data/attarray.cxx index 1b16d0bcca4f..b7b2260e62bf 100644 --- a/sc/source/core/data/attarray.cxx +++ b/sc/source/core/data/attarray.cxx @@ -322,6 +322,57 @@ void ScAttrArray::AddCondFormat( SCROW nStartRow, SCROW nEndRow, sal_uInt32 nInd } +void ScAttrArray::RemoveCondFormat( SCROW nStartRow, SCROW nEndRow, sal_uInt32 nIndex ) +{ + if(!VALIDROW(nStartRow) || !VALIDROW(nEndRow)) + return; + + if(nEndRow < nStartRow) + return; + + SCROW nTempStartRow = nStartRow; + SCROW nTempEndRow = nEndRow; + + do + { + const ScPatternAttr* pPattern = GetPattern(nTempStartRow); + + ScPatternAttr aPattern( pDocument->GetPool() ); + if(pPattern) + { + SCROW nPatternStartRow; + SCROW nPatternEndRow; + GetPatternRange( nPatternStartRow, nPatternEndRow, nTempStartRow ); + + nTempEndRow = std::min<SCROW>( nPatternEndRow, nEndRow ); + const SfxPoolItem* pItem = NULL; + pPattern->GetItemSet().GetItemState( ATTR_CONDITIONAL, true, &pItem ); + if(pItem) + { + std::vector< sal_uInt32 > aCondFormatData = static_cast<const ScCondFormatItem*>(pItem)->GetCondFormatData(); + std::vector<sal_uInt32>::iterator itr = std::find(aCondFormatData.begin(), aCondFormatData.end(), nIndex); + if(itr != aCondFormatData.end()) + { + ScCondFormatItem aItem; + aCondFormatData.erase(itr); + aItem.SetCondFormatData( aCondFormatData ); + aPattern.GetItemSet().Put( aItem ); + SetPatternArea( nTempStartRow, nTempEndRow, &aPattern, true ); + } + + } + } + else + { + return; + } + + nTempStartRow = nTempEndRow + 1; + } + while(nTempEndRow < nEndRow); + +} + //------------------------------------------------------------------------ void ScAttrArray::SetPattern( SCROW nRow, const ScPatternAttr* pPattern, bool bPutToPool ) |