summaryrefslogtreecommitdiff
path: root/sfx2/source/appl/appbaslib.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sfx2/source/appl/appbaslib.cxx')
-rw-r--r--sfx2/source/appl/appbaslib.cxx249
1 files changed, 249 insertions, 0 deletions
diff --git a/sfx2/source/appl/appbaslib.cxx b/sfx2/source/appl/appbaslib.cxx
new file mode 100644
index 000000000000..96c998b2674d
--- /dev/null
+++ b/sfx2/source/appl/appbaslib.cxx
@@ -0,0 +1,249 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "appbaslib.hxx"
+
+#include <sfx2/sfxuno.hxx>
+#include "sfxtypes.hxx"
+#include <sfx2/app.hxx>
+
+#include <basic/basmgr.hxx>
+#include <tools/diagnose_ex.h>
+#include <comphelper/processfactory.hxx>
+
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::lang;
+using namespace ::com::sun::star::script;
+using namespace ::com::sun::star::embed;
+using ::rtl::OUString;
+using ::osl::MutexGuard;
+using ::osl::Mutex;
+
+//============================================================================
+SfxBasicManagerHolder::SfxBasicManagerHolder()
+ :mpBasicManager( NULL )
+{
+}
+
+void SfxBasicManagerHolder::reset( BasicManager* _pBasicManager )
+{
+ impl_releaseContainers();
+
+ // Note: we do not delete the old BasicManager. BasicManager instances are
+ // nowadays obtained from the BasicManagerRepository, and the ownership is with
+ // the repository.
+ // @see basic::BasicManagerRepository::getApplicationBasicManager
+ // @see basic::BasicManagerRepository::getDocumentBasicManager
+ mpBasicManager = _pBasicManager;
+
+ if ( mpBasicManager )
+ {
+ try
+ {
+ mxBasicContainer.set( mpBasicManager->GetScriptLibraryContainer(), UNO_QUERY_THROW );
+ mxDialogContainer.set( mpBasicManager->GetDialogLibraryContainer(), UNO_QUERY_THROW );
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+ }
+}
+
+bool SfxBasicManagerHolder::isAnyContainerModified() const
+{
+ OSL_PRECOND( isValid(), "SfxBasicManagerHolder::isAnyContainerModified: not initialized!" );
+
+ if ( mxBasicContainer.is() && mxBasicContainer->isModified() )
+ return true;
+ if ( mxDialogContainer.is() && mxDialogContainer->isModified() )
+ return true;
+
+ return false;
+}
+
+void SfxBasicManagerHolder::storeAllLibraries()
+{
+ OSL_PRECOND( isValid(), "SfxBasicManagerHolder::storeAllLibraries: not initialized!" );
+ try
+ {
+ if ( mxBasicContainer.is() )
+ mxBasicContainer->storeLibraries();
+ if ( mxDialogContainer.is() )
+ mxDialogContainer->storeLibraries();
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+}
+
+void SfxBasicManagerHolder::setStorage( const Reference< XStorage >& _rxStorage )
+{
+ try
+ {
+ if ( mxBasicContainer.is() )
+ mxBasicContainer->setRootStorage( _rxStorage );
+ if ( mxDialogContainer.is() )
+ mxDialogContainer->setRootStorage( _rxStorage );
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+}
+
+void SfxBasicManagerHolder::storeLibrariesToStorage( const Reference< XStorage >& _rxStorage )
+{
+ OSL_PRECOND( isValid(), "SfxBasicManagerHolder::storeLibrariesToStorage: not initialized!" );
+
+ try
+ {
+ if ( mxBasicContainer.is() )
+ mxBasicContainer->storeLibrariesToStorage( _rxStorage );
+ if ( mxDialogContainer.is() )
+ mxDialogContainer->storeLibrariesToStorage( _rxStorage );
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+}
+
+Reference< XLibraryContainer > SfxBasicManagerHolder::getLibraryContainer( ContainerType _eType )
+{
+ OSL_PRECOND( isValid(), "SfxBasicManagerHolder::getLibraryContainer: not initialized!" );
+
+ switch ( _eType )
+ {
+ case SCRIPTS: return mxBasicContainer.get();
+ case DIALOGS: return mxDialogContainer.get();
+ }
+ DBG_ERROR( "SfxBasicManagerHolder::getLibraryContainer: illegal container type!" );
+ return NULL;
+}
+
+void SfxBasicManagerHolder::impl_releaseContainers()
+{
+ mxBasicContainer.clear();
+ mxDialogContainer.clear();
+}
+
+sal_Bool
+SfxBasicManagerHolder::LegacyPsswdBinaryLimitExceeded( Sequence< rtl::OUString >& sModules )
+{
+ if ( mpBasicManager )
+ return mpBasicManager->LegacyPsswdBinaryLimitExceeded( sModules );
+ return sal_True;
+}
+
+//============================================================================
+// Service for application library container
+SFX_IMPL_ONEINSTANCEFACTORY( SfxApplicationDialogLibraryContainer )
+
+Sequence< OUString > SfxApplicationDialogLibraryContainer::impl_getStaticSupportedServiceNames()
+{
+ static Sequence< OUString > seqServiceNames( 1 );
+ static sal_Bool bNeedsInit = sal_True;
+
+ MutexGuard aGuard( Mutex::getGlobalMutex() );
+ if( bNeedsInit )
+ {
+ OUString* pSeq = seqServiceNames.getArray();
+ pSeq[0] = OUString::createFromAscii( "com.sun.star.script.ApplicationDialogLibraryContainer" );
+ bNeedsInit = sal_False;
+ }
+ return seqServiceNames;
+}
+
+OUString SfxApplicationDialogLibraryContainer::impl_getStaticImplementationName()
+{
+ static OUString aImplName;
+ static sal_Bool bNeedsInit = sal_True;
+
+ MutexGuard aGuard( Mutex::getGlobalMutex() );
+ if( bNeedsInit )
+ {
+ aImplName = OUString::createFromAscii( "com.sun.star.comp.sfx2.ApplicationDialogLibraryContainer" );
+ bNeedsInit = sal_False;
+ }
+ return aImplName;
+}
+
+Reference< XInterface > SAL_CALL SfxApplicationDialogLibraryContainer::impl_createInstance
+ ( const Reference< XMultiServiceFactory >& )
+ throw( Exception )
+{
+ SFX_APP()->GetBasicManager();
+ Reference< XInterface > xRet =
+ Reference< XInterface >( SFX_APP()->GetDialogContainer(), UNO_QUERY );
+ return xRet;
+}
+
+//============================================================================
+// Service for application library container
+SFX_IMPL_ONEINSTANCEFACTORY( SfxApplicationScriptLibraryContainer )
+
+Sequence< OUString > SfxApplicationScriptLibraryContainer::impl_getStaticSupportedServiceNames()
+{
+ static Sequence< OUString > seqServiceNames( 1 );
+ static sal_Bool bNeedsInit = sal_True;
+
+ MutexGuard aGuard( Mutex::getGlobalMutex() );
+ if( bNeedsInit )
+ {
+ OUString* pSeq = seqServiceNames.getArray();
+ pSeq[0] = OUString::createFromAscii( "com.sun.star.script.ApplicationScriptLibraryContainer" );
+ bNeedsInit = sal_False;
+ }
+ return seqServiceNames;
+}
+
+OUString SfxApplicationScriptLibraryContainer::impl_getStaticImplementationName()
+{
+ static OUString aImplName;
+ static sal_Bool bNeedsInit = sal_True;
+
+ MutexGuard aGuard( Mutex::getGlobalMutex() );
+ if( bNeedsInit )
+ {
+ aImplName = OUString::createFromAscii( "com.sun.star.comp.sfx2.ApplicationScriptLibraryContainer" );
+ bNeedsInit = sal_False;
+ }
+ return aImplName;
+}
+
+Reference< XInterface > SAL_CALL SfxApplicationScriptLibraryContainer::impl_createInstance
+ ( const Reference< XMultiServiceFactory >& )
+ throw( Exception )
+{
+ SFX_APP()->GetBasicManager();
+ Reference< XInterface > xRet =
+ Reference< XInterface >( SFX_APP()->GetBasicContainer(), UNO_QUERY );
+ return xRet;
+}
+