| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_scripting.hxx" |
| #include "baslibnode.hxx" |
| #include "basmodnode.hxx" |
| #include <com/sun/star/script/browse/BrowseNodeTypes.hpp> |
| #include <vos/mutex.hxx> |
| #include <vcl/svapp.hxx> |
| #include <basic/basmgr.hxx> |
| #include <basic/sbstar.hxx> |
| |
| |
| using namespace ::com::sun::star; |
| using namespace ::com::sun::star::lang; |
| using namespace ::com::sun::star::uno; |
| using namespace ::com::sun::star::script; |
| |
| |
| //......................................................................... |
| namespace basprov |
| { |
| //......................................................................... |
| |
| // ============================================================================= |
| // BasicLibraryNodeImpl |
| // ============================================================================= |
| |
| BasicLibraryNodeImpl::BasicLibraryNodeImpl( const Reference< XComponentContext >& rxContext, |
| const ::rtl::OUString& sScriptingContext, BasicManager* pBasicManager, |
| const Reference< script::XLibraryContainer >& xLibContainer, const ::rtl::OUString& sLibName, bool isAppScript ) |
| :m_xContext( rxContext ) |
| ,m_sScriptingContext( sScriptingContext ) |
| ,m_pBasicManager( pBasicManager ) |
| ,m_xLibContainer( xLibContainer ) |
| ,m_sLibName( sLibName ) |
| ,m_bIsAppScript( isAppScript ) |
| { |
| if ( m_xLibContainer.is() ) |
| { |
| Any aElement = m_xLibContainer->getByName( m_sLibName ); |
| aElement >>= m_xLibrary; |
| } |
| } |
| |
| // ----------------------------------------------------------------------------- |
| |
| BasicLibraryNodeImpl::~BasicLibraryNodeImpl() |
| { |
| } |
| |
| // ----------------------------------------------------------------------------- |
| // XBrowseNode |
| // ----------------------------------------------------------------------------- |
| |
| ::rtl::OUString BasicLibraryNodeImpl::getName( ) throw (RuntimeException) |
| { |
| ::vos::OGuard aGuard( Application::GetSolarMutex() ); |
| |
| return m_sLibName; |
| } |
| |
| // ----------------------------------------------------------------------------- |
| |
| Sequence< Reference< browse::XBrowseNode > > BasicLibraryNodeImpl::getChildNodes( ) throw (RuntimeException) |
| { |
| ::vos::OGuard aGuard( Application::GetSolarMutex() ); |
| |
| Sequence< Reference< browse::XBrowseNode > > aChildNodes; |
| |
| if ( m_xLibContainer.is() && m_xLibContainer->hasByName( m_sLibName ) && !m_xLibContainer->isLibraryLoaded( m_sLibName ) ) |
| m_xLibContainer->loadLibrary( m_sLibName ); |
| |
| if ( m_pBasicManager ) |
| { |
| StarBASIC* pBasic = m_pBasicManager->GetLib( m_sLibName ); |
| if ( pBasic && m_xLibrary.is() ) |
| { |
| Sequence< ::rtl::OUString > aNames = m_xLibrary->getElementNames(); |
| sal_Int32 nCount = aNames.getLength(); |
| const ::rtl::OUString* pNames = aNames.getConstArray(); |
| aChildNodes.realloc( nCount ); |
| Reference< browse::XBrowseNode >* pChildNodes = aChildNodes.getArray(); |
| |
| for ( sal_Int32 i = 0 ; i < nCount ; ++i ) |
| { |
| SbModule* pModule = pBasic->FindModule( pNames[i] ); |
| if ( pModule ) |
| pChildNodes[i] = static_cast< browse::XBrowseNode* >( new BasicModuleNodeImpl( m_xContext, m_sScriptingContext, pModule, m_bIsAppScript ) ); |
| } |
| } |
| } |
| |
| return aChildNodes; |
| } |
| |
| // ----------------------------------------------------------------------------- |
| |
| sal_Bool BasicLibraryNodeImpl::hasChildNodes( ) throw (RuntimeException) |
| { |
| ::vos::OGuard aGuard( Application::GetSolarMutex() ); |
| |
| sal_Bool bReturn = sal_False; |
| if ( m_xLibrary.is() ) |
| bReturn = m_xLibrary->hasElements(); |
| |
| return bReturn; |
| } |
| |
| // ----------------------------------------------------------------------------- |
| |
| sal_Int16 BasicLibraryNodeImpl::getType( ) throw (RuntimeException) |
| { |
| ::vos::OGuard aGuard( Application::GetSolarMutex() ); |
| |
| return browse::BrowseNodeTypes::CONTAINER; |
| } |
| |
| // ----------------------------------------------------------------------------- |
| |
| //......................................................................... |
| } // namespace basprov |
| //......................................................................... |