summaryrefslogtreecommitdiff
path: root/sc/source/filter/xml/XMLExportDatabaseRanges.cxx
diff options
context:
space:
mode:
authorVikas <vikasmahato0@gmail.com>2018-06-29 12:19:58 +0530
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2018-07-02 01:39:30 +0200
commitb30b4e9c7c492542e1ae726e2e45627ee33f7cd5 (patch)
treeb53d2296926e11ff740672a5da07cdb3fb52da14 /sc/source/filter/xml/XMLExportDatabaseRanges.cxx
parenta4be3ebd4daddab219c347af8583bfbb9d63a843 (diff)
Move writesort() method from WriteDatabaseRange to free function
Change-Id: I732a0693aae92c5e654d1f8f414b7d6bd38b0562 Reviewed-on: https://gerrit.libreoffice.org/56662 Tested-by: Jenkins Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com>
Diffstat (limited to 'sc/source/filter/xml/XMLExportDatabaseRanges.cxx')
-rw-r--r--sc/source/filter/xml/XMLExportDatabaseRanges.cxx140
1 files changed, 69 insertions, 71 deletions
diff --git a/sc/source/filter/xml/XMLExportDatabaseRanges.cxx b/sc/source/filter/xml/XMLExportDatabaseRanges.cxx
index a11a796a7e3d..187d63383723 100644
--- a/sc/source/filter/xml/XMLExportDatabaseRanges.cxx
+++ b/sc/source/filter/xml/XMLExportDatabaseRanges.cxx
@@ -52,6 +52,71 @@
using namespace com::sun::star;
using namespace xmloff::token;
+void writeSort(ScXMLExport& mrExport, const ScSortParam& aParam, const ScRange& aRange, const ScDocument* mpDoc)
+{
+ // Count sort items first.
+ size_t nSortCount = 0;
+ for (; nSortCount < aParam.GetSortKeyCount(); ++nSortCount)
+ {
+ if (!aParam.maKeyState[nSortCount].bDoSort)
+ break;
+ }
+
+ if (!nSortCount)
+ // Nothing to export.
+ return;
+
+ ScAddress aOutPos(aParam.nDestCol, aParam.nDestRow, aParam.nDestTab);
+
+ if (!aParam.bIncludePattern)
+ mrExport.AddAttribute(XML_NAMESPACE_TABLE, XML_BIND_STYLES_TO_CONTENT, XML_FALSE);
+
+ if (!aParam.bInplace)
+ {
+ OUString aStr;
+ ScRangeStringConverter::GetStringFromAddress(
+ aStr, aOutPos, mpDoc, ::formula::FormulaGrammar::CONV_OOO);
+ mrExport.AddAttribute(XML_NAMESPACE_TABLE, XML_TARGET_RANGE_ADDRESS, aStr);
+ }
+
+ if (aParam.bCaseSens)
+ mrExport.AddAttribute(XML_NAMESPACE_TABLE, XML_CASE_SENSITIVE, XML_TRUE);
+
+ mrExport.AddLanguageTagAttributes( XML_NAMESPACE_TABLE, XML_NAMESPACE_TABLE, aParam.aCollatorLocale, false);
+ if (!aParam.aCollatorAlgorithm.isEmpty())
+ mrExport.AddAttribute(XML_NAMESPACE_TABLE, XML_ALGORITHM, aParam.aCollatorAlgorithm);
+
+ SvXMLElementExport aElemS(mrExport, XML_NAMESPACE_TABLE, XML_SORT, true, true);
+
+ SCCOLROW nFieldStart = aParam.bByRow ? aRange.aStart.Col() : aRange.aStart.Row();
+
+ for (size_t i = 0; i < nSortCount; ++i)
+ {
+ // Convert field value from absolute to relative.
+ SCCOLROW nField = aParam.maKeyState[i].nField - nFieldStart;
+ mrExport.AddAttribute(XML_NAMESPACE_TABLE, XML_FIELD_NUMBER, OUString::number(nField));
+
+ if (!aParam.maKeyState[i].bAscending)
+ mrExport.AddAttribute(XML_NAMESPACE_TABLE, XML_ORDER, XML_DESCENDING);
+
+ if (aParam.bUserDef)
+ {
+ OUStringBuffer aBuf;
+ aBuf.append(SC_USERLIST);
+ aBuf.append(static_cast<sal_Int32>(aParam.nUserIndex));
+ mrExport.AddAttribute(XML_NAMESPACE_TABLE, XML_DATA_TYPE, aBuf.makeStringAndClear());
+ }
+ else
+ {
+ // Right now we only support automatic field type. In the
+ // future we may support numeric or alphanumeric field type.
+ mrExport.AddAttribute(XML_NAMESPACE_TABLE, XML_DATA_TYPE, XML_AUTOMATIC);
+ }
+
+ SvXMLElementExport aElemSb(mrExport, XML_NAMESPACE_TABLE, XML_SORT_BY, true, true);
+ }
+}
+
ScXMLExportDatabaseRanges::ScXMLExportDatabaseRanges(ScXMLExport& rTempExport)
: rExport(rTempExport),
pDoc( nullptr )
@@ -207,9 +272,12 @@ private:
SvXMLElementExport aElemDR(mrExport, XML_NAMESPACE_TABLE, XML_DATABASE_RANGE, true, true);
+ ScSortParam aParam;
+ rData.GetSortParam(aParam);
+
writeImport(rData);
writeFilter(rData);
- writeSort(rData);
+ writeSort(mrExport, aParam, aRange, mpDoc);
writeSubtotals(rData);
}
@@ -294,76 +362,6 @@ private:
}
}
- void writeSort(const ScDBData& rData)
- {
- ScSortParam aParam;
- rData.GetSortParam(aParam);
-
- // Count sort items first.
- size_t nSortCount = 0;
- for (; nSortCount < aParam.GetSortKeyCount(); ++nSortCount)
- {
- if (!aParam.maKeyState[nSortCount].bDoSort)
- break;
- }
-
- if (!nSortCount)
- // Nothing to export.
- return;
-
- ScAddress aOutPos(aParam.nDestCol, aParam.nDestRow, aParam.nDestTab);
-
- if (!aParam.bIncludePattern)
- mrExport.AddAttribute(XML_NAMESPACE_TABLE, XML_BIND_STYLES_TO_CONTENT, XML_FALSE);
-
- if (!aParam.bInplace)
- {
- OUString aStr;
- ScRangeStringConverter::GetStringFromAddress(
- aStr, aOutPos, mpDoc, ::formula::FormulaGrammar::CONV_OOO);
- mrExport.AddAttribute(XML_NAMESPACE_TABLE, XML_TARGET_RANGE_ADDRESS, aStr);
- }
-
- if (aParam.bCaseSens)
- mrExport.AddAttribute(XML_NAMESPACE_TABLE, XML_CASE_SENSITIVE, XML_TRUE);
-
- mrExport.AddLanguageTagAttributes( XML_NAMESPACE_TABLE, XML_NAMESPACE_TABLE, aParam.aCollatorLocale, false);
- if (!aParam.aCollatorAlgorithm.isEmpty())
- mrExport.AddAttribute(XML_NAMESPACE_TABLE, XML_ALGORITHM, aParam.aCollatorAlgorithm);
-
- SvXMLElementExport aElemS(mrExport, XML_NAMESPACE_TABLE, XML_SORT, true, true);
-
- ScRange aRange;
- rData.GetArea(aRange);
- SCCOLROW nFieldStart = aParam.bByRow ? aRange.aStart.Col() : aRange.aStart.Row();
-
- for (size_t i = 0; i < nSortCount; ++i)
- {
- // Convert field value from absolute to relative.
- SCCOLROW nField = aParam.maKeyState[i].nField - nFieldStart;
- mrExport.AddAttribute(XML_NAMESPACE_TABLE, XML_FIELD_NUMBER, OUString::number(nField));
-
- if (!aParam.maKeyState[i].bAscending)
- mrExport.AddAttribute(XML_NAMESPACE_TABLE, XML_ORDER, XML_DESCENDING);
-
- if (aParam.bUserDef)
- {
- OUStringBuffer aBuf;
- aBuf.append(SC_USERLIST);
- aBuf.append(static_cast<sal_Int32>(aParam.nUserIndex));
- mrExport.AddAttribute(XML_NAMESPACE_TABLE, XML_DATA_TYPE, aBuf.makeStringAndClear());
- }
- else
- {
- // Right now we only support automatic field type. In the
- // future we may support numeric or alphanumeric field type.
- mrExport.AddAttribute(XML_NAMESPACE_TABLE, XML_DATA_TYPE, XML_AUTOMATIC);
- }
-
- SvXMLElementExport aElemSb(mrExport, XML_NAMESPACE_TABLE, XML_SORT_BY, true, true);
- }
- }
-
static OUString getOperatorXML(const ScQueryEntry& rEntry, utl::SearchParam::SearchType eSearchType)
{
switch (rEntry.eOp)