diff options
author | Kohei Yoshida <kohei.yoshida@suse.com> | 2011-11-18 00:39:58 -0500 |
---|---|---|
committer | Kohei Yoshida <kohei.yoshida@suse.com> | 2011-11-18 14:13:23 -0500 |
commit | 3c8348017b77640262ca5dd88b9f9429e6d07037 (patch) | |
tree | a36c4276d5a4a9a1d6951d2b1aa6456516fb1bec /sc | |
parent | e85842d3d02f5a4faaff6dc79d00887e4d062582 (diff) |
Finally load the multi-match conditions properly.
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/filter/xml/xmlfilti.cxx | 37 | ||||
-rw-r--r-- | sc/source/filter/xml/xmlfilti.hxx | 10 |
2 files changed, 33 insertions, 14 deletions
diff --git a/sc/source/filter/xml/xmlfilti.cxx b/sc/source/filter/xml/xmlfilti.cxx index c135d6ea60a0..5635b4f0f4f5 100644 --- a/sc/source/filter/xml/xmlfilti.cxx +++ b/sc/source/filter/xml/xmlfilti.cxx @@ -388,7 +388,7 @@ SvXMLImportContext *ScXMLConditionContext::CreateChildContext( sal_uInt16 nPrefi case XML_TOK_CONDITION_FILTER_SET_ITEM: { pContext = new ScXMLSetItemContext( - GetScImport(), nPrefix, rLName, xAttrList); + GetScImport(), nPrefix, rLName, xAttrList, *this); } break; } @@ -451,6 +451,11 @@ void ScXMLConditionContext::GetOperator( rEntry.eOp = SC_DOES_NOT_END_WITH; } +void ScXMLConditionContext::AddSetItem(const ScQueryEntry::Item& rItem) +{ + maQueryItems.push_back(rItem); +} + void ScXMLConditionContext::EndElement() { ScQueryEntry& rEntry = mrQueryParam.AppendEntry(); @@ -464,17 +469,23 @@ void ScXMLConditionContext::EndElement() GetOperator(sOperator, mrQueryParam, rEntry); SCCOLROW nStartPos = mrQueryParam.bByRow ? mrQueryParam.nCol1 : mrQueryParam.nRow1; rEntry.nField = nField + nStartPos; - ScQueryEntry::Item& rItem = rEntry.GetQueryItem(); - if (IsXMLToken(sDataType, XML_NUMBER)) + + if (maQueryItems.empty()) { - rItem.mfVal = sConditionValue.toDouble(); - rItem.meType = ScQueryEntry::ByValue; + ScQueryEntry::Item& rItem = rEntry.GetQueryItem(); + if (IsXMLToken(sDataType, XML_NUMBER)) + { + rItem.mfVal = sConditionValue.toDouble(); + rItem.meType = ScQueryEntry::ByValue; + } + else + { + rItem.maString = sConditionValue; + rItem.meType = ScQueryEntry::ByString; + } } else - { - rItem.maString = sConditionValue; - rItem.meType = ScQueryEntry::ByString; - } + rEntry.GetQueryItems().swap(maQueryItems); } const ScXMLImport& ScXMLSetItemContext::GetScImport() const @@ -489,7 +500,7 @@ ScXMLImport& ScXMLSetItemContext::GetScImport() ScXMLSetItemContext::ScXMLSetItemContext( ScXMLImport& rImport, sal_uInt16 nPrfx, const rtl::OUString& rLName, - const Reference<XAttributeList>& xAttrList) : + const Reference<XAttributeList>& xAttrList, ScXMLConditionContext& rParent) : SvXMLImportContext(rImport, nPrfx, rLName) { sal_Int32 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; @@ -507,7 +518,11 @@ ScXMLSetItemContext::ScXMLSetItemContext( { case XML_TOK_FILTER_SET_ITEM_ATTR_VALUE: { - // TODO: import the value. + ScQueryEntry::Item aItem; + aItem.maString = sValue; + aItem.meType = ScQueryEntry::ByString; + aItem.mfVal = 0.0; + rParent.AddSetItem(aItem); } break; } diff --git a/sc/source/filter/xml/xmlfilti.hxx b/sc/source/filter/xml/xmlfilti.hxx index 5f44ecc10bce..92a094c9b8b6 100644 --- a/sc/source/filter/xml/xmlfilti.hxx +++ b/sc/source/filter/xml/xmlfilti.hxx @@ -40,12 +40,12 @@ #include "xmldrani.hxx" #include "xmldpimp.hxx" +#include "queryentry.hxx" #include <vector> class ScXMLImport; struct ScQueryParam; -struct ScQueryEntry; class ScXMLFilterContext : public SvXMLImportContext { @@ -155,6 +155,7 @@ class ScXMLConditionContext : public SvXMLImportContext ScQueryParam& mrQueryParam; ScXMLFilterContext* pFilterContext; + ScQueryEntry::QueryItemsType maQueryItems; rtl::OUString sDataType; rtl::OUString sConditionValue; rtl::OUString sOperator; @@ -180,8 +181,10 @@ public: const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList>& xAttrList ); - void GetOperator(const rtl::OUString& aOpStr, ScQueryParam& rParam, ScQueryEntry& rEntry) const; virtual void EndElement(); + + void GetOperator(const rtl::OUString& aOpStr, ScQueryParam& rParam, ScQueryEntry& rEntry) const; + void AddSetItem(const ScQueryEntry::Item& rItem); }; class ScXMLSetItemContext : public SvXMLImportContext @@ -192,7 +195,8 @@ public: ScXMLSetItemContext(ScXMLImport& rImport, sal_uInt16 nPrfx, const ::rtl::OUString& rLName, const ::com::sun::star::uno::Reference< - ::com::sun::star::xml::sax::XAttributeList>& xAttrList); + ::com::sun::star::xml::sax::XAttributeList>& xAttrList, + ScXMLConditionContext& rParent); virtual ~ScXMLSetItemContext(); |