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>
CreateChildContext(sal_uInt16 _nPrefix,const::rtl::OUString & _rLocalName,const::com::sun::star::uno::Reference<::com::sun::star::xml::sax::XAttributeList> & _rxAttrList)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 >
createElement()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>
EndElement()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>
OColumnImport(OFormLayerXMLImport_Impl & _rImport,IEventAttacherManager & _rEventManager,sal_uInt16 _nPrefix,const::rtl::OUString & _rName,const::com::sun::star::uno::Reference<::com::sun::star::container::XNameContainer> & _rxParentContainer,OControlElement::ElementType _eType)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>
createElement()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