diff options
author | Vikas <vikasmahato0@gmail.com> | 2018-06-29 12:19:58 +0530 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2018-07-02 01:39:30 +0200 |
commit | b30b4e9c7c492542e1ae726e2e45627ee33f7cd5 (patch) | |
tree | b53d2296926e11ff740672a5da07cdb3fb52da14 /sc | |
parent | a4be3ebd4daddab219c347af8583bfbb9d63a843 (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')
-rw-r--r-- | sc/source/filter/xml/XMLExportDatabaseRanges.cxx | 140 | ||||
-rw-r--r-- | sc/source/filter/xml/XMLExportDatabaseRanges.hxx | 4 |
2 files changed, 73 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) diff --git a/sc/source/filter/xml/XMLExportDatabaseRanges.hxx b/sc/source/filter/xml/XMLExportDatabaseRanges.hxx index 134bbe3be0db..7dda5de96f35 100644 --- a/sc/source/filter/xml/XMLExportDatabaseRanges.hxx +++ b/sc/source/filter/xml/XMLExportDatabaseRanges.hxx @@ -20,11 +20,15 @@ #ifndef INCLUDED_SC_SOURCE_FILTER_XML_XMLEXPORTDATABASERANGES_HXX #define INCLUDED_SC_SOURCE_FILTER_XML_XMLEXPORTDATABASERANGES_HXX +#include <sortparam.hxx> +#include <address.hxx> class ScXMLExport; class ScDocument; class ScMyEmptyDatabaseRangesContainer; +void writeSort(ScXMLExport& mrExport, const ScSortParam& aParam, const ScRange& aRange, const ScDocument* mpDoc); + class ScXMLExportDatabaseRanges { ScXMLExport& rExport; |