summaryrefslogtreecommitdiff
path: root/xmloff/inc/txtvfldi.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'xmloff/inc/txtvfldi.hxx')
-rw-r--r--xmloff/inc/txtvfldi.hxx618
1 files changed, 618 insertions, 0 deletions
diff --git a/xmloff/inc/txtvfldi.hxx b/xmloff/inc/txtvfldi.hxx
new file mode 100644
index 000000000000..fe14aaa5dd1e
--- /dev/null
+++ b/xmloff/inc/txtvfldi.hxx
@@ -0,0 +1,618 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+/** @#file
+ *
+ * XML import of all variable related text fields plus database display field
+ */
+
+#ifndef _XMLOFF_TXTVFLDI_HXX
+#define _XMLOFF_TXTVFLDI_HXX
+
+#include "txtvfldi.hxx"
+#include "txtfldi.hxx"
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/beans/XPropertySetInfo.hpp>
+
+
+
+/// variable type (for XMLSetVarFieldImportContext)
+enum VarType
+{
+ VarTypeSimple,
+ VarTypeUserField,
+ VarTypeSequence
+};
+
+
+
+/** helper class: parses value-type and associated value attributes */
+class XMLValueImportHelper
+{
+
+ const ::rtl::OUString sPropertyContent;
+ const ::rtl::OUString sPropertyValue;
+ const ::rtl::OUString sPropertyFormula;
+ const ::rtl::OUString sPropertyNumberFormat;
+ const ::rtl::OUString sPropertyIsFixedLanguage;
+
+ SvXMLImport& rImport;
+ XMLTextImportHelper& rHelper;
+
+ ::rtl::OUString sValue; /// string value (only valid if bStringValueOK)
+ double fValue; /// double value (only valid if bFloatValueOK)
+ sal_Int32 nFormatKey; /// format key (only valid of bFormatOK)
+ ::rtl::OUString sFormula; /// formula string
+ ::rtl::OUString sDefault; /// default (see bStringDefault/bFormulaDef.)
+ sal_Bool bIsDefaultLanguage;/// format (of nFormatKey) has system language?
+
+ sal_Bool bStringType; /// is this a string (or a float) type?
+ sal_Bool bFormatOK; /// have we read a style:data-style-name attr.?
+ sal_Bool bTypeOK; /// have we read a value-type attribute?
+ sal_Bool bStringValueOK; /// have we read a string-value attr.?
+ sal_Bool bFloatValueOK; /// have we read any of the float attr.s?
+ sal_Bool bFormulaOK; /// have we read the formula attribute?
+
+ const sal_Bool bSetType; /// should PrepareField set the SetExp subtype?
+ const sal_Bool bSetValue; /// should PrepareField set content/value?
+ const sal_Bool bSetStyle; /// should PrepareField set NumberFormat?
+ const sal_Bool bSetFormula; /// should PrepareField set Formula?
+
+ const sal_Bool bStringDefault; /// default: string-value = content
+ const sal_Bool bFormulaDefault; /// default: formula = content
+
+public:
+ XMLValueImportHelper(
+ SvXMLImport& rImprt, /// XML Import
+ XMLTextImportHelper& rHlp, /// text import helper
+ sal_Bool bType, /// process type (PrepareField)
+ sal_Bool bStyle, /// process data style (P.F.)
+ sal_Bool bValue, /// process value (Prep.Field)
+ sal_Bool bFormula); /// process formula (Prep.F.)
+
+ virtual ~XMLValueImportHelper();
+
+ /// process attribute values
+ virtual void ProcessAttribute( sal_uInt16 nAttrToken,
+ const ::rtl::OUString& sAttrValue );
+
+ /// prepare XTextField for insertion into document
+ virtual void PrepareField(
+ const ::com::sun::star::uno::Reference<
+ ::com::sun::star::beans::XPropertySet> & xPropertySet);
+
+ /// is value a string (rather than double)?
+ inline sal_Bool IsStringValue() { return bStringType; }
+
+ /// has format been read?
+ inline sal_Bool IsFormatOK() { return bFormatOK; }
+
+ inline void SetDefault(const ::rtl::OUString& sStr) { sDefault = sStr; }
+};
+
+
+
+/**
+ * abstract parent class for all variable related fields
+ * - variable-set/get/decl (not -decls),
+ * - user-field-get/decl (not -decls),
+ * - sequence/-decl (not -decls),
+ * - expression,
+ * - text-input
+ *
+ * Processes the following attributes:
+ * - name
+ * - formula
+ * - display
+ * - value, value-type, data-style-name (via XMLValueImportHelper)
+ * - description.
+ *
+ * Each attribute has a corresponding member, a bool variable to indicate
+ * whether it was set or not, and a bool variable whether it should be set
+ * using the standard property name.
+ *
+ * bValid is set true, when name is found!
+ * (Most variable related fields are valid, if a name is
+ * found. However, some are always valid. In this case, setting bValid
+ * does not matter.)
+ */
+class XMLVarFieldImportContext : public XMLTextFieldImportContext
+{
+protected:
+ const ::rtl::OUString sPropertyContent;
+ const ::rtl::OUString sPropertyHint;
+ const ::rtl::OUString sPropertyHelp;
+ const ::rtl::OUString sPropertyTooltip;
+ const ::rtl::OUString sPropertyIsVisible;
+ const ::rtl::OUString sPropertyIsDisplayFormula;
+ const ::rtl::OUString sPropertyCurrentPresentation;
+
+private:
+ ::rtl::OUString sName; /// name attribute
+ ::rtl::OUString sFormula; /// formula attribute
+ ::rtl::OUString sDescription; /// description
+ ::rtl::OUString sHelp; /// help text
+ ::rtl::OUString sHint; /// hint
+ XMLValueImportHelper aValueHelper; /// value, value-type, and style
+ sal_Bool bDisplayFormula; /// display formula?(rather than value)
+ sal_Bool bDisplayNone; /// hide field?
+
+ sal_Bool bNameOK; /// sName was set
+ sal_Bool bFormulaOK; /// sFormula was set
+ sal_Bool bDescriptionOK; /// sDescription was set
+ sal_Bool bHelpOK; /// sHelp was set
+ sal_Bool bHintOK; /// sHint was set
+ sal_Bool bDisplayOK; /// sDisplayFormula/-None were set
+
+ sal_Bool bSetName; /// set sName with ???-property
+ sal_Bool bSetFormula; /// set Formula property
+ sal_Bool bSetFormulaDefault; /// use content as default for formula
+ sal_Bool bSetDescription; /// set sDescription with Hint-property
+ sal_Bool bSetHelp;
+ sal_Bool bSetHint;
+ sal_Bool bSetVisible; /// set IsVisible
+ sal_Bool bSetDisplayFormula; /// set DisplayFormula (sub type???)
+ sal_Bool bSetPresentation; /// set presentation frm elem. content?
+
+public:
+
+ TYPEINFO();
+
+ XMLVarFieldImportContext(
+ // for XMLTextFieldImportContext:
+ SvXMLImport& rImport, /// XML Import
+ XMLTextImportHelper& rHlp, /// text import helper
+ const sal_Char* pServiceName, /// name of SO API service
+ sal_uInt16 nPrfx, /// namespace prefix
+ const ::rtl::OUString& rLocalName, /// element name w/o prefix
+ // config variables for PrepareField behavior:
+ sal_Bool bName, /// set sName with ???-property
+ sal_Bool bFormula, /// set Formula property
+ sal_Bool bFormulaDefault, /// use content as default for formula
+ sal_Bool bDescription, /// set sDescription with Hint-property
+ sal_Bool bHelp,
+ sal_Bool bHint,
+ sal_Bool bVisible, /// set IsVisible (display attr)
+ sal_Bool bDisplayFormula, /// set ??? (display attr.)
+ sal_Bool bType, /// set value type with ???-property
+ sal_Bool bStyle, /// set data style (NumberFormat-Prop.)
+ sal_Bool bValue, /// set value with Content/Value-Prop.
+ sal_Bool bPresentation); /// set presentation from elem. content
+
+protected:
+ /// process attribute values
+ virtual void ProcessAttribute( sal_uInt16 nAttrToken,
+ const ::rtl::OUString& sAttrValue );
+
+ /// prepare XTextField for insertion into document
+ virtual void PrepareField(
+ const ::com::sun::star::uno::Reference<
+ ::com::sun::star::beans::XPropertySet> & xPropertySet);
+
+ // various accessor methods:
+ inline ::rtl::OUString GetName() { return sName; }
+ inline sal_Bool IsStringValue() { return aValueHelper.IsStringValue();}
+ inline sal_Bool IsNameOK() { return bNameOK; }
+ inline sal_Bool IsFormulaOK() { return bFormulaOK; }
+ inline sal_Bool IsDescriptionOK() { return bDescriptionOK; }
+ inline sal_Bool IsDisplayOK() { return bDisplayOK; }
+};
+
+
+
+/** import variable get fields (<text:variable-get>) */
+class XMLVariableGetFieldImportContext : public XMLVarFieldImportContext
+{
+ const ::rtl::OUString sPropertySubType;
+
+public:
+
+ TYPEINFO();
+
+ XMLVariableGetFieldImportContext(
+ SvXMLImport& rImport, /// XML Import
+ XMLTextImportHelper& rHlp, /// Text import helper
+ sal_uInt16 nPrfx, /// namespace prefix
+ const ::rtl::OUString& rLocalName); /// element name w/o prefix
+
+
+protected:
+ /// prepare XTextField for insertion into document
+ virtual void PrepareField(
+ const ::com::sun::star::uno::Reference<
+ ::com::sun::star::beans::XPropertySet> & xPropertySet);
+};
+
+
+
+/** import expression fields (<text:expression>) */
+class XMLExpressionFieldImportContext : public XMLVarFieldImportContext
+{
+ const ::rtl::OUString sPropertySubType;
+
+public:
+
+ TYPEINFO();
+
+ XMLExpressionFieldImportContext(
+ SvXMLImport& rImport, /// XML Import
+ XMLTextImportHelper& rHlp, /// Text import helper
+ sal_uInt16 nPrfx, /// namespace prefix
+ const ::rtl::OUString& sLocalName); /// element name w/o prefix
+
+protected:
+ virtual void PrepareField(
+ const ::com::sun::star::uno::Reference<
+ ::com::sun::star::beans::XPropertySet> & xPropertySet);
+};
+
+/*** import text input fields (<text:text-input>) */
+class XMLTextInputFieldImportContext : public XMLVarFieldImportContext
+{
+ const ::rtl::OUString sPropertyContent;
+
+public:
+
+ TYPEINFO();
+
+ XMLTextInputFieldImportContext(
+ SvXMLImport& rImport, /// XML Import
+ XMLTextImportHelper& rHlp, /// Text import helper
+ sal_uInt16 nPrfx, /// namespace prefix
+ const ::rtl::OUString& sLocalName); /// element name w/o prefix
+
+protected:
+ virtual void PrepareField(
+ const ::com::sun::star::uno::Reference<
+ ::com::sun::star::beans::XPropertySet> & xPropertySet);
+};
+
+
+
+
+
+
+/**
+ * uperclass for variable/user-set, var/user-input, and sequence fields
+ * inds field master of appropriate type and attaches field to it.
+ */
+class XMLSetVarFieldImportContext : public XMLVarFieldImportContext
+{
+ const VarType eFieldType;
+
+public:
+
+ TYPEINFO();
+
+ XMLSetVarFieldImportContext(
+ // for XMLTextFieldImportContext:
+ SvXMLImport& rImport, /// see XMLTextFieldImportContext
+ XMLTextImportHelper& rHlp, /// see XMLTextFieldImportContext
+ const sal_Char* pServiceName, /// see XMLTextFieldImportContext
+ sal_uInt16 nPrfx, /// see XMLTextFieldImportContext
+ const ::rtl::OUString& rLocalName, /// see XMLTextFieldImportContext
+ // for finding appropriate field master (see EndElement())
+ VarType eVarType, /// variable type
+ // config variables:
+ sal_Bool bName, /// see XMLTextFieldImportContext
+ sal_Bool bFormula, /// see XMLTextFieldImportContext
+ sal_Bool bFormulaDefault, /// see XMLTextFieldImportContext
+ sal_Bool bDescription, /// see XMLTextFieldImportContext
+ sal_Bool bHelp, /// see XMLTextFieldImportContext
+ sal_Bool bHint, /// see XMLTextFieldImportContext
+ sal_Bool bVisible, /// see XMLTextFieldImportContext
+ sal_Bool bDisplayFormula, /// see XMLTextFieldImportContext
+ sal_Bool bType, /// see XMLTextFieldImportContext
+ sal_Bool bStyle, /// see XMLTextFieldImportContext
+ sal_Bool bValue, /// see XMLTextFieldImportContext
+ sal_Bool bPresentation); /// see XMLTextFieldImportContext
+
+protected:
+
+ /// create XTextField, attach master and insert into document;
+ /// also calls PrepareTextField
+ virtual void EndElement();
+
+ /// find appropriate field master
+ sal_Bool FindFieldMaster(
+ ::com::sun::star::uno::Reference<
+ ::com::sun::star::beans::XPropertySet> & xMaster);
+};
+
+
+
+/** import variable set fields (<text:variable-set>) */
+class XMLVariableSetFieldImportContext : public XMLSetVarFieldImportContext
+{
+ const ::rtl::OUString sPropertySubType;
+
+public:
+
+ TYPEINFO();
+
+ XMLVariableSetFieldImportContext(
+ SvXMLImport& rImport, /// XML Import
+ XMLTextImportHelper& rHlp, /// Text import helper
+ sal_uInt16 nPrfx, /// namespace prefix
+ const ::rtl::OUString& rLocalName); /// element name w/o prefix
+
+protected:
+ /// prepare XTextField for insertion into document
+ virtual void PrepareField(
+ const ::com::sun::star::uno::Reference<
+ ::com::sun::star::beans::XPropertySet> & xPropertySet);
+};
+
+
+
+/** variable input fields (<text:variable-input>) */
+class XMLVariableInputFieldImportContext : public XMLSetVarFieldImportContext
+{
+ const ::rtl::OUString sPropertySubType;
+ const ::rtl::OUString sPropertyIsInput;
+
+public:
+
+ TYPEINFO();
+
+ XMLVariableInputFieldImportContext(
+ SvXMLImport& rImport, /// XML Import
+ XMLTextImportHelper& rHlp, /// Text import helper
+ sal_uInt16 nPrfx, /// namespace prefix
+ const ::rtl::OUString& rLocalName); /// element name w/o prefix
+
+protected:
+
+ /// prepare XTextField for insertion into document
+ virtual void PrepareField(
+ const ::com::sun::star::uno::Reference<
+ ::com::sun::star::beans::XPropertySet> & xPropertySet);
+};
+
+
+
+/** user fields (<text:user-field-get>) */
+class XMLUserFieldImportContext : public XMLSetVarFieldImportContext
+{
+
+public:
+
+ TYPEINFO();
+
+ XMLUserFieldImportContext(
+ SvXMLImport& rImport, /// XML Import
+ XMLTextImportHelper& rHlp, /// Text import helper
+ sal_uInt16 nPrfx, /// namespace prefix
+ const ::rtl::OUString& rLocalName); /// element name w/o prefix
+};
+
+/** user input fields (<text:user-field-input>) */
+class XMLUserFieldInputImportContext : public XMLVarFieldImportContext
+{
+
+public:
+
+ TYPEINFO();
+
+ XMLUserFieldInputImportContext(
+ SvXMLImport& rImport, /// XML Import
+ XMLTextImportHelper& rHlp, /// Text import helper
+ sal_uInt16 nPrfx, /// namespace prefix
+ const ::rtl::OUString& rLocalName); /// element name w/o prefix
+
+ virtual void PrepareField(
+ const ::com::sun::star::uno::Reference<
+ ::com::sun::star::beans::XPropertySet> & xPropertySet);
+};
+
+
+
+/** sequence fields (<text:sequence>) */
+class XMLSequenceFieldImportContext : public XMLSetVarFieldImportContext
+{
+ const ::rtl::OUString sPropertyFormula;
+ const ::rtl::OUString sPropertyNumberFormat;
+ const ::rtl::OUString sPropertySequenceValue;
+ ::rtl::OUString sFormula;
+ ::rtl::OUString sNumFormat;
+ ::rtl::OUString sNumFormatSync;
+ ::rtl::OUString sRefName;
+
+ sal_Bool bRefNameOK;
+
+public:
+
+ TYPEINFO();
+
+ XMLSequenceFieldImportContext(
+ SvXMLImport& rImport, /// XML Import
+ XMLTextImportHelper& rHlp, /// Text import helper
+ sal_uInt16 nPrfx, /// namespace prefix
+ const ::rtl::OUString& rLocalName); /// element name w/o prefix
+
+protected:
+
+ /// process attribute values
+ virtual void ProcessAttribute( sal_uInt16 nAttrToken,
+ const ::rtl::OUString& sAttrValue );
+
+ /// prepare XTextField for insertion into document
+ virtual void PrepareField(
+ const ::com::sun::star::uno::Reference<
+ ::com::sun::star::beans::XPropertySet> & xPropertySet);
+};
+
+
+
+
+
+
+/**
+ * variable declaration container for all variable fields
+ * (variable-decls, user-field-decls, sequence-decls)
+ */
+class XMLVariableDeclsImportContext : public SvXMLImportContext
+{
+ enum VarType eVarDeclsContextType;
+ XMLTextImportHelper& rImportHelper;
+
+public:
+
+ TYPEINFO();
+
+ XMLVariableDeclsImportContext(
+ SvXMLImport& rImport, /// XML Import
+ XMLTextImportHelper& rHlp, /// text import helper
+ sal_uInt16 nPrfx, /// namespace prefix
+ const ::rtl::OUString& rLocalName, /// element name w/o prefix
+ enum VarType eVarType); /// variable type
+
+ virtual SvXMLImportContext *CreateChildContext(
+ sal_uInt16 nPrefix,
+ const ::rtl::OUString& rLocalName,
+ const ::com::sun::star::uno::Reference<
+ ::com::sun::star::xml::sax::XAttributeList> & xAttrList );
+};
+
+/**
+ * variable field declarations
+ * (variable-decl, user-field-decl, sequence-decl)
+ */
+class XMLVariableDeclImportContext : public SvXMLImportContext
+{
+ const ::rtl::OUString sPropertyName;
+ const ::rtl::OUString sPropertySubType;
+ const ::rtl::OUString sPropertyNumberingLevel;
+ const ::rtl::OUString sPropertyNumberingSeparator;
+ const ::rtl::OUString sPropertyIsExpression;
+
+ ::rtl::OUString sName;
+ XMLValueImportHelper aValueHelper;
+ sal_Int8 nNumLevel;
+ sal_Unicode cSeparationChar;
+
+public:
+
+ TYPEINFO();
+
+ XMLVariableDeclImportContext(
+ SvXMLImport& rImport, /// XML Import
+ XMLTextImportHelper& rHlp, /// text import helper
+ sal_uInt16 nPrfx, /// namespace prefix
+ const ::rtl::OUString& rLocalName, /// element name w/o prefix
+ const ::com::sun::star::uno::Reference< /// list of element attributes
+ ::com::sun::star::xml::sax::XAttributeList> & xAttrList,
+ enum VarType eVarType); /// variable type
+
+ /// get field master for name and rename if appropriate
+ static sal_Bool FindFieldMaster(::com::sun::star::uno::Reference<
+ ::com::sun::star::beans::XPropertySet> & xMaster,
+ SvXMLImport& rImport,
+ XMLTextImportHelper& rHelper,
+ const ::rtl::OUString& sVarName,
+ enum VarType eVarType);
+};
+
+
+
+/** import table formula fields (deprecated; for Writer 2.0 compatibility) */
+class XMLTableFormulaImportContext : public XMLTextFieldImportContext
+{
+ const ::rtl::OUString sPropertyNumberFormat;
+ const ::rtl::OUString sPropertyContent;
+ const ::rtl::OUString sPropertyIsShowFormula;
+ const ::rtl::OUString sPropertyCurrentPresentation;
+
+ XMLValueImportHelper aValueHelper;
+
+ ::rtl::OUString sFormula;
+ sal_Bool bFormulaOK;
+
+ sal_Bool bIsShowFormula;
+
+public:
+
+ TYPEINFO();
+
+ XMLTableFormulaImportContext(
+ SvXMLImport& rImport, /// XML Import
+ XMLTextImportHelper& rHlp, /// text import helper
+ sal_uInt16 nPrfx, /// namespace prefix
+ const ::rtl::OUString& rLocalName); /// element name w/o prefix
+ virtual ~XMLTableFormulaImportContext();
+
+protected:
+
+ /// process attribute values
+ virtual void ProcessAttribute( sal_uInt16 nAttrToken,
+ const ::rtl::OUString& sAttrValue );
+
+ /// prepare XTextField for insertion into document
+ virtual void PrepareField(
+ const ::com::sun::star::uno::Reference<
+ ::com::sun::star::beans::XPropertySet> & xPropertySet);
+};
+
+
+
+/** import database display fields (<text:database-display>) */
+class XMLDatabaseDisplayImportContext : public XMLDatabaseFieldImportContext
+{
+ const ::rtl::OUString sPropertyColumnName;
+ const ::rtl::OUString sPropertyDatabaseFormat;
+ const ::rtl::OUString sPropertyCurrentPresentation;
+ const ::rtl::OUString sPropertyIsVisible;
+
+ XMLValueImportHelper aValueHelper;
+
+ ::rtl::OUString sColumnName;
+ sal_Bool bColumnOK;
+
+ sal_Bool bDisplay;
+ sal_Bool bDisplayOK;
+
+public:
+
+ TYPEINFO();
+
+ XMLDatabaseDisplayImportContext(
+ SvXMLImport& rImport, /// XML Import
+ XMLTextImportHelper& rHlp, /// text import helper
+ sal_uInt16 nPrfx, /// namespace prefix
+ const ::rtl::OUString& rLocalName); /// element name w/o prefix
+
+protected:
+
+ /// process attribute values
+ virtual void ProcessAttribute( sal_uInt16 nAttrToken,
+ const ::rtl::OUString& sAttrValue );
+
+ /// create, prepare and insert database field master and database field
+ virtual void EndElement();
+};
+
+#endif