summaryrefslogtreecommitdiffstats
path: root/xmloff/inc/txtvfldi.hxx
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--xmloff/inc/txtvfldi.hxx452
1 files changed, 452 insertions, 0 deletions
diff --git a/xmloff/inc/txtvfldi.hxx b/xmloff/inc/txtvfldi.hxx
new file mode 100644
index 000000000..d5a4176d5
--- /dev/null
+++ b/xmloff/inc/txtvfldi.hxx
@@ -0,0 +1,452 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+/** @#file
+ *
+ * XML import of all variable related text fields plus database display field
+ */
+
+#pragma once
+
+#include "txtfldi.hxx"
+#include <com/sun/star/beans/XPropertySet.hpp>
+
+
+/** helper class: parses value-type and associated value attributes */
+class XMLValueImportHelper final
+{
+ SvXMLImport& rImport;
+ XMLTextImportHelper& rHelper;
+
+ 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)
+ OUString sFormula; /// formula string
+ OUString sDefault; /// default (see bStringDefault/bFormulaDef.)
+ bool bIsDefaultLanguage;/// format (of nFormatKey) has system language?
+
+ bool bStringType; /// is this a string (or a float) type?
+ bool bFormatOK; /// have we read a style:data-style-name attr.?
+ bool bStringValueOK; /// have we read a string-value attr.?
+ bool bFormulaOK; /// have we read the formula attribute?
+
+ const bool bSetType; /// should PrepareField set the SetExp subtype?
+ const bool bSetValue; /// should PrepareField set content/value?
+ const bool bSetStyle; /// should PrepareField set NumberFormat?
+ const bool bSetFormula; /// should PrepareField set Formula?
+
+public:
+ XMLValueImportHelper(
+ SvXMLImport& rImprt, /// XML Import
+ XMLTextImportHelper& rHlp, /// text import helper
+ bool bType, /// process type (PrepareField)
+ bool bStyle, /// process data style (P.F.)
+ bool bValue, /// process value (Prep.Field)
+ bool bFormula); /// process formula (Prep.F.)
+
+ /// process attribute values
+ void ProcessAttribute( sal_Int32 nAttrToken,
+ std::string_view sAttrValue );
+
+ /// prepare XTextField for insertion into document
+ void PrepareField(
+ const css::uno::Reference<css::beans::XPropertySet> & xPropertySet);
+
+ /// is value a string (rather than double)?
+ bool IsStringValue() const { return bStringType; }
+
+ /// has format been read?
+ bool IsFormatOK() const { return bFormatOK; }
+
+ void SetDefault(const 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
+{
+private:
+ OUString sName; /// name attribute
+ OUString sFormula; /// formula attribute
+ OUString sDescription; /// description
+ OUString sHelp; /// help text
+ OUString sHint; /// hint
+ XMLValueImportHelper aValueHelper; /// value, value-type, and style
+ bool bDisplayFormula; /// display formula?(rather than value)
+ bool bDisplayNone; /// hide field?
+
+ bool bFormulaOK; /// sFormula was set
+ bool bDescriptionOK; /// sDescription was set
+ bool bHelpOK; /// sHelp was set
+ bool bHintOK; /// sHint was set
+ bool bDisplayOK; /// sDisplayFormula/-None were set
+
+ bool bSetFormula; /// set Formula property
+ bool bSetFormulaDefault; /// use content as default for formula
+ bool bSetDescription; /// set sDescription with Hint-property
+ bool bSetHelp;
+ bool bSetHint;
+ bool bSetVisible; /// set IsVisible
+ bool bSetDisplayFormula; /// set DisplayFormula (sub type???)
+ bool bSetPresentation; /// set presentation frm elem. content?
+
+public:
+
+
+ XMLVarFieldImportContext(
+ // for XMLTextFieldImportContext:
+ SvXMLImport& rImport, /// XML Import
+ XMLTextImportHelper& rHlp, /// text import helper
+ const OUString& pServiceName, /// name of SO API service
+ // config variables for PrepareField behavior:
+ bool bFormula, /// set Formula property
+ bool bFormulaDefault, /// use content as default for formula
+ bool bDescription, /// set sDescription with Hint-property
+ bool bHelp,
+ bool bHint,
+ bool bVisible, /// set IsVisible (display attr)
+ bool bDisplayFormula, /// set ??? (display attr.)
+ bool bType, /// set value type with ???-property
+ bool bStyle, /// set data style (NumberFormat-Prop.)
+ bool bValue, /// set value with Content/Value-Prop.
+ bool bPresentation); /// set presentation from elem. content
+
+protected:
+ /// process attribute values
+ virtual void ProcessAttribute( sal_Int32 nAttrToken,
+ std::string_view sAttrValue ) override;
+
+ /// prepare XTextField for insertion into document
+ virtual void PrepareField(
+ const css::uno::Reference<
+ css::beans::XPropertySet> & xPropertySet) override;
+
+ // various accessor methods:
+ const OUString& GetName() const { return sName; }
+ bool IsStringValue() const { return aValueHelper.IsStringValue();}
+};
+
+
+/** import variable get fields (<text:variable-get>) */
+class XMLVariableGetFieldImportContext final : public XMLVarFieldImportContext
+{
+public:
+
+
+ XMLVariableGetFieldImportContext(
+ SvXMLImport& rImport, /// XML Import
+ XMLTextImportHelper& rHlp); /// Text import helper
+
+
+private:
+ /// prepare XTextField for insertion into document
+ virtual void PrepareField(
+ const css::uno::Reference<
+ css::beans::XPropertySet> & xPropertySet) override;
+};
+
+
+/** import expression fields (<text:expression>) */
+class XMLExpressionFieldImportContext final : public XMLVarFieldImportContext
+{
+public:
+
+ XMLExpressionFieldImportContext(
+ SvXMLImport& rImport, /// XML Import
+ XMLTextImportHelper& rHlp); /// Text import helper
+
+private:
+ virtual void PrepareField(
+ const css::uno::Reference<
+ css::beans::XPropertySet> & xPropertySet) override;
+};
+
+/*** import text input fields (<text:text-input>) */
+class XMLTextInputFieldImportContext final : public XMLVarFieldImportContext
+{
+public:
+
+ XMLTextInputFieldImportContext(
+ SvXMLImport& rImport, /// XML Import
+ XMLTextImportHelper& rHlp); /// Text import helper
+
+private:
+ virtual void PrepareField(
+ const css::uno::Reference<
+ css::beans::XPropertySet> & xPropertySet) override;
+};
+
+
+/**
+ * upperclass 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:
+
+
+ XMLSetVarFieldImportContext(
+ // for XMLTextFieldImportContext:
+ SvXMLImport& rImport, /// see XMLTextFieldImportContext
+ XMLTextImportHelper& rHlp, /// see XMLTextFieldImportContext
+ const OUString& pServiceName, /// see XMLTextFieldImportContext
+ // for finding appropriate field master (see endFastElement())
+ VarType eVarType, /// variable type
+ // config variables:
+ bool bFormula, /// see XMLTextFieldImportContext
+ bool bFormulaDefault, /// see XMLTextFieldImportContext
+ bool bDescription, /// see XMLTextFieldImportContext
+ bool bHelp, /// see XMLTextFieldImportContext
+ bool bHint, /// see XMLTextFieldImportContext
+ bool bVisible, /// see XMLTextFieldImportContext
+ bool bDisplayFormula, /// see XMLTextFieldImportContext
+ bool bType, /// see XMLTextFieldImportContext
+ bool bStyle, /// see XMLTextFieldImportContext
+ bool bValue, /// see XMLTextFieldImportContext
+ bool bPresentation); /// see XMLTextFieldImportContext
+
+protected:
+
+ /// create XTextField, attach master and insert into document;
+ /// also calls PrepareTextField
+ virtual void SAL_CALL endFastElement(sal_Int32 nElement) override;
+
+ /// find appropriate field master
+ bool FindFieldMaster(
+ css::uno::Reference<
+ css::beans::XPropertySet> & xMaster);
+};
+
+
+/** import variable set fields (<text:variable-set>) */
+class XMLVariableSetFieldImportContext final : public XMLSetVarFieldImportContext
+{
+public:
+
+ XMLVariableSetFieldImportContext(
+ SvXMLImport& rImport, /// XML Import
+ XMLTextImportHelper& rHlp); /// Text import helper
+\
+private:
+ /// prepare XTextField for insertion into document
+ virtual void PrepareField(
+ const css::uno::Reference<css::beans::XPropertySet> & xPropertySet) override;
+};
+
+
+/** variable input fields (<text:variable-input>) */
+class XMLVariableInputFieldImportContext final : public XMLSetVarFieldImportContext
+{
+public:
+
+
+ XMLVariableInputFieldImportContext(
+ SvXMLImport& rImport, /// XML Import
+ XMLTextImportHelper& rHlp); /// Text import helper
+
+private:
+
+ /// prepare XTextField for insertion into document
+ virtual void PrepareField(
+ const css::uno::Reference<css::beans::XPropertySet> & xPropertySet) override;
+};
+
+
+/** user fields (<text:user-field-get>) */
+class XMLUserFieldImportContext final : public XMLSetVarFieldImportContext
+{
+
+public:
+
+
+ XMLUserFieldImportContext(
+ SvXMLImport& rImport, /// XML Import
+ XMLTextImportHelper& rHlp); /// Text import helper
+};
+
+/** user input fields (<text:user-field-input>) */
+class XMLUserFieldInputImportContext final : public XMLVarFieldImportContext
+{
+
+public:
+
+
+ XMLUserFieldInputImportContext(
+ SvXMLImport& rImport, /// XML Import
+ XMLTextImportHelper& rHlp); /// Text import helper
+
+ virtual void PrepareField(
+ const css::uno::Reference<css::beans::XPropertySet> & xPropertySet) override;
+};
+
+
+/** sequence fields (<text:sequence>) */
+class XMLSequenceFieldImportContext final : public XMLSetVarFieldImportContext
+{
+ OUString sNumFormat;
+ OUString sNumFormatSync;
+ OUString sRefName;
+
+ bool bRefNameOK;
+
+public:
+
+
+ XMLSequenceFieldImportContext(
+ SvXMLImport& rImport, /// XML Import
+ XMLTextImportHelper& rHlp); /// Text import helper
+
+private:
+
+ /// process attribute values
+ virtual void ProcessAttribute( sal_Int32 nAttrToken,
+ std::string_view sAttrValue ) override;
+
+ /// prepare XTextField for insertion into document
+ virtual void PrepareField(
+ const css::uno::Reference<css::beans::XPropertySet> & xPropertySet) override;
+};
+
+
+/**
+ * variable declaration container for all variable fields
+ * (variable-decls, user-field-decls, sequence-decls)
+ */
+class XMLVariableDeclsImportContext final : public SvXMLImportContext
+{
+ enum VarType eVarDeclsContextType;
+ XMLTextImportHelper& rImportHelper;
+
+public:
+
+ XMLVariableDeclsImportContext(
+ SvXMLImport& rImport, /// XML Import
+ XMLTextImportHelper& rHlp, /// text import helper
+ enum VarType eVarType); /// variable type
+
+ virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(
+ sal_Int32 nElement,
+ const css::uno::Reference< css::xml::sax::XFastAttributeList >& AttrList ) override;
+};
+
+/**
+ * variable field declarations
+ * (variable-decl, user-field-decl, sequence-decl)
+ */
+class XMLVariableDeclImportContext final : public SvXMLImportContext
+{
+public:
+
+
+ XMLVariableDeclImportContext(
+ SvXMLImport& rImport, /// XML Import
+ XMLTextImportHelper& rHlp, /// text import helper
+ sal_Int32 nElement,
+ const css::uno::Reference< css::xml::sax::XFastAttributeList> & xAttrList,/// list of element attributes
+ enum VarType eVarType); /// variable type
+
+ /// get field master for name and rename if appropriate
+ static bool FindFieldMaster(css::uno::Reference<css::beans::XPropertySet> & xMaster,
+ SvXMLImport& rImport,
+ XMLTextImportHelper& rHelper,
+ const OUString& sVarName,
+ enum VarType eVarType);
+};
+
+
+/** import table formula fields (deprecated; for Writer 2.0 compatibility) */
+class XMLTableFormulaImportContext final : public XMLTextFieldImportContext
+{
+ XMLValueImportHelper aValueHelper;
+
+ bool bIsShowFormula;
+
+public:
+
+ XMLTableFormulaImportContext(
+ SvXMLImport& rImport, /// XML Import
+ XMLTextImportHelper& rHlp); /// text import helper
+
+private:
+
+ /// process attribute values
+ virtual void ProcessAttribute( sal_Int32 nAttrToken,
+ std::string_view sAttrValue ) override;
+
+ /// prepare XTextField for insertion into document
+ virtual void PrepareField(
+ const css::uno::Reference<css::beans::XPropertySet> & xPropertySet) override;
+};
+
+
+/** import database display fields (<text:database-display>) */
+class XMLDatabaseDisplayImportContext final : public XMLDatabaseFieldImportContext
+{
+ XMLValueImportHelper aValueHelper;
+
+ OUString sColumnName;
+ bool bColumnOK;
+
+ bool bDisplay;
+ bool bDisplayOK;
+
+public:
+
+
+ XMLDatabaseDisplayImportContext(
+ SvXMLImport& rImport, /// XML Import
+ XMLTextImportHelper& rHlp); /// text import helper
+
+private:
+
+ /// process attribute values
+ virtual void ProcessAttribute( sal_Int32 nAttrToken,
+ std::string_view sAttrValue ) override;
+
+ /// create, prepare and insert database field master and database field
+ virtual void SAL_CALL endFastElement(sal_Int32 nElement) override;
+};
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */