/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include #include #include #include #include namespace sc { UndoSort::UndoSort( ScDocShell* pDocSh, const ReorderParam& rParam ) : ScSimpleUndo(pDocSh), maParam(rParam) {} OUString UndoSort::GetComment() const { return ScResId(STR_UNDO_SORT); } void UndoSort::Undo() { BeginUndo(); Execute(true); EndUndo(); } void UndoSort::Redo() { BeginRedo(); Execute(false); EndRedo(); } void UndoSort::Execute( bool bUndo ) { ScDocument& rDoc = pDocShell->GetDocument(); sc::ReorderParam aParam = maParam; if (bUndo) aParam.reverse(); rDoc.Reorder(aParam); ScRange aOverallRange( maParam.maSortRange); if (maParam.maDataAreaExtras.anyExtrasWanted()) { aOverallRange.aStart.SetCol( maParam.maDataAreaExtras.mnStartCol); aOverallRange.aStart.SetRow( maParam.maDataAreaExtras.mnStartRow); aOverallRange.aEnd.SetCol( maParam.maDataAreaExtras.mnEndCol); aOverallRange.aEnd.SetRow( maParam.maDataAreaExtras.mnEndRow); } if (maParam.mbHasHeaders) { ScRange aMarkRange( aOverallRange); if (maParam.mbByRow) { if (aMarkRange.aStart.Row() > 0) aMarkRange.aStart.IncRow(-1); } else { if (aMarkRange.aStart.Col() > 0) aMarkRange.aStart.IncCol(-1); } ScUndoUtil::MarkSimpleBlock(pDocShell, aMarkRange); } else { ScUndoUtil::MarkSimpleBlock(pDocShell, aOverallRange); } rDoc.SetDirty(maParam.maSortRange, true); if (!aParam.mbUpdateRefs) rDoc.BroadcastCells(aParam.maSortRange, SfxHintId::ScDataChanged); pDocShell->PostPaint(aOverallRange, PaintPartFlags::Grid); pDocShell->PostDataChanged(); } } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */