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 #ifndef GCC
27*b1cdbd2cSJim Jagielski #endif
28*b1cdbd2cSJim Jagielski
29*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
30*b1cdbd2cSJim Jagielski // includes
31*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
32*b1cdbd2cSJim Jagielski
33*b1cdbd2cSJim Jagielski #include <unotools/startoptions.hxx>
34*b1cdbd2cSJim Jagielski #include <unotools/configmgr.hxx>
35*b1cdbd2cSJim Jagielski #include <unotools/configitem.hxx>
36*b1cdbd2cSJim Jagielski #include <tools/debug.hxx>
37*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/Any.hxx>
38*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/Sequence.hxx>
39*b1cdbd2cSJim Jagielski
40*b1cdbd2cSJim Jagielski #include <rtl/logfile.hxx>
41*b1cdbd2cSJim Jagielski #include "itemholder1.hxx"
42*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
43*b1cdbd2cSJim Jagielski // namespaces
44*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
45*b1cdbd2cSJim Jagielski
46*b1cdbd2cSJim Jagielski using namespace ::utl ;
47*b1cdbd2cSJim Jagielski using namespace ::rtl ;
48*b1cdbd2cSJim Jagielski using namespace ::osl ;
49*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno ;
50*b1cdbd2cSJim Jagielski
51*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
52*b1cdbd2cSJim Jagielski // const
53*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
54*b1cdbd2cSJim Jagielski
55*b1cdbd2cSJim Jagielski #define DEFAULT_SHOWINTRO sal_True
56*b1cdbd2cSJim Jagielski #define DEFAULT_CONNECTIONURL OUString()
57*b1cdbd2cSJim Jagielski
58*b1cdbd2cSJim Jagielski #define ROOTNODE_START OUString(RTL_CONSTASCII_USTRINGPARAM("Setup/Office" ))
59*b1cdbd2cSJim Jagielski #define PROPERTYNAME_SHOWINTRO OUString(RTL_CONSTASCII_USTRINGPARAM("ooSetupShowIntro" ))
60*b1cdbd2cSJim Jagielski #define PROPERTYNAME_CONNECTIONURL OUString(RTL_CONSTASCII_USTRINGPARAM("ooSetupConnectionURL" ))
61*b1cdbd2cSJim Jagielski
62*b1cdbd2cSJim Jagielski #define PROPERTYHANDLE_SHOWINTRO 0
63*b1cdbd2cSJim Jagielski #define PROPERTYHANDLE_CONNECTIONURL 1
64*b1cdbd2cSJim Jagielski
65*b1cdbd2cSJim Jagielski #define PROPERTYCOUNT 2
66*b1cdbd2cSJim Jagielski
67*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
68*b1cdbd2cSJim Jagielski // private declarations!
69*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
70*b1cdbd2cSJim Jagielski
71*b1cdbd2cSJim Jagielski class SvtStartOptions_Impl : public ConfigItem
72*b1cdbd2cSJim Jagielski {
73*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------------------------------------------
74*b1cdbd2cSJim Jagielski // public methods
75*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------------------------------------------
76*b1cdbd2cSJim Jagielski
77*b1cdbd2cSJim Jagielski public:
78*b1cdbd2cSJim Jagielski
79*b1cdbd2cSJim Jagielski //---------------------------------------------------------------------------------------------------------
80*b1cdbd2cSJim Jagielski // constructor / destructor
81*b1cdbd2cSJim Jagielski //---------------------------------------------------------------------------------------------------------
82*b1cdbd2cSJim Jagielski
83*b1cdbd2cSJim Jagielski SvtStartOptions_Impl();
84*b1cdbd2cSJim Jagielski ~SvtStartOptions_Impl();
85*b1cdbd2cSJim Jagielski
86*b1cdbd2cSJim Jagielski //---------------------------------------------------------------------------------------------------------
87*b1cdbd2cSJim Jagielski // overloaded methods of baseclass
88*b1cdbd2cSJim Jagielski //---------------------------------------------------------------------------------------------------------
89*b1cdbd2cSJim Jagielski
90*b1cdbd2cSJim Jagielski /*-****************************************************************************************************//**
91*b1cdbd2cSJim Jagielski @short called for notify of configmanager
92*b1cdbd2cSJim Jagielski @descr These method is called from the ConfigManager before application ends or from the
93*b1cdbd2cSJim Jagielski PropertyChangeListener if the sub tree broadcasts changes. You must update your
94*b1cdbd2cSJim Jagielski internal values.
95*b1cdbd2cSJim Jagielski
96*b1cdbd2cSJim Jagielski @ATTENTION We don't implement these method - because we support readonly values at runtime only!
97*b1cdbd2cSJim Jagielski
98*b1cdbd2cSJim Jagielski @seealso baseclass ConfigItem
99*b1cdbd2cSJim Jagielski
100*b1cdbd2cSJim Jagielski @param "seqPropertyNames" is the list of properties which should be updated.
101*b1cdbd2cSJim Jagielski @return -
102*b1cdbd2cSJim Jagielski
103*b1cdbd2cSJim Jagielski @onerror -
104*b1cdbd2cSJim Jagielski *//*-*****************************************************************************************************/
105*b1cdbd2cSJim Jagielski
106*b1cdbd2cSJim Jagielski virtual void Notify( const Sequence< OUString >& seqPropertyNames );
107*b1cdbd2cSJim Jagielski
108*b1cdbd2cSJim Jagielski /*-****************************************************************************************************//**
109*b1cdbd2cSJim Jagielski @short write changes to configuration
110*b1cdbd2cSJim Jagielski @descr These method writes the changed values into the sub tree
111*b1cdbd2cSJim Jagielski and should always called in our destructor to guarantee consistency of config data.
112*b1cdbd2cSJim Jagielski
113*b1cdbd2cSJim Jagielski @ATTENTION We don't implement these method - because we support readonly values at runtime only!
114*b1cdbd2cSJim Jagielski
115*b1cdbd2cSJim Jagielski @seealso baseclass ConfigItem
116*b1cdbd2cSJim Jagielski
117*b1cdbd2cSJim Jagielski @param -
118*b1cdbd2cSJim Jagielski @return -
119*b1cdbd2cSJim Jagielski
120*b1cdbd2cSJim Jagielski @onerror -
121*b1cdbd2cSJim Jagielski *//*-*****************************************************************************************************/
122*b1cdbd2cSJim Jagielski
123*b1cdbd2cSJim Jagielski virtual void Commit();
124*b1cdbd2cSJim Jagielski
125*b1cdbd2cSJim Jagielski //---------------------------------------------------------------------------------------------------------
126*b1cdbd2cSJim Jagielski // public interface
127*b1cdbd2cSJim Jagielski //---------------------------------------------------------------------------------------------------------
128*b1cdbd2cSJim Jagielski
129*b1cdbd2cSJim Jagielski /*-****************************************************************************************************//**
130*b1cdbd2cSJim Jagielski @short access method to get internal values
131*b1cdbd2cSJim Jagielski @descr These method give us a chance to regulate acces to ouer internal values.
132*b1cdbd2cSJim Jagielski It's not used in the moment - but it's possible for the feature!
133*b1cdbd2cSJim Jagielski
134*b1cdbd2cSJim Jagielski @seealso -
135*b1cdbd2cSJim Jagielski
136*b1cdbd2cSJim Jagielski @param -
137*b1cdbd2cSJim Jagielski @return -
138*b1cdbd2cSJim Jagielski
139*b1cdbd2cSJim Jagielski @onerror -
140*b1cdbd2cSJim Jagielski *//*-*****************************************************************************************************/
141*b1cdbd2cSJim Jagielski
142*b1cdbd2cSJim Jagielski sal_Bool IsIntroEnabled ( ) const ;
143*b1cdbd2cSJim Jagielski void EnableIntro ( sal_Bool bState ) ;
144*b1cdbd2cSJim Jagielski OUString GetConnectionURL( ) const ;
145*b1cdbd2cSJim Jagielski void SetConnectionURL( const OUString& sURL ) ;
146*b1cdbd2cSJim Jagielski
147*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------------------------------------------
148*b1cdbd2cSJim Jagielski // private methods
149*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------------------------------------------
150*b1cdbd2cSJim Jagielski
151*b1cdbd2cSJim Jagielski private:
152*b1cdbd2cSJim Jagielski
153*b1cdbd2cSJim Jagielski /*-****************************************************************************************************//**
154*b1cdbd2cSJim Jagielski @short return list of fix key names of ouer configuration management which represent oue module tree
155*b1cdbd2cSJim Jagielski @descr These methods return a static const list of key names. We need it to get needed values from our
156*b1cdbd2cSJim Jagielski configuration management. We return well known key names only - because the "UserData" node
157*b1cdbd2cSJim Jagielski is handled in a special way!
158*b1cdbd2cSJim Jagielski
159*b1cdbd2cSJim Jagielski @seealso -
160*b1cdbd2cSJim Jagielski
161*b1cdbd2cSJim Jagielski @param -
162*b1cdbd2cSJim Jagielski @return A list of needed configuration keys is returned.
163*b1cdbd2cSJim Jagielski
164*b1cdbd2cSJim Jagielski @onerror -
165*b1cdbd2cSJim Jagielski *//*-*****************************************************************************************************/
166*b1cdbd2cSJim Jagielski
167*b1cdbd2cSJim Jagielski static Sequence< OUString > impl_GetPropertyNames();
168*b1cdbd2cSJim Jagielski
169*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------------------------------------------
170*b1cdbd2cSJim Jagielski // private member
171*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------------------------------------------
172*b1cdbd2cSJim Jagielski
173*b1cdbd2cSJim Jagielski private:
174*b1cdbd2cSJim Jagielski
175*b1cdbd2cSJim Jagielski sal_Bool m_bShowIntro ; /// cache "ShowIntro" of Start section
176*b1cdbd2cSJim Jagielski OUString m_sConnectionURL ; /// cache "Connection" of Start section
177*b1cdbd2cSJim Jagielski };
178*b1cdbd2cSJim Jagielski
179*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
180*b1cdbd2cSJim Jagielski // definitions
181*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
182*b1cdbd2cSJim Jagielski
183*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
184*b1cdbd2cSJim Jagielski // constructor
185*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
SvtStartOptions_Impl()186*b1cdbd2cSJim Jagielski SvtStartOptions_Impl::SvtStartOptions_Impl()
187*b1cdbd2cSJim Jagielski // Init baseclasses first
188*b1cdbd2cSJim Jagielski : ConfigItem ( ROOTNODE_START )
189*b1cdbd2cSJim Jagielski // Init member then.
190*b1cdbd2cSJim Jagielski , m_bShowIntro ( DEFAULT_SHOWINTRO )
191*b1cdbd2cSJim Jagielski {
192*b1cdbd2cSJim Jagielski // Use our static list of configuration keys to get his values.
193*b1cdbd2cSJim Jagielski Sequence< OUString > seqNames = impl_GetPropertyNames();
194*b1cdbd2cSJim Jagielski Sequence< Any > seqValues = GetProperties( seqNames ) ;
195*b1cdbd2cSJim Jagielski
196*b1cdbd2cSJim Jagielski // Safe impossible cases.
197*b1cdbd2cSJim Jagielski // We need values from ALL configuration keys.
198*b1cdbd2cSJim Jagielski // Follow assignment use order of values in relation to our list of key names!
199*b1cdbd2cSJim Jagielski DBG_ASSERT( !(seqNames.getLength()!=seqValues.getLength()), "SvtStartOptions_Impl::SvtStartOptions_Impl()\nI miss some values of configuration keys!\n" );
200*b1cdbd2cSJim Jagielski
201*b1cdbd2cSJim Jagielski // Copy values from list in right order to ouer internal member.
202*b1cdbd2cSJim Jagielski sal_Int32 nPropertyCount = seqValues.getLength() ;
203*b1cdbd2cSJim Jagielski sal_Int32 nProperty = 0 ;
204*b1cdbd2cSJim Jagielski for( nProperty=0; nProperty<nPropertyCount; ++nProperty )
205*b1cdbd2cSJim Jagielski {
206*b1cdbd2cSJim Jagielski // Safe impossible cases.
207*b1cdbd2cSJim Jagielski // Check any for valid value.
208*b1cdbd2cSJim Jagielski DBG_ASSERT( !(seqValues[nProperty].hasValue()==sal_False), "SvtStartOptions_Impl::SvtStartOptions_Impl()\nInvalid property value for property detected!\n" );
209*b1cdbd2cSJim Jagielski switch( nProperty )
210*b1cdbd2cSJim Jagielski {
211*b1cdbd2cSJim Jagielski case PROPERTYHANDLE_SHOWINTRO : {
212*b1cdbd2cSJim Jagielski DBG_ASSERT(!(seqValues[nProperty].getValueTypeClass()!=TypeClass_BOOLEAN), "SvtStartOptions_Impl::SvtStartOptions_Impl()\nWho has changed the value type of \"Office.Common\\Start\\ShowIntro\"?" );
213*b1cdbd2cSJim Jagielski seqValues[nProperty] >>= m_bShowIntro;
214*b1cdbd2cSJim Jagielski }
215*b1cdbd2cSJim Jagielski break;
216*b1cdbd2cSJim Jagielski
217*b1cdbd2cSJim Jagielski case PROPERTYHANDLE_CONNECTIONURL : {
218*b1cdbd2cSJim Jagielski DBG_ASSERT(!(seqValues[nProperty].getValueTypeClass()!=TypeClass_STRING), "SvtStartOptions_Impl::SvtStartOptions_Impl()\nWho has changed the value type of \"Office.Common\\Start\\Connection\"?" );
219*b1cdbd2cSJim Jagielski seqValues[nProperty] >>= m_sConnectionURL;
220*b1cdbd2cSJim Jagielski }
221*b1cdbd2cSJim Jagielski break;
222*b1cdbd2cSJim Jagielski }
223*b1cdbd2cSJim Jagielski }
224*b1cdbd2cSJim Jagielski
225*b1cdbd2cSJim Jagielski // Don't enable notification mechanism of ouer baseclass!
226*b1cdbd2cSJim Jagielski // We support readonly variables in the moment.
227*b1cdbd2cSJim Jagielski }
228*b1cdbd2cSJim Jagielski
229*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
230*b1cdbd2cSJim Jagielski // destructor
231*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
~SvtStartOptions_Impl()232*b1cdbd2cSJim Jagielski SvtStartOptions_Impl::~SvtStartOptions_Impl()
233*b1cdbd2cSJim Jagielski {
234*b1cdbd2cSJim Jagielski // We must save our current values .. if user forget it!
235*b1cdbd2cSJim Jagielski if( IsModified() == sal_True )
236*b1cdbd2cSJim Jagielski {
237*b1cdbd2cSJim Jagielski Commit();
238*b1cdbd2cSJim Jagielski }
239*b1cdbd2cSJim Jagielski }
240*b1cdbd2cSJim Jagielski
241*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
242*b1cdbd2cSJim Jagielski // public method
243*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
Notify(const Sequence<OUString> & seqPropertyNames)244*b1cdbd2cSJim Jagielski void SvtStartOptions_Impl::Notify( const Sequence< OUString >& seqPropertyNames )
245*b1cdbd2cSJim Jagielski {
246*b1cdbd2cSJim Jagielski // Use given list of updated properties to get his values from configuration directly!
247*b1cdbd2cSJim Jagielski Sequence< Any > seqValues = GetProperties( seqPropertyNames );
248*b1cdbd2cSJim Jagielski // Safe impossible cases.
249*b1cdbd2cSJim Jagielski // We need values from ALL notified configuration keys.
250*b1cdbd2cSJim Jagielski DBG_ASSERT( !(seqPropertyNames.getLength()!=seqValues.getLength()), "SvtStartOptions_Impl::Notify()\nI miss some values of configuration keys!\n" );
251*b1cdbd2cSJim Jagielski // Step over list of property names and get right value from coreesponding value list to set it on internal members!
252*b1cdbd2cSJim Jagielski sal_Int32 nCount = seqPropertyNames.getLength();
253*b1cdbd2cSJim Jagielski for( sal_Int32 nProperty=0; nProperty<nCount; ++nProperty )
254*b1cdbd2cSJim Jagielski {
255*b1cdbd2cSJim Jagielski if( seqPropertyNames[nProperty] == PROPERTYNAME_SHOWINTRO )
256*b1cdbd2cSJim Jagielski {
257*b1cdbd2cSJim Jagielski DBG_ASSERT(!(seqValues[nProperty].getValueTypeClass()!=TypeClass_BOOLEAN), "SvtStartOptions_Impl::Notify()\nWho has changed the value type of \"Office.Common\\Start\\ShowIntro\"?" );
258*b1cdbd2cSJim Jagielski seqValues[nProperty] >>= m_bShowIntro;
259*b1cdbd2cSJim Jagielski }
260*b1cdbd2cSJim Jagielski else
261*b1cdbd2cSJim Jagielski if( seqPropertyNames[nProperty] == PROPERTYNAME_CONNECTIONURL )
262*b1cdbd2cSJim Jagielski {
263*b1cdbd2cSJim Jagielski DBG_ASSERT(!(seqValues[nProperty].getValueTypeClass()!=TypeClass_STRING), "SvtStartOptions_Impl::Notify()\nWho has changed the value type of \"Office.Common\\Start\\Connection\"?" );
264*b1cdbd2cSJim Jagielski seqValues[nProperty] >>= m_sConnectionURL;
265*b1cdbd2cSJim Jagielski }
266*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 1
267*b1cdbd2cSJim Jagielski else DBG_ASSERT( sal_False, "SvtStartOptions_Impl::Notify()\nUnkown property detected ... I can't handle these!\n" );
268*b1cdbd2cSJim Jagielski #endif
269*b1cdbd2cSJim Jagielski }
270*b1cdbd2cSJim Jagielski }
271*b1cdbd2cSJim Jagielski
272*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
273*b1cdbd2cSJim Jagielski // public method
274*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
Commit()275*b1cdbd2cSJim Jagielski void SvtStartOptions_Impl::Commit()
276*b1cdbd2cSJim Jagielski {
277*b1cdbd2cSJim Jagielski // Get names of supported properties, create a list for values and copy current values to it.
278*b1cdbd2cSJim Jagielski Sequence< OUString > seqNames = impl_GetPropertyNames();
279*b1cdbd2cSJim Jagielski sal_Int32 nCount = seqNames.getLength();
280*b1cdbd2cSJim Jagielski Sequence< Any > seqValues ( nCount );
281*b1cdbd2cSJim Jagielski for( sal_Int32 nProperty=0; nProperty<nCount; ++nProperty )
282*b1cdbd2cSJim Jagielski {
283*b1cdbd2cSJim Jagielski switch( nProperty )
284*b1cdbd2cSJim Jagielski {
285*b1cdbd2cSJim Jagielski case PROPERTYHANDLE_SHOWINTRO : {
286*b1cdbd2cSJim Jagielski seqValues[nProperty] <<= m_bShowIntro;
287*b1cdbd2cSJim Jagielski }
288*b1cdbd2cSJim Jagielski break;
289*b1cdbd2cSJim Jagielski case PROPERTYHANDLE_CONNECTIONURL : {
290*b1cdbd2cSJim Jagielski seqValues[nProperty] <<= m_sConnectionURL;
291*b1cdbd2cSJim Jagielski }
292*b1cdbd2cSJim Jagielski break;
293*b1cdbd2cSJim Jagielski }
294*b1cdbd2cSJim Jagielski }
295*b1cdbd2cSJim Jagielski // Set properties in configuration.
296*b1cdbd2cSJim Jagielski PutProperties( seqNames, seqValues );
297*b1cdbd2cSJim Jagielski }
298*b1cdbd2cSJim Jagielski
299*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
300*b1cdbd2cSJim Jagielski // public method
301*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
IsIntroEnabled() const302*b1cdbd2cSJim Jagielski sal_Bool SvtStartOptions_Impl::IsIntroEnabled() const
303*b1cdbd2cSJim Jagielski {
304*b1cdbd2cSJim Jagielski return m_bShowIntro;
305*b1cdbd2cSJim Jagielski }
306*b1cdbd2cSJim Jagielski
307*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
308*b1cdbd2cSJim Jagielski // public method
309*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
EnableIntro(sal_Bool bState)310*b1cdbd2cSJim Jagielski void SvtStartOptions_Impl::EnableIntro( sal_Bool bState )
311*b1cdbd2cSJim Jagielski {
312*b1cdbd2cSJim Jagielski m_bShowIntro = bState;
313*b1cdbd2cSJim Jagielski SetModified();
314*b1cdbd2cSJim Jagielski }
315*b1cdbd2cSJim Jagielski
316*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
317*b1cdbd2cSJim Jagielski // public method
318*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
GetConnectionURL() const319*b1cdbd2cSJim Jagielski OUString SvtStartOptions_Impl::GetConnectionURL() const
320*b1cdbd2cSJim Jagielski {
321*b1cdbd2cSJim Jagielski return m_sConnectionURL;
322*b1cdbd2cSJim Jagielski }
323*b1cdbd2cSJim Jagielski
324*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
325*b1cdbd2cSJim Jagielski // public method
326*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
SetConnectionURL(const OUString & sURL)327*b1cdbd2cSJim Jagielski void SvtStartOptions_Impl::SetConnectionURL( const OUString& sURL )
328*b1cdbd2cSJim Jagielski {
329*b1cdbd2cSJim Jagielski m_sConnectionURL = sURL;
330*b1cdbd2cSJim Jagielski SetModified();
331*b1cdbd2cSJim Jagielski }
332*b1cdbd2cSJim Jagielski
333*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
334*b1cdbd2cSJim Jagielski // private method
335*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
impl_GetPropertyNames()336*b1cdbd2cSJim Jagielski Sequence< OUString > SvtStartOptions_Impl::impl_GetPropertyNames()
337*b1cdbd2cSJim Jagielski {
338*b1cdbd2cSJim Jagielski // Build static list of configuration key names.
339*b1cdbd2cSJim Jagielski static const OUString pProperties[] =
340*b1cdbd2cSJim Jagielski {
341*b1cdbd2cSJim Jagielski PROPERTYNAME_SHOWINTRO ,
342*b1cdbd2cSJim Jagielski PROPERTYNAME_CONNECTIONURL ,
343*b1cdbd2cSJim Jagielski };
344*b1cdbd2cSJim Jagielski // Initialize return sequence with these list ...
345*b1cdbd2cSJim Jagielski static const Sequence< OUString > seqPropertyNames( pProperties, PROPERTYCOUNT );
346*b1cdbd2cSJim Jagielski // ... and return it.
347*b1cdbd2cSJim Jagielski return seqPropertyNames;
348*b1cdbd2cSJim Jagielski }
349*b1cdbd2cSJim Jagielski
350*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
351*b1cdbd2cSJim Jagielski // initialize static member
352*b1cdbd2cSJim Jagielski // DON'T DO IT IN YOUR HEADER!
353*b1cdbd2cSJim Jagielski // see definition for further informations
354*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
355*b1cdbd2cSJim Jagielski SvtStartOptions_Impl* SvtStartOptions::m_pDataContainer = NULL ;
356*b1cdbd2cSJim Jagielski sal_Int32 SvtStartOptions::m_nRefCount = 0 ;
357*b1cdbd2cSJim Jagielski
358*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
359*b1cdbd2cSJim Jagielski // constructor
360*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
SvtStartOptions()361*b1cdbd2cSJim Jagielski SvtStartOptions::SvtStartOptions()
362*b1cdbd2cSJim Jagielski {
363*b1cdbd2cSJim Jagielski // Global access, must be guarded (multithreading!).
364*b1cdbd2cSJim Jagielski MutexGuard aGuard( GetOwnStaticMutex() );
365*b1cdbd2cSJim Jagielski // Increase ouer refcount ...
366*b1cdbd2cSJim Jagielski ++m_nRefCount;
367*b1cdbd2cSJim Jagielski // ... and initialize ouer data container only if it not already!
368*b1cdbd2cSJim Jagielski if( m_pDataContainer == NULL )
369*b1cdbd2cSJim Jagielski {
370*b1cdbd2cSJim Jagielski RTL_LOGFILE_CONTEXT(aLog, "unotools ( ??? ) ::SvtStartOptions_Impl::ctor()");
371*b1cdbd2cSJim Jagielski m_pDataContainer = new SvtStartOptions_Impl();
372*b1cdbd2cSJim Jagielski
373*b1cdbd2cSJim Jagielski ItemHolder1::holdConfigItem(E_STARTOPTIONS);
374*b1cdbd2cSJim Jagielski }
375*b1cdbd2cSJim Jagielski }
376*b1cdbd2cSJim Jagielski
377*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
378*b1cdbd2cSJim Jagielski // destructor
379*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
~SvtStartOptions()380*b1cdbd2cSJim Jagielski SvtStartOptions::~SvtStartOptions()
381*b1cdbd2cSJim Jagielski {
382*b1cdbd2cSJim Jagielski // Global access, must be guarded (multithreading!)
383*b1cdbd2cSJim Jagielski MutexGuard aGuard( GetOwnStaticMutex() );
384*b1cdbd2cSJim Jagielski // Decrease ouer refcount.
385*b1cdbd2cSJim Jagielski --m_nRefCount;
386*b1cdbd2cSJim Jagielski // If last instance was deleted ...
387*b1cdbd2cSJim Jagielski // we must destroy ouer static data container!
388*b1cdbd2cSJim Jagielski if( m_nRefCount <= 0 )
389*b1cdbd2cSJim Jagielski {
390*b1cdbd2cSJim Jagielski delete m_pDataContainer;
391*b1cdbd2cSJim Jagielski m_pDataContainer = NULL;
392*b1cdbd2cSJim Jagielski }
393*b1cdbd2cSJim Jagielski }
394*b1cdbd2cSJim Jagielski
395*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
396*b1cdbd2cSJim Jagielski // public method
397*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
IsIntroEnabled() const398*b1cdbd2cSJim Jagielski sal_Bool SvtStartOptions::IsIntroEnabled() const
399*b1cdbd2cSJim Jagielski {
400*b1cdbd2cSJim Jagielski MutexGuard aGuard( GetOwnStaticMutex() );
401*b1cdbd2cSJim Jagielski return m_pDataContainer->IsIntroEnabled();
402*b1cdbd2cSJim Jagielski }
403*b1cdbd2cSJim Jagielski
404*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
405*b1cdbd2cSJim Jagielski // public method
406*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
EnableIntro(sal_Bool bState)407*b1cdbd2cSJim Jagielski void SvtStartOptions::EnableIntro( sal_Bool bState )
408*b1cdbd2cSJim Jagielski {
409*b1cdbd2cSJim Jagielski MutexGuard aGuard( GetOwnStaticMutex() );
410*b1cdbd2cSJim Jagielski m_pDataContainer->EnableIntro( bState );
411*b1cdbd2cSJim Jagielski }
412*b1cdbd2cSJim Jagielski
413*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
414*b1cdbd2cSJim Jagielski // public method
415*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
GetConnectionURL() const416*b1cdbd2cSJim Jagielski OUString SvtStartOptions::GetConnectionURL() const
417*b1cdbd2cSJim Jagielski {
418*b1cdbd2cSJim Jagielski MutexGuard aGuard( GetOwnStaticMutex() );
419*b1cdbd2cSJim Jagielski return m_pDataContainer->GetConnectionURL();
420*b1cdbd2cSJim Jagielski }
421*b1cdbd2cSJim Jagielski
422*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
423*b1cdbd2cSJim Jagielski // public method
424*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
SetConnectionURL(const OUString & sURL)425*b1cdbd2cSJim Jagielski void SvtStartOptions::SetConnectionURL( const OUString& sURL )
426*b1cdbd2cSJim Jagielski {
427*b1cdbd2cSJim Jagielski MutexGuard aGuard( GetOwnStaticMutex() );
428*b1cdbd2cSJim Jagielski m_pDataContainer->SetConnectionURL( sURL );
429*b1cdbd2cSJim Jagielski }
430*b1cdbd2cSJim Jagielski
431*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
432*b1cdbd2cSJim Jagielski // private method
433*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
GetOwnStaticMutex()434*b1cdbd2cSJim Jagielski Mutex& SvtStartOptions::GetOwnStaticMutex()
435*b1cdbd2cSJim Jagielski {
436*b1cdbd2cSJim Jagielski // Initialize static mutex only for one time!
437*b1cdbd2cSJim Jagielski static Mutex* pMutex = NULL;
438*b1cdbd2cSJim Jagielski // If these method first called (Mutex not already exist!) ...
439*b1cdbd2cSJim Jagielski if( pMutex == NULL )
440*b1cdbd2cSJim Jagielski {
441*b1cdbd2cSJim Jagielski // ... we must create a new one. Protect follow code with the global mutex -
442*b1cdbd2cSJim Jagielski // It must be - we create a static variable!
443*b1cdbd2cSJim Jagielski MutexGuard aGuard( Mutex::getGlobalMutex() );
444*b1cdbd2cSJim Jagielski // We must check our pointer again - because it can be that another instance of ouer class will be fastr then these!
445*b1cdbd2cSJim Jagielski if( pMutex == NULL )
446*b1cdbd2cSJim Jagielski {
447*b1cdbd2cSJim Jagielski // Create the new mutex and set it for return on static variable.
448*b1cdbd2cSJim Jagielski static Mutex aMutex;
449*b1cdbd2cSJim Jagielski pMutex = &aMutex;
450*b1cdbd2cSJim Jagielski }
451*b1cdbd2cSJim Jagielski }
452*b1cdbd2cSJim Jagielski // Return new created or already existing mutex object.
453*b1cdbd2cSJim Jagielski return *pMutex;
454*b1cdbd2cSJim Jagielski }
455