xref: /trunk/main/svx/source/svdraw/svdoutlinercache.cxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
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_svx.hxx"
30 
31 
32 #include "svdoutlinercache.hxx"
33 #include <svx/svdoutl.hxx>
34 #include <svx/svdmodel.hxx>
35 
36 extern SdrOutliner* SdrMakeOutliner( sal_uInt16 nOutlinerMode, SdrModel* pModel );
37 
38 SdrOutlinerCache::SdrOutlinerCache( SdrModel* pModel )
39 :   mpModel( pModel ),
40     mpModeOutline( NULL ),
41     mpModeText( NULL )
42 {
43 }
44 
45 SdrOutliner* SdrOutlinerCache::createOutliner( sal_uInt16 nOutlinerMode )
46 {
47     SdrOutliner* pOutliner = NULL;
48 
49     if( (OUTLINERMODE_OUTLINEOBJECT == nOutlinerMode) && mpModeOutline )
50     {
51         pOutliner = mpModeOutline;
52         mpModeOutline = NULL;
53     }
54     else if( (OUTLINERMODE_TEXTOBJECT == nOutlinerMode) && mpModeText )
55     {
56         pOutliner = mpModeText;
57         mpModeText = NULL;
58     }
59     else
60     {
61         pOutliner = SdrMakeOutliner( nOutlinerMode, mpModel );
62         Outliner& aDrawOutliner = mpModel->GetDrawOutliner();
63         pOutliner->SetCalcFieldValueHdl( aDrawOutliner.GetCalcFieldValueHdl() );
64     }
65 
66     return pOutliner;
67 }
68 
69 SdrOutlinerCache::~SdrOutlinerCache()
70 {
71     if( mpModeOutline )
72     {
73         delete mpModeOutline;
74         mpModeOutline = NULL;
75     }
76 
77     if( mpModeText )
78     {
79         delete mpModeText;
80         mpModeText = NULL;
81     }
82 }
83 
84 void SdrOutlinerCache::disposeOutliner( SdrOutliner* pOutliner )
85 {
86     if( pOutliner )
87     {
88         sal_uInt16 nOutlMode = pOutliner->GetOutlinerMode();
89 
90         if( (OUTLINERMODE_OUTLINEOBJECT == nOutlMode) && (NULL == mpModeOutline) )
91         {
92             mpModeOutline = pOutliner;
93             pOutliner->Clear();
94             pOutliner->SetVertical( false );
95 
96             // #101088# Deregister on outliner, might be reused from outliner cache
97             pOutliner->SetNotifyHdl( Link() );
98         }
99         else if( (OUTLINERMODE_TEXTOBJECT == nOutlMode) && (NULL == mpModeText) )
100         {
101             mpModeText = pOutliner;
102             pOutliner->Clear();
103             pOutliner->SetVertical( false );
104 
105             // #101088# Deregister on outliner, might be reused from outliner cache
106             pOutliner->SetNotifyHdl( Link() );
107         }
108         else
109         {
110             delete pOutliner;
111         }
112     }
113 }
114 
115 
116