summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Sikeler <d.sikeler94@gmail.com>2015-10-02 12:16:52 +0200
committerDaniel Sikeler <d.sikeler94@gmail.com>2015-10-02 12:16:52 +0200
commit23d1b32338af4c05df12a2e59ee5719ecad7b228 (patch)
tree015c4a368d16f2c1758e9eb0dff85af26a9def57
parentf89bf7b0443da7f014739005a08ab5e4c08ca42d (diff)
fastparser impl. for XMLVarFieldImportContext
and subclasses and subsubclasses Change-Id: I0dda419511c742c7b6cd7eda0d03b5bff41eaa8a
-rw-r--r--xmloff/inc/txtvfldi.hxx73
-rw-r--r--xmloff/source/text/txtvfldi.cxx230
2 files changed, 301 insertions, 2 deletions
diff --git a/xmloff/inc/txtvfldi.hxx b/xmloff/inc/txtvfldi.hxx
index 41bede41c43e..3a7b4870792b 100644
--- a/xmloff/inc/txtvfldi.hxx
+++ b/xmloff/inc/txtvfldi.hxx
@@ -190,6 +190,24 @@ public:
bool bStyle, /// set data style (NumberFormat-Prop.)
bool bValue, /// set value with Content/Value-Prop.
bool bPresentation); /// set presentation from elem. content
+ XMLVarFieldImportContext(
+ // for XMLTextFieldImportContext:
+ SvXMLImport& rImport, /// XML Import
+ XMLTextImportHelper& rHlp, /// text import helper
+ const sal_Char* pServiceName, /// name of SO API service
+ sal_Int32 Element, /// element token (namespace and name)
+ // 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
@@ -224,7 +242,10 @@ public:
XMLTextImportHelper& rHlp, /// Text import helper
sal_uInt16 nPrfx, /// namespace prefix
const OUString& rLocalName); /// element name w/o prefix
-
+ XMLVariableGetFieldImportContext(
+ SvXMLImport& rImport,
+ XMLTextImportHelper& rHlp,
+ sal_Int32 Element);
protected:
/// prepare XTextField for insertion into document
@@ -249,6 +270,10 @@ public:
XMLTextImportHelper& rHlp, /// Text import helper
sal_uInt16 nPrfx, /// namespace prefix
const OUString& sLocalName); /// element name w/o prefix
+ XMLExpressionFieldImportContext(
+ SvXMLImport& rImport,
+ XMLTextImportHelper& rHlp,
+ sal_Int32 Element);
protected:
virtual void PrepareField(
@@ -270,6 +295,10 @@ public:
XMLTextImportHelper& rHlp, /// Text import helper
sal_uInt16 nPrfx, /// namespace prefix
const OUString& sLocalName); /// element name w/o prefix
+ XMLTextInputFieldImportContext(
+ SvXMLImport& rImport,
+ XMLTextImportHelper& rHlp,
+ sal_Int32 Element);
protected:
virtual void PrepareField(
@@ -315,12 +344,34 @@ public:
bool bStyle, /// see XMLTextFieldImportContext
bool bValue, /// see XMLTextFieldImportContext
bool bPresentation); /// see XMLTextFieldImportContext
+ XMLSetVarFieldImportContext(
+ // for XMLTextFieldImportContext:
+ SvXMLImport& rImport, /// see XMLTextFieldImportContext
+ XMLTextImportHelper& rHlp, /// see XMLTextFieldImportContext
+ const sal_Char* pServiceName, /// see XMLTextFieldImportContext
+ sal_Int32 Element, /// element token (namespace and name)
+ // for finding appropriate field master (see EndElement())
+ 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 EndElement() SAL_OVERRIDE;
+ virtual void endFastElement( sal_Int32 Element )
+ throw(css::uno::RuntimeException, css::xml::sax::SAXException, std::exception) SAL_OVERRIDE;
/// find appropriate field master
bool FindFieldMaster(
@@ -344,6 +395,10 @@ public:
XMLTextImportHelper& rHlp, /// Text import helper
sal_uInt16 nPrfx, /// namespace prefix
const OUString& rLocalName); /// element name w/o prefix
+ XMLVariableSetFieldImportContext(
+ SvXMLImport& rImport,
+ XMLTextImportHelper& rHlp,
+ sal_Int32 Element);
protected:
/// prepare XTextField for insertion into document
@@ -369,6 +424,10 @@ public:
XMLTextImportHelper& rHlp, /// Text import helper
sal_uInt16 nPrfx, /// namespace prefix
const OUString& rLocalName); /// element name w/o prefix
+ XMLVariableInputFieldImportContext(
+ SvXMLImport& rImport,
+ XMLTextImportHelper& rHlp,
+ sal_Int32 Element);
protected:
@@ -393,6 +452,10 @@ public:
XMLTextImportHelper& rHlp, /// Text import helper
sal_uInt16 nPrfx, /// namespace prefix
const OUString& rLocalName); /// element name w/o prefix
+ XMLUserFieldImportContext(
+ SvXMLImport& rImport,
+ XMLTextImportHelper& rHlp,
+ sal_Int32 Element);
};
/** user input fields (<text:user-field-input>) */
@@ -408,6 +471,10 @@ public:
XMLTextImportHelper& rHlp, /// Text import helper
sal_uInt16 nPrfx, /// namespace prefix
const OUString& rLocalName); /// element name w/o prefix
+ XMLUserFieldInputImportContext(
+ SvXMLImport& rImport,
+ XMLTextImportHelper& rHlp,
+ sal_Int32 Element);
virtual void PrepareField(
const ::com::sun::star::uno::Reference<
@@ -436,6 +503,10 @@ public:
XMLTextImportHelper& rHlp, /// Text import helper
sal_uInt16 nPrfx, /// namespace prefix
const OUString& rLocalName); /// element name w/o prefix
+ XMLSequenceFieldImportContext(
+ SvXMLImport& rImport,
+ XMLTextImportHelper& rHlp,
+ sal_Int32 Element);
protected:
diff --git a/xmloff/source/text/txtvfldi.cxx b/xmloff/source/text/txtvfldi.cxx
index 3a7006b21b74..f98eb2904a27 100644
--- a/xmloff/source/text/txtvfldi.cxx
+++ b/xmloff/source/text/txtvfldi.cxx
@@ -140,6 +140,43 @@ XMLVarFieldImportContext::XMLVarFieldImportContext(
{
}
+XMLVarFieldImportContext::XMLVarFieldImportContext(
+ SvXMLImport& rImport, XMLTextImportHelper& rHlp,
+ const sal_Char* pServiceName,
+ sal_Int32 Element,
+ bool bFormula, bool bFormulaDefault,
+ bool bDescription, bool bHelp, bool bHint, bool bVisible,
+ bool bIsDisplayFormula,
+ bool bType, bool bStyle, bool bValue,
+ bool bPresentation) :
+ XMLTextFieldImportContext(rImport, rHlp, pServiceName, Element),
+ sPropertyContent(sAPI_content),
+ sPropertyHint(sAPI_hint),
+ sPropertyHelp(sAPI_help),
+ sPropertyTooltip(sAPI_tooltip),
+ sPropertyIsVisible(sAPI_is_visible),
+ sPropertyIsDisplayFormula(sAPI_is_show_formula),
+ sPropertyCurrentPresentation(sAPI_current_presentation),
+ aValueHelper(rImport, rHlp, bType, bStyle, bValue, false),
+ bDisplayFormula(false),
+ bDisplayNone(false),
+ bNameOK(false),
+ bFormulaOK(false),
+ bDescriptionOK(false),
+ bHelpOK(false),
+ bHintOK(false),
+ bDisplayOK(false),
+ bSetFormula(bFormula),
+ bSetFormulaDefault(bFormulaDefault),
+ bSetDescription(bDescription),
+ bSetHelp(bHelp),
+ bSetHint(bHint),
+ bSetVisible(bVisible),
+ bSetDisplayFormula(bIsDisplayFormula),
+ bSetPresentation(bPresentation)
+{
+}
+
void XMLVarFieldImportContext::ProcessAttribute(
sal_uInt16 nAttrToken,
const OUString& sAttrValue )
@@ -313,6 +350,22 @@ XMLSetVarFieldImportContext::XMLSetVarFieldImportContext(
{
}
+XMLSetVarFieldImportContext::XMLSetVarFieldImportContext(
+ SvXMLImport& rImport, XMLTextImportHelper& rHlp,
+ const sal_Char* pServiceName, sal_Int32 Element,
+ VarType eVarType,
+ bool bFormula, bool bFormulaDefault,
+ bool bDescription, bool bHelp, bool bHint, bool bVisible, bool bIsDisplayFormula,
+ bool bType, bool bStyle, bool bValue, bool bPresentation) :
+ XMLVarFieldImportContext(rImport, rHlp, pServiceName,
+ Element,
+ bFormula, bFormulaDefault,
+ bDescription, bHelp, bHint, bVisible, bIsDisplayFormula,
+ bType, bStyle, bValue, bPresentation),
+ eFieldType(eVarType)
+{
+}
+
void XMLSetVarFieldImportContext::EndElement()
{
// should we call PrepareField on the field, or rather on it's master?
@@ -365,6 +418,59 @@ void XMLSetVarFieldImportContext::EndElement()
GetImportHelper().InsertString(GetContent());
}
+void XMLSetVarFieldImportContext::endFastElement( sal_Int32 /*Element*/ )
+ throw(RuntimeException, xml::sax::SAXException, std::exception)
+{
+ // should we call PrepareField on the field, or rather on it's master?
+ // currently: call on field (just like superclass)
+ // possible alternatives: call on master
+ // call field or master depending on variable
+ // PrepareMaster() in addition to PrepareField()
+
+ DBG_ASSERT(!GetServiceName().isEmpty(), "no service name for element!");
+
+ if( bValid )
+ {
+ DBG_ASSERT(!GetName().isEmpty(), "variable name needed!");
+
+ // find field master
+ Reference<XPropertySet> xMaster;
+ if( FindFieldMaster(xMaster) )
+ {
+ // create field/Service
+ Reference<XPropertySet> xPropSet;
+ if( CreateField(xPropSet, sAPI_textfield_prefix + GetServiceName()) )
+ {
+ Reference<XDependentTextField> xDepTextField(xPropSet, UNO_QUERY);
+ if( xDepTextField.is() )
+ {
+ // attach field to field master
+ xDepTextField->attachTextFieldMaster(xMaster);
+
+ // attach field to document
+ Reference<XTextContent> xTextContent(xPropSet, UNO_QUERY);
+ if( xTextContent.is() )
+ {
+ try {
+ // insert, set field properties and exit!
+ GetImportHelper().InsertTextContent(xTextContent);
+ PrepareField(xPropSet);
+ } catch (lang::IllegalArgumentException& /*e*/)
+ {
+ // ignore e: #i54023#
+ };
+ return;
+ }
+ }
+ }
+ }
+ }
+
+ // above: exit on success; so for all error cases we end up here!
+ // write element content
+ GetImportHelper().InsertString(GetContent());
+}
+
bool XMLSetVarFieldImportContext::FindFieldMaster(
Reference<XPropertySet> & xMaster)
{
@@ -404,6 +510,24 @@ XMLSequenceFieldImportContext::XMLSequenceFieldImportContext(
{
}
+XMLSequenceFieldImportContext::XMLSequenceFieldImportContext(
+ SvXMLImport& rImport, XMLTextImportHelper& rHlp,
+ sal_Int32 Element )
+: XMLSetVarFieldImportContext(rImport, rHlp, sAPI_set_expression,
+ Element, VarTypeSequence,
+ // formula
+ true, true,
+ false, false, false, false,
+ false,
+ false, false, false, false),
+ sPropertyNumberFormat(sAPI_number_format),
+ sPropertySequenceValue(sAPI_sequence_value),
+ sNumFormat(OUString('1')),
+ sNumFormatSync(GetXMLToken(XML_FALSE)),
+ bRefNameOK(false)
+{
+}
+
void XMLSequenceFieldImportContext::ProcessAttribute(
sal_uInt16 nAttrToken, const OUString& sAttrValue )
{
@@ -474,6 +598,22 @@ XMLVariableSetFieldImportContext::XMLVariableSetFieldImportContext(
{
}
+XMLVariableSetFieldImportContext::XMLVariableSetFieldImportContext(
+ SvXMLImport& rImport, XMLTextImportHelper& rHlp,
+ sal_Int32 Element )
+: XMLSetVarFieldImportContext(rImport, rHlp, sAPI_set_expression,
+ Element, VarTypeSimple,
+ // formula, Value&type, style,
+ // display name
+ true, true,
+ false, false, false,
+ true, false,
+ true, true, true,
+ true),
+ sPropertySubType(sAPI_sub_type)
+{
+}
+
void XMLVariableSetFieldImportContext::PrepareField(
const Reference<XPropertySet> & xPropertySet)
{
@@ -511,6 +651,23 @@ XMLVariableInputFieldImportContext::XMLVariableInputFieldImportContext(
{
}
+XMLVariableInputFieldImportContext::XMLVariableInputFieldImportContext(
+ SvXMLImport& rImport, XMLTextImportHelper& rHlp,
+ sal_Int32 Element )
+: XMLSetVarFieldImportContext(rImport, rHlp, sAPI_set_expression,
+ Element, VarTypeSimple,
+ // description, display none/formula,
+ // value&type, style, formula
+ true, true,
+ true, true, true,
+ true, false,
+ true, true, true,
+ true),
+ sPropertySubType(sAPI_sub_type),
+ sPropertyIsInput(sAPI_is_input)
+{
+}
+
void XMLVariableInputFieldImportContext::PrepareField(
const Reference<XPropertySet> & xPropertySet)
{
@@ -550,7 +707,19 @@ XMLUserFieldImportContext::XMLUserFieldImportContext(
{
}
-
+XMLUserFieldImportContext::XMLUserFieldImportContext(
+ SvXMLImport& rImport, XMLTextImportHelper& rHlp,
+ sal_Int32 Element )
+: XMLSetVarFieldImportContext(rImport, rHlp, sAPI_user,
+ Element, VarTypeUserField,
+ // display none/formula, style
+ false, false,
+ false, false, false, true,
+ true,
+ false, true, false,
+ false)
+{
+}
// user input field
@@ -573,6 +742,20 @@ XMLUserFieldInputImportContext::XMLUserFieldInputImportContext(
{
}
+XMLUserFieldInputImportContext::XMLUserFieldInputImportContext(
+ SvXMLImport& rImport, XMLTextImportHelper& rHlp,
+ sal_Int32 Element )
+: XMLVarFieldImportContext(rImport, rHlp, sAPI_input_user,
+ Element,
+ // description, style
+ false, false,
+ true, false, false,
+ false, false,
+ false /*???*/, true, false,
+ false)
+{
+}
+
void XMLUserFieldInputImportContext::PrepareField(
const Reference<XPropertySet> & xPropertySet)
{
@@ -605,6 +788,20 @@ XMLVariableGetFieldImportContext::XMLVariableGetFieldImportContext(
{
}
+XMLVariableGetFieldImportContext::XMLVariableGetFieldImportContext(
+ SvXMLImport& rImport, XMLTextImportHelper& rHlp,
+ sal_Int32 Element)
+: XMLVarFieldImportContext(rImport, rHlp, sAPI_get_expression,
+ Element,
+ // style, display formula
+ false, false,
+ false, false, false,
+ false, true,
+ true, true, false,
+ true)
+{
+}
+
void XMLVariableGetFieldImportContext::PrepareField(
const Reference<XPropertySet> & xPropertySet)
{
@@ -641,6 +838,21 @@ XMLExpressionFieldImportContext::XMLExpressionFieldImportContext(
bValid = true; // always valid
}
+XMLExpressionFieldImportContext::XMLExpressionFieldImportContext(
+ SvXMLImport& rImport, XMLTextImportHelper& rHlp,
+ sal_Int32 Element)
+: XMLVarFieldImportContext(rImport, rHlp, sAPI_get_expression,
+ Element,
+ // formula, type, style, display formula
+ true, true,
+ false, false, false,
+ false, true,
+ true, true, false,
+ true),
+ sPropertySubType(sAPI_sub_type)
+{
+ bValid = true; // always valid
+}
void XMLExpressionFieldImportContext::PrepareField(
const Reference<XPropertySet> & xPropertySet)
@@ -678,6 +890,22 @@ XMLTextInputFieldImportContext::XMLTextInputFieldImportContext(
bValid = true; // always valid
}
+XMLTextInputFieldImportContext::XMLTextInputFieldImportContext(
+ SvXMLImport& rImport, XMLTextImportHelper& rHlp,
+ sal_Int32 Element)
+: XMLVarFieldImportContext(rImport, rHlp, sAPI_input,
+ Element,
+ // description
+ false, false,
+ true, true, true,
+ false, false,
+ false, false, false,
+ false),
+ sPropertyContent(sAPI_content)
+{
+ bValid = true; // always valid
+}
+
void XMLTextInputFieldImportContext::PrepareField(
const Reference<XPropertySet> & xPropertySet)
{