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 24 // no include protection. This file is included from elementimport.hxx only. 25 26 #ifndef _INCLUDING_FROM_ELEMENTIMPORT_HXX_ 27 #error "do not include this file directly!" 28 #endif 29 30 // no namespace. Same as above: this file is included from elementimport.hxx only, 31 // and this is done inside the namespace 32 33 //========================================================================= 34 //= OContainerImport 35 //========================================================================= 36 //------------------------------------------------------------------------- 37 template <class BASE> 38 inline SvXMLImportContext* OContainerImport< BASE >::CreateChildContext( 39 sal_uInt16 _nPrefix, const ::rtl::OUString& _rLocalName, 40 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList) 41 { 42 // maybe it's a sub control 43 if (_rLocalName == m_sWrapperElementName) 44 { 45 if (m_xMeAsContainer.is()) 46 return implCreateControlWrapper(_nPrefix, _rLocalName); 47 else 48 { 49 OSL_ENSURE(sal_False, "OContainerImport::CreateChildContext: don't have an element!"); 50 return NULL; 51 } 52 } 53 54 return BASE::CreateChildContext(_nPrefix, _rLocalName, _rxAttrList); 55 } 56 57 //------------------------------------------------------------------------- 58 template <class BASE> 59 inline ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > 60 OContainerImport< BASE >::createElement() 61 { 62 // let the base class create the object 63 ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xReturn = BASE::createElement(); 64 if (!xReturn.is()) 65 return xReturn; 66 67 // ensure that the object is a XNameContainer (we strongly need this for inserting child elements) 68 m_xMeAsContainer = ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >(xReturn, ::com::sun::star::uno::UNO_QUERY); 69 if (!m_xMeAsContainer.is()) 70 { 71 OSL_ENSURE(sal_False, "OContainerImport::createElement: invalid element (no XNameContainer) created!"); 72 xReturn.clear(); 73 } 74 75 return xReturn; 76 } 77 78 //------------------------------------------------------------------------- 79 template <class BASE> 80 inline void OContainerImport< BASE >::EndElement() 81 { 82 BASE::EndElement(); 83 84 // now that we have all children, attach the events 85 ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > xIndexContainer(m_xMeAsContainer, ::com::sun::star::uno::UNO_QUERY); 86 if (xIndexContainer.is()) 87 ODefaultEventAttacherManager::setEvents(xIndexContainer); 88 } 89 90 //========================================================================= 91 //= OColumnImport 92 //========================================================================= 93 //------------------------------------------------------------------------- 94 template <class BASE> 95 OColumnImport< BASE >::OColumnImport(OFormLayerXMLImport_Impl& _rImport, IEventAttacherManager& _rEventManager, sal_uInt16 _nPrefix, const ::rtl::OUString& _rName, 96 const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& _rxParentContainer, 97 OControlElement::ElementType _eType) 98 :BASE(_rImport, _rEventManager, _nPrefix, _rName, _rxParentContainer, _eType) 99 ,m_xColumnFactory(_rxParentContainer, ::com::sun::star::uno::UNO_QUERY) 100 { 101 OSL_ENSURE(m_xColumnFactory.is(), "OColumnImport::OColumnImport: invalid parent container (no factory)!"); 102 } 103 104 //------------------------------------------------------------------------- 105 // OElementImport overridables 106 template <class BASE> 107 ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > OColumnImport< BASE >::createElement() 108 { 109 ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xReturn; 110 // no call to the base class' method. We have to use the grid column factory 111 if (m_xColumnFactory.is()) 112 { 113 // create the column 114 xReturn = m_xColumnFactory->createColumn(this->m_sServiceName); 115 OSL_ENSURE(xReturn.is(), "OColumnImport::createElement: the factory returned an invalid object!"); 116 } 117 return xReturn; 118 } 119 120