sc/inc/dpoutput.hxx | 46 ++++----- sc/qa/unit/ucalc.cxx | 14 -- sc/source/core/data/dpobject.cxx | 4 sc/source/core/data/dpoutput.cxx | 196 +++++++++++++++++++-------------------- sc/source/core/data/dptabsrc.cxx | 11 +- 5 files changed, 140 insertions(+), 131 deletions(-)
New commits: commit 1fb5aea16f11c90aaac23486e584a17e0655b621 Author: Kohei Yoshida <kohei.yosh...@suse.com> Date: Sat Feb 25 00:42:02 2012 -0500 Show column/row grand totals only when at least one column/row field exists. Otherwise the grand total would be just a duplicate of the data field area. diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx index 37a8ee7..89bc980 100644 --- a/sc/qa/unit/ucalc.cxx +++ b/sc/qa/unit/ucalc.cxx @@ -1662,9 +1662,7 @@ void Test::testPivotTableFilters() { 0, 0 }, { "Data", 0 }, { "Sum - Val1", "8" }, - { "Sum - Val2", "80" }, - { "Total Sum - Val1", "8" }, - { "Total Sum - Val2", "80" } + { "Sum - Val2", "80" } }; bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output (unfiltered)"); @@ -1676,7 +1674,7 @@ void Test::testPivotTableFilters() ScAddress aFormulaAddr = aOutRange.aEnd; aFormulaAddr.IncRow(2); m_pDoc->SetString(aFormulaAddr.Col(), aFormulaAddr.Row(), aFormulaAddr.Tab(), - rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("=B8"))); + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("=B6"))); double fTest = m_pDoc->GetValue(aFormulaAddr); CPPUNIT_ASSERT_MESSAGE("Incorrect formula value that references a cell in the pivot table output.", fTest == 80.0); @@ -1698,9 +1696,7 @@ void Test::testPivotTableFilters() { 0, 0 }, { "Data", 0 }, { "Sum - Val1", "4" }, - { "Sum - Val2", "40" }, - { "Total Sum - Val1", "4" }, - { "Total Sum - Val2", "40" } + { "Sum - Val2", "40" } }; bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output (filtered by page)"); @@ -1730,9 +1726,7 @@ void Test::testPivotTableFilters() { 0, 0 }, { "Data", 0 }, { "Sum - Val1", "2" }, - { "Sum - Val2", "20" }, - { "Total Sum - Val1", "2" }, - { "Total Sum - Val2", "20" } + { "Sum - Val2", "20" } }; bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output (filtered by query)"); diff --git a/sc/source/core/data/dptabsrc.cxx b/sc/source/core/data/dptabsrc.cxx index 22f17ef..24dc55f 100644 --- a/sc/source/core/data/dptabsrc.cxx +++ b/sc/source/core/data/dptabsrc.cxx @@ -863,8 +863,15 @@ void ScDPSource::CreateRes_Impl() aInitState.AddMember( nPageDims[i], GetMemberId( nPageDims[i], pDim->GetSelectedData() ) ); } - pColResRoot = new ScDPResultMember( pResData, bColumnGrand ); - pRowResRoot = new ScDPResultMember( pResData, bRowGrand ); + // Show grand total columns only when the option is set *and* there is at + // least one column field. Same for the grand total rows. + sal_uInt16 nDataLayoutOrient = GetDataLayoutOrientation(); + long nColDimCount2 = nColDimCount - (nDataLayoutOrient == sheet::DataPilotFieldOrientation_COLUMN ? 1 : 0); + long nRowDimCount2 = nRowDimCount - (nDataLayoutOrient == sheet::DataPilotFieldOrientation_ROW ? 1 : 0); + bool bShowColGrand = bColumnGrand && nColDimCount2 > 0; + bool bShowRowGrand = bRowGrand && nRowDimCount2 > 0; + pColResRoot = new ScDPResultMember(pResData, bShowColGrand); + pRowResRoot = new ScDPResultMember(pResData, bShowRowGrand); FillCalcInfo(false, aInfo, bHasAutoShow); long nColLevelCount = aInfo.aColLevels.size(); commit 778a6993b971f13f4008491f54296e57b9026238 Author: Kohei Yoshida <kohei.yosh...@suse.com> Date: Fri Feb 24 22:03:15 2012 -0500 boolean cleanup in ScDPOutput. diff --git a/sc/inc/dpoutput.hxx b/sc/inc/dpoutput.hxx index 1aec7e7..24de356 100644 --- a/sc/inc/dpoutput.hxx +++ b/sc/inc/dpoutput.hxx @@ -81,7 +81,6 @@ private: com::sun::star::uno::Reference< com::sun::star::sheet::XDimensionsSupplier> xSource; ScAddress aStartPos; - bool bDoFilter; ScDPOutLevelData* pColFields; ScDPOutLevelData* pRowFields; ScDPOutLevelData* pPageFields; @@ -91,8 +90,6 @@ private: com::sun::star::uno::Sequence< com::sun::star::uno::Sequence< com::sun::star::sheet::DataResult> > aData; - bool bResultsError; - bool mbHasDataLayout; rtl::OUString aDataDescription; // Number format related parameters @@ -103,12 +100,9 @@ private: sal_uInt32 nSingleNumFmt; // Output geometry related parameters - bool bSizesValid; - bool bSizeOverflow; long nColCount; long nRowCount; long nHeaderSize; - bool mbHeaderLayout; // sal_True : grid, sal_False : standard SCCOL nTabStartCol; SCROW nTabStartRow; SCCOL nMemberStartCol; @@ -117,12 +111,18 @@ private: SCROW nDataStartRow; SCCOL nTabEndCol; SCROW nTabEndRow; + bool bDoFilter:1; + bool bResultsError:1; + bool mbHasDataLayout:1; + bool bSizesValid:1; + bool bSizeOverflow:1; + bool mbHeaderLayout:1; // true : grid, false : standard void DataCell( SCCOL nCol, SCROW nRow, SCTAB nTab, const com::sun::star::sheet::DataResult& rData ); void HeaderCell( SCCOL nCol, SCROW nRow, SCTAB nTab, const com::sun::star::sheet::MemberResult& rData, - sal_Bool bColHeader, long nLevel ); + bool bColHeader, long nLevel ); void FieldCell(SCCOL nCol, SCROW nRow, SCTAB nTab, const ScDPOutLevelData& rData, bool bInTable); @@ -153,13 +153,17 @@ public: field region. */ bool GetDataResultPositionData(::std::vector< ::com::sun::star::sheet::DataPilotFieldFilter >& rFilters, const ScAddress& rPos); - sal_Bool GetPivotData( ScDPGetPivotDataField& rTarget, /* returns result */ - const std::vector< ScDPGetPivotDataField >& rFilters ); + /** + * @return true on success and stores the result in rTarget, or false if + * rFilters or rTarget describe something that is not visible. + */ + bool GetPivotData( ScDPGetPivotDataField& rTarget, + const std::vector< ScDPGetPivotDataField >& rFilters ); long GetHeaderDim( const ScAddress& rPos, sal_uInt16& rOrient ); - sal_Bool GetHeaderDrag( const ScAddress& rPos, sal_Bool bMouseLeft, sal_Bool bMouseTop, - long nDragDim, - Rectangle& rPosRect, sal_uInt16& rOrient, long& rDimPos ); - sal_Bool IsFilterButton( const ScAddress& rPos ); + bool GetHeaderDrag( + const ScAddress& rPos, bool bMouseLeft, bool bMouseTop, long nDragDim, + Rectangle& rPosRect, sal_uInt16& rOrient, long& rDimPos ); + bool IsFilterButton( const ScAddress& rPos ); void GetMemberResultNames(ScDPUniqueStringSet& rNames, long nDimension); diff --git a/sc/source/core/data/dpoutput.cxx b/sc/source/core/data/dpoutput.cxx index f53f8fa..f903f0d 100644 --- a/sc/source/core/data/dpoutput.cxx +++ b/sc/source/core/data/dpoutput.cxx @@ -283,7 +283,7 @@ void ScDPOutputImpl::OutputBlockFrame ( SCCOL nStartCol, SCROW nStartRow, SCCOL aBoxInfo.SetValid(VALID_VERT,false ); if ( bHori ) { - aBoxInfo.SetValid(VALID_HORI,sal_True); + aBoxInfo.SetValid(VALID_HORI,true); aBoxInfo.SetLine( &aLine, BOXINFO_LINE_HORI ); } else @@ -366,7 +366,7 @@ void lcl_FillNumberFormats( sal_uInt32*& rFormats, long& rCount, rtl::OUString aDataNames[SC_DPOUT_MAXLEVELS]; sal_uInt32 nDataFormats[SC_DPOUT_MAXLEVELS]; long nDataCount = 0; - sal_Bool bAnySet = false; + bool bAnySet = false; long nDimCount = xDims->getCount(); for (long nDim=0; nDim<nDimCount; nDim++) @@ -389,7 +389,7 @@ void lcl_FillNumberFormats( sal_uInt32*& rFormats, long& rCount, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNONAME_NUMFMT)) ); nDataFormats[nDataCount] = nFormat; if ( nFormat != 0 ) - bAnySet = sal_True; + bAnySet = true; ++nDataCount; } } @@ -472,7 +472,7 @@ void lcl_SortFields( ScDPOutLevelData* pFields, long nFieldCount ) } } -sal_Bool lcl_MemberEmpty( const uno::Sequence<sheet::MemberResult>& rSeq ) +bool lcl_MemberEmpty( const uno::Sequence<sheet::MemberResult>& rSeq ) { // used to skip levels that have no members @@ -482,7 +482,7 @@ sal_Bool lcl_MemberEmpty( const uno::Sequence<sheet::MemberResult>& rSeq ) if (pArray[i].Flags & sheet::MemberResultFlags::HASMEMBER) return false; - return sal_True; // no member data -> empty + return true; // no member data -> empty } uno::Sequence<sheet::MemberResult> lcl_GetSelectedPageAsResult( const uno::Reference<beans::XPropertySet>& xDimProp ) @@ -528,17 +528,17 @@ ScDPOutput::ScDPOutput( ScDocument* pD, const uno::Reference<sheet::XDimensionsS pDoc( pD ), xSource( xSrc ), aStartPos( rPos ), - bDoFilter( bFilter ), - bResultsError( false ), - mbHasDataLayout(false), pColNumFmt( NULL ), pRowNumFmt( NULL ), nColFmtCount( 0 ), nRowFmtCount( 0 ), nSingleNumFmt( 0 ), - bSizesValid( false ), - bSizeOverflow( false ), - mbHeaderLayout( false ) + bDoFilter(bFilter), + bResultsError(false), + mbHasDataLayout(false), + bSizesValid(false), + bSizeOverflow(false), + mbHeaderLayout(false) { nTabStartCol = nMemberStartCol = nDataStartCol = nTabEndCol = 0; nTabStartRow = nMemberStartRow = nDataStartRow = nTabEndRow = 0; @@ -782,7 +782,7 @@ void ScDPOutput::DataCell( SCCOL nCol, SCROW nRow, SCTAB nTab, const sheet::Data } void ScDPOutput::HeaderCell( SCCOL nCol, SCROW nRow, SCTAB nTab, - const sheet::MemberResult& rData, sal_Bool bColHeader, long nLevel ) + const sheet::MemberResult& rData, bool bColHeader, long nLevel ) { long nFlags = rData.Flags; @@ -1059,7 +1059,7 @@ void ScDPOutput::Output() { outputimp.AddCol( nColPos ); if ( nColPos + 1 == nEndColPos ) - outputimp.OutputBlockFrame( nColPos,nRowPos, nEndColPos,nRowPos+1, sal_True ); + outputimp.OutputBlockFrame( nColPos,nRowPos, nEndColPos,nRowPos+1, true ); } else outputimp.OutputBlockFrame( nColPos,nRowPos, nEndColPos,nRowPos ); @@ -1077,7 +1077,7 @@ void ScDPOutput::Output() } // output row headers: - std::vector<sal_Bool> vbSetBorder; + std::vector<bool> vbSetBorder; vbSetBorder.resize( nTabEndRow - nDataStartRow + 1, false ); for (nField=0; nField<nRowFieldCount; nField++) { @@ -1107,7 +1107,7 @@ void ScDPOutput::Output() if ( vbSetBorder[ nRow ] == false ) { outputimp.OutputBlockFrame( nColPos, nRowPos, nTabEndCol, nEndRowPos ); - vbSetBorder[ nRow ] = sal_True; + vbSetBorder[ nRow ] = true; } outputimp.OutputBlockFrame( nColPos, nRowPos, nColPos, nEndRowPos ); @@ -1226,13 +1226,13 @@ void lcl_GetTableVars( sal_Int32& rGrandTotalCols, sal_Int32& rGrandTotalRows, s rDataOrient = sheet::DataPilotFieldOrientation_HIDDEN; uno::Reference<beans::XPropertySet> xSrcProp( xSource, uno::UNO_QUERY ); - sal_Bool bColGrand = ScUnoHelpFunctions::GetBoolProperty( xSrcProp, - rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_DP_COLGRAND)) ); + bool bColGrand = ScUnoHelpFunctions::GetBoolProperty( + xSrcProp, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_DP_COLGRAND))); if ( bColGrand ) rGrandTotalCols = 1; // default if data layout not in columns - sal_Bool bRowGrand = ScUnoHelpFunctions::GetBoolProperty( xSrcProp, - rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_DP_ROWGRAND)) ); + bool bRowGrand = ScUnoHelpFunctions::GetBoolProperty( + xSrcProp, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_DP_ROWGRAND))); if ( bRowGrand ) rGrandTotalRows = 1; // default if data layout not in rows @@ -1506,14 +1506,14 @@ bool lcl_IsCondition( const sheet::MemberResult& rResultEntry, const ScDPGetPivo } bool lcl_CheckPageField( const ScDPOutLevelData& rField, - const std::vector< ScDPGetPivotDataField >& rFilters, - std::vector< sal_Bool >& rFilterUsed ) + const std::vector< ScDPGetPivotDataField >& rFilters, + std::vector<bool>& rFilterUsed ) { for (SCSIZE nFilterPos = 0; nFilterPos < rFilters.size(); ++nFilterPos) { if ( lcl_IsNamedCategoryField( rFilters[nFilterPos], rField ) ) { - rFilterUsed[nFilterPos] = sal_True; + rFilterUsed[nFilterPos] = true; // page field result is empty or the selection as single entry (see lcl_GetSelectedPageAsResult) if ( rField.aResult.getLength() == 1 && @@ -1591,10 +1591,10 @@ uno::Sequence<sheet::GeneralFunction> lcl_GetSubTotals( return aSubTotals; } -void lcl_FilterInclude( std::vector< sal_Bool >& rResult, std::vector< sal_Int32 >& rSubtotal, +void lcl_FilterInclude( std::vector<bool>& rResult, std::vector< sal_Int32 >& rSubtotal, const ScDPOutLevelData& rField, const std::vector< ScDPGetPivotDataField >& rFilters, - std::vector< sal_Bool >& rFilterUsed, + std::vector<bool>& rFilterUsed, bool& rBeforeDataLayout, sal_Int32 nGrandTotals, sal_Int32 nDataLayoutIndex, const std::vector<rtl::OUString>& rDataNames, const std::vector<rtl::OUString>& rGivenNames, @@ -1617,7 +1617,7 @@ void lcl_FilterInclude( std::vector< sal_Bool >& rResult, std::vector< sal_Int32 if ( lcl_IsNamedCategoryField( rFilters[nFilterPos], rField ) ) { aFilter = rFilters[nFilterPos]; - rFilterUsed[nFilterPos] = sal_True; + rFilterUsed[nFilterPos] = true; bHasFilter = true; } } @@ -1768,7 +1768,7 @@ void lcl_FilterInclude( std::vector< sal_Bool >& rResult, std::vector< sal_Int32 } } -void lcl_StripSubTotals( std::vector< sal_Bool >& rResult, const std::vector< sal_Int32 >& rSubtotal ) +void lcl_StripSubTotals( std::vector<bool>& rResult, const std::vector<sal_Int32>& rSubtotal ) { sal_Int32 nSize = rResult.size(); OSL_ENSURE( (sal_Int32)rSubtotal.size() == nSize, "sizes don't match" ); @@ -1840,9 +1840,7 @@ void ScDPOutput::GetDataDimensionNames( } } -// Returns sal_True on success and stores the result in rTarget -// Returns sal_False if rFilters or rTarget describes something that is not visible -sal_Bool ScDPOutput::GetPivotData( ScDPGetPivotDataField& rTarget, +bool ScDPOutput::GetPivotData( ScDPGetPivotDataField& rTarget, const std::vector< ScDPGetPivotDataField >& rFilters ) { CalcSizes(); @@ -1868,12 +1866,12 @@ sal_Bool ScDPOutput::GetPivotData( ScDPGetPivotDataField& rTarget, return false; } - std::vector< sal_Bool > aIncludeCol( nColCount, sal_True ); + std::vector<bool> aIncludeCol(nColCount, true); std::vector< sal_Int32 > aSubtotalCol( nColCount, 0 ); - std::vector< sal_Bool > aIncludeRow( nRowCount, sal_True ); + std::vector<bool> aIncludeRow(nRowCount, true); std::vector< sal_Int32 > aSubtotalRow( nRowCount, 0 ); - std::vector< sal_Bool > aFilterUsed( rFilters.size(), false ); + std::vector<bool> aFilterUsed(rFilters.size(), false); long nField; long nCol; @@ -1940,10 +1938,10 @@ sal_Bool ScDPOutput::GetPivotData( ScDPGetPivotDataField& rTarget, rTarget.mbValIsStr = false; rTarget.mnValNum = rResult.Value; - return sal_True; + return true; } -sal_Bool ScDPOutput::IsFilterButton( const ScAddress& rPos ) +bool ScDPOutput::IsFilterButton( const ScAddress& rPos ) { SCCOL nCol = rPos.Col(); SCROW nRow = rPos.Row(); @@ -2001,7 +1999,7 @@ long ScDPOutput::GetHeaderDim( const ScAddress& rPos, sal_uInt16& rOrient ) return -1; // invalid } -sal_Bool ScDPOutput::GetHeaderDrag( const ScAddress& rPos, sal_Bool bMouseLeft, sal_Bool bMouseTop, +bool ScDPOutput::GetHeaderDrag( const ScAddress& rPos, bool bMouseLeft, bool bMouseTop, long nDragDim, Rectangle& rPosRect, sal_uInt16& rOrient, long& rDimPos ) { @@ -2026,25 +2024,25 @@ sal_Bool ScDPOutput::GetHeaderDrag( const ScAddress& rPos, sal_Bool bMouseLeft, if (nField < 0) { nField = 0; - bMouseTop = sal_True; + bMouseTop = true; } //! find start of dimension rPosRect = Rectangle( nDataStartCol, nMemberStartRow + nField, nTabEndCol, nMemberStartRow + nField -1 ); - sal_Bool bFound = false; // is this within the same orientation? - sal_Bool bBeforeDrag = false; - sal_Bool bAfterDrag = false; + bool bFound = false; // is this within the same orientation? + bool bBeforeDrag = false; + bool bAfterDrag = false; for (long nPos=0; nPos<nColFieldCount && !bFound; nPos++) { if (pColFields[nPos].nDim == nDragDim) { - bFound = sal_True; + bFound = true; if ( nField < nPos ) - bBeforeDrag = sal_True; + bBeforeDrag = true; else if ( nField > nPos ) - bAfterDrag = sal_True; + bAfterDrag = true; } } @@ -2069,13 +2067,13 @@ sal_Bool ScDPOutput::GetHeaderDrag( const ScAddress& rPos, sal_Bool bMouseLeft, rOrient = sheet::DataPilotFieldOrientation_COLUMN; rDimPos = nField; //!... - return sal_True; + return true; } // test for row header // special case if no row fields - sal_Bool bSpecial = ( nRow+1 >= nDataStartRow && nRow <= nTabEndRow && + bool bSpecial = ( nRow+1 >= nDataStartRow && nRow <= nTabEndRow && nRowFieldCount == 0 && nCol == nTabStartCol && bMouseLeft ); if ( bSpecial || ( nRow+1 >= nDataStartRow && nRow <= nTabEndRow && @@ -2087,18 +2085,18 @@ sal_Bool ScDPOutput::GetHeaderDrag( const ScAddress& rPos, sal_Bool bMouseLeft, rPosRect = Rectangle( nTabStartCol + nField, nDataStartRow - 1, nTabStartCol + nField - 1, nTabEndRow ); - sal_Bool bFound = false; // is this within the same orientation? - sal_Bool bBeforeDrag = false; - sal_Bool bAfterDrag = false; + bool bFound = false; // is this within the same orientation? + bool bBeforeDrag = false; + bool bAfterDrag = false; for (long nPos=0; nPos<nRowFieldCount && !bFound; nPos++) { if (pRowFields[nPos].nDim == nDragDim) { - bFound = sal_True; + bFound = true; if ( nField < nPos ) - bBeforeDrag = sal_True; + bBeforeDrag = true; else if ( nField > nPos ) - bAfterDrag = sal_True; + bAfterDrag = true; } } @@ -2123,7 +2121,7 @@ sal_Bool ScDPOutput::GetHeaderDrag( const ScAddress& rPos, sal_Bool bMouseLeft, rOrient = sheet::DataPilotFieldOrientation_ROW; rDimPos = nField; //!... - return sal_True; + return true; } // test for page fields @@ -2136,25 +2134,25 @@ sal_Bool ScDPOutput::GetHeaderDrag( const ScAddress& rPos, sal_Bool bMouseLeft, if (nField < 0) { nField = 0; - bMouseTop = sal_True; + bMouseTop = true; } //! find start of dimension rPosRect = Rectangle( aStartPos.Col(), nPageStartRow + nField, nTabEndCol, nPageStartRow + nField - 1 ); - sal_Bool bFound = false; // is this within the same orientation? - sal_Bool bBeforeDrag = false; - sal_Bool bAfterDrag = false; + bool bFound = false; // is this within the same orientation? + bool bBeforeDrag = false; + bool bAfterDrag = false; for (long nPos=0; nPos<nPageFieldCount && !bFound; nPos++) { if (pPageFields[nPos].nDim == nDragDim) { - bFound = sal_True; + bFound = true; if ( nField < nPos ) - bBeforeDrag = sal_True; + bBeforeDrag = true; else if ( nField > nPos ) - bAfterDrag = sal_True; + bAfterDrag = true; } } @@ -2179,7 +2177,7 @@ sal_Bool ScDPOutput::GetHeaderDrag( const ScAddress& rPos, sal_Bool bMouseLeft, rOrient = sheet::DataPilotFieldOrientation_PAGE; rDimPos = nField; //!... - return sal_True; + return true; } return false; commit 397e5668b7269e19d66705cbed5b577db0510a9f Author: Kohei Yoshida <kohei.yosh...@suse.com> Date: Fri Feb 24 21:40:58 2012 -0500 ScDPOutput is now String-free. diff --git a/sc/inc/dpoutput.hxx b/sc/inc/dpoutput.hxx index 4a02647..1aec7e7 100644 --- a/sc/inc/dpoutput.hxx +++ b/sc/inc/dpoutput.hxx @@ -57,11 +57,11 @@ struct ScDPOutLevelData; struct ScDPGetPivotDataField { - String maFieldName; + rtl::OUString maFieldName; com::sun::star::sheet::GeneralFunction meFunction; bool mbValIsStr; - String maValStr; + rtl::OUString maValStr; double mnValNum; ScDPGetPivotDataField() : @@ -74,10 +74,9 @@ struct ScDPGetPivotDataField -class ScDPOutput //! name??? +class ScDPOutput { private: - //! use impl-object? ScDocument* pDoc; com::sun::star::uno::Reference< com::sun::star::sheet::XDimensionsSupplier> xSource; @@ -94,7 +93,7 @@ private: com::sun::star::sheet::DataResult> > aData; bool bResultsError; bool mbHasDataLayout; - String aDataDescription; + rtl::OUString aDataDescription; // Number format related parameters sal_uInt32* pColNumFmt; @@ -167,9 +166,10 @@ public: void SetHeaderLayout(bool bUseGrid); bool GetHeaderLayout() const; - static void GetDataDimensionNames( String& rSourceName, String& rGivenName, - const com::sun::star::uno::Reference< - com::sun::star::uno::XInterface>& xDim ); + static void GetDataDimensionNames( + rtl::OUString& rSourceName, rtl::OUString& rGivenName, + const com::sun::star::uno::Reference< + com::sun::star::uno::XInterface>& xDim ); }; diff --git a/sc/source/core/data/dpobject.cxx b/sc/source/core/data/dpobject.cxx index bd28f39..a042a45 100644 --- a/sc/source/core/data/dpobject.cxx +++ b/sc/source/core/data/dpobject.cxx @@ -1353,8 +1353,8 @@ bool ScDPObject::ParseFilters( ScDPGetPivotDataField& rTarget, { if ( nOrient == sheet::DataPilotFieldOrientation_DATA ) { - String aSourceName; - String aGivenName; + rtl::OUString aSourceName; + rtl::OUString aGivenName; ScDPOutput::GetDataDimensionNames( aSourceName, aGivenName, xIntDim ); aDataNames.push_back( aSourceName ); aGivenNames.push_back( aGivenName ); diff --git a/sc/source/core/data/dpoutput.cxx b/sc/source/core/data/dpoutput.cxx index 392b99a..f53f8fa 100644 --- a/sc/source/core/data/dpoutput.cxx +++ b/sc/source/core/data/dpoutput.cxx @@ -305,7 +305,7 @@ void lcl_SetStyleById( ScDocument* pDoc, SCTAB nTab, return; } - String aStyleName = ScGlobal::GetRscString( nStrId ); + rtl::OUString aStyleName = ScGlobal::GetRscString( nStrId ); ScStyleSheetPool* pStlPool = pDoc->GetStyleSheetPool(); ScStyleSheet* pStyle = (ScStyleSheet*) pStlPool->Find( aStyleName, SFX_STYLE_FAMILY_PARA ); if (!pStyle) @@ -363,7 +363,7 @@ void lcl_FillNumberFormats( sal_uInt32*& rFormats, long& rCount, // get names/formats for all data dimensions //! merge this with the loop to collect ScDPOutLevelData? - String aDataNames[SC_DPOUT_MAXLEVELS]; + rtl::OUString aDataNames[SC_DPOUT_MAXLEVELS]; sal_uInt32 nDataFormats[SC_DPOUT_MAXLEVELS]; long nDataCount = 0; sal_Bool bAnySet = false; @@ -383,7 +383,7 @@ void lcl_FillNumberFormats( sal_uInt32*& rFormats, long& rCount, sheet::DataPilotFieldOrientation_HIDDEN ); if ( eDimOrient == sheet::DataPilotFieldOrientation_DATA ) { - aDataNames[nDataCount] = String( xDimName->getName() ); + aDataNames[nDataCount] = xDimName->getName(); long nFormat = ScUnoHelpFunctions::GetLongProperty( xDimProp, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNONAME_NUMFMT)) ); @@ -399,7 +399,7 @@ void lcl_FillNumberFormats( sal_uInt32*& rFormats, long& rCount, { const sheet::MemberResult* pArray = aResult.getConstArray(); - String aName; + rtl::OUString aName; sal_uInt32* pNumFmt = new sal_uInt32[nSize]; if (nDataCount == 1) { @@ -415,7 +415,7 @@ void lcl_FillNumberFormats( sal_uInt32*& rFormats, long& rCount, // if CONTINUE bit is set, keep previous name //! keep number format instead! if ( !(pArray[nPos].Flags & sheet::MemberResultFlags::CONTINUE) ) - aName = String( pArray[nPos].Name ); + aName = pArray[nPos].Name; sal_uInt32 nFormat = 0; for (long i=0; i<nDataCount; i++) @@ -716,7 +716,7 @@ ScDPOutput::ScDPOutput( ScDocument* pD, const uno::Reference<sheet::XDimensionsS rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_DP_DATADESC)) ); rtl::OUString aUStr; aAny >>= aUStr; - aDataDescription = String( aUStr ); + aDataDescription = aUStr; } catch(uno::Exception&) { @@ -998,11 +998,11 @@ void ScDPOutput::Output() FieldCell(nHdrCol, nHdrRow, nTab, pPageFields[nField], false); SCCOL nFldCol = nHdrCol + 1; - String aPageValue; + rtl::OUString aPageValue; if ( pPageFields[nField].aResult.getLength() == 1 ) aPageValue = pPageFields[nField].aResult[0].Caption; else - aPageValue = String( ScResId( SCSTR_ALL ) ); //! separate string? + aPageValue = ScResId::toString(ScResId(SCSTR_ALL)); //! separate string? pDoc->SetString( nFldCol, nHdrRow, nTab, aPageValue ); @@ -1014,12 +1014,11 @@ void ScDPOutput::Output() // data description // (may get overwritten by first row field) - String aDesc = aDataDescription; - if ( !aDesc.Len() ) + if (aDataDescription.isEmpty()) { //! use default string ("result") ? } - pDoc->SetString( nTabStartCol, nTabStartRow, nTab, aDesc ); + pDoc->SetString(nTabStartCol, nTabStartRow, nTab, aDataDescription); // set STR_PIVOT_STYLE_INNER for whole data area (subtotals are overwritten) @@ -1217,9 +1216,9 @@ bool ScDPOutput::GetHeaderLayout() const namespace { void lcl_GetTableVars( sal_Int32& rGrandTotalCols, sal_Int32& rGrandTotalRows, sal_Int32& rDataLayoutIndex, - std::vector<String>& rDataNames, std::vector<String>& rGivenNames, - sheet::DataPilotFieldOrientation& rDataOrient, - const uno::Reference<sheet::XDimensionsSupplier>& xSource ) + std::vector<rtl::OUString>& rDataNames, std::vector<rtl::OUString>& rGivenNames, + sheet::DataPilotFieldOrientation& rDataOrient, + const uno::Reference<sheet::XDimensionsSupplier>& xSource ) { rDataLayoutIndex = -1; // invalid rGrandTotalCols = 0; @@ -1264,8 +1263,8 @@ void lcl_GetTableVars( sal_Int32& rGrandTotalCols, sal_Int32& rGrandTotalRows, s } if ( eDimOrient == sheet::DataPilotFieldOrientation_DATA ) { - String aSourceName; - String aGivenName; + rtl::OUString aSourceName; + rtl::OUString aGivenName; ScDPOutput::GetDataDimensionNames( aSourceName, aGivenName, xDim ); rDataNames.push_back( aSourceName ); rGivenNames.push_back( aGivenName ); @@ -1408,8 +1407,8 @@ bool ScDPOutput::GetDataResultPositionData(vector<sheet::DataPilotFieldFilter>& sal_Int32 nGrandTotalCols; sal_Int32 nGrandTotalRows; sal_Int32 nDataLayoutIndex; - std::vector<String> aDataNames; - std::vector<String> aGivenNames; + std::vector<rtl::OUString> aDataNames; + std::vector<rtl::OUString> aGivenNames; sheet::DataPilotFieldOrientation eDataOrient; lcl_GetTableVars( nGrandTotalCols, nGrandTotalRows, nDataLayoutIndex, aDataNames, aGivenNames, eDataOrient, xSource ); @@ -1482,6 +1481,8 @@ bool ScDPOutput::GetDataResultPositionData(vector<sheet::DataPilotFieldFilter>& return true; } +namespace { + // // helper functions for ScDPOutput::GetPivotData // @@ -1596,7 +1597,7 @@ void lcl_FilterInclude( std::vector< sal_Bool >& rResult, std::vector< sal_Int32 std::vector< sal_Bool >& rFilterUsed, bool& rBeforeDataLayout, sal_Int32 nGrandTotals, sal_Int32 nDataLayoutIndex, - const std::vector<String>& rDataNames, const std::vector<String>& rGivenNames, + const std::vector<rtl::OUString>& rDataNames, const std::vector<rtl::OUString>& rGivenNames, const ScDPGetPivotDataField& rTarget, const uno::Reference<sheet::XDimensionsSupplier>& xSource ) { // returns true if a filter was given for the field @@ -1664,8 +1665,8 @@ void lcl_FilterInclude( std::vector< sal_Bool >& rResult, std::vector< sal_Int32 // grand total is always automatic sal_Int32 nDataPos = j - ( nSize - nGrandTotals ); OSL_ENSURE( nDataPos < (sal_Int32)rDataNames.size(), "wrong data count" ); - String aSourceName( rDataNames[nDataPos] ); // vector contains source names - String aGivenName( rGivenNames[nDataPos] ); + rtl::OUString aSourceName( rDataNames[nDataPos] ); // vector contains source names + rtl::OUString aGivenName( rGivenNames[nDataPos] ); rResult[j] = lcl_IsNamedDataField( rTarget, aSourceName, aGivenName ); } @@ -1700,8 +1701,8 @@ void lcl_FilterInclude( std::vector< sal_Bool >& rResult, std::vector< sal_Int32 sal_Int32 nFuncPos = nSubTotalCount / nDataCount; // outer order: subtotal functions sal_Int32 nDataPos = nSubTotalCount % nDataCount; // inner order: data fields - String aSourceName( rDataNames[nDataPos] ); // vector contains source names - String aGivenName( rGivenNames[nDataPos] ); + rtl::OUString aSourceName( rDataNames[nDataPos] ); // vector contains source names + rtl::OUString aGivenName( rGivenNames[nDataPos] ); OSL_ENSURE( nFuncPos < aSubTotals.getLength(), "wrong subtotal count" ); rResult[j] = lcl_IsNamedDataField( rTarget, aSourceName, aGivenName ) && @@ -1720,8 +1721,8 @@ void lcl_FilterInclude( std::vector< sal_Bool >& rResult, std::vector< sal_Int32 if ( rBeforeDataLayout ) { OSL_ENSURE( nSubTotalCount < (sal_Int32)rDataNames.size(), "wrong data count" ); - String aSourceName( rDataNames[nSubTotalCount] ); // vector contains source names - String aGivenName( rGivenNames[nSubTotalCount] ); + rtl::OUString aSourceName( rDataNames[nSubTotalCount] ); // vector contains source names + rtl::OUString aGivenName( rGivenNames[nSubTotalCount] ); rResult[j] = lcl_IsNamedDataField( rTarget, aSourceName, aGivenName ); } @@ -1784,7 +1785,7 @@ void lcl_StripSubTotals( std::vector< sal_Bool >& rResult, const std::vector< sa } } -String lcl_GetDataFieldName( const String& rSourceName, sheet::GeneralFunction eFunc ) +rtl::OUString lcl_GetDataFieldName( const rtl::OUString& rSourceName, sheet::GeneralFunction eFunc ) { sal_uInt16 nStrId = 0; switch ( eFunc ) @@ -1808,16 +1809,18 @@ String lcl_GetDataFieldName( const String& rSourceName, sheet::GeneralFunction e } } if ( !nStrId ) - return String(); + return rtl::OUString(); + + rtl::OUStringBuffer aRet( ScGlobal::GetRscString( nStrId ) ); + aRet.appendAscii(RTL_CONSTASCII_STRINGPARAM(" - ")); + aRet.append(rSourceName); + return aRet.makeStringAndClear(); +} - String aRet( ScGlobal::GetRscString( nStrId ) ); - aRet.AppendAscii(RTL_CONSTASCII_STRINGPARAM( " - " )); - aRet.Append( rSourceName ); - return aRet; } -void ScDPOutput::GetDataDimensionNames( String& rSourceName, String& rGivenName, - const uno::Reference<uno::XInterface>& xDim ) +void ScDPOutput::GetDataDimensionNames( + rtl::OUString& rSourceName, rtl::OUString& rGivenName, const uno::Reference<uno::XInterface>& xDim ) { uno::Reference<beans::XPropertySet> xDimProp( xDim, uno::UNO_QUERY ); uno::Reference<container::XNamed> xDimName( xDim, uno::UNO_QUERY ); @@ -1825,8 +1828,7 @@ void ScDPOutput::GetDataDimensionNames( String& rSourceName, String& rGivenName, { // Asterisks are added in ScDPSaveData::WriteToSource to create unique names. //! preserve original name there? - rSourceName = xDimName->getName(); - rSourceName.EraseTrailingChars( '*' ); + rSourceName = ScDPUtil::getSourceDimensionName(xDimName->getName()); // Generate "given name" the same way as in dptabres. //! Should use a stored name when available @@ -1849,8 +1851,8 @@ sal_Bool ScDPOutput::GetPivotData( ScDPGetPivotDataField& rTarget, sal_Int32 nGrandTotalCols; sal_Int32 nGrandTotalRows; sal_Int32 nDataLayoutIndex; - std::vector<String> aDataNames; - std::vector<String> aGivenNames; + std::vector<rtl::OUString> aDataNames; + std::vector<rtl::OUString> aGivenNames; sheet::DataPilotFieldOrientation eDataOrient; lcl_GetTableVars( nGrandTotalCols, nGrandTotalRows, nDataLayoutIndex, aDataNames, aGivenNames, eDataOrient, xSource ); commit e7cd45417957fa1c57ca63fc6de2428647639f25 Author: Kohei Yoshida <kohei.yosh...@suse.com> Date: Fri Feb 24 21:21:29 2012 -0500 File scope local method in anonymous namespace. diff --git a/sc/source/core/data/dpoutput.cxx b/sc/source/core/data/dpoutput.cxx index 37f0970..392b99a 100644 --- a/sc/source/core/data/dpoutput.cxx +++ b/sc/source/core/data/dpoutput.cxx @@ -1214,6 +1214,8 @@ bool ScDPOutput::GetHeaderLayout() const return mbHeaderLayout; } +namespace { + void lcl_GetTableVars( sal_Int32& rGrandTotalCols, sal_Int32& rGrandTotalRows, sal_Int32& rDataLayoutIndex, std::vector<String>& rDataNames, std::vector<String>& rGivenNames, sheet::DataPilotFieldOrientation& rDataOrient, @@ -1280,6 +1282,8 @@ void lcl_GetTableVars( sal_Int32& rGrandTotalCols, sal_Int32& rGrandTotalRows, s } } +} + void ScDPOutput::GetPositionData(const ScAddress& rPos, DataPilotTablePositionData& rPosData) { using namespace ::com::sun::star::sheet; _______________________________________________ Libreoffice-commits mailing list Libreoffice-commits@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits