diff options
author | Daniel Sikeler <d.sikeler94@gmail.com> | 2015-10-02 12:16:52 +0200 |
---|---|---|
committer | Daniel Sikeler <d.sikeler94@gmail.com> | 2015-10-02 12:16:52 +0200 |
commit | 23d1b32338af4c05df12a2e59ee5719ecad7b228 (patch) | |
tree | 015c4a368d16f2c1758e9eb0dff85af26a9def57 | |
parent | f89bf7b0443da7f014739005a08ab5e4c08ca42d (diff) |
fastparser impl. for XMLVarFieldImportContext
and subclasses and subsubclasses
Change-Id: I0dda419511c742c7b6cd7eda0d03b5bff41eaa8a
-rw-r--r-- | xmloff/inc/txtvfldi.hxx | 73 | ||||
-rw-r--r-- | xmloff/source/text/txtvfldi.cxx | 230 |
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) { |