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