xref: /aoo42x/main/sw/source/ui/vba/vbaaddins.cxx (revision efeef26f)
1*efeef26fSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*efeef26fSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*efeef26fSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*efeef26fSAndrew Rist  * distributed with this work for additional information
6*efeef26fSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*efeef26fSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*efeef26fSAndrew Rist  * "License"); you may not use this file except in compliance
9*efeef26fSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*efeef26fSAndrew Rist  *
11*efeef26fSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*efeef26fSAndrew Rist  *
13*efeef26fSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*efeef26fSAndrew Rist  * software distributed under the License is distributed on an
15*efeef26fSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*efeef26fSAndrew Rist  * KIND, either express or implied.  See the License for the
17*efeef26fSAndrew Rist  * specific language governing permissions and limitations
18*efeef26fSAndrew Rist  * under the License.
19*efeef26fSAndrew Rist  *
20*efeef26fSAndrew Rist  *************************************************************/
21*efeef26fSAndrew Rist 
22*efeef26fSAndrew Rist 
23cdf0e10cSrcweir #include "vbaaddins.hxx"
24cdf0e10cSrcweir #include "vbaaddin.hxx"
25cdf0e10cSrcweir #include <cppuhelper/implbase3.hxx>
26cdf0e10cSrcweir #include <unotools/pathoptions.hxx>
27cdf0e10cSrcweir #include <com/sun/star/lang/XMultiComponentFactory.hpp>
28cdf0e10cSrcweir #include <com/sun/star/ucb/XSimpleFileAccess.hpp>
29cdf0e10cSrcweir 
30cdf0e10cSrcweir using namespace ::ooo::vba;
31cdf0e10cSrcweir using namespace ::com::sun::star;
32cdf0e10cSrcweir 
lcl_getAddinCollection(const uno::Reference<XHelperInterface> & xParent,const uno::Reference<uno::XComponentContext> & xContext)33cdf0e10cSrcweir uno::Reference< container::XIndexAccess > lcl_getAddinCollection( const uno::Reference< XHelperInterface >& xParent, const uno::Reference< uno::XComponentContext >& xContext )
34cdf0e10cSrcweir {
35cdf0e10cSrcweir     XNamedObjectCollectionHelper< word::XAddin >::XNamedVec maAddins;
36cdf0e10cSrcweir 
37cdf0e10cSrcweir     // first get the autoload addins in the directory STARTUP
38cdf0e10cSrcweir     uno::Reference< lang::XMultiComponentFactory > xMCF( xContext->getServiceManager(), uno::UNO_QUERY_THROW );
39cdf0e10cSrcweir     uno::Reference< ucb::XSimpleFileAccess > xSFA( xMCF->createInstanceWithContext( rtl::OUString::createFromAscii( "com.sun.star.ucb.SimpleFileAccess" ), xContext), uno::UNO_QUERY_THROW );
40cdf0e10cSrcweir     SvtPathOptions aPathOpt;
41cdf0e10cSrcweir     // FIXME: temporary the STARTUP path is located in $OO/basic3.1/program/addin
42cdf0e10cSrcweir     String aAddinPath = aPathOpt.GetAddinPath();
43cdf0e10cSrcweir     OSL_TRACE("lcl_getAddinCollection: %s", rtl::OUStringToOString( aAddinPath, RTL_TEXTENCODING_UTF8 ).getStr() );
44cdf0e10cSrcweir     if( xSFA->isFolder( aAddinPath ) )
45cdf0e10cSrcweir     {
46cdf0e10cSrcweir         uno::Sequence< rtl::OUString > sEntries = xSFA->getFolderContents( aAddinPath, sal_False );
47cdf0e10cSrcweir         sal_Int32 nEntry = sEntries.getLength();
48cdf0e10cSrcweir         for( sal_Int32 index = 0; index < nEntry; ++index )
49cdf0e10cSrcweir         {
50cdf0e10cSrcweir             rtl::OUString sUrl = sEntries[ index ];
51cdf0e10cSrcweir             if( !xSFA->isFolder( sUrl ) && sUrl.endsWithIgnoreAsciiCaseAsciiL( ".dot", 4 ) )
52cdf0e10cSrcweir             {
53cdf0e10cSrcweir                 maAddins.push_back( uno::Reference< word::XAddin >( new SwVbaAddin( xParent, xContext, sUrl, sal_True ) ) );
54cdf0e10cSrcweir             }
55cdf0e10cSrcweir         }
56cdf0e10cSrcweir     }
57cdf0e10cSrcweir 
58cdf0e10cSrcweir     // TODO: second get the customize addins in the org.openoffice.Office.Writer/GlobalTemplateList
59cdf0e10cSrcweir 
60cdf0e10cSrcweir     uno::Reference< container::XIndexAccess > xAddinsAccess( new XNamedObjectCollectionHelper< word::XAddin >( maAddins ) );
61cdf0e10cSrcweir     return xAddinsAccess;
62cdf0e10cSrcweir }
63cdf0e10cSrcweir 
SwVbaAddins(const uno::Reference<XHelperInterface> & xParent,const uno::Reference<uno::XComponentContext> & xContext)64cdf0e10cSrcweir SwVbaAddins::SwVbaAddins( const uno::Reference< XHelperInterface >& xParent, const uno::Reference< uno::XComponentContext > & xContext ) throw (uno::RuntimeException): SwVbaAddins_BASE( xParent, xContext, lcl_getAddinCollection( xParent,xContext ) )
65cdf0e10cSrcweir {
66cdf0e10cSrcweir }
67cdf0e10cSrcweir // XEnumerationAccess
68cdf0e10cSrcweir uno::Type
getElementType()69cdf0e10cSrcweir SwVbaAddins::getElementType() throw (uno::RuntimeException)
70cdf0e10cSrcweir {
71cdf0e10cSrcweir 	return word::XAddin::static_type(0);
72cdf0e10cSrcweir }
73cdf0e10cSrcweir uno::Reference< container::XEnumeration >
createEnumeration()74cdf0e10cSrcweir SwVbaAddins::createEnumeration() throw (uno::RuntimeException)
75cdf0e10cSrcweir {
76cdf0e10cSrcweir     uno::Reference< container::XEnumerationAccess > xEnumerationAccess( m_xIndexAccess, uno::UNO_QUERY_THROW );
77cdf0e10cSrcweir     return xEnumerationAccess->createEnumeration();
78cdf0e10cSrcweir }
79cdf0e10cSrcweir 
80cdf0e10cSrcweir uno::Any
createCollectionObject(const css::uno::Any & aSource)81cdf0e10cSrcweir SwVbaAddins::createCollectionObject( const css::uno::Any& aSource )
82cdf0e10cSrcweir {
83cdf0e10cSrcweir     return aSource;
84cdf0e10cSrcweir }
85cdf0e10cSrcweir 
86cdf0e10cSrcweir rtl::OUString&
getServiceImplName()87cdf0e10cSrcweir SwVbaAddins::getServiceImplName()
88cdf0e10cSrcweir {
89cdf0e10cSrcweir 	static rtl::OUString sImplName( RTL_CONSTASCII_USTRINGPARAM("SwVbaAddins") );
90cdf0e10cSrcweir 	return sImplName;
91cdf0e10cSrcweir }
92cdf0e10cSrcweir 
93cdf0e10cSrcweir css::uno::Sequence<rtl::OUString>
getServiceNames()94cdf0e10cSrcweir SwVbaAddins::getServiceNames()
95cdf0e10cSrcweir {
96cdf0e10cSrcweir 	static uno::Sequence< rtl::OUString > sNames;
97cdf0e10cSrcweir 	if ( sNames.getLength() == 0 )
98cdf0e10cSrcweir 	{
99cdf0e10cSrcweir 		sNames.realloc( 1 );
100cdf0e10cSrcweir 		sNames[0] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("ooo.vba.word.Addins") );
101cdf0e10cSrcweir 	}
102cdf0e10cSrcweir 	return sNames;
103cdf0e10cSrcweir }
104