diff options
-rw-r--r-- | sc/inc/datauno.hxx | 1 | ||||
-rw-r--r-- | sc/inc/dpresfilter.hxx | 4 | ||||
-rw-r--r-- | sc/inc/dptabres.hxx | 2 | ||||
-rw-r--r-- | sc/inc/dputil.hxx | 11 | ||||
-rw-r--r-- | sc/source/core/data/dpobject.cxx | 10 | ||||
-rw-r--r-- | sc/source/core/data/dptabres.cxx | 45 | ||||
-rw-r--r-- | sc/source/core/data/dptabsrc.cxx | 2 | ||||
-rw-r--r-- | sc/source/core/data/dputil.cxx | 59 | ||||
-rw-r--r-- | sc/source/filter/xml/xmldrani.cxx | 4 | ||||
-rw-r--r-- | sc/source/ui/unoobj/cellsuno.cxx | 55 | ||||
-rw-r--r-- | sc/source/ui/unoobj/datauno.cxx | 37 |
11 files changed, 114 insertions, 116 deletions
diff --git a/sc/inc/datauno.hxx b/sc/inc/datauno.hxx index 2acde1871cb9..a2562c21f7bf 100644 --- a/sc/inc/datauno.hxx +++ b/sc/inc/datauno.hxx @@ -68,7 +68,6 @@ typedef boost::ptr_vector<XDBRefreshListenerRef> XDBRefreshListenerArr_Impl; class ScDataUnoConversion { public: - static ScSubTotalFunc GeneralToSubTotal( com::sun::star::sheet::GeneralFunction eSummary ); static com::sun::star::sheet::GeneralFunction SubTotalToGeneral( ScSubTotalFunc eSubTotal ); }; diff --git a/sc/inc/dpresfilter.hxx b/sc/inc/dpresfilter.hxx index bde3c02cb55e..be84b8c83c2d 100644 --- a/sc/inc/dpresfilter.hxx +++ b/sc/inc/dpresfilter.hxx @@ -24,7 +24,7 @@ namespace com { namespace sun { namespace star { namespace sheet { struct ScDPResultFilter { OUString maDimName; - ScDPItemData maValue; + OUString maValue; bool mbHasValue:1; bool mbDataLayout:1; @@ -55,7 +55,7 @@ private: struct MemberNode; struct DimensionNode; - typedef std::map<ScDPItemData, MemberNode*> MembersType; + typedef std::map<OUString, MemberNode*> MembersType; typedef std::map<OUString, DimensionNode*> DimensionsType; struct DimensionNode : boost::noncopyable diff --git a/sc/inc/dptabres.hxx b/sc/inc/dptabres.hxx index e6289be227d8..e39b1da118b7 100644 --- a/sc/inc/dptabres.hxx +++ b/sc/inc/dptabres.hxx @@ -380,6 +380,8 @@ public: ScDPInitState& rInitState); void CheckShowEmpty( bool bShow = false ); OUString GetName() const; + OUString GetDisplayName() const; + void FillItemData( ScDPItemData& rData ) const; bool IsValid() const; bool IsVisible() const; diff --git a/sc/inc/dputil.hxx b/sc/inc/dputil.hxx index 425d33301ed2..294ca97b6339 100644 --- a/sc/inc/dputil.hxx +++ b/sc/inc/dputil.hxx @@ -7,11 +7,14 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef __SC_DPUTIL_HXX__ -#define __SC_DPUTIL_HXX__ +#ifndef SC_DPUTIL_HXX +#define SC_DPUTIL_HXX #include "rtl/ustring.hxx" #include "scdllapi.h" +#include "global.hxx" + +#include <com/sun/star/sheet/GeneralFunction.hpp> class SvNumberFormatter; struct ScDPNumGroupInfo; @@ -38,6 +41,10 @@ public: static sal_Int32 getDatePartValue( double fValue, const ScDPNumGroupInfo& rInfo, sal_Int32 nDatePart, SvNumberFormatter* pFormatter); + + static OUString getDisplayedMeasureName(const OUString& rName, ScSubTotalFunc eFunc); + + static ScSubTotalFunc toSubTotalFunc(com::sun::star::sheet::GeneralFunction eGenFunc); }; #endif diff --git a/sc/source/core/data/dpobject.cxx b/sc/source/core/data/dpobject.cxx index dff56a52cd14..fba73d602dfb 100644 --- a/sc/source/core/data/dpobject.cxx +++ b/sc/source/core/data/dpobject.cxx @@ -1289,11 +1289,19 @@ public: FindByName(const OUString& rName) : maName(rName) {} bool operator() (const ScDPSaveDimension* pDim) const { + // Layout name takes precedence. const OUString* pLayoutName = pDim->GetLayoutName(); if (pLayoutName) return *pLayoutName == maName; - return maName == pDim->GetName(); + sheet::GeneralFunction eGenFunc = static_cast<sheet::GeneralFunction>(pDim->GetFunction()); + ScSubTotalFunc eFunc = ScDPUtil::toSubTotalFunc(eGenFunc); + OUString aSrcName = ScDPUtil::getSourceDimensionName(pDim->GetName()); + OUString aFuncName = ScDPUtil::getDisplayedMeasureName(aSrcName, eFunc); + if (maName == aFuncName) + return true; + + return maName == aSrcName; } }; diff --git a/sc/source/core/data/dptabres.cxx b/sc/source/core/data/dptabres.cxx index 7cc25bc3073b..2dc7a1e2b887 100644 --- a/sc/source/core/data/dptabres.cxx +++ b/sc/source/core/data/dptabres.cxx @@ -24,12 +24,12 @@ #include "global.hxx" #include "subtotal.hxx" #include "globstr.hrc" -#include "datauno.hxx" // ScDataUnoConversion #include "dpitemdata.hxx" #include "document.hxx" // for DumpState only! #include "stlalgorithm.hxx" #include "dpresfilter.hxx" +#include "dputil.hxx" #include <osl/diagnose.h> #include <rtl/math.hxx> @@ -110,7 +110,7 @@ public: mrFilters.push_back(ScDPResultFilter(rName, bDataLayout)); } - void pushDimValue(const ScDPItemData& rValue) + void pushDimValue(const OUString& rValue) { ScDPResultFilter& rFilter = mrFilters.back(); rFilter.maValue = rValue; @@ -749,7 +749,7 @@ static ScSubTotalFunc lcl_GetForceFunc( const ScDPLevel* pLevel, long nFuncNo ) { sheet::GeneralFunction eUser = aSeq.getConstArray()[nFuncNo]; if (eUser != sheet::GeneralFunction_AUTO) - eRet = ScDataUnoConversion::GeneralToSubTotal( eUser ); + eRet = ScDPUtil::toSubTotalFunc(eUser); } } return eRet; @@ -863,18 +863,11 @@ OUString ScDPResultData::GetMeasureString(long nMeasure, bool bForce, ScSubTotal if (pLayoutName) return *pLayoutName; } - OUStringBuffer aRet; + ScSubTotalFunc eFunc = ( eForceFunc == SUBTOTAL_FUNC_NONE ) ? GetMeasureFunction(nMeasure) : eForceFunc; - sal_uInt16 nId = nFuncStrIds[eFunc]; - if (nId) - { - aRet.append(ScGlobal::GetRscString(nId)); // function name - aRet.appendAscii(RTL_CONSTASCII_STRINGPARAM(" - ")); - } - aRet.append(maMeasureNames[nMeasure]); // field name - return aRet.makeStringAndClear(); + return ScDPUtil::getDisplayedMeasureName(maMeasureNames[nMeasure], eFunc); } } @@ -1004,6 +997,23 @@ OUString ScDPResultMember::GetName() const return ScGlobal::GetRscString(STR_PIVOT_TOTAL); // root member } +OUString ScDPResultMember::GetDisplayName() const +{ + const ScDPMember* pDPMember = GetDPMember(); + if (!pDPMember) + return OUString(); + + ScDPItemData aItem; + pDPMember->FillItemData(aItem); + if (aParentDimData.mpParentDim) + { + long nDim = aParentDimData.mpParentDim->GetDimension(); + return pResultData->GetSource().GetData()->GetFormattedString(nDim, aItem); + } + + return aItem.GetString(); +} + void ScDPResultMember::FillItemData( ScDPItemData& rData ) const { const ScDPMember* pMemberDesc = GetDPMember(); @@ -1536,10 +1546,9 @@ void ScDPResultMember::FillDataResults( if (pDPMember) { // Root result has no corresponding DP member. Only take the non-root results. - ScDPItemData aItem; - pDPMember->FillItemData(aItem); + OUString aMemStr = GetDisplayName(); pFilterStack.reset(new FilterStack(rFilterCxt.maFilters)); - pFilterStack->pushDimValue(aItem); + pFilterStack->pushDimValue(aMemStr); } // IsVisible() test is in ScDPResultDimension::FillDataResults @@ -2044,12 +2053,8 @@ void ScDPDataMember::FillDataRow( // Topmost data member (pResultMember=NULL) doesn't need to be handled // since its immediate parent result member is linked to the same // dimension member. - ScDPItemData aItem; - const ScDPMember* pDPMember = pResultMember->GetDPMember(); - if (pDPMember) - pDPMember->FillItemData(aItem); pFilterStack.reset(new FilterStack(rFilterCxt.maFilters)); - pFilterStack->pushDimValue(aItem); + pFilterStack->pushDimValue(pResultMember->GetDisplayName()); } OSL_ENSURE( pRefMember == pResultMember || !pResultMember, "bla" ); diff --git a/sc/source/core/data/dptabsrc.cxx b/sc/source/core/data/dptabsrc.cxx index c38ee38dba5a..96fe330ea7ce 100644 --- a/sc/source/core/data/dptabsrc.cxx +++ b/sc/source/core/data/dptabsrc.cxx @@ -823,7 +823,7 @@ void ScDPSource::CreateRes_Impl() } // Map UNO's enum to internal enum ScSubTotalFunc. - aDataFunctions.push_back(ScDataUnoConversion::GeneralToSubTotal(eUser)); + aDataFunctions.push_back(ScDPUtil::toSubTotalFunc(eUser)); // Get reference field/item information. aDataRefValues.push_back(pDim->GetReferenceValue()); diff --git a/sc/source/core/data/dputil.cxx b/sc/source/core/data/dputil.cxx index 896d13e07012..7ea98c47e12c 100644 --- a/sc/source/core/data/dputil.cxx +++ b/sc/source/core/data/dputil.cxx @@ -11,10 +11,10 @@ */ #include "dputil.hxx" -#include "global.hxx" #include "dpitemdata.hxx" #include "dpnumgroupinfo.hxx" #include "globalnames.hxx" +#include "globstr.hrc" #include "comphelper/string.hxx" #include "unotools/localedatawrapper.hxx" @@ -347,4 +347,61 @@ sal_Int32 ScDPUtil::getDatePartValue( return nResult; } +namespace { + +sal_uInt16 nFuncStrIds[12] = { + 0, // SUBTOTAL_FUNC_NONE + STR_FUN_TEXT_AVG, // SUBTOTAL_FUNC_AVE + STR_FUN_TEXT_COUNT, // SUBTOTAL_FUNC_CNT + STR_FUN_TEXT_COUNT, // SUBTOTAL_FUNC_CNT2 + STR_FUN_TEXT_MAX, // SUBTOTAL_FUNC_MAX + STR_FUN_TEXT_MIN, // SUBTOTAL_FUNC_MIN + STR_FUN_TEXT_PRODUCT, // SUBTOTAL_FUNC_PROD + STR_FUN_TEXT_STDDEV, // SUBTOTAL_FUNC_STD + STR_FUN_TEXT_STDDEV, // SUBTOTAL_FUNC_STDP + STR_FUN_TEXT_SUM, // SUBTOTAL_FUNC_SUM + STR_FUN_TEXT_VAR, // SUBTOTAL_FUNC_VAR + STR_FUN_TEXT_VAR // SUBTOTAL_FUNC_VARP +}; + +} + +OUString ScDPUtil::getDisplayedMeasureName(const OUString& rName, ScSubTotalFunc eFunc) +{ + OUStringBuffer aRet; + sal_uInt16 nId = nFuncStrIds[eFunc]; + if (nId) + { + aRet.append(ScGlobal::GetRscString(nId)); // function name + aRet.appendAscii(RTL_CONSTASCII_STRINGPARAM(" - ")); + } + aRet.append(rName); // field name + + return aRet.makeStringAndClear(); +} + +ScSubTotalFunc ScDPUtil::toSubTotalFunc(com::sun::star::sheet::GeneralFunction eGenFunc) +{ + ScSubTotalFunc eSubTotal; + switch (eGenFunc) + { + case sheet::GeneralFunction_NONE: eSubTotal = SUBTOTAL_FUNC_NONE; break; + case sheet::GeneralFunction_SUM: eSubTotal = SUBTOTAL_FUNC_SUM; break; + case sheet::GeneralFunction_COUNT: eSubTotal = SUBTOTAL_FUNC_CNT2; break; + case sheet::GeneralFunction_AVERAGE: eSubTotal = SUBTOTAL_FUNC_AVE; break; + case sheet::GeneralFunction_MAX: eSubTotal = SUBTOTAL_FUNC_MAX; break; + case sheet::GeneralFunction_MIN: eSubTotal = SUBTOTAL_FUNC_MIN; break; + case sheet::GeneralFunction_PRODUCT: eSubTotal = SUBTOTAL_FUNC_PROD; break; + case sheet::GeneralFunction_COUNTNUMS: eSubTotal = SUBTOTAL_FUNC_CNT; break; + case sheet::GeneralFunction_STDEV: eSubTotal = SUBTOTAL_FUNC_STD; break; + case sheet::GeneralFunction_STDEVP: eSubTotal = SUBTOTAL_FUNC_STDP; break; + case sheet::GeneralFunction_VAR: eSubTotal = SUBTOTAL_FUNC_VAR; break; + case sheet::GeneralFunction_VARP: eSubTotal = SUBTOTAL_FUNC_VARP; break; + case sheet::GeneralFunction_AUTO: + default: + eSubTotal = SUBTOTAL_FUNC_NONE; + } + return eSubTotal; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/filter/xml/xmldrani.cxx b/sc/source/filter/xml/xmldrani.cxx index 9e98d38a6c4d..97483e3d6433 100644 --- a/sc/source/filter/xml/xmldrani.cxx +++ b/sc/source/filter/xml/xmldrani.cxx @@ -33,6 +33,7 @@ #include "XMLConverter.hxx" #include "rangeutl.hxx" #include "queryentry.hxx" +#include "dputil.hxx" #include <xmloff/xmltkmap.hxx> #include <xmloff/nmspmap.hxx> @@ -398,8 +399,7 @@ ScDBData* ScXMLDatabaseRangeContext::ConvertToDBData(const OUString& rName) for (SCCOL i = 0; i < nCount; ++i) { aParam.pSubTotals[nPos][i] = static_cast<SCCOL>(pAry[i].Column); - aParam.pFunctions[nPos][i] = - ScDataUnoConversion::GeneralToSubTotal( pAry[i].Function ); + aParam.pFunctions[nPos][i] = ScDPUtil::toSubTotalFunc(pAry[i].Function); } } else diff --git a/sc/source/ui/unoobj/cellsuno.cxx b/sc/source/ui/unoobj/cellsuno.cxx index 3a8f7cd2f271..a3f5bdbfdbc1 100644 --- a/sc/source/ui/unoobj/cellsuno.cxx +++ b/sc/source/ui/unoobj/cellsuno.cxx @@ -122,6 +122,7 @@ #include "formulaiter.hxx" #include "tokenarray.hxx" #include "stylehelper.hxx" +#include "dputil.hxx" #include <list> #include <boost/scoped_ptr.hpp> @@ -933,58 +934,6 @@ static sal_Bool lcl_WholeSheet( const ScRangeList& rRanges ) return false; } -//------------------------------------------------------------------------ - -static ScSubTotalFunc lcl_SummaryToSubTotal( sheet::GeneralFunction eSummary ) -{ - ScSubTotalFunc eSubTotal; - switch (eSummary) - { - case sheet::GeneralFunction_SUM: - eSubTotal = SUBTOTAL_FUNC_SUM; - break; - case sheet::GeneralFunction_COUNT: - eSubTotal = SUBTOTAL_FUNC_CNT2; - break; - case sheet::GeneralFunction_AVERAGE: - eSubTotal = SUBTOTAL_FUNC_AVE; - break; - case sheet::GeneralFunction_MAX: - eSubTotal = SUBTOTAL_FUNC_MAX; - break; - case sheet::GeneralFunction_MIN: - eSubTotal = SUBTOTAL_FUNC_MIN; - break; - case sheet::GeneralFunction_PRODUCT: - eSubTotal = SUBTOTAL_FUNC_PROD; - break; - case sheet::GeneralFunction_COUNTNUMS: - eSubTotal = SUBTOTAL_FUNC_CNT; - break; - case sheet::GeneralFunction_STDEV: - eSubTotal = SUBTOTAL_FUNC_STD; - break; - case sheet::GeneralFunction_STDEVP: - eSubTotal = SUBTOTAL_FUNC_STDP; - break; - case sheet::GeneralFunction_VAR: - eSubTotal = SUBTOTAL_FUNC_VAR; - break; - case sheet::GeneralFunction_VARP: - eSubTotal = SUBTOTAL_FUNC_VARP; - break; - - case sheet::GeneralFunction_NONE: - case sheet::GeneralFunction_AUTO: - default: - eSubTotal = SUBTOTAL_FUNC_NONE; - break; - } - return eSubTotal; -} - -//------------------------------------------------------------------------ - namespace { template<typename BorderLineType> const ::editeng::SvxBorderLine* lcl_getBorderLine( @@ -1877,7 +1826,7 @@ double SAL_CALL ScCellRangesBase::computeFunction( sheet::GeneralFunction nFunct ScAddress aDummy; // wenn nicht Marked, ignoriert wegen Negative double fVal; - ScSubTotalFunc eFunc = lcl_SummaryToSubTotal( nFunction ); + ScSubTotalFunc eFunc = ScDPUtil::toSubTotalFunc(nFunction); ScDocument* pDoc = pDocShell->GetDocument(); if ( !pDoc->GetSelectionFunction( eFunc, aDummy, aMark, fVal ) ) { diff --git a/sc/source/ui/unoobj/datauno.cxx b/sc/source/ui/unoobj/datauno.cxx index 079e97b5c002..d3e2cfb3eb1a 100644 --- a/sc/source/ui/unoobj/datauno.cxx +++ b/sc/source/ui/unoobj/datauno.cxx @@ -48,6 +48,7 @@ #include "attrib.hxx" #include "dpshttab.hxx" #include "queryentry.hxx" +#include "dputil.hxx" #include <comphelper/extract.hxx> #include <comphelper/servicehelper.hxx> @@ -134,34 +135,6 @@ SC_SIMPLE_SERVICE_INFO( ScFilterDescriptorBase, "ScFilterDescriptorBase", "com.s SC_SIMPLE_SERVICE_INFO( ScSubTotalDescriptorBase, "ScSubTotalDescriptorBase", "com.sun.star.sheet.SubTotalDescriptor" ) SC_SIMPLE_SERVICE_INFO( ScSubTotalFieldObj, "ScSubTotalFieldObj", "com.sun.star.sheet.SubTotalField" ) - -//------------------------------------------------------------------------ - -ScSubTotalFunc ScDataUnoConversion::GeneralToSubTotal( sheet::GeneralFunction eSummary ) -{ - ScSubTotalFunc eSubTotal; - switch (eSummary) - { - case sheet::GeneralFunction_NONE: eSubTotal = SUBTOTAL_FUNC_NONE; break; - case sheet::GeneralFunction_SUM: eSubTotal = SUBTOTAL_FUNC_SUM; break; - case sheet::GeneralFunction_COUNT: eSubTotal = SUBTOTAL_FUNC_CNT2; break; - case sheet::GeneralFunction_AVERAGE: eSubTotal = SUBTOTAL_FUNC_AVE; break; - case sheet::GeneralFunction_MAX: eSubTotal = SUBTOTAL_FUNC_MAX; break; - case sheet::GeneralFunction_MIN: eSubTotal = SUBTOTAL_FUNC_MIN; break; - case sheet::GeneralFunction_PRODUCT: eSubTotal = SUBTOTAL_FUNC_PROD; break; - case sheet::GeneralFunction_COUNTNUMS: eSubTotal = SUBTOTAL_FUNC_CNT; break; - case sheet::GeneralFunction_STDEV: eSubTotal = SUBTOTAL_FUNC_STD; break; - case sheet::GeneralFunction_STDEVP: eSubTotal = SUBTOTAL_FUNC_STDP; break; - case sheet::GeneralFunction_VAR: eSubTotal = SUBTOTAL_FUNC_VAR; break; - case sheet::GeneralFunction_VARP: eSubTotal = SUBTOTAL_FUNC_VARP; break; - case sheet::GeneralFunction_AUTO: - default: - OSL_FAIL("GeneralToSubTotal: falscher enum"); - eSubTotal = SUBTOTAL_FUNC_NONE; - } - return eSubTotal; -} - sheet::GeneralFunction ScDataUnoConversion::SubTotalToGeneral( ScSubTotalFunc eSubTotal ) { sheet::GeneralFunction eGeneral; @@ -569,8 +542,7 @@ void SAL_CALL ScSubTotalFieldObj::setSubTotalColumns( for (SCCOL i=0; i<nCount; i++) { aParam.pSubTotals[nPos][i] = static_cast<SCCOL>(pAry[i].Column); - aParam.pFunctions[nPos][i] = - ScDataUnoConversion::GeneralToSubTotal( pAry[i].Function ); + aParam.pFunctions[nPos][i] = ScDPUtil::toSubTotalFunc(pAry[i].Function); } } else @@ -651,8 +623,7 @@ void SAL_CALL ScSubTotalDescriptorBase::addNew( for (SCCOL i=0; i<nCount; i++) { aParam.pSubTotals[nPos][i] = static_cast<SCCOL>(pAry[i].Column); - aParam.pFunctions[nPos][i] = - ScDataUnoConversion::GeneralToSubTotal( pAry[i].Function ); + aParam.pFunctions[nPos][i] = ScDPUtil::toSubTotalFunc(pAry[i].Function); } } else @@ -919,7 +890,7 @@ void SAL_CALL ScConsolidationDescriptor::setFunction( sheet::GeneralFunction nFu throw(uno::RuntimeException) { SolarMutexGuard aGuard; - aParam.eFunction = ScDataUnoConversion::GeneralToSubTotal(nFunction); + aParam.eFunction = ScDPUtil::toSubTotalFunc(nFunction); } uno::Sequence<table::CellRangeAddress> SAL_CALL ScConsolidationDescriptor::getSources() |