diff options
Diffstat (limited to 'sc/source/core/data/document.cxx')
-rw-r--r-- | sc/source/core/data/document.cxx | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx index 918cce784866..d96451afacad 100644 --- a/sc/source/core/data/document.cxx +++ b/sc/source/core/data/document.cxx @@ -6501,6 +6501,36 @@ void ScDocument::ForgetNoteCaptions( const ScRangeList& rRanges, bool bPreserveD } } +CommentCaptionState ScDocument::GetAllNoteCaptionsState( const ScRangeList& rRanges ) +{ + CommentCaptionState aOldState, aState = CommentCaptionState::ALLHIDDEN; //because of Werror=maybe-uninitialized + std::vector<sc::NoteEntry> aNotes; + + for (size_t i = 0, n = rRanges.size(); i < n; ++i) + { + const ScRange* pRange = rRanges[i]; + + for( SCTAB nTab = pRange->aStart.Tab(); nTab <= pRange->aEnd.Tab(); ++nTab ) + { + aState = maTabs[nTab]->GetAllNoteCaptionsState( *pRange, aNotes ); + if (aState == CommentCaptionState::MIXED) + return aState; + + if (nTab - 1 >= 0) // it is possible that a range is ALLSHOWN, another range is ALLHIDDEN, + { // we have to detect that situation as mixed. + aOldState = maTabs[nTab-1]->GetAllNoteCaptionsState( *pRange, aNotes ); + + if (aState != aOldState) + { + aState = CommentCaptionState::MIXED; + return aState; + } + } + } + } + return aState; +} + ScAddress ScDocument::GetNotePosition( size_t nIndex ) const { for (size_t nTab = 0; nTab < maTabs.size(); ++nTab) |