|  | /************************************************************** | 
|  | * | 
|  | * Licensed to the Apache Software Foundation (ASF) under one | 
|  | * or more contributor license agreements.  See the NOTICE file | 
|  | * distributed with this work for additional information | 
|  | * regarding copyright ownership.  The ASF licenses this file | 
|  | * to you under the Apache License, Version 2.0 (the | 
|  | * "License"); you may not use this file except in compliance | 
|  | * with the License.  You may obtain a copy of the License at | 
|  | * | 
|  | *   http://www.apache.org/licenses/LICENSE-2.0 | 
|  | * | 
|  | * Unless required by applicable law or agreed to in writing, | 
|  | * software distributed under the License is distributed on an | 
|  | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
|  | * KIND, either express or implied.  See the License for the | 
|  | * specific language governing permissions and limitations | 
|  | * under the License. | 
|  | * | 
|  | *************************************************************/ | 
|  |  | 
|  |  | 
|  |  | 
|  | #ifndef _XMLOFF_FORMS_ELEMENTIMPORT_HXX_ | 
|  | #define _XMLOFF_FORMS_ELEMENTIMPORT_HXX_ | 
|  |  | 
|  | #include "propertyimport.hxx" | 
|  | #include "controlelement.hxx" | 
|  | #include "valueproperties.hxx" | 
|  | #include "eventimport.hxx" | 
|  | #include "logging.hxx" | 
|  | #include "property_description.hxx" | 
|  |  | 
|  | /** === begin UNO includes === **/ | 
|  | #include <com/sun/star/text/XTextCursor.hpp> | 
|  | #include <com/sun/star/container/XNameContainer.hpp> | 
|  | #include <com/sun/star/lang/XMultiServiceFactory.hpp> | 
|  | #include <com/sun/star/form/XGridColumnFactory.hpp> | 
|  | #include <com/sun/star/script/XEventAttacherManager.hpp> | 
|  | /** === end UNO includes === **/ | 
|  |  | 
|  | #include <comphelper/stl_types.hxx> | 
|  |  | 
|  | class XMLTextStyleContext; | 
|  | //......................................................................... | 
|  | namespace xmloff | 
|  | { | 
|  | //......................................................................... | 
|  |  | 
|  | class IControlIdMap; | 
|  | class OFormLayerXMLImport_Impl; | 
|  |  | 
|  | //===================================================================== | 
|  | //= OElementNameMap | 
|  | //===================================================================== | 
|  | const OControlElement::ElementType& operator ++(OControlElement::ElementType& _e); | 
|  |  | 
|  | /** helper class which allows fast translation of xml tag names into element types. | 
|  | */ | 
|  | class OElementNameMap : public OControlElement | 
|  | { | 
|  | protected: | 
|  | DECLARE_STL_USTRINGACCESS_MAP( ElementType, MapString2Element ); | 
|  | static MapString2Element	s_sElementTranslations; | 
|  |  | 
|  | protected: | 
|  | OElementNameMap() { } | 
|  |  | 
|  | public: | 
|  | static ElementType getElementType(const ::rtl::OUString& _rName); | 
|  | }; | 
|  |  | 
|  | //===================================================================== | 
|  | //= OElementImport | 
|  | //===================================================================== | 
|  | /** implements common behaviour for importing forms, controls and columns | 
|  | */ | 
|  | class OElementImport | 
|  | :public OPropertyImport | 
|  | ,public IEventAttacher | 
|  | ,public OStackedLogging | 
|  | { | 
|  | protected: | 
|  | ::rtl::OUString			    m_sServiceName;		// the service name as extracted from the service-name attribute | 
|  | ::rtl::OUString			    m_sName;			// the name of the object (redundant, already contained in the base class' array) | 
|  | OFormLayerXMLImport_Impl&	m_rFormImport;		// the form import context | 
|  | IEventAttacherManager&	    m_rEventManager;	// the event attacher manager | 
|  |  | 
|  | const XMLTextStyleContext*	m_pStyleElement;	// the XML element which describes the style we encountered | 
|  | // while reading our element | 
|  |  | 
|  | /// the parent container to insert the new element into | 
|  | ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > | 
|  | m_xParentContainer; | 
|  |  | 
|  | /// the element we're creating. Valid after StartElement | 
|  | ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > | 
|  | m_xElement; | 
|  | ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > | 
|  | m_xInfo; | 
|  |  | 
|  | bool                        m_bImplicitGenericAttributeHandling; | 
|  |  | 
|  | public: | 
|  | /** ctor | 
|  | @param _rImport | 
|  | the importer | 
|  | @param _rEventManager | 
|  | the event attacher manager for the control being imported | 
|  | @param _nPrefix | 
|  | the namespace prefix | 
|  | @param _rName | 
|  | the element name | 
|  | @param _rAttributeMap | 
|  | the attribute map to be used for translating attributes into properties | 
|  | @param _rxParentContainer | 
|  | the container in which the new element should be inserted | 
|  | */ | 
|  | OElementImport( | 
|  | OFormLayerXMLImport_Impl& _rImport, IEventAttacherManager& _rEventManager, | 
|  | sal_uInt16 _nPrefix, const ::rtl::OUString& _rName, | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& _rxParentContainer | 
|  | ); | 
|  | virtual ~OElementImport(); | 
|  |  | 
|  | protected: | 
|  | // SvXMLImportContext overridables | 
|  | virtual void StartElement( | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); | 
|  | virtual SvXMLImportContext* CreateChildContext( | 
|  | sal_uInt16 _nPrefix, const ::rtl::OUString& _rLocalName, | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); | 
|  | virtual void	EndElement(); | 
|  |  | 
|  | // OPropertyImport overridables | 
|  | virtual bool    handleAttribute(sal_uInt16 _nNamespaceKey, | 
|  | const ::rtl::OUString& _rLocalName, | 
|  | const ::rtl::OUString& _rValue); | 
|  |  | 
|  | // IEventAttacher | 
|  | virtual void registerEvents( | 
|  | const ::com::sun::star::uno::Sequence< ::com::sun::star::script::ScriptEventDescriptor >& _rEvents | 
|  | ); | 
|  |  | 
|  | /** create the (uninitialized) element which is to represent the read data | 
|  |  | 
|  | <p>The default implementation uses <member>m_xORB</member> to create a object with <member>m_sServiceName</member>. | 
|  | */ | 
|  | virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > | 
|  | createElement(); | 
|  |  | 
|  | protected: | 
|  | /** can be used to handle properties where the attribute default and the property default differ. | 
|  | <p>In such case, if the property had the attribute default upon writing, nothing is read, so upon reading, | 
|  | the property is still at it's own default (which is not the attribute default).<p/> | 
|  | <p>This method, if told the attribute and the property, and the (implied) attribute default, sets the | 
|  | property value as if the attribute was encountered.</p> | 
|  | @see encounteredAttribute | 
|  | */ | 
|  | void		simulateDefaultedAttribute(const sal_Char* _pAttributeName, const ::rtl::OUString& _rPropertyName, const sal_Char* _pAttributeDefault); | 
|  |  | 
|  | /** to be called from within handleAttribute, checks whether the given attribute is covered by our generic | 
|  | attribute handler mechanisms | 
|  | */ | 
|  | bool        tryGenericAttribute( sal_uInt16 _nNamespaceKey, const ::rtl::OUString& _rLocalName, const ::rtl::OUString& _rValue ); | 
|  |  | 
|  | /** controls whether |handleAttribute| implicitly calls |tryGenericAttribute|, or whether the derived class | 
|  | must do this explicitly at a suitable place in its own |handleAttribute| | 
|  | */ | 
|  | void        disableImplicitGenericAttributeHandling() { m_bImplicitGenericAttributeHandling = false; } | 
|  |  | 
|  | private: | 
|  | ::rtl::OUString implGetDefaultName() const; | 
|  | void implApplyGenericProperties(); | 
|  | void implApplySpecificProperties(); | 
|  |  | 
|  | /** sets the style properties which have been read for the element (if any) | 
|  | */ | 
|  | void implSetStyleProperties( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxObject ); | 
|  |  | 
|  | PropertyGroups::const_iterator impl_matchPropertyGroup( const PropertyGroups& i_propertyGroups ) const; | 
|  |  | 
|  | virtual ::rtl::OUString determineDefaultServiceName() const; | 
|  | }; | 
|  |  | 
|  | //===================================================================== | 
|  | //= OControlImport | 
|  | //===================================================================== | 
|  | /** helper class for importing the description of a single control | 
|  | */ | 
|  | class OControlImport | 
|  | :public OElementImport | 
|  | ,public OValuePropertiesMetaData | 
|  | { | 
|  | protected: | 
|  | ::rtl::OUString					m_sControlId; | 
|  | OControlElement::ElementType	m_eElementType; | 
|  |  | 
|  | PropertyValueArray				m_aValueProperties; | 
|  | // the value properties (value, current-value, min-value, max-value) require some special | 
|  | // handling | 
|  |  | 
|  | // we fake the attributes our base class gets: we add the attributes of the outer wrapper | 
|  | // element which encloses us | 
|  | ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > | 
|  | m_xOuterAttributes; | 
|  |  | 
|  | /** the address of the calc cell which the control model should be bound to, | 
|  | if applicable | 
|  | */ | 
|  | ::rtl::OUString                 m_sBoundCellAddress; | 
|  |  | 
|  | /** name of a value binding (xforms:bind attribute) */ | 
|  | ::rtl::OUString                 m_sBindingID; | 
|  |  | 
|  | /** name of a list binding (form:xforms-list-source attribute) */ | 
|  | ::rtl::OUString                 m_sListBindingID; | 
|  |  | 
|  | /** name of a submission (xforms:submission attribute) */ | 
|  | ::rtl::OUString                 m_sSubmissionID; | 
|  |  | 
|  | protected: | 
|  | // for use by derived classes only | 
|  | OControlImport( | 
|  | OFormLayerXMLImport_Impl& _rImport, IEventAttacherManager& _rEventManager, | 
|  | sal_uInt16 _nPrefix, const ::rtl::OUString& _rName, | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& _rxParentContainer | 
|  | ); | 
|  |  | 
|  | public: | 
|  | OControlImport( | 
|  | 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 | 
|  | ); | 
|  |  | 
|  | // SvXMLImportContext overridables | 
|  | virtual void StartElement( | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); | 
|  | virtual void	EndElement(); | 
|  |  | 
|  | // OPropertyImport overridables | 
|  | virtual bool    handleAttribute(sal_uInt16 _nNamespaceKey, | 
|  | const ::rtl::OUString& _rLocalName, | 
|  | const ::rtl::OUString& _rValue); | 
|  |  | 
|  | void addOuterAttributes(const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxOuterAttribs); | 
|  |  | 
|  | protected: | 
|  | void setElementType(OControlElement::ElementType _eType) { m_eElementType = _eType; } | 
|  |  | 
|  | protected: | 
|  | void implTranslateValueProperty( | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo >& _rxPropInfo, | 
|  | ::com::sun::star::beans::PropertyValue& /* [in/out] */ _rPropValue); | 
|  |  | 
|  | virtual ::rtl::OUString determineDefaultServiceName() const; | 
|  |  | 
|  | /** registers the given cell address as value binding address for our element | 
|  |  | 
|  | <p>The default implementation simply calls registerCellValueBinding at our import | 
|  | context, but you may want to override this behaviour.</p> | 
|  |  | 
|  | @param _rBoundCellAddress | 
|  | the cell address to register for our element. Must not be <NULL/>. | 
|  | @precond | 
|  | we have a valid element (m_xElement) | 
|  | */ | 
|  | virtual void doRegisterCellValueBinding( const ::rtl::OUString& _rBoundCellAddress ); | 
|  |  | 
|  | /** register the given XForms binding */ | 
|  | virtual void doRegisterXFormsValueBinding( const ::rtl::OUString& ); | 
|  |  | 
|  | /** register the given XForms list binding */ | 
|  | virtual void doRegisterXFormsListBinding( const ::rtl::OUString& ); | 
|  |  | 
|  | /** register the given XForms submission */ | 
|  | virtual void doRegisterXFormsSubmission( const ::rtl::OUString& ); | 
|  |  | 
|  | protected: | 
|  | //added by BerryJia for fixing bug102407 2002-11-5 | 
|  | // OElementImport overridables | 
|  | virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > | 
|  | createElement(); | 
|  | }; | 
|  |  | 
|  | // TODO: | 
|  | // this whole mechanism doesn't scale. Instead of deriving even more classes for every new attribute, | 
|  | // we should have dedicated attribute handlers | 
|  | // The rest of xmloff implements it this way - why don't we do, too? | 
|  |  | 
|  | //===================================================================== | 
|  | //= OImagePositionImport | 
|  | //===================================================================== | 
|  | class OImagePositionImport : public OControlImport | 
|  | { | 
|  | sal_Int16   m_nImagePosition; | 
|  | sal_Int16   m_nImageAlign; | 
|  | sal_Bool    m_bHaveImagePosition; | 
|  |  | 
|  | public: | 
|  | OImagePositionImport( | 
|  | 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 | 
|  | ); | 
|  |  | 
|  | protected: | 
|  | // SvXMLImportContext overridables | 
|  | virtual void StartElement( | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); | 
|  |  | 
|  | // OPropertyImport overridables | 
|  | virtual bool    handleAttribute( sal_uInt16 _nNamespaceKey, | 
|  | const ::rtl::OUString& _rLocalName, | 
|  | const ::rtl::OUString& _rValue | 
|  | ); | 
|  | }; | 
|  |  | 
|  | //===================================================================== | 
|  | //= OReferredControlImport | 
|  | //===================================================================== | 
|  | class OReferredControlImport : public OControlImport | 
|  | { | 
|  | protected: | 
|  | ::rtl::OUString	m_sReferringControls;	// the list of ids of controls referring to the one being imported | 
|  |  | 
|  | public: | 
|  | OReferredControlImport( | 
|  | 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 | 
|  | ); | 
|  |  | 
|  | // SvXMLImportContext overridables | 
|  | virtual void StartElement( | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); | 
|  |  | 
|  | // OPropertyImport overridables | 
|  | virtual bool    handleAttribute(sal_uInt16 _nNamespaceKey, | 
|  | const ::rtl::OUString& _rLocalName, | 
|  | const ::rtl::OUString& _rValue); | 
|  | }; | 
|  |  | 
|  | //===================================================================== | 
|  | //= OPasswordImport | 
|  | //===================================================================== | 
|  | class OPasswordImport : public OControlImport | 
|  | { | 
|  | public: | 
|  | OPasswordImport( | 
|  | 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 | 
|  | ); | 
|  |  | 
|  | // OPropertyImport overridables | 
|  | virtual bool    handleAttribute(sal_uInt16 _nNamespaceKey, | 
|  | const ::rtl::OUString& _rLocalName, | 
|  | const ::rtl::OUString& _rValue); | 
|  | }; | 
|  |  | 
|  | //===================================================================== | 
|  | //= ORadioImport | 
|  | //===================================================================== | 
|  | class ORadioImport : public OImagePositionImport | 
|  | { | 
|  | public: | 
|  | ORadioImport( | 
|  | 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 | 
|  | ); | 
|  |  | 
|  | protected: | 
|  | // OPropertyImport overridables | 
|  | virtual bool    handleAttribute(sal_uInt16 _nNamespaceKey, | 
|  | const ::rtl::OUString& _rLocalName, | 
|  | const ::rtl::OUString& _rValue); | 
|  | }; | 
|  |  | 
|  | //===================================================================== | 
|  | //= OURLReferenceImport | 
|  | //===================================================================== | 
|  | /** a specialized version of the <type>OControlImport</type> class, which is able | 
|  | to handle attributes which denote URLs (and stored relative) | 
|  | */ | 
|  | class OURLReferenceImport : public OImagePositionImport | 
|  | { | 
|  | public: | 
|  | OURLReferenceImport( | 
|  | 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 | 
|  | ); | 
|  |  | 
|  | protected: | 
|  | // OPropertyImport overridables | 
|  | virtual bool    handleAttribute(sal_uInt16 _nNamespaceKey, | 
|  | const ::rtl::OUString& _rLocalName, | 
|  | const ::rtl::OUString& _rValue); | 
|  | }; | 
|  |  | 
|  | //===================================================================== | 
|  | //= OButtonImport | 
|  | //===================================================================== | 
|  | /** A specialized version of the <type>OControlImport</type> class, which handles | 
|  | the target frame for image and command buttons | 
|  | */ | 
|  | class OButtonImport : public OURLReferenceImport | 
|  | { | 
|  | public: | 
|  | OButtonImport( | 
|  | 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 | 
|  | ); | 
|  |  | 
|  | protected: | 
|  | // SvXMLImportContext overridables | 
|  | virtual void StartElement( | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); | 
|  | }; | 
|  |  | 
|  | //===================================================================== | 
|  | //= OValueRangeImport | 
|  | //===================================================================== | 
|  | /** A specialized version of the <type>OControlImport</type> class, which imports | 
|  | the value-range elements | 
|  | */ | 
|  | class OValueRangeImport : public OControlImport | 
|  | { | 
|  | private: | 
|  | sal_Int32   m_nStepSizeValue; | 
|  |  | 
|  | public: | 
|  | OValueRangeImport( | 
|  | 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 | 
|  | ); | 
|  |  | 
|  | protected: | 
|  | // SvXMLImportContext overridables | 
|  | virtual void StartElement( | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList ); | 
|  |  | 
|  | // OPropertyImport overridables | 
|  | virtual bool    handleAttribute( sal_uInt16 _nNamespaceKey, | 
|  | const ::rtl::OUString& _rLocalName, | 
|  | const ::rtl::OUString& _rValue ); | 
|  | }; | 
|  |  | 
|  | //===================================================================== | 
|  | //= OTextLikeImport | 
|  | //===================================================================== | 
|  | /** A specialized version of the <type>OControlImport</type> class, which handles | 
|  | text like controls which have the convert-empty-to-null attribute</p> | 
|  | */ | 
|  | class OTextLikeImport : public OControlImport | 
|  | { | 
|  | private: | 
|  | ::com::sun::star::uno::Reference< com::sun::star::text::XTextCursor >   m_xCursor; | 
|  | ::com::sun::star::uno::Reference< com::sun::star::text::XTextCursor >   m_xOldCursor; | 
|  | bool                                                                    m_bEncounteredTextPara; | 
|  |  | 
|  | public: | 
|  | OTextLikeImport( | 
|  | 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 | 
|  | ); | 
|  |  | 
|  | // SvXMLImportContext overridables | 
|  | virtual void StartElement( | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); | 
|  | virtual SvXMLImportContext* CreateChildContext( | 
|  | sal_uInt16 _nPrefix, const ::rtl::OUString& _rLocalName, | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); | 
|  | virtual void	EndElement(); | 
|  |  | 
|  | private: | 
|  | void    adjustDefaultControlProperty(); | 
|  | void    removeRedundantCurrentValue(); | 
|  | }; | 
|  |  | 
|  | //===================================================================== | 
|  | //= OListAndComboImport | 
|  | //===================================================================== | 
|  | /** A specialized version of the <type>OControlImport</type> class, which handles | 
|  | attributes / sub elements which are special to list and combo boxes | 
|  | */ | 
|  | class OListAndComboImport : public OControlImport | 
|  | { | 
|  | friend class OListOptionImport; | 
|  | friend class OComboItemImport; | 
|  |  | 
|  | protected: | 
|  | ::com::sun::star::uno::Sequence< ::rtl::OUString > | 
|  | m_aListSource; | 
|  | ::com::sun::star::uno::Sequence< ::rtl::OUString > | 
|  | m_aValueList; | 
|  |  | 
|  | ::com::sun::star::uno::Sequence< sal_Int16 > | 
|  | m_aSelectedSeq; | 
|  | ::com::sun::star::uno::Sequence< sal_Int16 > | 
|  | m_aDefaultSelectedSeq; | 
|  |  | 
|  | ::rtl::OUString m_sCellListSource;      /// the cell range which acts as list source for the control | 
|  |  | 
|  | sal_Int32		m_nEmptyListItems;      /// number of empty list items encountered during reading | 
|  | sal_Int32		m_nEmptyValueItems;     /// number of empty value items encountered during reading | 
|  |  | 
|  | sal_Bool		m_bEncounteredLSAttrib; | 
|  | sal_Bool        m_bLinkWithIndexes;     /** <TRUE/> if and only if we should use a cell value binding | 
|  | which exchanges the selection index (instead of the selection text | 
|  | */ | 
|  |  | 
|  | public: | 
|  | OListAndComboImport( | 
|  | 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 | 
|  | ); | 
|  |  | 
|  | // SvXMLImportContext overridables | 
|  | virtual void StartElement( | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); | 
|  | virtual SvXMLImportContext* CreateChildContext( | 
|  | sal_uInt16 _nPrefix, const ::rtl::OUString& _rLocalName, | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); | 
|  | virtual void	EndElement(); | 
|  |  | 
|  | // OPropertyImport overridables | 
|  | virtual bool    handleAttribute(sal_uInt16 _nNamespaceKey, | 
|  | const ::rtl::OUString& _rLocalName, | 
|  | const ::rtl::OUString& _rValue); | 
|  |  | 
|  | // OControlImport ovrridables | 
|  | virtual void doRegisterCellValueBinding( const ::rtl::OUString& _rBoundCellAddress ); | 
|  |  | 
|  | protected: | 
|  | void implPushBackLabel(const ::rtl::OUString& _rLabel); | 
|  | void implPushBackValue(const ::rtl::OUString& _rValue); | 
|  |  | 
|  | void implEmptyLabelFound(); | 
|  | void implEmptyValueFound(); | 
|  |  | 
|  | void implSelectCurrentItem(); | 
|  | void implDefaultSelectCurrentItem(); | 
|  | }; | 
|  | SV_DECL_IMPL_REF(OListAndComboImport); | 
|  |  | 
|  | //===================================================================== | 
|  | //= OListOptionImport | 
|  | //===================================================================== | 
|  | /** helper class for importing a single <form:option> element. | 
|  | */ | 
|  | class OListOptionImport | 
|  | :public SvXMLImportContext | 
|  | { | 
|  | OListAndComboImportRef	m_xListBoxImport; | 
|  |  | 
|  | public: | 
|  | OListOptionImport(SvXMLImport& _rImport, sal_uInt16 _nPrefix, const ::rtl::OUString& _rName, | 
|  | const OListAndComboImportRef& _rListBox); | 
|  |  | 
|  | virtual void StartElement( | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); | 
|  | }; | 
|  |  | 
|  | //===================================================================== | 
|  | //= OComboItemImport | 
|  | //===================================================================== | 
|  | /** helper class for importing a single <form:item> element. | 
|  | */ | 
|  | class OComboItemImport | 
|  | :public SvXMLImportContext | 
|  | { | 
|  | OListAndComboImportRef	m_xListBoxImport; | 
|  |  | 
|  | public: | 
|  | OComboItemImport(SvXMLImport& _rImport, sal_uInt16 _nPrefix, const ::rtl::OUString& _rName, | 
|  | const OListAndComboImportRef& _rListBox); | 
|  |  | 
|  | protected: | 
|  | // SvXMLImportContext overridables | 
|  | virtual void StartElement( | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); | 
|  | }; | 
|  |  | 
|  | //===================================================================== | 
|  | //= OContainerImport | 
|  | //===================================================================== | 
|  | // BASE must be a derivee of OElementImport | 
|  | template <class BASE> | 
|  | class OContainerImport | 
|  | :public BASE | 
|  | ,public ODefaultEventAttacherManager | 
|  | { | 
|  | protected: | 
|  | ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > | 
|  | m_xMeAsContainer; | 
|  | ::rtl::OUString	m_sWrapperElementName; | 
|  |  | 
|  | protected: | 
|  | OContainerImport(OFormLayerXMLImport_Impl& _rImport, IEventAttacherManager& _rEventManager, sal_uInt16 _nPrefix, const ::rtl::OUString& _rName, | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& _rxParentContainer, | 
|  | const sal_Char* _pWrapperElementName) | 
|  | :BASE(_rImport, _rEventManager, _nPrefix, _rName, _rxParentContainer) | 
|  | ,m_sWrapperElementName(::rtl::OUString::createFromAscii(_pWrapperElementName)) | 
|  | { | 
|  | } | 
|  |  | 
|  | // SvXMLImportContext overridables | 
|  | virtual SvXMLImportContext* CreateChildContext( | 
|  | sal_uInt16 _nPrefix, const ::rtl::OUString& _rLocalName, | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); | 
|  | virtual void EndElement(); | 
|  |  | 
|  | protected: | 
|  | // OElementImport overridables | 
|  | virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > | 
|  | createElement(); | 
|  |  | 
|  | // create the child context for the given control type | 
|  | virtual SvXMLImportContext*	implCreateControlWrapper( | 
|  | sal_uInt16 _nPrefix, const ::rtl::OUString& _rLocalName) = 0; | 
|  | }; | 
|  |  | 
|  | //===================================================================== | 
|  | //= OColumnImport | 
|  | //===================================================================== | 
|  | /** helper class importing a single grid column (without the <form:column> element wrapping | 
|  | the column). | 
|  |  | 
|  | <p>BASE (the template argument) must be a derivee of OControlImport</p> | 
|  | */ | 
|  | template <class BASE> | 
|  | class OColumnImport : public BASE | 
|  | { | 
|  | protected: | 
|  | ::com::sun::star::uno::Reference< ::com::sun::star::form::XGridColumnFactory > | 
|  | m_xColumnFactory; | 
|  |  | 
|  | public: | 
|  | 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); | 
|  |  | 
|  | protected: | 
|  | // OElementImport overridables | 
|  | virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > | 
|  | createElement(); | 
|  | }; | 
|  |  | 
|  | //===================================================================== | 
|  | //= OColumnWrapperImport | 
|  | //===================================================================== | 
|  | class OColumnWrapperImport : public SvXMLImportContext | 
|  | { | 
|  | protected: | 
|  | ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > | 
|  | m_xOwnAttributes; | 
|  | ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > | 
|  | m_xParentContainer; | 
|  | OFormLayerXMLImport_Impl&	m_rFormImport; | 
|  | IEventAttacherManager&	m_rEventManager; | 
|  |  | 
|  | public: | 
|  | OColumnWrapperImport(OFormLayerXMLImport_Impl& _rImport, IEventAttacherManager& _rEventManager, sal_uInt16 _nPrefix, const ::rtl::OUString& _rName, | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& _rxParentContainer); | 
|  |  | 
|  | // SvXMLImportContext overridables | 
|  | virtual SvXMLImportContext* CreateChildContext( | 
|  | sal_uInt16 _nPrefix, const ::rtl::OUString& _rLocalName, | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); | 
|  | virtual void StartElement( | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); | 
|  | protected: | 
|  | OControlImport* implCreateChildContext( | 
|  | sal_uInt16 _nPrefix, const ::rtl::OUString& _rLocalName, | 
|  | OControlElement::ElementType _eType); | 
|  | }; | 
|  |  | 
|  | //===================================================================== | 
|  | //= OGridImport | 
|  | //===================================================================== | 
|  | typedef OContainerImport< OControlImport >	OGridImport_Base; | 
|  | /** helper class importing a single <form:grid> element | 
|  | */ | 
|  | class OGridImport : public OGridImport_Base | 
|  | { | 
|  | public: | 
|  | OGridImport( | 
|  | 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); | 
|  |  | 
|  | protected: | 
|  | // OContainerImport overridables | 
|  | virtual SvXMLImportContext*	implCreateControlWrapper( | 
|  | sal_uInt16 _nPrefix, const ::rtl::OUString& _rLocalName); | 
|  | }; | 
|  |  | 
|  | //===================================================================== | 
|  | //= OFormImport | 
|  | //===================================================================== | 
|  | typedef OContainerImport< OElementImport >	OFormImport_Base; | 
|  | /** helper class importing a single <form:form> element | 
|  | */ | 
|  | class OFormImport : public OFormImport_Base | 
|  | { | 
|  | public: | 
|  | OFormImport( | 
|  | OFormLayerXMLImport_Impl& _rImport, IEventAttacherManager& _rEventManager, sal_uInt16 _nPrefix, const ::rtl::OUString& _rName, | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& _rxParentContainer | 
|  | ); | 
|  |  | 
|  | protected: | 
|  | // SvXMLImportContext overridables | 
|  | virtual SvXMLImportContext* CreateChildContext( | 
|  | sal_uInt16 _nPrefix, const ::rtl::OUString& _rLocalName, | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); | 
|  | virtual void	StartElement( | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); | 
|  | virtual void	EndElement(); | 
|  |  | 
|  | // OContainerImport overridables | 
|  | virtual SvXMLImportContext*	implCreateControlWrapper( | 
|  | sal_uInt16 _nPrefix, const ::rtl::OUString& _rLocalName); | 
|  |  | 
|  | // OPropertyImport overridables | 
|  | virtual bool    handleAttribute(sal_uInt16 _nNamespaceKey, | 
|  | const ::rtl::OUString& _rLocalName, | 
|  | const ::rtl::OUString& _rValue); | 
|  |  | 
|  | OControlImport* implCreateChildContext( | 
|  | sal_uInt16 _nPrefix, const ::rtl::OUString& _rLocalName, | 
|  | OControlElement::ElementType _eType ); | 
|  |  | 
|  | virtual ::rtl::OUString determineDefaultServiceName() const; | 
|  | void implTranslateStringListProperty(const ::rtl::OUString& _rPropertyName, const ::rtl::OUString& _rValue); | 
|  | }; | 
|  |  | 
|  | //===================================================================== | 
|  | //= OXMLDataSourceImport | 
|  | //===================================================================== | 
|  | class OXMLDataSourceImport : public SvXMLImportContext | 
|  | { | 
|  | public: | 
|  | OXMLDataSourceImport( SvXMLImport& _rImport | 
|  | ,sal_uInt16 nPrfx | 
|  | ,const ::rtl::OUString& rLName | 
|  | ,const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > & xAttrList | 
|  | ,const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _xElement); | 
|  | }; | 
|  |  | 
|  | #define _INCLUDING_FROM_ELEMENTIMPORT_HXX_ | 
|  | #include "elementimport_impl.hxx" | 
|  | #undef _INCLUDING_FROM_ELEMENTIMPORT_HXX_ | 
|  |  | 
|  | //......................................................................... | 
|  | }	// namespace xmloff | 
|  | //......................................................................... | 
|  |  | 
|  | #endif // _XMLOFF_FORMS_ELEMENTIMPORT_HXX_ | 
|  |  |