1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_unotools.hxx"
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
28*b1cdbd2cSJim Jagielski // includes
29*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
30*b1cdbd2cSJim Jagielski
31*b1cdbd2cSJim Jagielski #include <unotools/compatibility.hxx>
32*b1cdbd2cSJim Jagielski #include <unotools/configmgr.hxx>
33*b1cdbd2cSJim Jagielski #include <unotools/configitem.hxx>
34*b1cdbd2cSJim Jagielski #include <tools/debug.hxx>
35*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/Any.hxx>
36*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/Sequence.hxx>
37*b1cdbd2cSJim Jagielski
38*b1cdbd2cSJim Jagielski #ifndef __SGI_STL_VECTOR
39*b1cdbd2cSJim Jagielski #include <vector>
40*b1cdbd2cSJim Jagielski #endif
41*b1cdbd2cSJim Jagielski
42*b1cdbd2cSJim Jagielski #include <itemholder1.hxx>
43*b1cdbd2cSJim Jagielski
44*b1cdbd2cSJim Jagielski #include <algorithm>
45*b1cdbd2cSJim Jagielski
46*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
47*b1cdbd2cSJim Jagielski // namespaces
48*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
49*b1cdbd2cSJim Jagielski
50*b1cdbd2cSJim Jagielski using namespace ::std;
51*b1cdbd2cSJim Jagielski using namespace ::utl;
52*b1cdbd2cSJim Jagielski using namespace ::rtl;
53*b1cdbd2cSJim Jagielski using namespace ::osl;
54*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
55*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::beans;
56*b1cdbd2cSJim Jagielski
57*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
58*b1cdbd2cSJim Jagielski // const
59*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
60*b1cdbd2cSJim Jagielski
61*b1cdbd2cSJim Jagielski #define ROOTNODE_OPTIONS OUString( RTL_CONSTASCII_USTRINGPARAM( "Office.Compatibility/" ) )
62*b1cdbd2cSJim Jagielski #define PATHDELIMITER OUString( RTL_CONSTASCII_USTRINGPARAM( "/" ) )
63*b1cdbd2cSJim Jagielski #define SETNODE_ALLFILEFORMATS OUString( RTL_CONSTASCII_USTRINGPARAM( "AllFileFormats" ) )
64*b1cdbd2cSJim Jagielski
65*b1cdbd2cSJim Jagielski #define PROPERTYNAME_NAME COMPATIBILITY_PROPERTYNAME_NAME
66*b1cdbd2cSJim Jagielski #define PROPERTYNAME_MODULE COMPATIBILITY_PROPERTYNAME_MODULE
67*b1cdbd2cSJim Jagielski #define PROPERTYNAME_USEPRTMETRICS COMPATIBILITY_PROPERTYNAME_USEPRTMETRICS
68*b1cdbd2cSJim Jagielski #define PROPERTYNAME_ADDSPACING COMPATIBILITY_PROPERTYNAME_ADDSPACING
69*b1cdbd2cSJim Jagielski #define PROPERTYNAME_ADDSPACINGATPAGES COMPATIBILITY_PROPERTYNAME_ADDSPACINGATPAGES
70*b1cdbd2cSJim Jagielski #define PROPERTYNAME_USEOURTABSTOPS COMPATIBILITY_PROPERTYNAME_USEOURTABSTOPS
71*b1cdbd2cSJim Jagielski #define PROPERTYNAME_NOEXTLEADING COMPATIBILITY_PROPERTYNAME_NOEXTLEADING
72*b1cdbd2cSJim Jagielski #define PROPERTYNAME_USELINESPACING COMPATIBILITY_PROPERTYNAME_USELINESPACING
73*b1cdbd2cSJim Jagielski #define PROPERTYNAME_ADDTABLESPACING COMPATIBILITY_PROPERTYNAME_ADDTABLESPACING
74*b1cdbd2cSJim Jagielski #define PROPERTYNAME_USEOBJPOS COMPATIBILITY_PROPERTYNAME_USEOBJECTPOSITIONING
75*b1cdbd2cSJim Jagielski #define PROPERTYNAME_USEOURTEXTWRAP COMPATIBILITY_PROPERTYNAME_USEOURTEXTWRAPPING
76*b1cdbd2cSJim Jagielski #define PROPERTYNAME_CONSIDERWRAPSTYLE COMPATIBILITY_PROPERTYNAME_CONSIDERWRAPPINGSTYLE
77*b1cdbd2cSJim Jagielski #define PROPERTYNAME_EXPANDWORDSPACE COMPATIBILITY_PROPERTYNAME_EXPANDWORDSPACE
78*b1cdbd2cSJim Jagielski
79*b1cdbd2cSJim Jagielski #define PROPERTYCOUNT 13
80*b1cdbd2cSJim Jagielski
81*b1cdbd2cSJim Jagielski #define OFFSET_NAME 0
82*b1cdbd2cSJim Jagielski #define OFFSET_MODULE 1
83*b1cdbd2cSJim Jagielski #define OFFSET_USEPRTMETRICS 2
84*b1cdbd2cSJim Jagielski #define OFFSET_ADDSPACING 3
85*b1cdbd2cSJim Jagielski #define OFFSET_ADDSPACINGATPAGES 4
86*b1cdbd2cSJim Jagielski #define OFFSET_USEOURTABSTOPS 5
87*b1cdbd2cSJim Jagielski #define OFFSET_NOEXTLEADING 6
88*b1cdbd2cSJim Jagielski #define OFFSET_USELINESPACING 7
89*b1cdbd2cSJim Jagielski #define OFFSET_ADDTABLESPACING 8
90*b1cdbd2cSJim Jagielski #define OFFSET_USEOBJPOS 9
91*b1cdbd2cSJim Jagielski #define OFFSET_USEOURTEXTWRAPPING 10
92*b1cdbd2cSJim Jagielski #define OFFSET_CONSIDERWRAPPINGSTYLE 11
93*b1cdbd2cSJim Jagielski #define OFFSET_EXPANDWORDSPACE 12
94*b1cdbd2cSJim Jagielski
95*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
96*b1cdbd2cSJim Jagielski // private declarations!
97*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
98*b1cdbd2cSJim Jagielski
99*b1cdbd2cSJim Jagielski /*-****************************************************************************************************************
100*b1cdbd2cSJim Jagielski @descr struct to hold information about one compatibility entry
101*b1cdbd2cSJim Jagielski ****************************************************************************************************************-*/
102*b1cdbd2cSJim Jagielski struct SvtCompatibilityEntry
103*b1cdbd2cSJim Jagielski {
104*b1cdbd2cSJim Jagielski public:
SvtCompatibilityEntrySvtCompatibilityEntry105*b1cdbd2cSJim Jagielski SvtCompatibilityEntry() :
106*b1cdbd2cSJim Jagielski bUsePrtMetrics( false ), bAddSpacing( false ),
107*b1cdbd2cSJim Jagielski bAddSpacingAtPages( false ), bUseOurTabStops( false ),
108*b1cdbd2cSJim Jagielski bNoExtLeading( false ), bUseLineSpacing( false ),
109*b1cdbd2cSJim Jagielski bAddTableSpacing( false ), bUseObjPos( false ),
110*b1cdbd2cSJim Jagielski bUseOurTextWrapping( false ), bConsiderWrappingStyle( false ),
111*b1cdbd2cSJim Jagielski bExpandWordSpace( true ) {}
SvtCompatibilityEntrySvtCompatibilityEntry112*b1cdbd2cSJim Jagielski SvtCompatibilityEntry(
113*b1cdbd2cSJim Jagielski const OUString& _rName, const OUString& _rNewModule ) :
114*b1cdbd2cSJim Jagielski sName( _rName ), sModule( _rNewModule ),
115*b1cdbd2cSJim Jagielski bUsePrtMetrics( false ), bAddSpacing( false ),
116*b1cdbd2cSJim Jagielski bAddSpacingAtPages( false ), bUseOurTabStops( false ),
117*b1cdbd2cSJim Jagielski bNoExtLeading( false ), bUseLineSpacing( false ),
118*b1cdbd2cSJim Jagielski bAddTableSpacing( false ), bUseObjPos( false ),
119*b1cdbd2cSJim Jagielski bUseOurTextWrapping( false ), bConsiderWrappingStyle( false ),
120*b1cdbd2cSJim Jagielski bExpandWordSpace( true ) {}
121*b1cdbd2cSJim Jagielski
SetUsePrtMetricsSvtCompatibilityEntry122*b1cdbd2cSJim Jagielski inline void SetUsePrtMetrics( bool _bSet ) { bUsePrtMetrics = _bSet; }
SetAddSpacingSvtCompatibilityEntry123*b1cdbd2cSJim Jagielski inline void SetAddSpacing( bool _bSet ) { bAddSpacing = _bSet; }
SetAddSpacingAtPagesSvtCompatibilityEntry124*b1cdbd2cSJim Jagielski inline void SetAddSpacingAtPages( bool _bSet ) { bAddSpacingAtPages = _bSet; }
SetUseOurTabStopsSvtCompatibilityEntry125*b1cdbd2cSJim Jagielski inline void SetUseOurTabStops( bool _bSet ) { bUseOurTabStops = _bSet; }
SetNoExtLeadingSvtCompatibilityEntry126*b1cdbd2cSJim Jagielski inline void SetNoExtLeading( bool _bSet ) { bNoExtLeading = _bSet; }
SetUseLineSpacingSvtCompatibilityEntry127*b1cdbd2cSJim Jagielski inline void SetUseLineSpacing( bool _bSet ) { bUseLineSpacing = _bSet; }
SetAddTableSpacingSvtCompatibilityEntry128*b1cdbd2cSJim Jagielski inline void SetAddTableSpacing( bool _bSet ) { bAddTableSpacing = _bSet; }
SetUseObjPosSvtCompatibilityEntry129*b1cdbd2cSJim Jagielski inline void SetUseObjPos( bool _bSet ) { bUseObjPos = _bSet; }
SetUseOurTextWrappingSvtCompatibilityEntry130*b1cdbd2cSJim Jagielski inline void SetUseOurTextWrapping( bool _bSet ) { bUseOurTextWrapping = _bSet; }
SetConsiderWrappingStyleSvtCompatibilityEntry131*b1cdbd2cSJim Jagielski inline void SetConsiderWrappingStyle( bool _bSet ) { bConsiderWrappingStyle = _bSet; }
SetExpandWordSpaceSvtCompatibilityEntry132*b1cdbd2cSJim Jagielski inline void SetExpandWordSpace( bool _bSet ) { bExpandWordSpace = _bSet; }
133*b1cdbd2cSJim Jagielski
134*b1cdbd2cSJim Jagielski public:
135*b1cdbd2cSJim Jagielski OUString sName;
136*b1cdbd2cSJim Jagielski OUString sModule;
137*b1cdbd2cSJim Jagielski bool bUsePrtMetrics;
138*b1cdbd2cSJim Jagielski bool bAddSpacing;
139*b1cdbd2cSJim Jagielski bool bAddSpacingAtPages;
140*b1cdbd2cSJim Jagielski bool bUseOurTabStops;
141*b1cdbd2cSJim Jagielski bool bNoExtLeading;
142*b1cdbd2cSJim Jagielski bool bUseLineSpacing;
143*b1cdbd2cSJim Jagielski bool bAddTableSpacing;
144*b1cdbd2cSJim Jagielski bool bUseObjPos;
145*b1cdbd2cSJim Jagielski bool bUseOurTextWrapping;
146*b1cdbd2cSJim Jagielski bool bConsiderWrappingStyle;
147*b1cdbd2cSJim Jagielski bool bExpandWordSpace;
148*b1cdbd2cSJim Jagielski };
149*b1cdbd2cSJim Jagielski
150*b1cdbd2cSJim Jagielski /*-****************************************************************************************************************
151*b1cdbd2cSJim Jagielski @descr support simple menu structures and operations on it
152*b1cdbd2cSJim Jagielski ****************************************************************************************************************-*/
153*b1cdbd2cSJim Jagielski class SvtCompatibility
154*b1cdbd2cSJim Jagielski {
155*b1cdbd2cSJim Jagielski public:
156*b1cdbd2cSJim Jagielski //---------------------------------------------------------------------------------------------------------
157*b1cdbd2cSJim Jagielski // append one entry
AppendEntry(const SvtCompatibilityEntry & rEntry)158*b1cdbd2cSJim Jagielski void AppendEntry( const SvtCompatibilityEntry& rEntry )
159*b1cdbd2cSJim Jagielski {
160*b1cdbd2cSJim Jagielski lEntries.push_back( rEntry );
161*b1cdbd2cSJim Jagielski }
162*b1cdbd2cSJim Jagielski
163*b1cdbd2cSJim Jagielski //---------------------------------------------------------------------------------------------------------
164*b1cdbd2cSJim Jagielski // the only way to free memory!
Clear()165*b1cdbd2cSJim Jagielski void Clear()
166*b1cdbd2cSJim Jagielski {
167*b1cdbd2cSJim Jagielski lEntries.clear();
168*b1cdbd2cSJim Jagielski }
169*b1cdbd2cSJim Jagielski
170*b1cdbd2cSJim Jagielski //---------------------------------------------------------------------------------------------------------
171*b1cdbd2cSJim Jagielski // convert internal list to external format
GetList() const172*b1cdbd2cSJim Jagielski Sequence< Sequence< PropertyValue > > GetList() const
173*b1cdbd2cSJim Jagielski {
174*b1cdbd2cSJim Jagielski sal_Int32 nCount = (sal_Int32)lEntries.size();
175*b1cdbd2cSJim Jagielski sal_Int32 nStep = 0;
176*b1cdbd2cSJim Jagielski Sequence< PropertyValue > lProperties( PROPERTYCOUNT );
177*b1cdbd2cSJim Jagielski Sequence< Sequence< PropertyValue > > lResult( nCount );
178*b1cdbd2cSJim Jagielski const vector< SvtCompatibilityEntry >* pList = &lEntries;
179*b1cdbd2cSJim Jagielski
180*b1cdbd2cSJim Jagielski lProperties[ OFFSET_NAME ].Name = PROPERTYNAME_NAME;
181*b1cdbd2cSJim Jagielski lProperties[ OFFSET_MODULE ].Name = PROPERTYNAME_MODULE;
182*b1cdbd2cSJim Jagielski lProperties[ OFFSET_USEPRTMETRICS ].Name = PROPERTYNAME_USEPRTMETRICS;
183*b1cdbd2cSJim Jagielski lProperties[ OFFSET_ADDSPACING ].Name = PROPERTYNAME_ADDSPACING;
184*b1cdbd2cSJim Jagielski lProperties[ OFFSET_ADDSPACINGATPAGES ].Name = PROPERTYNAME_ADDSPACINGATPAGES;
185*b1cdbd2cSJim Jagielski lProperties[ OFFSET_USEOURTABSTOPS ].Name = PROPERTYNAME_USEOURTABSTOPS;
186*b1cdbd2cSJim Jagielski lProperties[ OFFSET_NOEXTLEADING ].Name = PROPERTYNAME_NOEXTLEADING;
187*b1cdbd2cSJim Jagielski lProperties[ OFFSET_USELINESPACING ].Name = PROPERTYNAME_USELINESPACING;
188*b1cdbd2cSJim Jagielski lProperties[ OFFSET_ADDTABLESPACING ].Name = PROPERTYNAME_ADDTABLESPACING;
189*b1cdbd2cSJim Jagielski lProperties[ OFFSET_USEOBJPOS ].Name = PROPERTYNAME_USEOBJPOS;
190*b1cdbd2cSJim Jagielski lProperties[ OFFSET_USEOURTEXTWRAPPING ].Name = PROPERTYNAME_USEOURTEXTWRAP;
191*b1cdbd2cSJim Jagielski lProperties[ OFFSET_CONSIDERWRAPPINGSTYLE ].Name = PROPERTYNAME_CONSIDERWRAPSTYLE;
192*b1cdbd2cSJim Jagielski lProperties[ OFFSET_EXPANDWORDSPACE ].Name = PROPERTYNAME_EXPANDWORDSPACE;
193*b1cdbd2cSJim Jagielski
194*b1cdbd2cSJim Jagielski for ( vector< SvtCompatibilityEntry >::const_iterator pItem = pList->begin();
195*b1cdbd2cSJim Jagielski pItem != pList->end(); ++pItem )
196*b1cdbd2cSJim Jagielski {
197*b1cdbd2cSJim Jagielski lProperties[ OFFSET_NAME ].Value <<= pItem->sName;
198*b1cdbd2cSJim Jagielski lProperties[ OFFSET_MODULE ].Value <<= pItem->sModule;
199*b1cdbd2cSJim Jagielski lProperties[ OFFSET_USEPRTMETRICS ].Value <<= pItem->bUsePrtMetrics;
200*b1cdbd2cSJim Jagielski lProperties[ OFFSET_ADDSPACING ].Value <<= pItem->bAddSpacing;
201*b1cdbd2cSJim Jagielski lProperties[ OFFSET_ADDSPACINGATPAGES ].Value <<= pItem->bAddSpacingAtPages;
202*b1cdbd2cSJim Jagielski lProperties[ OFFSET_USEOURTABSTOPS ].Value <<= pItem->bUseOurTabStops;
203*b1cdbd2cSJim Jagielski lProperties[ OFFSET_NOEXTLEADING ].Value <<= pItem->bNoExtLeading;
204*b1cdbd2cSJim Jagielski lProperties[ OFFSET_USELINESPACING ].Value <<= pItem->bUseLineSpacing;
205*b1cdbd2cSJim Jagielski lProperties[ OFFSET_ADDTABLESPACING ].Value <<= pItem->bAddTableSpacing;
206*b1cdbd2cSJim Jagielski lProperties[ OFFSET_USEOBJPOS ].Value <<= pItem->bUseObjPos;
207*b1cdbd2cSJim Jagielski lProperties[ OFFSET_USEOURTEXTWRAPPING ].Value <<= pItem->bUseOurTextWrapping;
208*b1cdbd2cSJim Jagielski lProperties[ OFFSET_CONSIDERWRAPPINGSTYLE ].Value <<= pItem->bConsiderWrappingStyle;
209*b1cdbd2cSJim Jagielski lProperties[ OFFSET_EXPANDWORDSPACE ].Value <<= pItem->bExpandWordSpace;
210*b1cdbd2cSJim Jagielski lResult[ nStep ] = lProperties;
211*b1cdbd2cSJim Jagielski ++nStep;
212*b1cdbd2cSJim Jagielski }
213*b1cdbd2cSJim Jagielski
214*b1cdbd2cSJim Jagielski return lResult;
215*b1cdbd2cSJim Jagielski }
216*b1cdbd2cSJim Jagielski
size() const217*b1cdbd2cSJim Jagielski int size() const
218*b1cdbd2cSJim Jagielski {
219*b1cdbd2cSJim Jagielski return lEntries.size();
220*b1cdbd2cSJim Jagielski }
221*b1cdbd2cSJim Jagielski
operator [](int i)222*b1cdbd2cSJim Jagielski const SvtCompatibilityEntry& operator[]( int i )
223*b1cdbd2cSJim Jagielski {
224*b1cdbd2cSJim Jagielski return lEntries[i];
225*b1cdbd2cSJim Jagielski }
226*b1cdbd2cSJim Jagielski
227*b1cdbd2cSJim Jagielski private:
228*b1cdbd2cSJim Jagielski vector< SvtCompatibilityEntry > lEntries;
229*b1cdbd2cSJim Jagielski };
230*b1cdbd2cSJim Jagielski
231*b1cdbd2cSJim Jagielski class SvtCompatibilityOptions_Impl : public ConfigItem
232*b1cdbd2cSJim Jagielski {
233*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------------------------------------------
234*b1cdbd2cSJim Jagielski // public methods
235*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------------------------------------------
236*b1cdbd2cSJim Jagielski
237*b1cdbd2cSJim Jagielski public:
238*b1cdbd2cSJim Jagielski
239*b1cdbd2cSJim Jagielski //---------------------------------------------------------------------------------------------------------
240*b1cdbd2cSJim Jagielski // constructor / destructor
241*b1cdbd2cSJim Jagielski //---------------------------------------------------------------------------------------------------------
242*b1cdbd2cSJim Jagielski
243*b1cdbd2cSJim Jagielski SvtCompatibilityOptions_Impl();
244*b1cdbd2cSJim Jagielski ~SvtCompatibilityOptions_Impl();
245*b1cdbd2cSJim Jagielski
246*b1cdbd2cSJim Jagielski //---------------------------------------------------------------------------------------------------------
247*b1cdbd2cSJim Jagielski // overloaded methods of baseclass
248*b1cdbd2cSJim Jagielski //---------------------------------------------------------------------------------------------------------
249*b1cdbd2cSJim Jagielski
250*b1cdbd2cSJim Jagielski /*-****************************************************************************************************//**
251*b1cdbd2cSJim Jagielski @short called for notify of configmanager
252*b1cdbd2cSJim Jagielski @descr These method is called from the ConfigManager before application ends or from the
253*b1cdbd2cSJim Jagielski PropertyChangeListener if the sub tree broadcasts changes. You must update your
254*b1cdbd2cSJim Jagielski internal values.
255*b1cdbd2cSJim Jagielski
256*b1cdbd2cSJim Jagielski @seealso baseclass ConfigItem
257*b1cdbd2cSJim Jagielski
258*b1cdbd2cSJim Jagielski @param "lPropertyNames" is the list of properties which should be updated.
259*b1cdbd2cSJim Jagielski @return -
260*b1cdbd2cSJim Jagielski
261*b1cdbd2cSJim Jagielski @onerror -
262*b1cdbd2cSJim Jagielski *//*-*****************************************************************************************************/
263*b1cdbd2cSJim Jagielski
264*b1cdbd2cSJim Jagielski virtual void Notify( const Sequence< OUString >& lPropertyNames );
265*b1cdbd2cSJim Jagielski
266*b1cdbd2cSJim Jagielski /*-****************************************************************************************************//**
267*b1cdbd2cSJim Jagielski @short write changes to configuration
268*b1cdbd2cSJim Jagielski @descr These method writes the changed values into the sub tree
269*b1cdbd2cSJim Jagielski and should always called in our destructor to guarantee consistency of config data.
270*b1cdbd2cSJim Jagielski
271*b1cdbd2cSJim Jagielski @seealso baseclass ConfigItem
272*b1cdbd2cSJim Jagielski
273*b1cdbd2cSJim Jagielski @param -
274*b1cdbd2cSJim Jagielski @return -
275*b1cdbd2cSJim Jagielski
276*b1cdbd2cSJim Jagielski @onerror -
277*b1cdbd2cSJim Jagielski *//*-*****************************************************************************************************/
278*b1cdbd2cSJim Jagielski
279*b1cdbd2cSJim Jagielski virtual void Commit();
280*b1cdbd2cSJim Jagielski
281*b1cdbd2cSJim Jagielski //---------------------------------------------------------------------------------------------------------
282*b1cdbd2cSJim Jagielski // public interface
283*b1cdbd2cSJim Jagielski //---------------------------------------------------------------------------------------------------------
284*b1cdbd2cSJim Jagielski
285*b1cdbd2cSJim Jagielski /*-****************************************************************************************************//**
286*b1cdbd2cSJim Jagielski @short base implementation of public interface for "SvtCompatibilityOptions"!
287*b1cdbd2cSJim Jagielski @descr These class is used as static member of "SvtCompatibilityOptions" ...
288*b1cdbd2cSJim Jagielski => The code exist only for one time and isn't duplicated for every instance!
289*b1cdbd2cSJim Jagielski
290*b1cdbd2cSJim Jagielski @seealso -
291*b1cdbd2cSJim Jagielski
292*b1cdbd2cSJim Jagielski @param -
293*b1cdbd2cSJim Jagielski @return -
294*b1cdbd2cSJim Jagielski
295*b1cdbd2cSJim Jagielski @onerror -
296*b1cdbd2cSJim Jagielski *//*-*****************************************************************************************************/
297*b1cdbd2cSJim Jagielski
298*b1cdbd2cSJim Jagielski void Clear();
299*b1cdbd2cSJim Jagielski Sequence< Sequence< PropertyValue > > GetList() const;
300*b1cdbd2cSJim Jagielski void AppendItem( const ::rtl::OUString& _sName,
301*b1cdbd2cSJim Jagielski const ::rtl::OUString& _sModule,
302*b1cdbd2cSJim Jagielski bool _bUsePrtMetrics,
303*b1cdbd2cSJim Jagielski bool _bAddSpacing,
304*b1cdbd2cSJim Jagielski bool _bAddSpacingAtPages,
305*b1cdbd2cSJim Jagielski bool _bUseOurTabStops,
306*b1cdbd2cSJim Jagielski bool _bNoExtLeading,
307*b1cdbd2cSJim Jagielski bool _bUseLineSpacing,
308*b1cdbd2cSJim Jagielski bool _bAddTableSpacing,
309*b1cdbd2cSJim Jagielski bool _bUseObjPos,
310*b1cdbd2cSJim Jagielski bool _bUseOurTextWrapping,
311*b1cdbd2cSJim Jagielski bool _bConsiderWrappingStyle,
312*b1cdbd2cSJim Jagielski bool _bExpandWordSpace );
313*b1cdbd2cSJim Jagielski
IsUsePrtDevice() const314*b1cdbd2cSJim Jagielski inline bool IsUsePrtDevice() const { return m_aDefOptions.bUsePrtMetrics; }
IsAddSpacing() const315*b1cdbd2cSJim Jagielski inline bool IsAddSpacing() const { return m_aDefOptions.bAddSpacing; }
IsAddSpacingAtPages() const316*b1cdbd2cSJim Jagielski inline bool IsAddSpacingAtPages() const { return m_aDefOptions.bAddSpacingAtPages; }
IsUseOurTabStops() const317*b1cdbd2cSJim Jagielski inline bool IsUseOurTabStops() const { return m_aDefOptions.bUseOurTabStops; }
IsNoExtLeading() const318*b1cdbd2cSJim Jagielski inline bool IsNoExtLeading() const { return m_aDefOptions.bNoExtLeading; }
IsUseLineSpacing() const319*b1cdbd2cSJim Jagielski inline bool IsUseLineSpacing() const { return m_aDefOptions.bUseLineSpacing; }
IsAddTableSpacing() const320*b1cdbd2cSJim Jagielski inline bool IsAddTableSpacing() const { return m_aDefOptions.bAddTableSpacing; }
IsUseObjPos() const321*b1cdbd2cSJim Jagielski inline bool IsUseObjPos() const { return m_aDefOptions.bUseObjPos; }
IsUseOurTextWrapping() const322*b1cdbd2cSJim Jagielski inline bool IsUseOurTextWrapping() const { return m_aDefOptions.bUseOurTextWrapping; }
IsConsiderWrappingStyle() const323*b1cdbd2cSJim Jagielski inline bool IsConsiderWrappingStyle() const { return m_aDefOptions.bConsiderWrappingStyle; }
IsExpandWordSpace() const324*b1cdbd2cSJim Jagielski inline bool IsExpandWordSpace() const { return m_aDefOptions.bExpandWordSpace; }
325*b1cdbd2cSJim Jagielski
326*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------------------------------------------
327*b1cdbd2cSJim Jagielski // private methods
328*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------------------------------------------
329*b1cdbd2cSJim Jagielski
330*b1cdbd2cSJim Jagielski private:
331*b1cdbd2cSJim Jagielski
332*b1cdbd2cSJim Jagielski /*-****************************************************************************************************//**
333*b1cdbd2cSJim Jagielski @short return list of key names of our configuration management which represent one module tree
334*b1cdbd2cSJim Jagielski @descr These methods return the current list of key names! We need it to get needed values from our
335*b1cdbd2cSJim Jagielski configuration management and support dynamical menu item lists!
336*b1cdbd2cSJim Jagielski
337*b1cdbd2cSJim Jagielski @seealso -
338*b1cdbd2cSJim Jagielski
339*b1cdbd2cSJim Jagielski @param -
340*b1cdbd2cSJim Jagielski @return A list of configuration key names is returned.
341*b1cdbd2cSJim Jagielski
342*b1cdbd2cSJim Jagielski @onerror -
343*b1cdbd2cSJim Jagielski *//*-*****************************************************************************************************/
344*b1cdbd2cSJim Jagielski
345*b1cdbd2cSJim Jagielski Sequence< OUString > impl_GetPropertyNames( Sequence< OUString >& rItems );
346*b1cdbd2cSJim Jagielski
347*b1cdbd2cSJim Jagielski /*-****************************************************************************************************//**
348*b1cdbd2cSJim Jagielski @short expand the list for all well known properties to destination
349*b1cdbd2cSJim Jagielski @descr -
350*b1cdbd2cSJim Jagielski @attention -
351*b1cdbd2cSJim Jagielski
352*b1cdbd2cSJim Jagielski @seealso method impl_GetPropertyNames()
353*b1cdbd2cSJim Jagielski
354*b1cdbd2cSJim Jagielski @param "lSource" , original list
355*b1cdbd2cSJim Jagielski @param "lDestination" , destination of operation
356*b1cdbd2cSJim Jagielski @return A list of configuration key names is returned.
357*b1cdbd2cSJim Jagielski
358*b1cdbd2cSJim Jagielski @onerror -
359*b1cdbd2cSJim Jagielski *//*-*****************************************************************************************************/
360*b1cdbd2cSJim Jagielski
361*b1cdbd2cSJim Jagielski void impl_ExpandPropertyNames( const Sequence< OUString >& lSource,
362*b1cdbd2cSJim Jagielski Sequence< OUString >& lDestination );
363*b1cdbd2cSJim Jagielski
364*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------------------------------------------
365*b1cdbd2cSJim Jagielski // private member
366*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------------------------------------------
367*b1cdbd2cSJim Jagielski
368*b1cdbd2cSJim Jagielski private:
369*b1cdbd2cSJim Jagielski
370*b1cdbd2cSJim Jagielski SvtCompatibility m_aOptions;
371*b1cdbd2cSJim Jagielski SvtCompatibilityEntry m_aDefOptions;
372*b1cdbd2cSJim Jagielski };
373*b1cdbd2cSJim Jagielski
374*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
375*b1cdbd2cSJim Jagielski // definitions
376*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
377*b1cdbd2cSJim Jagielski
378*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
379*b1cdbd2cSJim Jagielski // constructor
380*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
SvtCompatibilityOptions_Impl()381*b1cdbd2cSJim Jagielski SvtCompatibilityOptions_Impl::SvtCompatibilityOptions_Impl()
382*b1cdbd2cSJim Jagielski // Init baseclasses first
383*b1cdbd2cSJim Jagielski : ConfigItem( ROOTNODE_OPTIONS )
384*b1cdbd2cSJim Jagielski // Init member then...
385*b1cdbd2cSJim Jagielski {
386*b1cdbd2cSJim Jagielski // Get names and values of all accessable menu entries and fill internal structures.
387*b1cdbd2cSJim Jagielski // See impl_GetPropertyNames() for further informations.
388*b1cdbd2cSJim Jagielski Sequence< OUString > lNodes;
389*b1cdbd2cSJim Jagielski Sequence< OUString > lNames = impl_GetPropertyNames( lNodes );
390*b1cdbd2cSJim Jagielski sal_uInt32 nCount = lNodes.getLength();
391*b1cdbd2cSJim Jagielski Sequence< Any > lValues = GetProperties( lNames );
392*b1cdbd2cSJim Jagielski
393*b1cdbd2cSJim Jagielski // Safe impossible cases.
394*b1cdbd2cSJim Jagielski // We need values from ALL configuration keys.
395*b1cdbd2cSJim Jagielski // Follow assignment use order of values in relation to our list of key names!
396*b1cdbd2cSJim Jagielski DBG_ASSERT( !( lNames.getLength()!=lValues.getLength() ), "SvtCompatibilityOptions_Impl::SvtCompatibilityOptions_Impl()\nI miss some values of configuration keys!\n" );
397*b1cdbd2cSJim Jagielski
398*b1cdbd2cSJim Jagielski SvtCompatibilityEntry aItem;
399*b1cdbd2cSJim Jagielski sal_uInt32 nItem = 0;
400*b1cdbd2cSJim Jagielski sal_uInt32 nPosition = 0;
401*b1cdbd2cSJim Jagielski
402*b1cdbd2cSJim Jagielski // Get names/values for new menu.
403*b1cdbd2cSJim Jagielski // 4 subkeys for every item!
404*b1cdbd2cSJim Jagielski bool bDefaultFound = false;
405*b1cdbd2cSJim Jagielski for( nItem = 0; nItem < nCount; ++nItem )
406*b1cdbd2cSJim Jagielski {
407*b1cdbd2cSJim Jagielski aItem.sName = lNodes[ nItem ];
408*b1cdbd2cSJim Jagielski lValues[ nPosition++ ] >>= aItem.sModule;
409*b1cdbd2cSJim Jagielski lValues[ nPosition++ ] >>= aItem.bUsePrtMetrics;
410*b1cdbd2cSJim Jagielski lValues[ nPosition++ ] >>= aItem.bAddSpacing;
411*b1cdbd2cSJim Jagielski lValues[ nPosition++ ] >>= aItem.bAddSpacingAtPages;
412*b1cdbd2cSJim Jagielski lValues[ nPosition++ ] >>= aItem.bUseOurTabStops;
413*b1cdbd2cSJim Jagielski lValues[ nPosition++ ] >>= aItem.bNoExtLeading;
414*b1cdbd2cSJim Jagielski lValues[ nPosition++ ] >>= aItem.bUseLineSpacing;
415*b1cdbd2cSJim Jagielski lValues[ nPosition++ ] >>= aItem.bAddTableSpacing;
416*b1cdbd2cSJim Jagielski lValues[ nPosition++ ] >>= aItem.bUseObjPos;
417*b1cdbd2cSJim Jagielski lValues[ nPosition++ ] >>= aItem.bUseOurTextWrapping;
418*b1cdbd2cSJim Jagielski lValues[ nPosition++ ] >>= aItem.bConsiderWrappingStyle;
419*b1cdbd2cSJim Jagielski lValues[ nPosition++ ] >>= aItem.bExpandWordSpace;
420*b1cdbd2cSJim Jagielski m_aOptions.AppendEntry( aItem );
421*b1cdbd2cSJim Jagielski
422*b1cdbd2cSJim Jagielski if ( !bDefaultFound && aItem.sName.equals( COMPATIBILITY_DEFAULT_NAME ) != sal_False )
423*b1cdbd2cSJim Jagielski {
424*b1cdbd2cSJim Jagielski m_aDefOptions = aItem;
425*b1cdbd2cSJim Jagielski bDefaultFound = true;
426*b1cdbd2cSJim Jagielski }
427*b1cdbd2cSJim Jagielski }
428*b1cdbd2cSJim Jagielski }
429*b1cdbd2cSJim Jagielski
430*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
431*b1cdbd2cSJim Jagielski // destructor
432*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
~SvtCompatibilityOptions_Impl()433*b1cdbd2cSJim Jagielski SvtCompatibilityOptions_Impl::~SvtCompatibilityOptions_Impl()
434*b1cdbd2cSJim Jagielski {
435*b1cdbd2cSJim Jagielski // We must save our current values .. if user forget it!
436*b1cdbd2cSJim Jagielski if( IsModified() == sal_True )
437*b1cdbd2cSJim Jagielski {
438*b1cdbd2cSJim Jagielski Commit();
439*b1cdbd2cSJim Jagielski }
440*b1cdbd2cSJim Jagielski }
441*b1cdbd2cSJim Jagielski
442*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
443*b1cdbd2cSJim Jagielski // public method
444*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
Notify(const Sequence<OUString> &)445*b1cdbd2cSJim Jagielski void SvtCompatibilityOptions_Impl::Notify( const Sequence< OUString >& )
446*b1cdbd2cSJim Jagielski {
447*b1cdbd2cSJim Jagielski DBG_ASSERT( sal_False, "SvtCompatibilityOptions_Impl::Notify()\nNot implemented yet! I don't know how I can handle a dynamical list of unknown properties ...\n" );
448*b1cdbd2cSJim Jagielski }
449*b1cdbd2cSJim Jagielski
450*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
451*b1cdbd2cSJim Jagielski // public method
452*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
Commit()453*b1cdbd2cSJim Jagielski void SvtCompatibilityOptions_Impl::Commit()
454*b1cdbd2cSJim Jagielski {
455*b1cdbd2cSJim Jagielski // Write all properties!
456*b1cdbd2cSJim Jagielski // Delete complete set first.
457*b1cdbd2cSJim Jagielski ClearNodeSet( SETNODE_ALLFILEFORMATS );
458*b1cdbd2cSJim Jagielski
459*b1cdbd2cSJim Jagielski SvtCompatibilityEntry aItem;
460*b1cdbd2cSJim Jagielski OUString sNode;
461*b1cdbd2cSJim Jagielski Sequence< PropertyValue > lPropertyValues( PROPERTYCOUNT - 1 );
462*b1cdbd2cSJim Jagielski sal_uInt32 nItem = 0;
463*b1cdbd2cSJim Jagielski sal_uInt32 nNewCount = m_aOptions.size();
464*b1cdbd2cSJim Jagielski for( nItem = 0; nItem < nNewCount; ++nItem )
465*b1cdbd2cSJim Jagielski {
466*b1cdbd2cSJim Jagielski aItem = m_aOptions[ nItem ];
467*b1cdbd2cSJim Jagielski sNode = SETNODE_ALLFILEFORMATS + PATHDELIMITER + aItem.sName + PATHDELIMITER;
468*b1cdbd2cSJim Jagielski
469*b1cdbd2cSJim Jagielski lPropertyValues[ OFFSET_MODULE - 1 ].Name = sNode + PROPERTYNAME_MODULE;
470*b1cdbd2cSJim Jagielski lPropertyValues[ OFFSET_USEPRTMETRICS - 1 ].Name = sNode + PROPERTYNAME_USEPRTMETRICS;
471*b1cdbd2cSJim Jagielski lPropertyValues[ OFFSET_ADDSPACING - 1 ].Name = sNode + PROPERTYNAME_ADDSPACING;
472*b1cdbd2cSJim Jagielski lPropertyValues[ OFFSET_ADDSPACINGATPAGES - 1 ].Name = sNode + PROPERTYNAME_ADDSPACINGATPAGES;
473*b1cdbd2cSJim Jagielski lPropertyValues[ OFFSET_USEOURTABSTOPS - 1 ].Name = sNode + PROPERTYNAME_USEOURTABSTOPS;
474*b1cdbd2cSJim Jagielski lPropertyValues[ OFFSET_NOEXTLEADING - 1 ].Name = sNode + PROPERTYNAME_NOEXTLEADING;
475*b1cdbd2cSJim Jagielski lPropertyValues[ OFFSET_USELINESPACING - 1 ].Name = sNode + PROPERTYNAME_USELINESPACING;
476*b1cdbd2cSJim Jagielski lPropertyValues[ OFFSET_ADDTABLESPACING - 1 ].Name = sNode + PROPERTYNAME_ADDTABLESPACING;
477*b1cdbd2cSJim Jagielski lPropertyValues[ OFFSET_USEOBJPOS - 1 ].Name = sNode + PROPERTYNAME_USEOBJPOS;
478*b1cdbd2cSJim Jagielski lPropertyValues[ OFFSET_USEOURTEXTWRAPPING - 1 ].Name = sNode + PROPERTYNAME_USEOURTEXTWRAP;
479*b1cdbd2cSJim Jagielski lPropertyValues[ OFFSET_CONSIDERWRAPPINGSTYLE - 1 ].Name = sNode + PROPERTYNAME_CONSIDERWRAPSTYLE;
480*b1cdbd2cSJim Jagielski lPropertyValues[ OFFSET_EXPANDWORDSPACE - 1 ].Name = sNode + PROPERTYNAME_EXPANDWORDSPACE;
481*b1cdbd2cSJim Jagielski
482*b1cdbd2cSJim Jagielski lPropertyValues[ OFFSET_MODULE - 1 ].Value <<= aItem.sModule;
483*b1cdbd2cSJim Jagielski lPropertyValues[ OFFSET_USEPRTMETRICS - 1 ].Value <<= aItem.bUsePrtMetrics;
484*b1cdbd2cSJim Jagielski lPropertyValues[ OFFSET_ADDSPACING - 1 ].Value <<= aItem.bAddSpacing;
485*b1cdbd2cSJim Jagielski lPropertyValues[ OFFSET_ADDSPACINGATPAGES - 1 ].Value <<= aItem.bAddSpacingAtPages;
486*b1cdbd2cSJim Jagielski lPropertyValues[ OFFSET_USEOURTABSTOPS - 1 ].Value <<= aItem.bUseOurTabStops;
487*b1cdbd2cSJim Jagielski lPropertyValues[ OFFSET_NOEXTLEADING - 1 ].Value <<= aItem.bNoExtLeading;
488*b1cdbd2cSJim Jagielski lPropertyValues[ OFFSET_USELINESPACING - 1 ].Value <<= aItem.bUseLineSpacing;
489*b1cdbd2cSJim Jagielski lPropertyValues[ OFFSET_ADDTABLESPACING - 1 ].Value <<= aItem.bAddTableSpacing;
490*b1cdbd2cSJim Jagielski lPropertyValues[ OFFSET_USEOBJPOS - 1 ].Value <<= aItem.bUseObjPos;
491*b1cdbd2cSJim Jagielski lPropertyValues[ OFFSET_USEOURTEXTWRAPPING - 1 ].Value <<= aItem.bUseOurTextWrapping;
492*b1cdbd2cSJim Jagielski lPropertyValues[ OFFSET_CONSIDERWRAPPINGSTYLE - 1 ].Value <<= aItem.bConsiderWrappingStyle;
493*b1cdbd2cSJim Jagielski lPropertyValues[ OFFSET_EXPANDWORDSPACE - 1 ].Value <<= aItem.bExpandWordSpace;
494*b1cdbd2cSJim Jagielski
495*b1cdbd2cSJim Jagielski SetSetProperties( SETNODE_ALLFILEFORMATS, lPropertyValues );
496*b1cdbd2cSJim Jagielski }
497*b1cdbd2cSJim Jagielski }
498*b1cdbd2cSJim Jagielski
499*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
500*b1cdbd2cSJim Jagielski // public method
501*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
Clear()502*b1cdbd2cSJim Jagielski void SvtCompatibilityOptions_Impl::Clear()
503*b1cdbd2cSJim Jagielski {
504*b1cdbd2cSJim Jagielski m_aOptions.Clear();
505*b1cdbd2cSJim Jagielski SetModified();
506*b1cdbd2cSJim Jagielski }
507*b1cdbd2cSJim Jagielski
508*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
509*b1cdbd2cSJim Jagielski // public method
510*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
GetList() const511*b1cdbd2cSJim Jagielski Sequence< Sequence< PropertyValue > > SvtCompatibilityOptions_Impl::GetList() const
512*b1cdbd2cSJim Jagielski {
513*b1cdbd2cSJim Jagielski Sequence< Sequence< PropertyValue > > lReturn;
514*b1cdbd2cSJim Jagielski lReturn = m_aOptions.GetList();
515*b1cdbd2cSJim Jagielski return lReturn;
516*b1cdbd2cSJim Jagielski }
517*b1cdbd2cSJim Jagielski
518*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
519*b1cdbd2cSJim Jagielski // public method
520*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
521*b1cdbd2cSJim Jagielski
AppendItem(const::rtl::OUString & _sName,const::rtl::OUString & _sModule,bool _bUsePrtMetrics,bool _bAddSpacing,bool _bAddSpacingAtPages,bool _bUseOurTabStops,bool _bNoExtLeading,bool _bUseLineSpacing,bool _bAddTableSpacing,bool _bUseObjPos,bool _bUseOurTextWrapping,bool _bConsiderWrappingStyle,bool _bExpandWordSpace)522*b1cdbd2cSJim Jagielski void SvtCompatibilityOptions_Impl::AppendItem( const ::rtl::OUString& _sName,
523*b1cdbd2cSJim Jagielski const ::rtl::OUString& _sModule,
524*b1cdbd2cSJim Jagielski bool _bUsePrtMetrics,
525*b1cdbd2cSJim Jagielski bool _bAddSpacing,
526*b1cdbd2cSJim Jagielski bool _bAddSpacingAtPages,
527*b1cdbd2cSJim Jagielski bool _bUseOurTabStops,
528*b1cdbd2cSJim Jagielski bool _bNoExtLeading,
529*b1cdbd2cSJim Jagielski bool _bUseLineSpacing,
530*b1cdbd2cSJim Jagielski bool _bAddTableSpacing,
531*b1cdbd2cSJim Jagielski bool _bUseObjPos,
532*b1cdbd2cSJim Jagielski bool _bUseOurTextWrapping,
533*b1cdbd2cSJim Jagielski bool _bConsiderWrappingStyle,
534*b1cdbd2cSJim Jagielski bool _bExpandWordSpace )
535*b1cdbd2cSJim Jagielski {
536*b1cdbd2cSJim Jagielski SvtCompatibilityEntry aItem( _sName, _sModule );
537*b1cdbd2cSJim Jagielski aItem.SetUsePrtMetrics( _bUsePrtMetrics );
538*b1cdbd2cSJim Jagielski aItem.SetAddSpacing( _bAddSpacing );
539*b1cdbd2cSJim Jagielski aItem.SetAddSpacingAtPages( _bAddSpacingAtPages );
540*b1cdbd2cSJim Jagielski aItem.SetUseOurTabStops( _bUseOurTabStops );
541*b1cdbd2cSJim Jagielski aItem.SetNoExtLeading( _bNoExtLeading );
542*b1cdbd2cSJim Jagielski aItem.SetUseLineSpacing( _bUseLineSpacing );
543*b1cdbd2cSJim Jagielski aItem.SetAddTableSpacing( _bAddTableSpacing );
544*b1cdbd2cSJim Jagielski aItem.SetUseObjPos( _bUseObjPos );
545*b1cdbd2cSJim Jagielski aItem.SetUseOurTextWrapping( _bUseOurTextWrapping );
546*b1cdbd2cSJim Jagielski aItem.SetConsiderWrappingStyle( _bConsiderWrappingStyle );
547*b1cdbd2cSJim Jagielski aItem.SetExpandWordSpace( _bExpandWordSpace );
548*b1cdbd2cSJim Jagielski m_aOptions.AppendEntry( aItem );
549*b1cdbd2cSJim Jagielski
550*b1cdbd2cSJim Jagielski // default item reset?
551*b1cdbd2cSJim Jagielski if ( _sName.equals( COMPATIBILITY_DEFAULT_NAME ) != sal_False )
552*b1cdbd2cSJim Jagielski m_aDefOptions = aItem;
553*b1cdbd2cSJim Jagielski
554*b1cdbd2cSJim Jagielski SetModified();
555*b1cdbd2cSJim Jagielski }
556*b1cdbd2cSJim Jagielski
557*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
558*b1cdbd2cSJim Jagielski // private method
559*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
impl_GetPropertyNames(Sequence<OUString> & rItems)560*b1cdbd2cSJim Jagielski Sequence< OUString > SvtCompatibilityOptions_Impl::impl_GetPropertyNames( Sequence< OUString >& rItems )
561*b1cdbd2cSJim Jagielski {
562*b1cdbd2cSJim Jagielski // First get ALL names of current existing list items in configuration!
563*b1cdbd2cSJim Jagielski rItems = GetNodeNames( SETNODE_ALLFILEFORMATS );
564*b1cdbd2cSJim Jagielski // expand list to result list ...
565*b1cdbd2cSJim Jagielski Sequence< OUString > lProperties( rItems.getLength() * ( PROPERTYCOUNT - 1 ) );
566*b1cdbd2cSJim Jagielski impl_ExpandPropertyNames( rItems, lProperties );
567*b1cdbd2cSJim Jagielski // Return result.
568*b1cdbd2cSJim Jagielski return lProperties;
569*b1cdbd2cSJim Jagielski }
570*b1cdbd2cSJim Jagielski
571*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
572*b1cdbd2cSJim Jagielski // private method
573*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
impl_ExpandPropertyNames(const Sequence<OUString> & lSource,Sequence<OUString> & lDestination)574*b1cdbd2cSJim Jagielski void SvtCompatibilityOptions_Impl::impl_ExpandPropertyNames(
575*b1cdbd2cSJim Jagielski const Sequence< OUString >& lSource, Sequence< OUString >& lDestination )
576*b1cdbd2cSJim Jagielski {
577*b1cdbd2cSJim Jagielski OUString sFixPath;
578*b1cdbd2cSJim Jagielski sal_Int32 nDestStep = 0;
579*b1cdbd2cSJim Jagielski sal_Int32 nSourceCount = lSource.getLength();
580*b1cdbd2cSJim Jagielski // Copy entries to destination and expand every item with 2 supported sub properties.
581*b1cdbd2cSJim Jagielski for( sal_Int32 nSourceStep = 0; nSourceStep < nSourceCount; ++nSourceStep )
582*b1cdbd2cSJim Jagielski {
583*b1cdbd2cSJim Jagielski sFixPath = SETNODE_ALLFILEFORMATS;
584*b1cdbd2cSJim Jagielski sFixPath += PATHDELIMITER;
585*b1cdbd2cSJim Jagielski sFixPath += lSource[ nSourceStep ];
586*b1cdbd2cSJim Jagielski sFixPath += PATHDELIMITER;
587*b1cdbd2cSJim Jagielski
588*b1cdbd2cSJim Jagielski lDestination[nDestStep] = sFixPath;
589*b1cdbd2cSJim Jagielski lDestination[nDestStep] += PROPERTYNAME_MODULE;
590*b1cdbd2cSJim Jagielski ++nDestStep;
591*b1cdbd2cSJim Jagielski lDestination[nDestStep] = sFixPath;
592*b1cdbd2cSJim Jagielski lDestination[nDestStep] += PROPERTYNAME_USEPRTMETRICS;
593*b1cdbd2cSJim Jagielski ++nDestStep;
594*b1cdbd2cSJim Jagielski lDestination[nDestStep] = sFixPath;
595*b1cdbd2cSJim Jagielski lDestination[nDestStep] += PROPERTYNAME_ADDSPACING;
596*b1cdbd2cSJim Jagielski ++nDestStep;
597*b1cdbd2cSJim Jagielski lDestination[nDestStep] = sFixPath;
598*b1cdbd2cSJim Jagielski lDestination[nDestStep] += PROPERTYNAME_ADDSPACINGATPAGES;
599*b1cdbd2cSJim Jagielski ++nDestStep;
600*b1cdbd2cSJim Jagielski lDestination[nDestStep] = sFixPath;
601*b1cdbd2cSJim Jagielski lDestination[nDestStep] += PROPERTYNAME_USEOURTABSTOPS;
602*b1cdbd2cSJim Jagielski ++nDestStep;
603*b1cdbd2cSJim Jagielski lDestination[nDestStep] = sFixPath;
604*b1cdbd2cSJim Jagielski lDestination[nDestStep] += PROPERTYNAME_NOEXTLEADING;
605*b1cdbd2cSJim Jagielski ++nDestStep;
606*b1cdbd2cSJim Jagielski lDestination[nDestStep] = sFixPath;
607*b1cdbd2cSJim Jagielski lDestination[nDestStep] += PROPERTYNAME_USELINESPACING;
608*b1cdbd2cSJim Jagielski ++nDestStep;
609*b1cdbd2cSJim Jagielski lDestination[nDestStep] = sFixPath;
610*b1cdbd2cSJim Jagielski lDestination[nDestStep] += PROPERTYNAME_ADDTABLESPACING;
611*b1cdbd2cSJim Jagielski ++nDestStep;
612*b1cdbd2cSJim Jagielski lDestination[nDestStep] = sFixPath;
613*b1cdbd2cSJim Jagielski lDestination[nDestStep] += PROPERTYNAME_USEOBJPOS;
614*b1cdbd2cSJim Jagielski ++nDestStep;
615*b1cdbd2cSJim Jagielski lDestination[nDestStep] = sFixPath;
616*b1cdbd2cSJim Jagielski lDestination[nDestStep] += PROPERTYNAME_USEOURTEXTWRAP;
617*b1cdbd2cSJim Jagielski ++nDestStep;
618*b1cdbd2cSJim Jagielski lDestination[nDestStep] = sFixPath;
619*b1cdbd2cSJim Jagielski lDestination[nDestStep] += PROPERTYNAME_CONSIDERWRAPSTYLE;
620*b1cdbd2cSJim Jagielski ++nDestStep;
621*b1cdbd2cSJim Jagielski lDestination[nDestStep] = sFixPath;
622*b1cdbd2cSJim Jagielski lDestination[nDestStep] += PROPERTYNAME_EXPANDWORDSPACE;
623*b1cdbd2cSJim Jagielski ++nDestStep;
624*b1cdbd2cSJim Jagielski }
625*b1cdbd2cSJim Jagielski }
626*b1cdbd2cSJim Jagielski
627*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
628*b1cdbd2cSJim Jagielski // initialize static member
629*b1cdbd2cSJim Jagielski // DON'T DO IT IN YOUR HEADER!
630*b1cdbd2cSJim Jagielski // see definition for further informations
631*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
632*b1cdbd2cSJim Jagielski SvtCompatibilityOptions_Impl* SvtCompatibilityOptions::m_pDataContainer = NULL;
633*b1cdbd2cSJim Jagielski sal_Int32 SvtCompatibilityOptions::m_nRefCount = 0;
634*b1cdbd2cSJim Jagielski
635*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
636*b1cdbd2cSJim Jagielski // constructor
637*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
SvtCompatibilityOptions()638*b1cdbd2cSJim Jagielski SvtCompatibilityOptions::SvtCompatibilityOptions()
639*b1cdbd2cSJim Jagielski {
640*b1cdbd2cSJim Jagielski // Global access, must be guarded (multithreading!).
641*b1cdbd2cSJim Jagielski MutexGuard aGuard( GetOwnStaticMutex() );
642*b1cdbd2cSJim Jagielski // Increase ouer refcount ...
643*b1cdbd2cSJim Jagielski ++m_nRefCount;
644*b1cdbd2cSJim Jagielski // ... and initialize ouer data container only if it not already exist!
645*b1cdbd2cSJim Jagielski if( m_pDataContainer == NULL )
646*b1cdbd2cSJim Jagielski {
647*b1cdbd2cSJim Jagielski m_pDataContainer = new SvtCompatibilityOptions_Impl;
648*b1cdbd2cSJim Jagielski ItemHolder1::holdConfigItem(E_COMPATIBILITY);
649*b1cdbd2cSJim Jagielski }
650*b1cdbd2cSJim Jagielski }
651*b1cdbd2cSJim Jagielski
652*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
653*b1cdbd2cSJim Jagielski // destructor
654*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
~SvtCompatibilityOptions()655*b1cdbd2cSJim Jagielski SvtCompatibilityOptions::~SvtCompatibilityOptions()
656*b1cdbd2cSJim Jagielski {
657*b1cdbd2cSJim Jagielski // Global access, must be guarded (multithreading!)
658*b1cdbd2cSJim Jagielski MutexGuard aGuard( GetOwnStaticMutex() );
659*b1cdbd2cSJim Jagielski // Decrease ouer refcount.
660*b1cdbd2cSJim Jagielski --m_nRefCount;
661*b1cdbd2cSJim Jagielski // If last instance was deleted ...
662*b1cdbd2cSJim Jagielski // we must destroy ouer static data container!
663*b1cdbd2cSJim Jagielski if( m_nRefCount <= 0 )
664*b1cdbd2cSJim Jagielski {
665*b1cdbd2cSJim Jagielski delete m_pDataContainer;
666*b1cdbd2cSJim Jagielski m_pDataContainer = NULL;
667*b1cdbd2cSJim Jagielski }
668*b1cdbd2cSJim Jagielski }
669*b1cdbd2cSJim Jagielski
670*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
671*b1cdbd2cSJim Jagielski // public method
672*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
Clear()673*b1cdbd2cSJim Jagielski void SvtCompatibilityOptions::Clear()
674*b1cdbd2cSJim Jagielski {
675*b1cdbd2cSJim Jagielski MutexGuard aGuard( GetOwnStaticMutex() );
676*b1cdbd2cSJim Jagielski m_pDataContainer->Clear();
677*b1cdbd2cSJim Jagielski }
678*b1cdbd2cSJim Jagielski
679*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
680*b1cdbd2cSJim Jagielski // public method
681*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
AppendItem(const::rtl::OUString & sName,const::rtl::OUString & sModule,bool bUsePrtMetrics,bool bAddSpacing,bool bAddSpacingAtPages,bool bUseOurTabStops,bool bNoExtLeading,bool bUseLineSpacing,bool bAddTableSpacing,bool bUseObjPos,bool bUseOurTextWrapping,bool bConsiderWrappingStyle,bool bExpandWordSpace)682*b1cdbd2cSJim Jagielski void SvtCompatibilityOptions::AppendItem( const ::rtl::OUString& sName,
683*b1cdbd2cSJim Jagielski const ::rtl::OUString& sModule,
684*b1cdbd2cSJim Jagielski bool bUsePrtMetrics,
685*b1cdbd2cSJim Jagielski bool bAddSpacing,
686*b1cdbd2cSJim Jagielski bool bAddSpacingAtPages,
687*b1cdbd2cSJim Jagielski bool bUseOurTabStops,
688*b1cdbd2cSJim Jagielski bool bNoExtLeading,
689*b1cdbd2cSJim Jagielski bool bUseLineSpacing,
690*b1cdbd2cSJim Jagielski bool bAddTableSpacing,
691*b1cdbd2cSJim Jagielski bool bUseObjPos,
692*b1cdbd2cSJim Jagielski bool bUseOurTextWrapping,
693*b1cdbd2cSJim Jagielski bool bConsiderWrappingStyle,
694*b1cdbd2cSJim Jagielski bool bExpandWordSpace )
695*b1cdbd2cSJim Jagielski {
696*b1cdbd2cSJim Jagielski MutexGuard aGuard( GetOwnStaticMutex() );
697*b1cdbd2cSJim Jagielski m_pDataContainer->AppendItem(
698*b1cdbd2cSJim Jagielski sName, sModule, bUsePrtMetrics, bAddSpacing,
699*b1cdbd2cSJim Jagielski bAddSpacingAtPages, bUseOurTabStops, bNoExtLeading,
700*b1cdbd2cSJim Jagielski bUseLineSpacing, bAddTableSpacing, bUseObjPos,
701*b1cdbd2cSJim Jagielski bUseOurTextWrapping, bConsiderWrappingStyle, bExpandWordSpace );
702*b1cdbd2cSJim Jagielski }
703*b1cdbd2cSJim Jagielski
IsUsePrtDevice() const704*b1cdbd2cSJim Jagielski bool SvtCompatibilityOptions::IsUsePrtDevice() const
705*b1cdbd2cSJim Jagielski {
706*b1cdbd2cSJim Jagielski MutexGuard aGuard( GetOwnStaticMutex() );
707*b1cdbd2cSJim Jagielski return m_pDataContainer->IsUsePrtDevice();
708*b1cdbd2cSJim Jagielski }
709*b1cdbd2cSJim Jagielski
IsAddSpacing() const710*b1cdbd2cSJim Jagielski bool SvtCompatibilityOptions::IsAddSpacing() const
711*b1cdbd2cSJim Jagielski {
712*b1cdbd2cSJim Jagielski MutexGuard aGuard( GetOwnStaticMutex() );
713*b1cdbd2cSJim Jagielski return m_pDataContainer->IsAddSpacing();
714*b1cdbd2cSJim Jagielski }
715*b1cdbd2cSJim Jagielski
IsAddSpacingAtPages() const716*b1cdbd2cSJim Jagielski bool SvtCompatibilityOptions::IsAddSpacingAtPages() const
717*b1cdbd2cSJim Jagielski {
718*b1cdbd2cSJim Jagielski MutexGuard aGuard( GetOwnStaticMutex() );
719*b1cdbd2cSJim Jagielski return m_pDataContainer->IsAddSpacingAtPages();
720*b1cdbd2cSJim Jagielski }
721*b1cdbd2cSJim Jagielski
IsUseOurTabStops() const722*b1cdbd2cSJim Jagielski bool SvtCompatibilityOptions::IsUseOurTabStops() const
723*b1cdbd2cSJim Jagielski {
724*b1cdbd2cSJim Jagielski MutexGuard aGuard( GetOwnStaticMutex() );
725*b1cdbd2cSJim Jagielski return m_pDataContainer->IsUseOurTabStops();
726*b1cdbd2cSJim Jagielski }
727*b1cdbd2cSJim Jagielski
IsNoExtLeading() const728*b1cdbd2cSJim Jagielski bool SvtCompatibilityOptions::IsNoExtLeading() const
729*b1cdbd2cSJim Jagielski {
730*b1cdbd2cSJim Jagielski MutexGuard aGuard( GetOwnStaticMutex() );
731*b1cdbd2cSJim Jagielski return m_pDataContainer->IsNoExtLeading();
732*b1cdbd2cSJim Jagielski }
733*b1cdbd2cSJim Jagielski
IsUseLineSpacing() const734*b1cdbd2cSJim Jagielski bool SvtCompatibilityOptions::IsUseLineSpacing() const
735*b1cdbd2cSJim Jagielski {
736*b1cdbd2cSJim Jagielski MutexGuard aGuard( GetOwnStaticMutex() );
737*b1cdbd2cSJim Jagielski return m_pDataContainer->IsUseLineSpacing();
738*b1cdbd2cSJim Jagielski }
739*b1cdbd2cSJim Jagielski
IsAddTableSpacing() const740*b1cdbd2cSJim Jagielski bool SvtCompatibilityOptions::IsAddTableSpacing() const
741*b1cdbd2cSJim Jagielski {
742*b1cdbd2cSJim Jagielski MutexGuard aGuard( GetOwnStaticMutex() );
743*b1cdbd2cSJim Jagielski return m_pDataContainer->IsAddTableSpacing();
744*b1cdbd2cSJim Jagielski }
745*b1cdbd2cSJim Jagielski
IsUseObjectPositioning() const746*b1cdbd2cSJim Jagielski bool SvtCompatibilityOptions::IsUseObjectPositioning() const
747*b1cdbd2cSJim Jagielski {
748*b1cdbd2cSJim Jagielski MutexGuard aGuard( GetOwnStaticMutex() );
749*b1cdbd2cSJim Jagielski return m_pDataContainer->IsUseObjPos();
750*b1cdbd2cSJim Jagielski }
751*b1cdbd2cSJim Jagielski
IsUseOurTextWrapping() const752*b1cdbd2cSJim Jagielski bool SvtCompatibilityOptions::IsUseOurTextWrapping() const
753*b1cdbd2cSJim Jagielski {
754*b1cdbd2cSJim Jagielski MutexGuard aGuard( GetOwnStaticMutex() );
755*b1cdbd2cSJim Jagielski return m_pDataContainer->IsUseOurTextWrapping();
756*b1cdbd2cSJim Jagielski }
757*b1cdbd2cSJim Jagielski
IsConsiderWrappingStyle() const758*b1cdbd2cSJim Jagielski bool SvtCompatibilityOptions::IsConsiderWrappingStyle() const
759*b1cdbd2cSJim Jagielski {
760*b1cdbd2cSJim Jagielski MutexGuard aGuard( GetOwnStaticMutex() );
761*b1cdbd2cSJim Jagielski return m_pDataContainer->IsConsiderWrappingStyle();
762*b1cdbd2cSJim Jagielski }
763*b1cdbd2cSJim Jagielski
IsExpandWordSpace() const764*b1cdbd2cSJim Jagielski bool SvtCompatibilityOptions::IsExpandWordSpace() const
765*b1cdbd2cSJim Jagielski {
766*b1cdbd2cSJim Jagielski MutexGuard aGuard( GetOwnStaticMutex() );
767*b1cdbd2cSJim Jagielski return m_pDataContainer->IsExpandWordSpace();
768*b1cdbd2cSJim Jagielski }
769*b1cdbd2cSJim Jagielski
GetList() const770*b1cdbd2cSJim Jagielski Sequence< Sequence< PropertyValue > > SvtCompatibilityOptions::GetList() const
771*b1cdbd2cSJim Jagielski {
772*b1cdbd2cSJim Jagielski MutexGuard aGuard( GetOwnStaticMutex() );
773*b1cdbd2cSJim Jagielski return m_pDataContainer->GetList();
774*b1cdbd2cSJim Jagielski }
775*b1cdbd2cSJim Jagielski
776*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
777*b1cdbd2cSJim Jagielski // private method
778*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
GetOwnStaticMutex()779*b1cdbd2cSJim Jagielski Mutex& SvtCompatibilityOptions::GetOwnStaticMutex()
780*b1cdbd2cSJim Jagielski {
781*b1cdbd2cSJim Jagielski // Initialize static mutex only for one time!
782*b1cdbd2cSJim Jagielski static Mutex* pMutex = NULL;
783*b1cdbd2cSJim Jagielski // If these method first called (Mutex not already exist!) ...
784*b1cdbd2cSJim Jagielski if( pMutex == NULL )
785*b1cdbd2cSJim Jagielski {
786*b1cdbd2cSJim Jagielski // ... we must create a new one. Protect follow code with the global mutex -
787*b1cdbd2cSJim Jagielski // It must be - we create a static variable!
788*b1cdbd2cSJim Jagielski MutexGuard aGuard( Mutex::getGlobalMutex() );
789*b1cdbd2cSJim Jagielski // We must check our pointer again - because it can be that another instance of ouer class will be fastr then these!
790*b1cdbd2cSJim Jagielski if( pMutex == NULL )
791*b1cdbd2cSJim Jagielski {
792*b1cdbd2cSJim Jagielski // Create the new mutex and set it for return on static variable.
793*b1cdbd2cSJim Jagielski static Mutex aMutex;
794*b1cdbd2cSJim Jagielski pMutex = &aMutex;
795*b1cdbd2cSJim Jagielski }
796*b1cdbd2cSJim Jagielski }
797*b1cdbd2cSJim Jagielski // Return new created or already existing mutex object.
798*b1cdbd2cSJim Jagielski return *pMutex;
799*b1cdbd2cSJim Jagielski }
800*b1cdbd2cSJim Jagielski
801