offapi/com/sun/star/chart2/data/PivotTableFieldEntry.idl | 2 sc/source/ui/unoobj/PivotTableDataProvider.cxx | 33 ++++++++++----- 2 files changed, 24 insertions(+), 11 deletions(-)
New commits: commit 9b2ceeba47760dc92c7e91bea3c2d538afec25bc Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> Date: Mon Apr 17 17:58:26 2017 +0200 pivotcharts: display pivot table fields in correct order Change-Id: I97d3391d6d9d59626bace2ce0cf2b5d9b45d9261 Reviewed-on: https://gerrit.libreoffice.org/36627 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Tomaž Vajngerl <qui...@gmail.com> diff --git a/offapi/com/sun/star/chart2/data/PivotTableFieldEntry.idl b/offapi/com/sun/star/chart2/data/PivotTableFieldEntry.idl index 4d8973ff355b..126d11d4f804 100644 --- a/offapi/com/sun/star/chart2/data/PivotTableFieldEntry.idl +++ b/offapi/com/sun/star/chart2/data/PivotTableFieldEntry.idl @@ -30,6 +30,8 @@ struct PivotTableFieldEntry string Name; long DimensionIndex; + + long DimensionPositionIndex; }; }; // data diff --git a/sc/source/ui/unoobj/PivotTableDataProvider.cxx b/sc/source/ui/unoobj/PivotTableDataProvider.cxx index 9cd932a3415a..7194d01eaa74 100644 --- a/sc/source/ui/unoobj/PivotTableDataProvider.cxx +++ b/sc/source/ui/unoobj/PivotTableDataProvider.cxx @@ -307,7 +307,6 @@ void PivotTableDataProvider::collectPivotTableData() std::vector<OUString> aDataFieldNamesVectors; std::unordered_map<OUString, OUString, OUStringHash> aDataFieldCaptionNames; - std::vector<std::pair<OUString, sal_Int32>> aDataFieldPairs; sheet::DataPilotFieldOrientation eDataFieldOrientation = sheet::DataPilotFieldOrientation_HIDDEN; @@ -349,7 +348,7 @@ void PivotTableDataProvider::collectPivotTableData() uno::Reference<sheet::XDataPilotMemberResults> xLevelResult(xLevel, uno::UNO_QUERY ); bool bIsDataLayout = ScUnoHelpFunctions::GetBoolProperty(xDimProp, SC_UNO_DP_ISDATALAYOUT); - long nDimPos = ScUnoHelpFunctions::GetLongProperty(xDimProp, SC_UNO_DP_POSITION); + sal_Int32 nDimPos = ScUnoHelpFunctions::GetLongProperty(xDimProp, SC_UNO_DP_POSITION); sal_Int32 nNumberFormat = ScUnoHelpFunctions::GetLongProperty(xDimProp, SC_UNO_DP_NUMBERFO); if (xLevelName.is() && xLevelResult.is()) @@ -358,7 +357,7 @@ void PivotTableDataProvider::collectPivotTableData() { case sheet::DataPilotFieldOrientation_COLUMN: { - m_aColumnFields.push_back(chart2::data::PivotTableFieldEntry{xLevelName->getName(), nDim}); + m_aColumnFields.push_back(chart2::data::PivotTableFieldEntry{xLevelName->getName(), nDim, nDimPos}); uno::Sequence<sheet::MemberResult> aSequence = xLevelResult->getResults(); size_t i = 0; @@ -396,7 +395,7 @@ void PivotTableDataProvider::collectPivotTableData() case sheet::DataPilotFieldOrientation_ROW: { - m_aRowFields.push_back(chart2::data::PivotTableFieldEntry{xLevelName->getName(), nDim}); + m_aRowFields.push_back(chart2::data::PivotTableFieldEntry{xLevelName->getName(), nDim, nDimPos}); uno::Sequence<sheet::MemberResult> aSequence = xLevelResult->getResults(); m_aCategoriesRowOrientation.resize(aSequence.getLength()); @@ -449,14 +448,14 @@ void PivotTableDataProvider::collectPivotTableData() case sheet::DataPilotFieldOrientation_PAGE: { - m_aPageFields.push_back(chart2::data::PivotTableFieldEntry{xLevelName->getName(), nDim}); + m_aPageFields.push_back(chart2::data::PivotTableFieldEntry{xLevelName->getName(), nDim, nDimPos}); } break; case sheet::DataPilotFieldOrientation_DATA: { aDataFieldNumberFormatMap[xLevelName->getName()] = nNumberFormat; - aDataFieldPairs.push_back(std::pair<OUString, sal_Int32>(xLevelName->getName(), nDim)); + m_aDataFields.push_back(chart2::data::PivotTableFieldEntry{xLevelName->getName(), nDim, nDimPos}); } break; @@ -467,12 +466,10 @@ void PivotTableDataProvider::collectPivotTableData() } } - // Fill data field entry info - for (std::pair<OUString, sal_Int32> & rPair : aDataFieldPairs) + // Transform the name of data fields + for (chart2::data::PivotTableFieldEntry& rDataFields : m_aDataFields) { - m_aDataFields.push_back(chart2::data::PivotTableFieldEntry{ - aDataFieldCaptionNames[rPair.first], - rPair.second}); + rDataFields.Name = aDataFieldCaptionNames[rDataFields.Name]; } // Apply number format to the data @@ -505,6 +502,20 @@ void PivotTableDataProvider::collectPivotTableData() } } + // Sort fields so it respects the order of how it is represented in the pivot table + + auto funcDimensionPositionSortCompare = [] (chart2::data::PivotTableFieldEntry const & entry1, + chart2::data::PivotTableFieldEntry const & entry2) + { + return entry1.DimensionPositionIndex < entry2.DimensionPositionIndex; + }; + + std::sort(m_aColumnFields.begin(), m_aColumnFields.end(), funcDimensionPositionSortCompare); + std::sort(m_aRowFields.begin(), m_aRowFields.end(), funcDimensionPositionSortCompare); + std::sort(m_aPageFields.begin(), m_aPageFields.end(), funcDimensionPositionSortCompare); + std::sort(m_aDataFields.begin(), m_aDataFields.end(), funcDimensionPositionSortCompare); + + // Mark that we updated the data m_bNeedsUpdate = false; }
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits