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 /** @#file 25 * 26 * XML import of all variable related text fields plus database display field 27 */ 28 29 #ifndef _XMLOFF_TXTVFLDI_HXX 30 #define _XMLOFF_TXTVFLDI_HXX 31 32 #include "txtvfldi.hxx" 33 #include "txtfldi.hxx" 34 #include <com/sun/star/beans/XPropertySet.hpp> 35 #include <com/sun/star/beans/XPropertySetInfo.hpp> 36 37 38 39 /// variable type (for XMLSetVarFieldImportContext) 40 enum VarType 41 { 42 VarTypeSimple, 43 VarTypeUserField, 44 VarTypeSequence 45 }; 46 47 48 49 /** helper class: parses value-type and associated value attributes */ 50 class XMLValueImportHelper 51 { 52 53 const ::rtl::OUString sPropertyContent; 54 const ::rtl::OUString sPropertyValue; 55 const ::rtl::OUString sPropertyFormula; 56 const ::rtl::OUString sPropertyNumberFormat; 57 const ::rtl::OUString sPropertyIsFixedLanguage; 58 59 SvXMLImport& rImport; 60 XMLTextImportHelper& rHelper; 61 62 ::rtl::OUString sValue; /// string value (only valid if bStringValueOK) 63 double fValue; /// double value (only valid if bFloatValueOK) 64 sal_Int32 nFormatKey; /// format key (only valid of bFormatOK) 65 ::rtl::OUString sFormula; /// formula string 66 ::rtl::OUString sDefault; /// default (see bStringDefault/bFormulaDef.) 67 sal_Bool bIsDefaultLanguage;/// format (of nFormatKey) has system language? 68 69 sal_Bool bStringType; /// is this a string (or a float) type? 70 sal_Bool bFormatOK; /// have we read a style:data-style-name attr.? 71 sal_Bool bTypeOK; /// have we read a value-type attribute? 72 sal_Bool bStringValueOK; /// have we read a string-value attr.? 73 sal_Bool bFloatValueOK; /// have we read any of the float attr.s? 74 sal_Bool bFormulaOK; /// have we read the formula attribute? 75 76 const sal_Bool bSetType; /// should PrepareField set the SetExp subtype? 77 const sal_Bool bSetValue; /// should PrepareField set content/value? 78 const sal_Bool bSetStyle; /// should PrepareField set NumberFormat? 79 const sal_Bool bSetFormula; /// should PrepareField set Formula? 80 81 const sal_Bool bStringDefault; /// default: string-value = content 82 const sal_Bool bFormulaDefault; /// default: formula = content 83 84 public: 85 XMLValueImportHelper( 86 SvXMLImport& rImprt, /// XML Import 87 XMLTextImportHelper& rHlp, /// text import helper 88 sal_Bool bType, /// process type (PrepareField) 89 sal_Bool bStyle, /// process data style (P.F.) 90 sal_Bool bValue, /// process value (Prep.Field) 91 sal_Bool bFormula); /// process formula (Prep.F.) 92 93 virtual ~XMLValueImportHelper(); 94 95 /// process attribute values 96 virtual void ProcessAttribute( sal_uInt16 nAttrToken, 97 const ::rtl::OUString& sAttrValue ); 98 99 /// prepare XTextField for insertion into document 100 virtual void PrepareField( 101 const ::com::sun::star::uno::Reference< 102 ::com::sun::star::beans::XPropertySet> & xPropertySet); 103 104 /// is value a string (rather than double)? IsStringValue()105 inline sal_Bool IsStringValue() { return bStringType; } 106 107 /// has format been read? IsFormatOK()108 inline sal_Bool IsFormatOK() { return bFormatOK; } 109 SetDefault(const::rtl::OUString & sStr)110 inline void SetDefault(const ::rtl::OUString& sStr) { sDefault = sStr; } 111 }; 112 113 114 115 /** 116 * abstract parent class for all variable related fields 117 * - variable-set/get/decl (not -decls), 118 * - user-field-get/decl (not -decls), 119 * - sequence/-decl (not -decls), 120 * - expression, 121 * - text-input 122 * 123 * Processes the following attributes: 124 * - name 125 * - formula 126 * - display 127 * - value, value-type, data-style-name (via XMLValueImportHelper) 128 * - description. 129 * 130 * Each attribute has a corresponding member, a bool variable to indicate 131 * whether it was set or not, and a bool variable whether it should be set 132 * using the standard property name. 133 * 134 * bValid is set true, when name is found! 135 * (Most variable related fields are valid, if a name is 136 * found. However, some are always valid. In this case, setting bValid 137 * does not matter.) 138 */ 139 class XMLVarFieldImportContext : public XMLTextFieldImportContext 140 { 141 protected: 142 const ::rtl::OUString sPropertyContent; 143 const ::rtl::OUString sPropertyHint; 144 const ::rtl::OUString sPropertyHelp; 145 const ::rtl::OUString sPropertyTooltip; 146 const ::rtl::OUString sPropertyIsVisible; 147 const ::rtl::OUString sPropertyIsDisplayFormula; 148 const ::rtl::OUString sPropertyCurrentPresentation; 149 150 private: 151 ::rtl::OUString sName; /// name attribute 152 ::rtl::OUString sFormula; /// formula attribute 153 ::rtl::OUString sDescription; /// description 154 ::rtl::OUString sHelp; /// help text 155 ::rtl::OUString sHint; /// hint 156 XMLValueImportHelper aValueHelper; /// value, value-type, and style 157 sal_Bool bDisplayFormula; /// display formula?(rather than value) 158 sal_Bool bDisplayNone; /// hide field? 159 160 sal_Bool bNameOK; /// sName was set 161 sal_Bool bFormulaOK; /// sFormula was set 162 sal_Bool bDescriptionOK; /// sDescription was set 163 sal_Bool bHelpOK; /// sHelp was set 164 sal_Bool bHintOK; /// sHint was set 165 sal_Bool bDisplayOK; /// sDisplayFormula/-None were set 166 167 sal_Bool bSetName; /// set sName with ???-property 168 sal_Bool bSetFormula; /// set Formula property 169 sal_Bool bSetFormulaDefault; /// use content as default for formula 170 sal_Bool bSetDescription; /// set sDescription with Hint-property 171 sal_Bool bSetHelp; 172 sal_Bool bSetHint; 173 sal_Bool bSetVisible; /// set IsVisible 174 sal_Bool bSetDisplayFormula; /// set DisplayFormula (sub type???) 175 sal_Bool bSetPresentation; /// set presentation frm elem. content? 176 177 public: 178 179 TYPEINFO(); 180 181 XMLVarFieldImportContext( 182 // for XMLTextFieldImportContext: 183 SvXMLImport& rImport, /// XML Import 184 XMLTextImportHelper& rHlp, /// text import helper 185 const sal_Char* pServiceName, /// name of SO API service 186 sal_uInt16 nPrfx, /// namespace prefix 187 const ::rtl::OUString& rLocalName, /// element name w/o prefix 188 // config variables for PrepareField behavior: 189 sal_Bool bName, /// set sName with ???-property 190 sal_Bool bFormula, /// set Formula property 191 sal_Bool bFormulaDefault, /// use content as default for formula 192 sal_Bool bDescription, /// set sDescription with Hint-property 193 sal_Bool bHelp, 194 sal_Bool bHint, 195 sal_Bool bVisible, /// set IsVisible (display attr) 196 sal_Bool bDisplayFormula, /// set ??? (display attr.) 197 sal_Bool bType, /// set value type with ???-property 198 sal_Bool bStyle, /// set data style (NumberFormat-Prop.) 199 sal_Bool bValue, /// set value with Content/Value-Prop. 200 sal_Bool bPresentation); /// set presentation from elem. content 201 202 protected: 203 /// process attribute values 204 virtual void ProcessAttribute( sal_uInt16 nAttrToken, 205 const ::rtl::OUString& sAttrValue ); 206 207 /// prepare XTextField for insertion into document 208 virtual void PrepareField( 209 const ::com::sun::star::uno::Reference< 210 ::com::sun::star::beans::XPropertySet> & xPropertySet); 211 212 // various accessor methods: GetName()213 inline ::rtl::OUString GetName() { return sName; } IsStringValue()214 inline sal_Bool IsStringValue() { return aValueHelper.IsStringValue();} IsNameOK()215 inline sal_Bool IsNameOK() { return bNameOK; } IsFormulaOK()216 inline sal_Bool IsFormulaOK() { return bFormulaOK; } IsDescriptionOK()217 inline sal_Bool IsDescriptionOK() { return bDescriptionOK; } IsDisplayOK()218 inline sal_Bool IsDisplayOK() { return bDisplayOK; } 219 }; 220 221 222 223 /** import variable get fields (<text:variable-get>) */ 224 class XMLVariableGetFieldImportContext : public XMLVarFieldImportContext 225 { 226 const ::rtl::OUString sPropertySubType; 227 228 public: 229 230 TYPEINFO(); 231 232 XMLVariableGetFieldImportContext( 233 SvXMLImport& rImport, /// XML Import 234 XMLTextImportHelper& rHlp, /// Text import helper 235 sal_uInt16 nPrfx, /// namespace prefix 236 const ::rtl::OUString& rLocalName); /// element name w/o prefix 237 238 239 protected: 240 /// prepare XTextField for insertion into document 241 virtual void PrepareField( 242 const ::com::sun::star::uno::Reference< 243 ::com::sun::star::beans::XPropertySet> & xPropertySet); 244 }; 245 246 247 248 /** import expression fields (<text:expression>) */ 249 class XMLExpressionFieldImportContext : public XMLVarFieldImportContext 250 { 251 const ::rtl::OUString sPropertySubType; 252 253 public: 254 255 TYPEINFO(); 256 257 XMLExpressionFieldImportContext( 258 SvXMLImport& rImport, /// XML Import 259 XMLTextImportHelper& rHlp, /// Text import helper 260 sal_uInt16 nPrfx, /// namespace prefix 261 const ::rtl::OUString& sLocalName); /// element name w/o prefix 262 263 protected: 264 virtual void PrepareField( 265 const ::com::sun::star::uno::Reference< 266 ::com::sun::star::beans::XPropertySet> & xPropertySet); 267 }; 268 269 /*** import text input fields (<text:text-input>) */ 270 class XMLTextInputFieldImportContext : public XMLVarFieldImportContext 271 { 272 const ::rtl::OUString sPropertyContent; 273 274 public: 275 276 TYPEINFO(); 277 278 XMLTextInputFieldImportContext( 279 SvXMLImport& rImport, /// XML Import 280 XMLTextImportHelper& rHlp, /// Text import helper 281 sal_uInt16 nPrfx, /// namespace prefix 282 const ::rtl::OUString& sLocalName); /// element name w/o prefix 283 284 protected: 285 virtual void PrepareField( 286 const ::com::sun::star::uno::Reference< 287 ::com::sun::star::beans::XPropertySet> & xPropertySet); 288 }; 289 290 291 292 293 294 295 /** 296 * uperclass for variable/user-set, var/user-input, and sequence fields 297 * inds field master of appropriate type and attaches field to it. 298 */ 299 class XMLSetVarFieldImportContext : public XMLVarFieldImportContext 300 { 301 const VarType eFieldType; 302 303 public: 304 305 TYPEINFO(); 306 307 XMLSetVarFieldImportContext( 308 // for XMLTextFieldImportContext: 309 SvXMLImport& rImport, /// see XMLTextFieldImportContext 310 XMLTextImportHelper& rHlp, /// see XMLTextFieldImportContext 311 const sal_Char* pServiceName, /// see XMLTextFieldImportContext 312 sal_uInt16 nPrfx, /// see XMLTextFieldImportContext 313 const ::rtl::OUString& rLocalName, /// see XMLTextFieldImportContext 314 // for finding appropriate field master (see EndElement()) 315 VarType eVarType, /// variable type 316 // config variables: 317 sal_Bool bName, /// see XMLTextFieldImportContext 318 sal_Bool bFormula, /// see XMLTextFieldImportContext 319 sal_Bool bFormulaDefault, /// see XMLTextFieldImportContext 320 sal_Bool bDescription, /// see XMLTextFieldImportContext 321 sal_Bool bHelp, /// see XMLTextFieldImportContext 322 sal_Bool bHint, /// see XMLTextFieldImportContext 323 sal_Bool bVisible, /// see XMLTextFieldImportContext 324 sal_Bool bDisplayFormula, /// see XMLTextFieldImportContext 325 sal_Bool bType, /// see XMLTextFieldImportContext 326 sal_Bool bStyle, /// see XMLTextFieldImportContext 327 sal_Bool bValue, /// see XMLTextFieldImportContext 328 sal_Bool bPresentation); /// see XMLTextFieldImportContext 329 330 protected: 331 332 /// create XTextField, attach master and insert into document; 333 /// also calls PrepareTextField 334 virtual void EndElement(); 335 336 /// find appropriate field master 337 sal_Bool FindFieldMaster( 338 ::com::sun::star::uno::Reference< 339 ::com::sun::star::beans::XPropertySet> & xMaster); 340 }; 341 342 343 344 /** import variable set fields (<text:variable-set>) */ 345 class XMLVariableSetFieldImportContext : public XMLSetVarFieldImportContext 346 { 347 const ::rtl::OUString sPropertySubType; 348 349 public: 350 351 TYPEINFO(); 352 353 XMLVariableSetFieldImportContext( 354 SvXMLImport& rImport, /// XML Import 355 XMLTextImportHelper& rHlp, /// Text import helper 356 sal_uInt16 nPrfx, /// namespace prefix 357 const ::rtl::OUString& rLocalName); /// element name w/o prefix 358 359 protected: 360 /// prepare XTextField for insertion into document 361 virtual void PrepareField( 362 const ::com::sun::star::uno::Reference< 363 ::com::sun::star::beans::XPropertySet> & xPropertySet); 364 }; 365 366 367 368 /** variable input fields (<text:variable-input>) */ 369 class XMLVariableInputFieldImportContext : public XMLSetVarFieldImportContext 370 { 371 const ::rtl::OUString sPropertySubType; 372 const ::rtl::OUString sPropertyIsInput; 373 374 public: 375 376 TYPEINFO(); 377 378 XMLVariableInputFieldImportContext( 379 SvXMLImport& rImport, /// XML Import 380 XMLTextImportHelper& rHlp, /// Text import helper 381 sal_uInt16 nPrfx, /// namespace prefix 382 const ::rtl::OUString& rLocalName); /// element name w/o prefix 383 384 protected: 385 386 /// prepare XTextField for insertion into document 387 virtual void PrepareField( 388 const ::com::sun::star::uno::Reference< 389 ::com::sun::star::beans::XPropertySet> & xPropertySet); 390 }; 391 392 393 394 /** user fields (<text:user-field-get>) */ 395 class XMLUserFieldImportContext : public XMLSetVarFieldImportContext 396 { 397 398 public: 399 400 TYPEINFO(); 401 402 XMLUserFieldImportContext( 403 SvXMLImport& rImport, /// XML Import 404 XMLTextImportHelper& rHlp, /// Text import helper 405 sal_uInt16 nPrfx, /// namespace prefix 406 const ::rtl::OUString& rLocalName); /// element name w/o prefix 407 }; 408 409 /** user input fields (<text:user-field-input>) */ 410 class XMLUserFieldInputImportContext : public XMLVarFieldImportContext 411 { 412 413 public: 414 415 TYPEINFO(); 416 417 XMLUserFieldInputImportContext( 418 SvXMLImport& rImport, /// XML Import 419 XMLTextImportHelper& rHlp, /// Text import helper 420 sal_uInt16 nPrfx, /// namespace prefix 421 const ::rtl::OUString& rLocalName); /// element name w/o prefix 422 423 virtual void PrepareField( 424 const ::com::sun::star::uno::Reference< 425 ::com::sun::star::beans::XPropertySet> & xPropertySet); 426 }; 427 428 429 430 /** sequence fields (<text:sequence>) */ 431 class XMLSequenceFieldImportContext : public XMLSetVarFieldImportContext 432 { 433 const ::rtl::OUString sPropertyFormula; 434 const ::rtl::OUString sPropertyNumberFormat; 435 const ::rtl::OUString sPropertySequenceValue; 436 ::rtl::OUString sFormula; 437 ::rtl::OUString sNumFormat; 438 ::rtl::OUString sNumFormatSync; 439 ::rtl::OUString sRefName; 440 441 sal_Bool bRefNameOK; 442 443 public: 444 445 TYPEINFO(); 446 447 XMLSequenceFieldImportContext( 448 SvXMLImport& rImport, /// XML Import 449 XMLTextImportHelper& rHlp, /// Text import helper 450 sal_uInt16 nPrfx, /// namespace prefix 451 const ::rtl::OUString& rLocalName); /// element name w/o prefix 452 453 protected: 454 455 /// process attribute values 456 virtual void ProcessAttribute( sal_uInt16 nAttrToken, 457 const ::rtl::OUString& sAttrValue ); 458 459 /// prepare XTextField for insertion into document 460 virtual void PrepareField( 461 const ::com::sun::star::uno::Reference< 462 ::com::sun::star::beans::XPropertySet> & xPropertySet); 463 }; 464 465 466 467 468 469 470 /** 471 * variable declaration container for all variable fields 472 * (variable-decls, user-field-decls, sequence-decls) 473 */ 474 class XMLVariableDeclsImportContext : public SvXMLImportContext 475 { 476 enum VarType eVarDeclsContextType; 477 XMLTextImportHelper& rImportHelper; 478 479 public: 480 481 TYPEINFO(); 482 483 XMLVariableDeclsImportContext( 484 SvXMLImport& rImport, /// XML Import 485 XMLTextImportHelper& rHlp, /// text import helper 486 sal_uInt16 nPrfx, /// namespace prefix 487 const ::rtl::OUString& rLocalName, /// element name w/o prefix 488 enum VarType eVarType); /// variable type 489 490 virtual SvXMLImportContext *CreateChildContext( 491 sal_uInt16 nPrefix, 492 const ::rtl::OUString& rLocalName, 493 const ::com::sun::star::uno::Reference< 494 ::com::sun::star::xml::sax::XAttributeList> & xAttrList ); 495 }; 496 497 /** 498 * variable field declarations 499 * (variable-decl, user-field-decl, sequence-decl) 500 */ 501 class XMLVariableDeclImportContext : public SvXMLImportContext 502 { 503 const ::rtl::OUString sPropertyName; 504 const ::rtl::OUString sPropertySubType; 505 const ::rtl::OUString sPropertyNumberingLevel; 506 const ::rtl::OUString sPropertyNumberingSeparator; 507 const ::rtl::OUString sPropertyIsExpression; 508 509 ::rtl::OUString sName; 510 XMLValueImportHelper aValueHelper; 511 sal_Int8 nNumLevel; 512 sal_Unicode cSeparationChar; 513 514 public: 515 516 TYPEINFO(); 517 518 XMLVariableDeclImportContext( 519 SvXMLImport& rImport, /// XML Import 520 XMLTextImportHelper& rHlp, /// text import helper 521 sal_uInt16 nPrfx, /// namespace prefix 522 const ::rtl::OUString& rLocalName, /// element name w/o prefix 523 const ::com::sun::star::uno::Reference< /// list of element attributes 524 ::com::sun::star::xml::sax::XAttributeList> & xAttrList, 525 enum VarType eVarType); /// variable type 526 527 /// get field master for name and rename if appropriate 528 static sal_Bool FindFieldMaster(::com::sun::star::uno::Reference< 529 ::com::sun::star::beans::XPropertySet> & xMaster, 530 SvXMLImport& rImport, 531 XMLTextImportHelper& rHelper, 532 const ::rtl::OUString& sVarName, 533 enum VarType eVarType); 534 }; 535 536 537 538 /** import table formula fields (deprecated; for Writer 2.0 compatibility) */ 539 class XMLTableFormulaImportContext : public XMLTextFieldImportContext 540 { 541 const ::rtl::OUString sPropertyNumberFormat; 542 const ::rtl::OUString sPropertyContent; 543 const ::rtl::OUString sPropertyIsShowFormula; 544 const ::rtl::OUString sPropertyCurrentPresentation; 545 546 XMLValueImportHelper aValueHelper; 547 548 ::rtl::OUString sFormula; 549 sal_Bool bFormulaOK; 550 551 sal_Bool bIsShowFormula; 552 553 public: 554 555 TYPEINFO(); 556 557 XMLTableFormulaImportContext( 558 SvXMLImport& rImport, /// XML Import 559 XMLTextImportHelper& rHlp, /// text import helper 560 sal_uInt16 nPrfx, /// namespace prefix 561 const ::rtl::OUString& rLocalName); /// element name w/o prefix 562 virtual ~XMLTableFormulaImportContext(); 563 564 protected: 565 566 /// process attribute values 567 virtual void ProcessAttribute( sal_uInt16 nAttrToken, 568 const ::rtl::OUString& sAttrValue ); 569 570 /// prepare XTextField for insertion into document 571 virtual void PrepareField( 572 const ::com::sun::star::uno::Reference< 573 ::com::sun::star::beans::XPropertySet> & xPropertySet); 574 }; 575 576 577 578 /** import database display fields (<text:database-display>) */ 579 class XMLDatabaseDisplayImportContext : public XMLDatabaseFieldImportContext 580 { 581 const ::rtl::OUString sPropertyColumnName; 582 const ::rtl::OUString sPropertyDatabaseFormat; 583 const ::rtl::OUString sPropertyCurrentPresentation; 584 const ::rtl::OUString sPropertyIsVisible; 585 586 XMLValueImportHelper aValueHelper; 587 588 ::rtl::OUString sColumnName; 589 sal_Bool bColumnOK; 590 591 sal_Bool bDisplay; 592 sal_Bool bDisplayOK; 593 594 public: 595 596 TYPEINFO(); 597 598 XMLDatabaseDisplayImportContext( 599 SvXMLImport& rImport, /// XML Import 600 XMLTextImportHelper& rHlp, /// text import helper 601 sal_uInt16 nPrfx, /// namespace prefix 602 const ::rtl::OUString& rLocalName); /// element name w/o prefix 603 604 protected: 605 606 /// process attribute values 607 virtual void ProcessAttribute( sal_uInt16 nAttrToken, 608 const ::rtl::OUString& sAttrValue ); 609 610 /// create, prepare and insert database field master and database field 611 virtual void EndElement(); 612 }; 613 614 #endif 615