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 #ifndef _XMLOFF_FORMS_ELEMENTIMPORT_HXX_ 25 #define _XMLOFF_FORMS_ELEMENTIMPORT_HXX_ 26 27 #include "propertyimport.hxx" 28 #include "controlelement.hxx" 29 #include "valueproperties.hxx" 30 #include "eventimport.hxx" 31 #include "logging.hxx" 32 #include "property_description.hxx" 33 34 /** === begin UNO includes === **/ 35 #include <com/sun/star/text/XTextCursor.hpp> 36 #include <com/sun/star/container/XNameContainer.hpp> 37 #include <com/sun/star/lang/XMultiServiceFactory.hpp> 38 #include <com/sun/star/form/XGridColumnFactory.hpp> 39 #include <com/sun/star/script/XEventAttacherManager.hpp> 40 /** === end UNO includes === **/ 41 42 #include <comphelper/stl_types.hxx> 43 44 class XMLTextStyleContext; 45 //......................................................................... 46 namespace xmloff 47 { 48 //......................................................................... 49 50 class IControlIdMap; 51 class OFormLayerXMLImport_Impl; 52 53 //===================================================================== 54 //= OElementNameMap 55 //===================================================================== 56 const OControlElement::ElementType& operator ++(OControlElement::ElementType& _e); 57 58 /** helper class which allows fast translation of xml tag names into element types. 59 */ 60 class OElementNameMap : public OControlElement 61 { 62 protected: 63 DECLARE_STL_USTRINGACCESS_MAP( ElementType, MapString2Element ); 64 static MapString2Element s_sElementTranslations; 65 66 protected: OElementNameMap()67 OElementNameMap() { } 68 69 public: 70 static ElementType getElementType(const ::rtl::OUString& _rName); 71 }; 72 73 //===================================================================== 74 //= OElementImport 75 //===================================================================== 76 /** implements common behaviour for importing forms, controls and columns 77 */ 78 class OElementImport 79 :public OPropertyImport 80 ,public IEventAttacher 81 ,public OStackedLogging 82 { 83 protected: 84 ::rtl::OUString m_sServiceName; // the service name as extracted from the service-name attribute 85 ::rtl::OUString m_sName; // the name of the object (redundant, already contained in the base class' array) 86 OFormLayerXMLImport_Impl& m_rFormImport; // the form import context 87 IEventAttacherManager& m_rEventManager; // the event attacher manager 88 89 const XMLTextStyleContext* m_pStyleElement; // the XML element which describes the style we encountered 90 // while reading our element 91 92 /// the parent container to insert the new element into 93 ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > 94 m_xParentContainer; 95 96 /// the element we're creating. Valid after StartElement 97 ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > 98 m_xElement; 99 ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > 100 m_xInfo; 101 102 bool m_bImplicitGenericAttributeHandling; 103 104 public: 105 /** ctor 106 @param _rImport 107 the importer 108 @param _rEventManager 109 the event attacher manager for the control being imported 110 @param _nPrefix 111 the namespace prefix 112 @param _rName 113 the element name 114 @param _rAttributeMap 115 the attribute map to be used for translating attributes into properties 116 @param _rxParentContainer 117 the container in which the new element should be inserted 118 */ 119 OElementImport( 120 OFormLayerXMLImport_Impl& _rImport, IEventAttacherManager& _rEventManager, 121 sal_uInt16 _nPrefix, const ::rtl::OUString& _rName, 122 const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& _rxParentContainer 123 ); 124 virtual ~OElementImport(); 125 126 protected: 127 // SvXMLImportContext overridables 128 virtual void StartElement( 129 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); 130 virtual SvXMLImportContext* CreateChildContext( 131 sal_uInt16 _nPrefix, const ::rtl::OUString& _rLocalName, 132 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); 133 virtual void EndElement(); 134 135 // OPropertyImport overridables 136 virtual bool handleAttribute(sal_uInt16 _nNamespaceKey, 137 const ::rtl::OUString& _rLocalName, 138 const ::rtl::OUString& _rValue); 139 140 // IEventAttacher 141 virtual void registerEvents( 142 const ::com::sun::star::uno::Sequence< ::com::sun::star::script::ScriptEventDescriptor >& _rEvents 143 ); 144 145 /** create the (uninitialized) element which is to represent the read data 146 147 <p>The default implementation uses <member>m_xORB</member> to create a object with <member>m_sServiceName</member>. 148 */ 149 virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > 150 createElement(); 151 152 protected: 153 /** can be used to handle properties where the attribute default and the property default differ. 154 <p>In such case, if the property had the attribute default upon writing, nothing is read, so upon reading, 155 the property is still at it's own default (which is not the attribute default).<p/> 156 <p>This method, if told the attribute and the property, and the (implied) attribute default, sets the 157 property value as if the attribute was encountered.</p> 158 @see encounteredAttribute 159 */ 160 void simulateDefaultedAttribute(const sal_Char* _pAttributeName, const ::rtl::OUString& _rPropertyName, const sal_Char* _pAttributeDefault); 161 162 /** to be called from within handleAttribute, checks whether the given attribute is covered by our generic 163 attribute handler mechanisms 164 */ 165 bool tryGenericAttribute( sal_uInt16 _nNamespaceKey, const ::rtl::OUString& _rLocalName, const ::rtl::OUString& _rValue ); 166 167 /** controls whether |handleAttribute| implicitly calls |tryGenericAttribute|, or whether the derived class 168 must do this explicitly at a suitable place in its own |handleAttribute| 169 */ disableImplicitGenericAttributeHandling()170 void disableImplicitGenericAttributeHandling() { m_bImplicitGenericAttributeHandling = false; } 171 172 private: 173 ::rtl::OUString implGetDefaultName() const; 174 void implApplyGenericProperties(); 175 void implApplySpecificProperties(); 176 177 /** sets the style properties which have been read for the element (if any) 178 */ 179 void implSetStyleProperties( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxObject ); 180 181 PropertyGroups::const_iterator impl_matchPropertyGroup( const PropertyGroups& i_propertyGroups ) const; 182 183 virtual ::rtl::OUString determineDefaultServiceName() const; 184 }; 185 186 //===================================================================== 187 //= OControlImport 188 //===================================================================== 189 /** helper class for importing the description of a single control 190 */ 191 class OControlImport 192 :public OElementImport 193 ,public OValuePropertiesMetaData 194 { 195 protected: 196 ::rtl::OUString m_sControlId; 197 OControlElement::ElementType m_eElementType; 198 199 PropertyValueArray m_aValueProperties; 200 // the value properties (value, current-value, min-value, max-value) require some special 201 // handling 202 203 // we fake the attributes our base class gets: we add the attributes of the outer wrapper 204 // element which encloses us 205 ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > 206 m_xOuterAttributes; 207 208 /** the address of the calc cell which the control model should be bound to, 209 if applicable 210 */ 211 ::rtl::OUString m_sBoundCellAddress; 212 213 /** name of a value binding (xforms:bind attribute) */ 214 ::rtl::OUString m_sBindingID; 215 216 /** name of a list binding (form:xforms-list-source attribute) */ 217 ::rtl::OUString m_sListBindingID; 218 219 /** name of a submission (xforms:submission attribute) */ 220 ::rtl::OUString m_sSubmissionID; 221 222 protected: 223 // for use by derived classes only 224 OControlImport( 225 OFormLayerXMLImport_Impl& _rImport, IEventAttacherManager& _rEventManager, 226 sal_uInt16 _nPrefix, const ::rtl::OUString& _rName, 227 const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& _rxParentContainer 228 ); 229 230 public: 231 OControlImport( 232 OFormLayerXMLImport_Impl& _rImport, IEventAttacherManager& _rEventManager, 233 sal_uInt16 _nPrefix, const ::rtl::OUString& _rName, 234 const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& _rxParentContainer, 235 OControlElement::ElementType _eType 236 ); 237 238 // SvXMLImportContext overridables 239 virtual void StartElement( 240 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); 241 virtual void EndElement(); 242 243 // OPropertyImport overridables 244 virtual bool handleAttribute(sal_uInt16 _nNamespaceKey, 245 const ::rtl::OUString& _rLocalName, 246 const ::rtl::OUString& _rValue); 247 248 void addOuterAttributes(const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxOuterAttribs); 249 250 protected: setElementType(OControlElement::ElementType _eType)251 void setElementType(OControlElement::ElementType _eType) { m_eElementType = _eType; } 252 253 protected: 254 void implTranslateValueProperty( 255 const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo >& _rxPropInfo, 256 ::com::sun::star::beans::PropertyValue& /* [in/out] */ _rPropValue); 257 258 virtual ::rtl::OUString determineDefaultServiceName() const; 259 260 /** registers the given cell address as value binding address for our element 261 262 <p>The default implementation simply calls registerCellValueBinding at our import 263 context, but you may want to override this behaviour.</p> 264 265 @param _rBoundCellAddress 266 the cell address to register for our element. Must not be <NULL/>. 267 @precond 268 we have a valid element (m_xElement) 269 */ 270 virtual void doRegisterCellValueBinding( const ::rtl::OUString& _rBoundCellAddress ); 271 272 /** register the given XForms binding */ 273 virtual void doRegisterXFormsValueBinding( const ::rtl::OUString& ); 274 275 /** register the given XForms list binding */ 276 virtual void doRegisterXFormsListBinding( const ::rtl::OUString& ); 277 278 /** register the given XForms submission */ 279 virtual void doRegisterXFormsSubmission( const ::rtl::OUString& ); 280 281 protected: 282 //added by BerryJia for fixing bug102407 2002-11-5 283 // OElementImport overridables 284 virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > 285 createElement(); 286 }; 287 288 // TODO: 289 // this whole mechanism doesn't scale. Instead of deriving even more classes for every new attribute, 290 // we should have dedicated attribute handlers 291 // The rest of xmloff implements it this way - why don't we do, too? 292 293 //===================================================================== 294 //= OImagePositionImport 295 //===================================================================== 296 class OImagePositionImport : public OControlImport 297 { 298 sal_Int16 m_nImagePosition; 299 sal_Int16 m_nImageAlign; 300 sal_Bool m_bHaveImagePosition; 301 302 public: 303 OImagePositionImport( 304 OFormLayerXMLImport_Impl& _rImport, IEventAttacherManager& _rEventManager, sal_uInt16 _nPrefix, const ::rtl::OUString& _rName, 305 const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& _rxParentContainer, 306 OControlElement::ElementType _eType 307 ); 308 309 protected: 310 // SvXMLImportContext overridables 311 virtual void StartElement( 312 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); 313 314 // OPropertyImport overridables 315 virtual bool handleAttribute( sal_uInt16 _nNamespaceKey, 316 const ::rtl::OUString& _rLocalName, 317 const ::rtl::OUString& _rValue 318 ); 319 }; 320 321 //===================================================================== 322 //= OReferredControlImport 323 //===================================================================== 324 class OReferredControlImport : public OControlImport 325 { 326 protected: 327 ::rtl::OUString m_sReferringControls; // the list of ids of controls referring to the one being imported 328 329 public: 330 OReferredControlImport( 331 OFormLayerXMLImport_Impl& _rImport, IEventAttacherManager& _rEventManager, sal_uInt16 _nPrefix, const ::rtl::OUString& _rName, 332 const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& _rxParentContainer, 333 OControlElement::ElementType _eType 334 ); 335 336 // SvXMLImportContext overridables 337 virtual void StartElement( 338 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); 339 340 // OPropertyImport overridables 341 virtual bool handleAttribute(sal_uInt16 _nNamespaceKey, 342 const ::rtl::OUString& _rLocalName, 343 const ::rtl::OUString& _rValue); 344 }; 345 346 //===================================================================== 347 //= OPasswordImport 348 //===================================================================== 349 class OPasswordImport : public OControlImport 350 { 351 public: 352 OPasswordImport( 353 OFormLayerXMLImport_Impl& _rImport, IEventAttacherManager& _rEventManager, sal_uInt16 _nPrefix, const ::rtl::OUString& _rName, 354 const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& _rxParentContainer, 355 OControlElement::ElementType _eType 356 ); 357 358 // OPropertyImport overridables 359 virtual bool handleAttribute(sal_uInt16 _nNamespaceKey, 360 const ::rtl::OUString& _rLocalName, 361 const ::rtl::OUString& _rValue); 362 }; 363 364 //===================================================================== 365 //= ORadioImport 366 //===================================================================== 367 class ORadioImport : public OImagePositionImport 368 { 369 public: 370 ORadioImport( 371 OFormLayerXMLImport_Impl& _rImport, IEventAttacherManager& _rEventManager, sal_uInt16 _nPrefix, const ::rtl::OUString& _rName, 372 const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& _rxParentContainer, 373 OControlElement::ElementType _eType 374 ); 375 376 protected: 377 // OPropertyImport overridables 378 virtual bool handleAttribute(sal_uInt16 _nNamespaceKey, 379 const ::rtl::OUString& _rLocalName, 380 const ::rtl::OUString& _rValue); 381 }; 382 383 //===================================================================== 384 //= OURLReferenceImport 385 //===================================================================== 386 /** a specialized version of the <type>OControlImport</type> class, which is able 387 to handle attributes which denote URLs (and stored relative) 388 */ 389 class OURLReferenceImport : public OImagePositionImport 390 { 391 public: 392 OURLReferenceImport( 393 OFormLayerXMLImport_Impl& _rImport, IEventAttacherManager& _rEventManager, sal_uInt16 _nPrefix, const ::rtl::OUString& _rName, 394 const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& _rxParentContainer, 395 OControlElement::ElementType _eType 396 ); 397 398 protected: 399 // OPropertyImport overridables 400 virtual bool handleAttribute(sal_uInt16 _nNamespaceKey, 401 const ::rtl::OUString& _rLocalName, 402 const ::rtl::OUString& _rValue); 403 }; 404 405 //===================================================================== 406 //= OButtonImport 407 //===================================================================== 408 /** A specialized version of the <type>OControlImport</type> class, which handles 409 the target frame for image and command buttons 410 */ 411 class OButtonImport : public OURLReferenceImport 412 { 413 public: 414 OButtonImport( 415 OFormLayerXMLImport_Impl& _rImport, IEventAttacherManager& _rEventManager, sal_uInt16 _nPrefix, const ::rtl::OUString& _rName, 416 const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& _rxParentContainer, 417 OControlElement::ElementType _eType 418 ); 419 420 protected: 421 // SvXMLImportContext overridables 422 virtual void StartElement( 423 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); 424 }; 425 426 //===================================================================== 427 //= OValueRangeImport 428 //===================================================================== 429 /** A specialized version of the <type>OControlImport</type> class, which imports 430 the value-range elements 431 */ 432 class OValueRangeImport : public OControlImport 433 { 434 private: 435 sal_Int32 m_nStepSizeValue; 436 437 public: 438 OValueRangeImport( 439 OFormLayerXMLImport_Impl& _rImport, IEventAttacherManager& _rEventManager, sal_uInt16 _nPrefix, const ::rtl::OUString& _rName, 440 const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& _rxParentContainer, 441 OControlElement::ElementType _eType 442 ); 443 444 protected: 445 // SvXMLImportContext overridables 446 virtual void StartElement( 447 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList ); 448 449 // OPropertyImport overridables 450 virtual bool handleAttribute( sal_uInt16 _nNamespaceKey, 451 const ::rtl::OUString& _rLocalName, 452 const ::rtl::OUString& _rValue ); 453 }; 454 455 //===================================================================== 456 //= OTextLikeImport 457 //===================================================================== 458 /** A specialized version of the <type>OControlImport</type> class, which handles 459 text like controls which have the convert-empty-to-null attribute</p> 460 */ 461 class OTextLikeImport : public OControlImport 462 { 463 private: 464 ::com::sun::star::uno::Reference< com::sun::star::text::XTextCursor > m_xCursor; 465 ::com::sun::star::uno::Reference< com::sun::star::text::XTextCursor > m_xOldCursor; 466 bool m_bEncounteredTextPara; 467 468 public: 469 OTextLikeImport( 470 OFormLayerXMLImport_Impl& _rImport, IEventAttacherManager& _rEventManager, sal_uInt16 _nPrefix, const ::rtl::OUString& _rName, 471 const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& _rxParentContainer, 472 OControlElement::ElementType _eType 473 ); 474 475 // SvXMLImportContext overridables 476 virtual void StartElement( 477 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); 478 virtual SvXMLImportContext* CreateChildContext( 479 sal_uInt16 _nPrefix, const ::rtl::OUString& _rLocalName, 480 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); 481 virtual void EndElement(); 482 483 private: 484 void adjustDefaultControlProperty(); 485 void removeRedundantCurrentValue(); 486 }; 487 488 //===================================================================== 489 //= OListAndComboImport 490 //===================================================================== 491 /** A specialized version of the <type>OControlImport</type> class, which handles 492 attributes / sub elements which are special to list and combo boxes 493 */ 494 class OListAndComboImport : public OControlImport 495 { 496 friend class OListOptionImport; 497 friend class OComboItemImport; 498 499 protected: 500 ::com::sun::star::uno::Sequence< ::rtl::OUString > 501 m_aListSource; 502 ::com::sun::star::uno::Sequence< ::rtl::OUString > 503 m_aValueList; 504 505 ::com::sun::star::uno::Sequence< sal_Int16 > 506 m_aSelectedSeq; 507 ::com::sun::star::uno::Sequence< sal_Int16 > 508 m_aDefaultSelectedSeq; 509 510 ::rtl::OUString m_sCellListSource; /// the cell range which acts as list source for the control 511 512 sal_Int32 m_nEmptyListItems; /// number of empty list items encountered during reading 513 sal_Int32 m_nEmptyValueItems; /// number of empty value items encountered during reading 514 515 sal_Bool m_bEncounteredLSAttrib; 516 sal_Bool m_bLinkWithIndexes; /** <TRUE/> if and only if we should use a cell value binding 517 which exchanges the selection index (instead of the selection text 518 */ 519 520 public: 521 OListAndComboImport( 522 OFormLayerXMLImport_Impl& _rImport, IEventAttacherManager& _rEventManager, sal_uInt16 _nPrefix, const ::rtl::OUString& _rName, 523 const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& _rxParentContainer, 524 OControlElement::ElementType _eType 525 ); 526 527 // SvXMLImportContext overridables 528 virtual void StartElement( 529 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); 530 virtual SvXMLImportContext* CreateChildContext( 531 sal_uInt16 _nPrefix, const ::rtl::OUString& _rLocalName, 532 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); 533 virtual void EndElement(); 534 535 // OPropertyImport overridables 536 virtual bool handleAttribute(sal_uInt16 _nNamespaceKey, 537 const ::rtl::OUString& _rLocalName, 538 const ::rtl::OUString& _rValue); 539 540 // OControlImport ovrridables 541 virtual void doRegisterCellValueBinding( const ::rtl::OUString& _rBoundCellAddress ); 542 543 protected: 544 void implPushBackLabel(const ::rtl::OUString& _rLabel); 545 void implPushBackValue(const ::rtl::OUString& _rValue); 546 547 void implEmptyLabelFound(); 548 void implEmptyValueFound(); 549 550 void implSelectCurrentItem(); 551 void implDefaultSelectCurrentItem(); 552 }; 553 SV_DECL_IMPL_REF(OListAndComboImport); 554 555 //===================================================================== 556 //= OListOptionImport 557 //===================================================================== 558 /** helper class for importing a single <form:option> element. 559 */ 560 class OListOptionImport 561 :public SvXMLImportContext 562 { 563 OListAndComboImportRef m_xListBoxImport; 564 565 public: 566 OListOptionImport(SvXMLImport& _rImport, sal_uInt16 _nPrefix, const ::rtl::OUString& _rName, 567 const OListAndComboImportRef& _rListBox); 568 569 virtual void StartElement( 570 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); 571 }; 572 573 //===================================================================== 574 //= OComboItemImport 575 //===================================================================== 576 /** helper class for importing a single <form:item> element. 577 */ 578 class OComboItemImport 579 :public SvXMLImportContext 580 { 581 OListAndComboImportRef m_xListBoxImport; 582 583 public: 584 OComboItemImport(SvXMLImport& _rImport, sal_uInt16 _nPrefix, const ::rtl::OUString& _rName, 585 const OListAndComboImportRef& _rListBox); 586 587 protected: 588 // SvXMLImportContext overridables 589 virtual void StartElement( 590 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); 591 }; 592 593 //===================================================================== 594 //= OContainerImport 595 //===================================================================== 596 // BASE must be a derivee of OElementImport 597 template <class BASE> 598 class OContainerImport 599 :public BASE 600 ,public ODefaultEventAttacherManager 601 { 602 protected: 603 ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > 604 m_xMeAsContainer; 605 ::rtl::OUString m_sWrapperElementName; 606 607 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)608 OContainerImport(OFormLayerXMLImport_Impl& _rImport, IEventAttacherManager& _rEventManager, sal_uInt16 _nPrefix, const ::rtl::OUString& _rName, 609 const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& _rxParentContainer, 610 const sal_Char* _pWrapperElementName) 611 :BASE(_rImport, _rEventManager, _nPrefix, _rName, _rxParentContainer) 612 ,m_sWrapperElementName(::rtl::OUString::createFromAscii(_pWrapperElementName)) 613 { 614 } 615 616 // SvXMLImportContext overridables 617 virtual SvXMLImportContext* CreateChildContext( 618 sal_uInt16 _nPrefix, const ::rtl::OUString& _rLocalName, 619 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); 620 virtual void EndElement(); 621 622 protected: 623 // OElementImport overridables 624 virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > 625 createElement(); 626 627 // create the child context for the given control type 628 virtual SvXMLImportContext* implCreateControlWrapper( 629 sal_uInt16 _nPrefix, const ::rtl::OUString& _rLocalName) = 0; 630 }; 631 632 //===================================================================== 633 //= OColumnImport 634 //===================================================================== 635 /** helper class importing a single grid column (without the <form:column> element wrapping 636 the column). 637 638 <p>BASE (the template argument) must be a derivee of OControlImport</p> 639 */ 640 template <class BASE> 641 class OColumnImport : public BASE 642 { 643 protected: 644 ::com::sun::star::uno::Reference< ::com::sun::star::form::XGridColumnFactory > 645 m_xColumnFactory; 646 647 public: 648 OColumnImport(OFormLayerXMLImport_Impl& _rImport, IEventAttacherManager& _rEventManager, sal_uInt16 _nPrefix, const ::rtl::OUString& _rName, 649 const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& _rxParentContainer, 650 OControlElement::ElementType _eType); 651 652 protected: 653 // OElementImport overridables 654 virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > 655 createElement(); 656 }; 657 658 //===================================================================== 659 //= OColumnWrapperImport 660 //===================================================================== 661 class OColumnWrapperImport : public SvXMLImportContext 662 { 663 protected: 664 ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > 665 m_xOwnAttributes; 666 ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > 667 m_xParentContainer; 668 OFormLayerXMLImport_Impl& m_rFormImport; 669 IEventAttacherManager& m_rEventManager; 670 671 public: 672 OColumnWrapperImport(OFormLayerXMLImport_Impl& _rImport, IEventAttacherManager& _rEventManager, sal_uInt16 _nPrefix, const ::rtl::OUString& _rName, 673 const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& _rxParentContainer); 674 675 // SvXMLImportContext overridables 676 virtual SvXMLImportContext* CreateChildContext( 677 sal_uInt16 _nPrefix, const ::rtl::OUString& _rLocalName, 678 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); 679 virtual void StartElement( 680 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); 681 protected: 682 OControlImport* implCreateChildContext( 683 sal_uInt16 _nPrefix, const ::rtl::OUString& _rLocalName, 684 OControlElement::ElementType _eType); 685 }; 686 687 //===================================================================== 688 //= OGridImport 689 //===================================================================== 690 typedef OContainerImport< OControlImport > OGridImport_Base; 691 /** helper class importing a single <form:grid> element 692 */ 693 class OGridImport : public OGridImport_Base 694 { 695 public: 696 OGridImport( 697 OFormLayerXMLImport_Impl& _rImport, IEventAttacherManager& _rEventManager, sal_uInt16 _nPrefix, const ::rtl::OUString& _rName, 698 const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& _rxParentContainer, 699 OControlElement::ElementType _eType); 700 701 protected: 702 // OContainerImport overridables 703 virtual SvXMLImportContext* implCreateControlWrapper( 704 sal_uInt16 _nPrefix, const ::rtl::OUString& _rLocalName); 705 }; 706 707 //===================================================================== 708 //= OFormImport 709 //===================================================================== 710 typedef OContainerImport< OElementImport > OFormImport_Base; 711 /** helper class importing a single <form:form> element 712 */ 713 class OFormImport : public OFormImport_Base 714 { 715 public: 716 OFormImport( 717 OFormLayerXMLImport_Impl& _rImport, IEventAttacherManager& _rEventManager, sal_uInt16 _nPrefix, const ::rtl::OUString& _rName, 718 const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& _rxParentContainer 719 ); 720 721 protected: 722 // SvXMLImportContext overridables 723 virtual SvXMLImportContext* CreateChildContext( 724 sal_uInt16 _nPrefix, const ::rtl::OUString& _rLocalName, 725 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); 726 virtual void StartElement( 727 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& _rxAttrList); 728 virtual void EndElement(); 729 730 // OContainerImport overridables 731 virtual SvXMLImportContext* implCreateControlWrapper( 732 sal_uInt16 _nPrefix, const ::rtl::OUString& _rLocalName); 733 734 // OPropertyImport overridables 735 virtual bool handleAttribute(sal_uInt16 _nNamespaceKey, 736 const ::rtl::OUString& _rLocalName, 737 const ::rtl::OUString& _rValue); 738 739 OControlImport* implCreateChildContext( 740 sal_uInt16 _nPrefix, const ::rtl::OUString& _rLocalName, 741 OControlElement::ElementType _eType ); 742 743 virtual ::rtl::OUString determineDefaultServiceName() const; 744 void implTranslateStringListProperty(const ::rtl::OUString& _rPropertyName, const ::rtl::OUString& _rValue); 745 }; 746 747 //===================================================================== 748 //= OXMLDataSourceImport 749 //===================================================================== 750 class OXMLDataSourceImport : public SvXMLImportContext 751 { 752 public: 753 OXMLDataSourceImport( SvXMLImport& _rImport 754 ,sal_uInt16 nPrfx 755 ,const ::rtl::OUString& rLName 756 ,const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > & xAttrList 757 ,const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _xElement); 758 }; 759 760 #define _INCLUDING_FROM_ELEMENTIMPORT_HXX_ 761 #include "elementimport_impl.hxx" 762 #undef _INCLUDING_FROM_ELEMENTIMPORT_HXX_ 763 764 //......................................................................... 765 } // namespace xmloff 766 //......................................................................... 767 768 #endif // _XMLOFF_FORMS_ELEMENTIMPORT_HXX_ 769 770