summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@suse.com>2011-11-18 00:39:58 -0500
committerKohei Yoshida <kohei.yoshida@suse.com>2011-11-18 14:13:23 -0500
commit3c8348017b77640262ca5dd88b9f9429e6d07037 (patch)
treea36c4276d5a4a9a1d6951d2b1aa6456516fb1bec /sc
parente85842d3d02f5a4faaff6dc79d00887e4d062582 (diff)
Finally load the multi-match conditions properly.
Diffstat (limited to 'sc')
-rw-r--r--sc/source/filter/xml/xmlfilti.cxx37
-rw-r--r--sc/source/filter/xml/xmlfilti.hxx10
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();