1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: appbaslib.cxx,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 #include "appbaslib.hxx"
33 #include <sfx2/sfxuno.hxx>
34 #include "sfxtypes.hxx"
35 #include <sfx2/app.hxx>
37 #include <basic/basmgr.hxx>
38 #include <tools/diagnose_ex.h>
39 #include <comphelper/processfactory.hxx>
41 using namespace ::com::sun::star::uno
;
42 using namespace ::com::sun::star::lang
;
43 using namespace ::com::sun::star::script
;
44 using namespace ::com::sun::star::embed
;
45 using ::rtl::OUString
;
46 using ::osl::MutexGuard
;
49 //============================================================================
50 SfxBasicManagerHolder::SfxBasicManagerHolder()
51 :mpBasicManager( NULL
)
55 void SfxBasicManagerHolder::reset( BasicManager
* _pBasicManager
)
57 impl_releaseContainers();
59 // Note: we do not delete the old BasicManager. BasicManager instances are
60 // nowadays obtained from the BasicManagerRepository, and the ownership is with
62 // @see basic::BasicManagerRepository::getApplicationBasicManager
63 // @see basic::BasicManagerRepository::getDocumentBasicManager
64 mpBasicManager
= _pBasicManager
;
70 mxBasicContainer
.set( mpBasicManager
->GetScriptLibraryContainer(), UNO_QUERY_THROW
);
71 mxDialogContainer
.set( mpBasicManager
->GetDialogLibraryContainer(), UNO_QUERY_THROW
);
73 catch( const Exception
& )
75 DBG_UNHANDLED_EXCEPTION();
80 bool SfxBasicManagerHolder::isAnyContainerModified() const
82 OSL_PRECOND( isValid(), "SfxBasicManagerHolder::isAnyContainerModified: not initialized!" );
84 if ( mxBasicContainer
.is() && mxBasicContainer
->isModified() )
86 if ( mxDialogContainer
.is() && mxDialogContainer
->isModified() )
92 void SfxBasicManagerHolder::storeAllLibraries()
94 OSL_PRECOND( isValid(), "SfxBasicManagerHolder::storeAllLibraries: not initialized!" );
97 if ( mxBasicContainer
.is() )
98 mxBasicContainer
->storeLibraries();
99 if ( mxDialogContainer
.is() )
100 mxDialogContainer
->storeLibraries();
102 catch( const Exception
& )
104 DBG_UNHANDLED_EXCEPTION();
108 void SfxBasicManagerHolder::setStorage( const Reference
< XStorage
>& _rxStorage
)
112 if ( mxBasicContainer
.is() )
113 mxBasicContainer
->setRootStorage( _rxStorage
);
114 if ( mxDialogContainer
.is() )
115 mxDialogContainer
->setRootStorage( _rxStorage
);
117 catch( const Exception
& )
119 DBG_UNHANDLED_EXCEPTION();
123 void SfxBasicManagerHolder::storeLibrariesToStorage( const Reference
< XStorage
>& _rxStorage
)
125 OSL_PRECOND( isValid(), "SfxBasicManagerHolder::storeLibrariesToStorage: not initialized!" );
129 if ( mxBasicContainer
.is() )
130 mxBasicContainer
->storeLibrariesToStorage( _rxStorage
);
131 if ( mxDialogContainer
.is() )
132 mxDialogContainer
->storeLibrariesToStorage( _rxStorage
);
134 catch( const Exception
& )
136 DBG_UNHANDLED_EXCEPTION();
140 Reference
< XLibraryContainer
> SfxBasicManagerHolder::getLibraryContainer( ContainerType _eType
)
142 OSL_PRECOND( isValid(), "SfxBasicManagerHolder::getLibraryContainer: not initialized!" );
146 case SCRIPTS
: return mxBasicContainer
.get();
147 case DIALOGS
: return mxDialogContainer
.get();
149 DBG_ERROR( "SfxBasicManagerHolder::getLibraryContainer: illegal container type!" );
153 void SfxBasicManagerHolder::impl_releaseContainers()
155 mxBasicContainer
.clear();
156 mxDialogContainer
.clear();
160 SfxBasicManagerHolder::LegacyPsswdBinaryLimitExceeded( Sequence
< rtl::OUString
>& sModules
)
162 if ( mpBasicManager
)
163 return mpBasicManager
->LegacyPsswdBinaryLimitExceeded( sModules
);
167 //============================================================================
168 // Service for application library container
169 SFX_IMPL_ONEINSTANCEFACTORY( SfxApplicationDialogLibraryContainer
)
171 Sequence
< OUString
> SfxApplicationDialogLibraryContainer::impl_getStaticSupportedServiceNames()
173 static Sequence
< OUString
> seqServiceNames( 1 );
174 static sal_Bool bNeedsInit
= sal_True
;
176 MutexGuard
aGuard( Mutex::getGlobalMutex() );
179 OUString
* pSeq
= seqServiceNames
.getArray();
180 pSeq
[0] = OUString::createFromAscii( "com.sun.star.script.ApplicationDialogLibraryContainer" );
181 bNeedsInit
= sal_False
;
183 return seqServiceNames
;
186 OUString
SfxApplicationDialogLibraryContainer::impl_getStaticImplementationName()
188 static OUString aImplName
;
189 static sal_Bool bNeedsInit
= sal_True
;
191 MutexGuard
aGuard( Mutex::getGlobalMutex() );
194 aImplName
= OUString::createFromAscii( "com.sun.star.comp.sfx2.ApplicationDialogLibraryContainer" );
195 bNeedsInit
= sal_False
;
200 Reference
< XInterface
> SAL_CALL
SfxApplicationDialogLibraryContainer::impl_createInstance
201 ( const Reference
< XMultiServiceFactory
>& )
204 SFX_APP()->GetBasicManager();
205 Reference
< XInterface
> xRet
=
206 Reference
< XInterface
>( SFX_APP()->GetDialogContainer(), UNO_QUERY
);
210 //============================================================================
211 // Service for application library container
212 SFX_IMPL_ONEINSTANCEFACTORY( SfxApplicationScriptLibraryContainer
)
214 Sequence
< OUString
> SfxApplicationScriptLibraryContainer::impl_getStaticSupportedServiceNames()
216 static Sequence
< OUString
> seqServiceNames( 1 );
217 static sal_Bool bNeedsInit
= sal_True
;
219 MutexGuard
aGuard( Mutex::getGlobalMutex() );
222 OUString
* pSeq
= seqServiceNames
.getArray();
223 pSeq
[0] = OUString::createFromAscii( "com.sun.star.script.ApplicationScriptLibraryContainer" );
224 bNeedsInit
= sal_False
;
226 return seqServiceNames
;
229 OUString
SfxApplicationScriptLibraryContainer::impl_getStaticImplementationName()
231 static OUString aImplName
;
232 static sal_Bool bNeedsInit
= sal_True
;
234 MutexGuard
aGuard( Mutex::getGlobalMutex() );
237 aImplName
= OUString::createFromAscii( "com.sun.star.comp.sfx2.ApplicationScriptLibraryContainer" );
238 bNeedsInit
= sal_False
;
243 Reference
< XInterface
> SAL_CALL
SfxApplicationScriptLibraryContainer::impl_createInstance
244 ( const Reference
< XMultiServiceFactory
>& )
247 SFX_APP()->GetBasicManager();
248 Reference
< XInterface
> xRet
=
249 Reference
< XInterface
>( SFX_APP()->GetBasicContainer(), UNO_QUERY
);