Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : */
9 :
10 : #include <undosort.hxx>
11 : #include <globstr.hrc>
12 : #include <global.hxx>
13 : #include <undoutil.hxx>
14 :
15 : namespace sc {
16 :
17 28 : UndoSort::UndoSort( ScDocShell* pDocSh, const ReorderParam& rParam ) :
18 28 : ScSimpleUndo(pDocSh), maParam(rParam) {}
19 :
20 50 : OUString UndoSort::GetComment() const
21 : {
22 50 : return ScGlobal::GetRscString(STR_UNDO_SORT);
23 : }
24 :
25 13 : void UndoSort::Undo()
26 : {
27 13 : BeginUndo();
28 13 : Execute(true);
29 13 : EndUndo();
30 13 : }
31 :
32 9 : void UndoSort::Redo()
33 : {
34 9 : BeginRedo();
35 9 : Execute(false);
36 9 : EndRedo();
37 9 : }
38 :
39 22 : void UndoSort::Execute( bool bUndo )
40 : {
41 22 : ScDocument& rDoc = pDocShell->GetDocument();
42 22 : sc::ReorderParam aParam = maParam;
43 22 : if (bUndo)
44 13 : aParam.reverse();
45 22 : rDoc.Reorder(aParam, NULL);
46 :
47 22 : if (maParam.mbHasHeaders)
48 : {
49 20 : ScRange aMarkRange( maParam.maSortRange);
50 20 : if (maParam.mbByRow)
51 : {
52 18 : if (aMarkRange.aStart.Row() > 0)
53 18 : aMarkRange.aStart.IncRow(-1);
54 : }
55 : else
56 : {
57 2 : if (aMarkRange.aStart.Col() > 0)
58 2 : aMarkRange.aStart.IncCol(-1);
59 : }
60 20 : ScUndoUtil::MarkSimpleBlock(pDocShell, aMarkRange);
61 : }
62 : else
63 : {
64 2 : ScUndoUtil::MarkSimpleBlock(pDocShell, maParam.maSortRange);
65 : }
66 :
67 22 : rDoc.SetDirty(maParam.maSortRange, true);
68 22 : if (!aParam.mbUpdateRefs)
69 9 : rDoc.BroadcastCells(aParam.maSortRange, SC_HINT_DATACHANGED);
70 :
71 22 : pDocShell->PostPaint(maParam.maSortRange, PAINT_GRID);
72 22 : pDocShell->PostDataChanged();
73 22 : }
74 :
75 156 : }
76 :
77 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|