xref: /trunk/main/sc/source/ui/undo/undoolk.cxx (revision cdf0e10c)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_sc.hxx"
30 
31 
32 
33 // INCLUDE ---------------------------------------------------------------
34 
35 #include <svx/svdundo.hxx>
36 
37 #include "document.hxx"
38 #include "drwlayer.hxx"
39 
40 
41 // STATIC DATA -----------------------------------------------------------
42 
43 // -----------------------------------------------------------------------
44 
45 SdrUndoAction* GetSdrUndoAction( ScDocument* pDoc )
46 {
47 	ScDrawLayer* pLayer = pDoc->GetDrawLayer();
48 	if (pLayer)
49 		return pLayer->GetCalcUndo();				// muss vorhanden sein
50 	else
51 		return NULL;
52 }
53 
54 void DoSdrUndoAction( SdrUndoAction* pUndoAction, ScDocument* pDoc )
55 {
56     if ( pUndoAction )
57         pUndoAction->Undo();
58     else
59     {
60         // #125875# if no drawing layer existed when the action was created,
61         // but it was created after that, there is no draw undo action,
62         // and after undo there might be a drawing layer with a wrong page count.
63         // The drawing layer must have been empty in that case, so any missing
64         // pages can just be created now.
65 
66         ScDrawLayer* pDrawLayer = pDoc->GetDrawLayer();
67         if ( pDrawLayer )
68         {
69             SCTAB nTabCount = pDoc->GetTableCount();
70             SCTAB nPages = static_cast<SCTAB>(pDrawLayer->GetPageCount());
71             while ( nPages < nTabCount )
72             {
73                 pDrawLayer->ScAddPage( nPages );
74                 ++nPages;
75             }
76         }
77     }
78 }
79 
80 
81 void RedoSdrUndoAction( SdrUndoAction* pUndoAction )
82 {
83     // #125875# DoSdrUndoAction/RedoSdrUndoAction is called even if the pointer is null
84 
85     if ( pUndoAction )
86         pUndoAction->Redo();
87 }
88 
89 void DeleteSdrUndoAction( SdrUndoAction* pUndoAction )
90 {
91 	delete pUndoAction;
92 }
93 
94 void EnableDrawAdjust( ScDocument* pDoc, sal_Bool bEnable )
95 {
96 	ScDrawLayer* pLayer = pDoc->GetDrawLayer();
97 	if (pLayer)
98 		pLayer->EnableAdjust(bEnable);
99 }
100 
101 
102 
103