1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 #include "vbapanes.hxx" 24 #include "vbapane.hxx" 25 26 using namespace ::ooo::vba; 27 using namespace ::com::sun::star; 28 29 // I assume there is only one pane in Writer 30 typedef ::cppu::WeakImplHelper1<container::XIndexAccess > PanesIndexAccess_Base; 31 class PanesIndexAccess : public PanesIndexAccess_Base 32 { 33 private: 34 uno::Reference< XHelperInterface > mxParent; 35 uno::Reference< uno::XComponentContext > mxContext; 36 uno::Reference< frame::XModel > mxModel; 37 38 public: 39 PanesIndexAccess( const uno::Reference< XHelperInterface >& xParent, const uno::Reference< uno::XComponentContext >& xContext, const uno::Reference< frame::XModel >& xModel ) : mxParent( xParent ), mxContext( xContext ), mxModel( xModel ) {} 40 ~PanesIndexAccess(){} 41 42 // XIndexAccess 43 virtual sal_Int32 SAL_CALL getCount( ) throw (uno::RuntimeException) 44 { 45 return 1; 46 } 47 virtual uno::Any SAL_CALL getByIndex( sal_Int32 Index ) throw (lang::IndexOutOfBoundsException, lang::WrappedTargetException, uno::RuntimeException) 48 { 49 if( Index != 1 ) 50 throw container::NoSuchElementException(); 51 return uno::makeAny( uno::Reference< word::XPane >( new SwVbaPane( mxParent, mxContext, mxModel ) ) ); 52 } 53 virtual uno::Type SAL_CALL getElementType( ) throw (uno::RuntimeException) 54 { 55 return word::XPane::static_type(0); 56 } 57 virtual sal_Bool SAL_CALL hasElements( ) throw (uno::RuntimeException) 58 { 59 return sal_True; 60 } 61 }; 62 63 class PanesEnumWrapper : public EnumerationHelper_BASE 64 { 65 uno::Reference<container::XIndexAccess > m_xIndexAccess; 66 sal_Int32 nIndex; 67 public: 68 PanesEnumWrapper( const uno::Reference< container::XIndexAccess >& xIndexAccess ) : m_xIndexAccess( xIndexAccess ), nIndex( 0 ) {} 69 virtual ::sal_Bool SAL_CALL hasMoreElements( ) throw (uno::RuntimeException) 70 { 71 return ( nIndex < m_xIndexAccess->getCount() ); 72 } 73 74 virtual uno::Any SAL_CALL nextElement( ) throw (container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException) 75 { 76 if ( nIndex < m_xIndexAccess->getCount() ) 77 return m_xIndexAccess->getByIndex( nIndex++ ); 78 throw container::NoSuchElementException(); 79 } 80 }; 81 82 SwVbaPanes::SwVbaPanes( const uno::Reference< XHelperInterface >& xParent, const uno::Reference< uno::XComponentContext > & xContext, const uno::Reference< frame::XModel >& xModel ): SwVbaPanes_BASE( xParent, xContext, new PanesIndexAccess( xParent, xContext, xModel ) ), mxModel( xModel ) 83 { 84 } 85 // XEnumerationAccess 86 uno::Type 87 SwVbaPanes::getElementType() throw (uno::RuntimeException) 88 { 89 return word::XPane::static_type(0); 90 } 91 uno::Reference< container::XEnumeration > 92 SwVbaPanes::createEnumeration() throw (uno::RuntimeException) 93 { 94 return new PanesEnumWrapper( m_xIndexAccess ); 95 } 96 97 uno::Any 98 SwVbaPanes::createCollectionObject( const css::uno::Any& aSource ) 99 { 100 return aSource; 101 } 102 103 rtl::OUString& 104 SwVbaPanes::getServiceImplName() 105 { 106 static rtl::OUString sImplName( RTL_CONSTASCII_USTRINGPARAM("SwVbaPanes") ); 107 return sImplName; 108 } 109 110 css::uno::Sequence<rtl::OUString> 111 SwVbaPanes::getServiceNames() 112 { 113 static uno::Sequence< rtl::OUString > sNames; 114 if ( sNames.getLength() == 0 ) 115 { 116 sNames.realloc( 1 ); 117 sNames[0] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("ooo.vba.word.Panes") ); 118 } 119 return sNames; 120 } 121