xref: /aoo41x/main/sc/source/ui/view/scextopt.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 #include "scextopt.hxx"
31 
32 #include <vector>
33 #include <map>
34 #include <boost/shared_ptr.hpp>
35 
36 // ============================================================================
37 
38 ScExtDocSettings::ScExtDocSettings() :
39     mfTabBarWidth( -1.0 ),
40     mnLinkCnt( 0 ),
41     mnDisplTab( 0 )
42 {
43 }
44 
45 // ============================================================================
46 
47 ScExtTabSettings::ScExtTabSettings() :
48     maUsedArea( ScAddress::INITIALIZE_INVALID ),
49     maCursor( ScAddress::INITIALIZE_INVALID ),
50     maFirstVis( ScAddress::INITIALIZE_INVALID ),
51     maSecondVis( ScAddress::INITIALIZE_INVALID ),
52     maFreezePos( 0, 0, 0 ),
53     maSplitPos( 0, 0 ),
54     meActivePane( SCEXT_PANE_TOPLEFT ),
55     maGridColor( COL_AUTO ),
56     mnNormalZoom( 0 ),
57     mnPageZoom( 0 ),
58     mbSelected( false ),
59     mbFrozenPanes( false ),
60     mbPageMode( false )
61 {
62 }
63 
64 // ============================================================================
65 
66 /** A container for ScExtTabSettings objects.
67     @descr  Internally, a std::map with shared pointers to ScExtTabSettings is
68     used. The copy constructor and assignment operator make deep copies of the
69     objects. */
70 class ScExtTabSettingsCont
71 {
72 public:
73     explicit            ScExtTabSettingsCont();
74                         ScExtTabSettingsCont( const ScExtTabSettingsCont& rSrc );
75     ScExtTabSettingsCont& operator=( const ScExtTabSettingsCont& rSrc );
76 
77     const ScExtTabSettings* GetTabSettings( SCTAB nTab ) const;
78     ScExtTabSettings&   GetOrCreateTabSettings( SCTAB nTab );
79 
80 private:
81     typedef ::boost::shared_ptr< ScExtTabSettings >     ScExtTabSettingsRef;
82     typedef ::std::map< SCTAB, ScExtTabSettingsRef >    ScExtTabSettingsMap;
83 
84     /** Makes a deep copy of all objects in the passed map. */
85     void                CopyFromMap( const ScExtTabSettingsMap& rMap );
86 
87     ScExtTabSettingsMap maMap;
88 };
89 
90 // ----------------------------------------------------------------------------
91 
92 ScExtTabSettingsCont::ScExtTabSettingsCont()
93 {
94 }
95 
96 ScExtTabSettingsCont::ScExtTabSettingsCont( const ScExtTabSettingsCont& rSrc )
97 {
98     CopyFromMap( rSrc.maMap );
99 }
100 
101 ScExtTabSettingsCont& ScExtTabSettingsCont::operator=( const ScExtTabSettingsCont& rSrc )
102 {
103     CopyFromMap( rSrc.maMap );
104     return *this;
105 }
106 
107 const ScExtTabSettings* ScExtTabSettingsCont::GetTabSettings( SCTAB nTab ) const
108 {
109     ScExtTabSettingsMap::const_iterator aIt = maMap.find( nTab );
110     return (aIt == maMap.end()) ? 0 : aIt->second.get();
111 }
112 
113 ScExtTabSettings& ScExtTabSettingsCont::GetOrCreateTabSettings( SCTAB nTab )
114 {
115     ScExtTabSettingsRef& rxTabSett = maMap[ nTab ];
116     if( !rxTabSett )
117         rxTabSett.reset( new ScExtTabSettings );
118     return *rxTabSett;
119 }
120 
121 void ScExtTabSettingsCont::CopyFromMap( const ScExtTabSettingsMap& rMap )
122 {
123     maMap.clear();
124     for( ScExtTabSettingsMap::const_iterator aIt = rMap.begin(), aEnd = rMap.end(); aIt != aEnd; ++aIt )
125         maMap[ aIt->first ].reset( new ScExtTabSettings( *aIt->second ) );
126 }
127 
128 // ============================================================================
129 
130 /** Implementation struct for ScExtDocOptions containing all members. */
131 struct ScExtDocOptionsImpl
132 {
133     typedef ::std::vector< String > StringVec;
134 
135     ScExtDocSettings    maDocSett;          /// Global document settings.
136     ScExtTabSettingsCont maTabSett;         /// Settings for all sheets.
137     StringVec           maCodeNames;        /// Codenames for all sheets (VBA module names).
138     bool                mbChanged;          /// Use only if something has been changed.
139 
140     explicit            ScExtDocOptionsImpl();
141 };
142 
143 ScExtDocOptionsImpl::ScExtDocOptionsImpl() :
144     mbChanged( false )
145 {
146 }
147 
148 // ----------------------------------------------------------------------------
149 
150 ScExtDocOptions::ScExtDocOptions() :
151     mxImpl( new ScExtDocOptionsImpl )
152 {
153 }
154 
155 ScExtDocOptions::ScExtDocOptions( const ScExtDocOptions& rSrc ) :
156     mxImpl( new ScExtDocOptionsImpl( *rSrc.mxImpl ) )
157 {
158 }
159 
160 ScExtDocOptions::~ScExtDocOptions()
161 {
162 }
163 
164 ScExtDocOptions& ScExtDocOptions::operator=( const ScExtDocOptions& rSrc )
165 {
166     *mxImpl = *rSrc.mxImpl;
167     return *this;
168 }
169 
170 bool ScExtDocOptions::IsChanged() const
171 {
172     return mxImpl->mbChanged;
173 }
174 
175 void ScExtDocOptions::SetChanged( bool bChanged )
176 {
177     mxImpl->mbChanged = bChanged;
178 }
179 
180 const ScExtDocSettings& ScExtDocOptions::GetDocSettings() const
181 {
182     return mxImpl->maDocSett;
183 }
184 
185 ScExtDocSettings& ScExtDocOptions::GetDocSettings()
186 {
187     return mxImpl->maDocSett;
188 }
189 
190 const ScExtTabSettings* ScExtDocOptions::GetTabSettings( SCTAB nTab ) const
191 {
192     return mxImpl->maTabSett.GetTabSettings( nTab );
193 }
194 
195 ScExtTabSettings& ScExtDocOptions::GetOrCreateTabSettings( SCTAB nTab )
196 {
197     return mxImpl->maTabSett.GetOrCreateTabSettings( nTab );
198 }
199 
200 SCTAB ScExtDocOptions::GetCodeNameCount() const
201 {
202     return static_cast< SCTAB >( mxImpl->maCodeNames.size() );
203 }
204 
205 const String& ScExtDocOptions::GetCodeName( SCTAB nTab ) const
206 {
207     DBG_ASSERT( (0 <= nTab) && (nTab < GetCodeNameCount()), "ScExtDocOptions::GetCodeName - invalid sheet index" );
208     return ((0 <= nTab) && (nTab < GetCodeNameCount())) ? mxImpl->maCodeNames[ static_cast< size_t >( nTab ) ] : EMPTY_STRING;
209 }
210 
211 void ScExtDocOptions::SetCodeName( SCTAB nTab, const String& rCodeName )
212 {
213     DBG_ASSERT( nTab >= 0, "ScExtDocOptions::SetCodeName - invalid sheet index" );
214     if( nTab >= 0 )
215     {
216         size_t nIndex = static_cast< size_t >( nTab );
217         if( nIndex >= mxImpl->maCodeNames.size() )
218             mxImpl->maCodeNames.resize( nIndex + 1 );
219         mxImpl->maCodeNames[ nIndex ] = rCodeName;
220     }
221 }
222 
223 // ============================================================================
224 
225