diff options
Diffstat (limited to 'sc/source/ui')
-rw-r--r-- | sc/source/ui/view/tabview2.cxx | 38 | ||||
-rw-r--r-- | sc/source/ui/view/viewdata.cxx | 6 |
2 files changed, 44 insertions, 0 deletions
diff --git a/sc/source/ui/view/tabview2.cxx b/sc/source/ui/view/tabview2.cxx index aae991eaf799..bf2f1603815b 100644 --- a/sc/source/ui/view/tabview2.cxx +++ b/sc/source/ui/view/tabview2.cxx @@ -595,6 +595,44 @@ void ScTabView::MarkCursor( SCCOL nCurX, SCROW nCurY, SCTAB nCurZ, if ( !bCols && !bRows ) aHdrFunc.SetAnchorFlag( false ); + + std::vector<std::vector<std::pair<SCTAB, ScRange>>>& vMark(rMark.GetSheetsMark()); + std::vector<std::pair<SCTAB, ScRange>> tempVect; + + bool bFound = false; + for (size_t i=0; i<vMark.size(); i++) + { + if (vMark[i][0].first == nCurZ) + { + vMark[i][0].second = aMarkRange; + bFound = true; + break; + } + } + + if (!bFound) + { + tempVect.emplace_back(nCurZ, aMarkRange); + vMark.emplace_back(tempVect); + } + + // Sorting sheets + if (vMark.size() > 2) + { + for (size_t k=0; k<vMark.size()-1; k++) + { + auto rFirst = vMark[k]; + for (size_t j=k; j<vMark.size(); j++) + { + auto rSecond = vMark[j]; + if (rSecond[0].first < rFirst[0].first) + { + vMark[k] = rSecond; + vMark[j] = rFirst; + } + } + } + } } void ScTabView::GetPageMoveEndPosition(SCCOL nMovX, SCROW nMovY, SCCOL& rPageX, SCROW& rPageY) diff --git a/sc/source/ui/view/viewdata.cxx b/sc/source/ui/view/viewdata.cxx index 539013b79372..0ee8ef57d91e 100644 --- a/sc/source/ui/view/viewdata.cxx +++ b/sc/source/ui/view/viewdata.cxx @@ -940,6 +940,8 @@ void ScViewData::DeleteTabs( SCTAB nTab, SCTAB nSheets ) void ScViewData::CopyTab( SCTAB nSrcTab, SCTAB nDestTab ) { + std::vector<std::vector<std::pair<SCTAB, ScRange>>>& vMark(maMarkData.GetSheetsMark()); + if (nDestTab==SC_TAB_APPEND) nDestTab = mrDoc.GetTableCount() - 1; // something had to have been copied @@ -961,6 +963,10 @@ void ScViewData::CopyTab( SCTAB nSrcTab, SCTAB nDestTab ) UpdateCurrentTab(); maMarkData.InsertTab(nDestTab); + + if (!vMark.empty()) + vMark.clear(); + } void ScViewData::MoveTab( SCTAB nSrcTab, SCTAB nDestTab ) |