Revert tdf#64345: EDITING: Selected area looses selection when switching sheet

This reverts commit c82634d5a222120b3a95cff1b950a7f7a1f5ded1

Change-Id: I627b46f710da723ad58295d4fa0821df17eebd9f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130108
Tested-by: Jenkins
Reviewed-by: Heiko Tietze <heiko.tietze@documentfoundation.org>
diff --git a/sc/inc/markdata.hxx b/sc/inc/markdata.hxx
index 027ca93..69a7acf 100644
--- a/sc/inc/markdata.hxx
+++ b/sc/inc/markdata.hxx
@@ -46,8 +46,6 @@ public:
private:
    MarkedTabsType  maTabMarked;

    std::vector<std::vector<std::pair<SCTAB, ScRange>>>  maSheetsMark;

    ScRange         aMarkRange;             // area
    ScRange         aMultiRange;            // maximum area altogether
    ScMultiSel      aMultiSel;              // multi selection
@@ -130,8 +128,6 @@ public:
    std::vector<sc::ColRowSpan> GetMarkedRowSpans() const;
    std::vector<sc::ColRowSpan> GetMarkedColSpans() const;

    std::vector<std::vector<std::pair<SCTAB, ScRange>>>& GetSheetsMark() { return maSheetsMark; }

    bool        IsColumnMarked( SCCOL nCol ) const;
    bool        IsRowMarked( SCROW nRow ) const;
    bool        IsAllMarked( const ScRange& rRange ) const;     // Multi
diff --git a/sc/source/core/data/markdata.cxx b/sc/source/core/data/markdata.cxx
index 440553d..65d1375 100644
--- a/sc/source/core/data/markdata.cxx
+++ b/sc/source/core/data/markdata.cxx
@@ -170,21 +170,13 @@ void ScMarkData::SetAreaTab( SCTAB nTab )

void ScMarkData::SelectTable( SCTAB nTab, bool bNew )
{
    std::vector<std::vector<std::pair<SCTAB, ScRange>>>& vMark(GetSheetsMark());

    if ( bNew )
    {
        maTabMarked.insert( nTab );

        for (auto &a : vMark)
            if (a[0].first == nTab)
                SetMarkArea(a[0].second);
    }
    else
    {
        maTabMarked.erase( nTab );
        if (IsMarked())
            ResetMark();
    }
}

@@ -631,9 +623,6 @@ bool ScMarkData::HasAnyMultiMarks() const

void ScMarkData::InsertTab( SCTAB nTab )
{
    std::vector<std::vector<std::pair<SCTAB, ScRange>>>& vMark(GetSheetsMark());
    std::vector<std::pair<SCTAB, ScRange>> tempVect;

    std::set<SCTAB> tabMarked;
    for (const auto& rTab : maTabMarked)
    {
@@ -643,29 +632,10 @@ void ScMarkData::InsertTab( SCTAB nTab )
            tabMarked.insert(rTab + 1);
    }
    maTabMarked.swap(tabMarked);

    ScRange emptScRange;
    // update sheets mark after insert
    for (size_t i=0; i<vMark.size(); i++)
    {
        if (vMark[i][0].first == nTab)
        {
            for (size_t k=nTab; k<vMark.size(); k++)
                vMark[k][0].first++;

            tempVect.emplace_back(i, emptScRange);
            vMark.emplace(vMark.begin()+i, tempVect);
            break;
        }
    }
    if (IsMarked())
        ResetMark();
}

void ScMarkData::DeleteTab( SCTAB nTab )
{
    std::vector<std::vector<std::pair<SCTAB, ScRange>>>& vMark(GetSheetsMark());

    std::set<SCTAB> tabMarked;
    for (const auto& rTab : maTabMarked)
    {
@@ -675,12 +645,6 @@ void ScMarkData::DeleteTab( SCTAB nTab )
            tabMarked.insert(rTab - 1);
    }
    maTabMarked.swap(tabMarked);

    if (!vMark.empty())
        vMark.clear();

    if (IsMarked())
        ResetMark();
}

void ScMarkData::ShiftCols(const ScDocument& rDoc, SCCOL nStartCol, sal_Int32 nColOffset)
diff --git a/sc/source/ui/view/tabview2.cxx b/sc/source/ui/view/tabview2.cxx
index b5ca9b4..91754ed 100644
--- a/sc/source/ui/view/tabview2.cxx
+++ b/sc/source/ui/view/tabview2.cxx
@@ -595,44 +595,6 @@ 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 c6ed2d5..feb8fde 100644
--- a/sc/source/ui/view/viewdata.cxx
+++ b/sc/source/ui/view/viewdata.cxx
@@ -940,8 +940,6 @@ 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

@@ -963,10 +961,6 @@ void ScViewData::CopyTab( SCTAB nSrcTab, SCTAB nDestTab )

    UpdateCurrentTab();
    maMarkData.InsertTab(nDestTab);

    if (!vMark.empty())
        vMark.clear();

}

void ScViewData::MoveTab( SCTAB nSrcTab, SCTAB nDestTab )