1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // no include protection. This file is included from elementimport.hxx only. 29*cdf0e10cSrcweir 30*cdf0e10cSrcweir #ifndef _INCLUDING_FROM_ELEMENTIMPORT_HXX_ 31*cdf0e10cSrcweir #error "do not include this file directly!" 32*cdf0e10cSrcweir #endif 33*cdf0e10cSrcweir 34*cdf0e10cSrcweir // no namespace. Same as above: this file is included from elementimport.hxx only, 35*cdf0e10cSrcweir // and this is done inside the namespace 36*cdf0e10cSrcweir 37*cdf0e10cSrcweir //========================================================================= 38*cdf0e10cSrcweir //= OContainerImport 39*cdf0e10cSrcweir //========================================================================= 40*cdf0e10cSrcweir //------------------------------------------------------------------------- 41*cdf0e10cSrcweir template <class BASE> 42*cdf0e10cSrcweir inline SvXMLImportContext* OContainerImport< BASE >::CreateChildContext( 43*cdf0e10cSrcweir sal_uInt16 _nPrefix, const ::rtl::OUString& _rLocalName, 44*cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList) 45*cdf0e10cSrcweir { 46*cdf0e10cSrcweir // maybe it's a sub control 47*cdf0e10cSrcweir if (_rLocalName == m_sWrapperElementName) 48*cdf0e10cSrcweir { 49*cdf0e10cSrcweir if (m_xMeAsContainer.is()) 50*cdf0e10cSrcweir return implCreateControlWrapper(_nPrefix, _rLocalName); 51*cdf0e10cSrcweir else 52*cdf0e10cSrcweir { 53*cdf0e10cSrcweir OSL_ENSURE(sal_False, "OContainerImport::CreateChildContext: don't have an element!"); 54*cdf0e10cSrcweir return NULL; 55*cdf0e10cSrcweir } 56*cdf0e10cSrcweir } 57*cdf0e10cSrcweir 58*cdf0e10cSrcweir return BASE::CreateChildContext(_nPrefix, _rLocalName, _rxAttrList); 59*cdf0e10cSrcweir } 60*cdf0e10cSrcweir 61*cdf0e10cSrcweir //------------------------------------------------------------------------- 62*cdf0e10cSrcweir template <class BASE> 63*cdf0e10cSrcweir inline ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > 64*cdf0e10cSrcweir OContainerImport< BASE >::createElement() 65*cdf0e10cSrcweir { 66*cdf0e10cSrcweir // let the base class create the object 67*cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xReturn = BASE::createElement(); 68*cdf0e10cSrcweir if (!xReturn.is()) 69*cdf0e10cSrcweir return xReturn; 70*cdf0e10cSrcweir 71*cdf0e10cSrcweir // ensure that the object is a XNameContainer (we strongly need this for inserting child elements) 72*cdf0e10cSrcweir m_xMeAsContainer = ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >(xReturn, ::com::sun::star::uno::UNO_QUERY); 73*cdf0e10cSrcweir if (!m_xMeAsContainer.is()) 74*cdf0e10cSrcweir { 75*cdf0e10cSrcweir OSL_ENSURE(sal_False, "OContainerImport::createElement: invalid element (no XNameContainer) created!"); 76*cdf0e10cSrcweir xReturn.clear(); 77*cdf0e10cSrcweir } 78*cdf0e10cSrcweir 79*cdf0e10cSrcweir return xReturn; 80*cdf0e10cSrcweir } 81*cdf0e10cSrcweir 82*cdf0e10cSrcweir //------------------------------------------------------------------------- 83*cdf0e10cSrcweir template <class BASE> 84*cdf0e10cSrcweir inline void OContainerImport< BASE >::EndElement() 85*cdf0e10cSrcweir { 86*cdf0e10cSrcweir BASE::EndElement(); 87*cdf0e10cSrcweir 88*cdf0e10cSrcweir // now that we have all children, attach the events 89*cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > xIndexContainer(m_xMeAsContainer, ::com::sun::star::uno::UNO_QUERY); 90*cdf0e10cSrcweir if (xIndexContainer.is()) 91*cdf0e10cSrcweir ODefaultEventAttacherManager::setEvents(xIndexContainer); 92*cdf0e10cSrcweir } 93*cdf0e10cSrcweir 94*cdf0e10cSrcweir //========================================================================= 95*cdf0e10cSrcweir //= OColumnImport 96*cdf0e10cSrcweir //========================================================================= 97*cdf0e10cSrcweir //------------------------------------------------------------------------- 98*cdf0e10cSrcweir template <class BASE> 99*cdf0e10cSrcweir OColumnImport< BASE >::OColumnImport(OFormLayerXMLImport_Impl& _rImport, IEventAttacherManager& _rEventManager, sal_uInt16 _nPrefix, const ::rtl::OUString& _rName, 100*cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& _rxParentContainer, 101*cdf0e10cSrcweir OControlElement::ElementType _eType) 102*cdf0e10cSrcweir :BASE(_rImport, _rEventManager, _nPrefix, _rName, _rxParentContainer, _eType) 103*cdf0e10cSrcweir ,m_xColumnFactory(_rxParentContainer, ::com::sun::star::uno::UNO_QUERY) 104*cdf0e10cSrcweir { 105*cdf0e10cSrcweir OSL_ENSURE(m_xColumnFactory.is(), "OColumnImport::OColumnImport: invalid parent container (no factory)!"); 106*cdf0e10cSrcweir } 107*cdf0e10cSrcweir 108*cdf0e10cSrcweir //------------------------------------------------------------------------- 109*cdf0e10cSrcweir // OElementImport overridables 110*cdf0e10cSrcweir template <class BASE> 111*cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > OColumnImport< BASE >::createElement() 112*cdf0e10cSrcweir { 113*cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xReturn; 114*cdf0e10cSrcweir // no call to the base class' method. We have to use the grid column factory 115*cdf0e10cSrcweir if (m_xColumnFactory.is()) 116*cdf0e10cSrcweir { 117*cdf0e10cSrcweir // create the column 118*cdf0e10cSrcweir xReturn = m_xColumnFactory->createColumn(this->m_sServiceName); 119*cdf0e10cSrcweir OSL_ENSURE(xReturn.is(), "OColumnImport::createElement: the factory returned an invalid object!"); 120*cdf0e10cSrcweir } 121*cdf0e10cSrcweir return xReturn; 122*cdf0e10cSrcweir } 123*cdf0e10cSrcweir 124