sw/inc/unochart.hxx | 2 sw/inc/unotbl.hxx | 24 +-- sw/source/core/unocore/unochart.cxx | 131 +++++++------------ sw/source/core/unocore/unotbl.cxx | 240 ++++++++++-------------------------- 4 files changed, 129 insertions(+), 268 deletions(-)
New commits: commit a1b73b37c761a4bea51fb17f1158c98f579eb305 Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Sun Jun 28 13:21:17 2015 +0200 getCells->GetCells(): not an UNO function Change-Id: I89335201083bd68fa199ce52e78d7750c60f8895 diff --git a/sw/inc/unochart.hxx b/sw/inc/unochart.hxx index 580368a..3f59dd3 100644 --- a/sw/inc/unochart.hxx +++ b/sw/inc/unochart.hxx @@ -350,7 +350,7 @@ public: void FillRangeDesc( SwRangeDescriptor &rRangeDesc ) const; bool ExtendTo( bool bExtendCol, sal_Int32 nFirstNew, sal_Int32 nCount ); - std::vector< css::uno::Reference< css::table::XCell > > getCells(); + std::vector< css::uno::Reference< css::table::XCell > > GetCells(); }; typedef cppu::WeakImplHelper diff --git a/sw/inc/unotbl.hxx b/sw/inc/unotbl.hxx index 94fb3bd..e8009a8 100644 --- a/sw/inc/unotbl.hxx +++ b/sw/inc/unotbl.hxx @@ -471,7 +471,7 @@ public: void SetLabels(bool bFirstRowAsLabel, bool bFirstColumnAsLabel) { m_bFirstRowAsLabel = bFirstRowAsLabel, m_bFirstColumnAsLabel = bFirstColumnAsLabel; } virtual ~SwXCellRange() {}; - std::vector< css::uno::Reference< css::table::XCell > > getCells(); + std::vector< css::uno::Reference< css::table::XCell > > GetCells(); TYPEINFO_OVERRIDE(); diff --git a/sw/source/core/unocore/unochart.cxx b/sw/source/core/unocore/unochart.cxx index b95ec32..ed8d35a 100644 --- a/sw/source/core/unocore/unochart.cxx +++ b/sw/source/core/unocore/unochart.cxx @@ -2135,7 +2135,7 @@ uno::Sequence< OUString > SAL_CALL SwChartDataSequence::generateLabel( return 0; } -std::vector< css::uno::Reference< css::table::XCell > > SwChartDataSequence::getCells() +std::vector< css::uno::Reference< css::table::XCell > > SwChartDataSequence::GetCells() { if (bDisposed) throw lang::DisposedException(); @@ -2148,14 +2148,14 @@ std::vector< css::uno::Reference< css::table::XCell > > SwChartDataSequence::get SwRangeDescriptor aDesc; if(!FillRangeDescriptor(aDesc, GetCellRangeName(*pTableFormat, *pTableCrsr))) return {}; - return SwXCellRange(pTableCrsr, *pTableFormat, aDesc).getCells(); + return SwXCellRange(pTableCrsr, *pTableFormat, aDesc).GetCells(); } uno::Sequence< OUString > SAL_CALL SwChartDataSequence::getTextualData() throw (uno::RuntimeException, std::exception) { SolarMutexGuard aGuard; - auto vCells(getCells()); + auto vCells(GetCells()); uno::Sequence< OUString > vTextData(vCells.size()); std::transform(vCells.begin(), vCells.end(), @@ -2169,7 +2169,7 @@ uno::Sequence< uno::Any > SAL_CALL SwChartDataSequence::getData() throw (uno::RuntimeException, std::exception) { SolarMutexGuard aGuard; - auto vCells(getCells()); + auto vCells(GetCells()); uno::Sequence< uno::Any > vAnyData(vCells.size()); std::transform(vCells.begin(), vCells.end(), @@ -2183,7 +2183,7 @@ uno::Sequence< double > SAL_CALL SwChartDataSequence::getNumericalData() throw (uno::RuntimeException, std::exception) { SolarMutexGuard aGuard; - auto vCells(getCells()); + auto vCells(GetCells()); uno::Sequence< double > vNumData(vCells.size()); std::transform(vCells.begin(), vCells.end(), diff --git a/sw/source/core/unocore/unotbl.cxx b/sw/source/core/unocore/unotbl.cxx index 1b5616d..fd3e489 100644 --- a/sw/source/core/unocore/unotbl.cxx +++ b/sw/source/core/unocore/unotbl.cxx @@ -3180,7 +3180,7 @@ SwXCellRange::SwXCellRange(sw::UnoCursorPointer pCrsr, SwFrameFormat& rFrameForm aRgDesc.Normalize(); } -std::vector< uno::Reference< table::XCell > > SwXCellRange::getCells() +std::vector< uno::Reference< table::XCell > > SwXCellRange::GetCells() { SwFrameFormat* const pFormat = GetFrameFormat(); const sal_Int32 nRowCount(getRowCount()); @@ -3512,7 +3512,7 @@ uno::Sequence< uno::Sequence< uno::Any > > SAL_CALL SwXCellRange::getDataArray() throw uno::RuntimeException("Table too complex", static_cast<cppu::OWeakObject*>(this)); lcl_EnsureCoreConnected(GetFrameFormat(), static_cast<cppu::OWeakObject*>(this)); uno::Sequence< uno::Sequence< uno::Any > > aRowSeq(nRowCount); - auto vCells(getCells()); + auto vCells(GetCells()); auto pCurrentCell(vCells.begin()); for(auto& rRow : aRowSeq) { @@ -3542,7 +3542,7 @@ void SAL_CALL SwXCellRange::setDataArray(const uno::Sequence< uno::Sequence< uno return; if(rArray.getLength() != nRowCount) throw uno::RuntimeException("Row count mismatch. expected: " + OUString::number(nRowCount) + " got: " + OUString::number(rArray.getLength()), static_cast<cppu::OWeakObject*>(this)); - auto vCells(getCells()); + auto vCells(GetCells()); auto pCurrentCell(vCells.begin()); for(const auto& rColSeq : rArray) { @@ -3578,7 +3578,7 @@ uno::Sequence< uno::Sequence< double > > SwXCellRange::getData() throw( uno::Run return xDataRange->getData(); } uno::Sequence< uno::Sequence< double > > vRows(nRowCount); - auto vCells(getCells()); + auto vCells(GetCells()); auto pCurrentCell(vCells.begin()); for(auto& rRow : vRows) { @@ -3609,7 +3609,7 @@ void SwXCellRange::setData(const uno::Sequence< uno::Sequence< double > >& rData lcl_EnsureCoreConnected(GetFrameFormat(), static_cast<cppu::OWeakObject*>(this)); if(rData.getLength() != nRowCount) throw uno::RuntimeException("Row count mismatch. expected: " + OUString::number(nRowCount) + " got: " + OUString::number(rData.getLength()), static_cast<cppu::OWeakObject*>(this)); - auto vCells(getCells()); + auto vCells(GetCells()); auto pCurrentCell(vCells.begin()); for(const auto& rRow : rData) { @@ -3651,7 +3651,7 @@ uno::Sequence<OUString> SwXCellRange::getLabelDescriptions(bool bRow) if(!(bRow ? m_bFirstColumnAsLabel : m_bFirstRowAsLabel)) return {}; // without labels we have no descriptions auto xLabelRange(getCellRangeByPosition(nLeft, nTop, nRight, nBottom)); - auto vCells(static_cast<SwXCellRange*>(xLabelRange.get())->getCells()); + auto vCells(static_cast<SwXCellRange*>(xLabelRange.get())->GetCells()); uno::Sequence<OUString> vResult(vCells.size()); std::transform(vCells.begin(), vCells.end(), vResult.begin(), [](uno::Reference<table::XCell> xCell) -> OUString { return uno::Reference<text::XText>(xCell, uno::UNO_QUERY_THROW)->getString(); }); @@ -3677,7 +3677,7 @@ void SwXCellRange::setLabelDescriptions(const uno::Sequence<OUString>& rDesc, bo if(!nRight && !nBottom) throw uno::RuntimeException("Table too complex", static_cast<cppu::OWeakObject*>(this)); auto xLabelRange(getCellRangeByPosition(nLeft, nTop, nRight, nBottom)); - auto vCells(static_cast<SwXCellRange*>(xLabelRange.get())->getCells()); + auto vCells(static_cast<SwXCellRange*>(xLabelRange.get())->GetCells()); if (sal::static_int_cast<sal_uInt32>(rDesc.getLength()) != vCells.size()) throw uno::RuntimeException("Too few or too many descriptions", static_cast<cppu::OWeakObject*>(this)); auto pDescIterator(rDesc.begin()); commit 7c17cb0a52a14f4788d6f293d968e95f87c514e1 Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Sun Jun 28 13:01:53 2015 +0200 use initializer-lists Change-Id: I801bb81a7c241b40377617d8f3567e62b79e3976 diff --git a/sw/source/core/unocore/unochart.cxx b/sw/source/core/unocore/unochart.cxx index ceb9602..b95ec32 100644 --- a/sw/source/core/unocore/unochart.cxx +++ b/sw/source/core/unocore/unochart.cxx @@ -1492,10 +1492,7 @@ sal_Bool SAL_CALL SwChartDataProvider::supportsService(const OUString& rServiceN uno::Sequence< OUString > SAL_CALL SwChartDataProvider::getSupportedServiceNames( ) throw (uno::RuntimeException, std::exception) { - SolarMutexGuard aGuard; - uno::Sequence< OUString > aRes(1); - aRes.getArray()[0] = "com.sun.star.chart2.data.DataProvider"; - return aRes; + return { "com.sun.star.chart2.data.DataProvider"}; } void SwChartDataProvider::Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew) @@ -1880,10 +1877,7 @@ sal_Bool SAL_CALL SwChartDataSource::supportsService(const OUString& rServiceNam uno::Sequence< OUString > SAL_CALL SwChartDataSource::getSupportedServiceNames( ) throw (uno::RuntimeException, std::exception) { - SolarMutexGuard aGuard; - uno::Sequence< OUString > aRes(1); - aRes.getArray()[0] = "com.sun.star.chart2.data.DataSource"; - return aRes; + return { "com.sun.star.chart2.data.DataSource" }; } SwChartDataSequence::SwChartDataSequence( @@ -2301,10 +2295,7 @@ sal_Bool SAL_CALL SwChartDataSequence::supportsService(const OUString& rServiceN uno::Sequence< OUString > SAL_CALL SwChartDataSequence::getSupportedServiceNames( ) throw (uno::RuntimeException, std::exception) { - SolarMutexGuard aGuard; - uno::Sequence< OUString > aRes(1); - aRes.getArray()[0] = "com.sun.star.chart2.data.DataSequence"; - return aRes; + return { "com.sun.star.chart2.data.DataSequence" }; } void SwChartDataSequence::Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew) @@ -2798,11 +2789,7 @@ sal_Bool SAL_CALL SwChartLabeledDataSequence::supportsService( uno::Sequence< OUString > SAL_CALL SwChartLabeledDataSequence::getSupportedServiceNames( ) throw (uno::RuntimeException, std::exception) { - SolarMutexGuard aGuard; - uno::Sequence< OUString > aRes(1); - aRes.getArray()[0] = "com.sun.star.chart2.data.LabeledDataSequence"; - - return aRes; + return { "com.sun.star.chart2.data.LabeledDataSequence" }; } void SAL_CALL SwChartLabeledDataSequence::disposing( commit 1ad4751b7b687a8e6127c1ae99af47a7bc763e84 Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Sun Jun 28 12:55:31 2015 +0200 now use GetAny() here Change-Id: I23b6f2c53841a4f105d911d72c4d7fe1c077ed82 diff --git a/sw/source/core/unocore/unochart.cxx b/sw/source/core/unocore/unochart.cxx index 11c32ac..ceb9602 100644 --- a/sw/source/core/unocore/unochart.cxx +++ b/sw/source/core/unocore/unochart.cxx @@ -2009,34 +2009,6 @@ sal_Int64 SAL_CALL SwChartDataSequence::getSomething( const uno::Sequence< sal_I return 0; } -uno::Sequence< uno::Any > SAL_CALL SwChartDataSequence::getData() - throw (uno::RuntimeException, std::exception) -{ - SolarMutexGuard aGuard; - if (bDisposed) - throw lang::DisposedException(); - - SwFrameFormat* pTableFormat = GetFrameFormat(); - if(!pTableFormat) - return {}; - SwTable* pTable = SwTable::FindTable(pTableFormat); - if(pTable->IsTableComplex()) - return {}; - SwRangeDescriptor aDesc; - if(!FillRangeDescriptor(aDesc, GetCellRangeName(*pTableFormat,*pTableCrsr))) - return {}; - auto vData(SwXCellRange(pTableCrsr, *pTableFormat, aDesc).getDataArray()); - if(!vData.getLength()) - return {}; - std::vector< uno::Any > vResult; - vResult.reserve(vData.getLength()*vData[0].getLength()); - for(auto& rRow : vData) - std::copy( - rRow.begin(), - rRow.end(), - std::back_inserter(vResult)); - return comphelper::containerToSequence(vResult); -} OUString SAL_CALL SwChartDataSequence::getSourceRangeRepresentation( ) throw (uno::RuntimeException, std::exception) @@ -2199,6 +2171,20 @@ uno::Sequence< OUString > SAL_CALL SwChartDataSequence::getTextualData() return vTextData; } +uno::Sequence< uno::Any > SAL_CALL SwChartDataSequence::getData() + throw (uno::RuntimeException, std::exception) +{ + SolarMutexGuard aGuard; + auto vCells(getCells()); + uno::Sequence< uno::Any > vAnyData(vCells.size()); + std::transform(vCells.begin(), + vCells.end(), + vAnyData.begin(), + [] (decltype(vCells)::value_type& xCell) + { return static_cast<SwXCell*>(xCell.get())->GetAny(); }); + return vAnyData; +} + uno::Sequence< double > SAL_CALL SwChartDataSequence::getNumericalData() throw (uno::RuntimeException, std::exception) { commit f7d603a7af180a47721c95db5631d08ab9738769 Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Sun Jun 28 12:49:34 2015 +0200 refactor out SwXCell:GetAny() Change-Id: Ia79bb08fb77bda3de6714b160df7007218ab309a diff --git a/sw/inc/unotbl.hxx b/sw/inc/unotbl.hxx index 23c2116..94fb3bd 100644 --- a/sw/inc/unotbl.hxx +++ b/sw/inc/unotbl.hxx @@ -155,6 +155,7 @@ public: SwTableBox* FindBox(SwTable* pTable, SwTableBox* pBox); SwFrameFormat* GetFrameFormat() const { return const_cast<SwFrameFormat*>(static_cast<const SwFrameFormat*>(GetRegisteredIn())); } double GetForcedNumericalValue() const; + css::uno::Any GetAny() const; }; class SwXTextTableRow SAL_FINAL : public cppu::WeakImplHelper diff --git a/sw/source/core/unocore/unotbl.cxx b/sw/source/core/unocore/unotbl.cxx index b3e404b..1b5616d 100644 --- a/sw/source/core/unocore/unotbl.cxx +++ b/sw/source/core/unocore/unotbl.cxx @@ -1220,6 +1220,17 @@ double SwXCell::GetForcedNumericalValue() const return fTmp; } +uno::Any SwXCell::GetAny() const +{ + SwTableBox* GetTableBox(); + if(!pBox) + throw uno::RuntimeException(); + // check if table box value item is set + auto pBoxFormat(pBox->GetFrameFormat()); + const bool bIsNum = pBoxFormat->GetItemState(RES_BOXATR_VALUE, false) == SfxItemState::SET; + return bIsNum ? uno::makeAny(getValue()) : uno::makeAny(const_cast<SwXCell*>(this)->getString()); +} + OUString SwXCell::getImplementationName() throw( uno::RuntimeException, std::exception ) { return OUString("SwXCell"); } @@ -3509,13 +3520,9 @@ uno::Sequence< uno::Sequence< uno::Any > > SAL_CALL SwXCellRange::getDataArray() for(auto& rCellAny : rRow) { auto pCell(static_cast<SwXCell*>(pCurrentCell->get())); - SwTableBox* pBox = pCell ? pCell->GetTableBox() : nullptr; - if(!pBox) + if(!pCell) throw uno::RuntimeException(); - // check if table box value item is set - SwFrameFormat* pBoxFormat(pBox->GetFrameFormat()); - const bool bIsNum = pBoxFormat->GetItemState(RES_BOXATR_VALUE, false) == SfxItemState::SET; - rCellAny = bIsNum ? uno::makeAny(pCell->getValue()) : uno::makeAny(pCell->getString()); + rCellAny = pCell->GetAny(); ++pCurrentCell; } } commit a54845ee5d1f9258a422e378a39dac18cc975447 Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Sun Jun 28 12:30:15 2015 +0200 refactor out getCells() in for chart seqs too Change-Id: I1d18f1b7bdda8d95c2d2dd4256ca05aa0c60d5f4 diff --git a/sw/inc/unochart.hxx b/sw/inc/unochart.hxx index 4bfd2e0..580368a 100644 --- a/sw/inc/unochart.hxx +++ b/sw/inc/unochart.hxx @@ -40,6 +40,7 @@ #include <com/sun/star/util/XModifyBroadcaster.hpp> #include <com/sun/star/util/XModifyListener.hpp> #include <com/sun/star/chart/ChartDataRowSource.hpp> +#include <com/sun/star/table/XCell.hpp> #include <cppuhelper/interfacecontainer.h> #include <cppuhelper/implbase.hxx> @@ -349,6 +350,7 @@ public: void FillRangeDesc( SwRangeDescriptor &rRangeDesc ) const; bool ExtendTo( bool bExtendCol, sal_Int32 nFirstNew, sal_Int32 nCount ); + std::vector< css::uno::Reference< css::table::XCell > > getCells(); }; typedef cppu::WeakImplHelper diff --git a/sw/source/core/unocore/unochart.cxx b/sw/source/core/unocore/unochart.cxx index a68bc98..11c32ac 100644 --- a/sw/source/core/unocore/unochart.cxx +++ b/sw/source/core/unocore/unochart.cxx @@ -2169,22 +2169,27 @@ uno::Sequence< OUString > SAL_CALL SwChartDataSequence::generateLabel( return 0; } -uno::Sequence< OUString > SAL_CALL SwChartDataSequence::getTextualData() - throw (uno::RuntimeException, std::exception) +std::vector< css::uno::Reference< css::table::XCell > > SwChartDataSequence::getCells() { - SolarMutexGuard aGuard; if (bDisposed) throw lang::DisposedException(); - SwFrameFormat* pTableFormat = GetFrameFormat(); + auto pTableFormat(GetFrameFormat()); if(!pTableFormat) return {}; - SwTable* pTable = SwTable::FindTable(pTableFormat); + auto pTable(SwTable::FindTable(pTableFormat)); if(pTable->IsTableComplex()) return {}; SwRangeDescriptor aDesc; if(!FillRangeDescriptor(aDesc, GetCellRangeName(*pTableFormat, *pTableCrsr))) return {}; - auto vCells(SwXCellRange(pTableCrsr, *pTableFormat, aDesc).getCells()); + return SwXCellRange(pTableCrsr, *pTableFormat, aDesc).getCells(); +} + +uno::Sequence< OUString > SAL_CALL SwChartDataSequence::getTextualData() + throw (uno::RuntimeException, std::exception) +{ + SolarMutexGuard aGuard; + auto vCells(getCells()); uno::Sequence< OUString > vTextData(vCells.size()); std::transform(vCells.begin(), vCells.end(), @@ -2198,18 +2203,7 @@ uno::Sequence< double > SAL_CALL SwChartDataSequence::getNumericalData() throw (uno::RuntimeException, std::exception) { SolarMutexGuard aGuard; - if (bDisposed) - throw lang::DisposedException(); - SwFrameFormat* pTableFormat = GetFrameFormat(); - if(!pTableFormat) - return {}; - SwTable* pTable = SwTable::FindTable(pTableFormat); - if(pTable->IsTableComplex()) - return {}; - SwRangeDescriptor aDesc; - if(!FillRangeDescriptor(aDesc, GetCellRangeName(*pTableFormat,*pTableCrsr))) - return {}; - auto vCells(SwXCellRange(pTableCrsr, *pTableFormat, aDesc).getCells()); + auto vCells(getCells()); uno::Sequence< double > vNumData(vCells.size()); std::transform(vCells.begin(), vCells.end(), commit 9ee481cce4f26cbde09efa46bc0b2c52e53eb2bf Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Sun Jun 28 12:15:15 2015 +0200 kill ugly GetDataSequence, now unused Change-Id: Ib72d52c8641b9edfbc534a490fc27d20ff17f349 diff --git a/sw/inc/unotbl.hxx b/sw/inc/unotbl.hxx index c4820ce..23c2116 100644 --- a/sw/inc/unotbl.hxx +++ b/sw/inc/unotbl.hxx @@ -543,14 +543,6 @@ public: sal_uInt16 getColumnCount(); const SwUnoCrsr* GetTableCrsr() const; - - // for SwChartDataSequence - void GetDataSequence( - ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > *pAnySeq, - ::com::sun::star::uno::Sequence< OUString > *pTextSeq, - ::com::sun::star::uno::Sequence< double > *pDblSeq, - bool bForceNumberResults = false ) throw (::com::sun::star::uno::RuntimeException, std::exception); - }; class SwXTableRows SAL_FINAL : public cppu::WeakImplHelper diff --git a/sw/source/core/unocore/unotbl.cxx b/sw/source/core/unocore/unotbl.cxx index d1c69e1..b3e404b 100644 --- a/sw/source/core/unocore/unotbl.cxx +++ b/sw/source/core/unocore/unotbl.cxx @@ -3490,75 +3490,7 @@ void SwXCellRange::addVetoableChangeListener(const OUString& /*PropertyName*/, c void SwXCellRange::removeVetoableChangeListener(const OUString& /*PropertyName*/, const uno::Reference< beans::XVetoableChangeListener > & /*aListener*/) throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception ) { throw uno::RuntimeException("Not implemented", static_cast<cppu::OWeakObject*>(this)); } -void SwXCellRange::GetDataSequence( - uno::Sequence< uno::Any > *pAnySeq, //-> first pointer != 0 is used - uno::Sequence< OUString > *pTextSeq, //-> as output sequence - uno::Sequence< double > *pDblSeq, //-> (previous data gets overwritten) - bool bForceNumberResults ) //-> when 'true' requires to make an - // extra effort to return a value different - // from 0 even if the cell is formatted to text - throw (uno::RuntimeException, std::exception) -{ - SolarMutexGuard aGuard; - - // compare to SwXCellRange::getDataArray (note different return types though) - - const sal_Int32 nRowCount = getRowCount(); - const sal_Int32 nColCount = getColumnCount(); - - if(!nRowCount || !nColCount) - { - uno::RuntimeException aRuntime; - aRuntime.Message = "Table too complex"; - throw aRuntime; - } - - const size_t nSize = static_cast<size_t>(nRowCount) * static_cast<size_t>(nColCount); - OUString* pTextData(nullptr); - if (pAnySeq || pDblSeq) - { - assert(false); - } - else if (pTextSeq) - { - pTextSeq->realloc(nSize); - pTextData = pTextSeq->getArray(); - } - else - { - OSL_FAIL( "argument missing" ); - return; - } - - size_t nDtaCnt = 0; - SwFrameFormat* pFormat = GetFrameFormat(); - if(!pFormat) - return; - double fNan; - ::rtl::math::setNan(&fNan); - - uno::Reference< table::XCell > xCellRef; - for(sal_Int32 nRow = 0; nRow < nRowCount; ++nRow) - { - for(sal_Int32 nCol = 0; nCol < nColCount; ++nCol) - { - SwXCell * pXCell = lcl_CreateXCell(pFormat, - aRgDesc.nLeft + nCol, - aRgDesc.nTop + nRow); - //! keep (additional) reference to object to prevent implicit destruction - //! in following UNO calls (when object will get referenced) - xCellRef = pXCell; - SwTableBox * pBox = pXCell ? pXCell->GetTableBox() : 0; - if(!pBox) - throw uno::RuntimeException(); - pTextData[nDtaCnt++] = pXCell->getString(); - } - } - assert(nDtaCnt == nSize); -} - ///@see SwXCellRange::getData -///@see SwXCellRange::GetDataSequence uno::Sequence< uno::Sequence< uno::Any > > SAL_CALL SwXCellRange::getDataArray() throw (uno::RuntimeException, std::exception) { commit 91dd43a4eaa6bd6434e538dee1a485842fbcbb4f Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Sun Jun 28 12:10:32 2015 +0200 refactor getTextualData Change-Id: I122a4fb8526af0c3c40e6a6cdacaa11fe531e15f diff --git a/sw/source/core/unocore/unochart.cxx b/sw/source/core/unocore/unochart.cxx index 9f5472a..a68bc98 100644 --- a/sw/source/core/unocore/unochart.cxx +++ b/sw/source/core/unocore/unochart.cxx @@ -2175,23 +2175,23 @@ uno::Sequence< OUString > SAL_CALL SwChartDataSequence::getTextualData() SolarMutexGuard aGuard; if (bDisposed) throw lang::DisposedException(); - - uno::Sequence< OUString > aRes; SwFrameFormat* pTableFormat = GetFrameFormat(); - if(pTableFormat) - { - SwTable* pTable = SwTable::FindTable( pTableFormat ); - if(!pTable->IsTableComplex()) - { - SwRangeDescriptor aDesc; - if (FillRangeDescriptor( aDesc, GetCellRangeName( *pTableFormat, *pTableCrsr ) )) - { - SwXCellRange aRange(pTableCrsr, *pTableFormat, aDesc ); - aRange.GetDataSequence( 0, &aRes, 0 ); - } - } - } - return aRes; + if(!pTableFormat) + return {}; + SwTable* pTable = SwTable::FindTable(pTableFormat); + if(pTable->IsTableComplex()) + return {}; + SwRangeDescriptor aDesc; + if(!FillRangeDescriptor(aDesc, GetCellRangeName(*pTableFormat, *pTableCrsr))) + return {}; + auto vCells(SwXCellRange(pTableCrsr, *pTableFormat, aDesc).getCells()); + uno::Sequence< OUString > vTextData(vCells.size()); + std::transform(vCells.begin(), + vCells.end(), + vTextData.begin(), + [] (decltype(vCells)::value_type& xCell) + { return static_cast<SwXCell*>(xCell.get())->getString(); }); + return vTextData; } uno::Sequence< double > SAL_CALL SwChartDataSequence::getNumericalData() diff --git a/sw/source/core/unocore/unotbl.cxx b/sw/source/core/unocore/unotbl.cxx index 32cfa1d..d1c69e1 100644 --- a/sw/source/core/unocore/unotbl.cxx +++ b/sw/source/core/unocore/unotbl.cxx @@ -682,12 +682,6 @@ static void lcl_SetTableSeparators(const uno::Any& rVal, SwTable* pTable, SwTabl pDoc->SetTabCols(*pTable, aCols, aOldCols, pBox, bRow ); } -static inline OUString lcl_getString( SwXCell &rCell ) -{ - // getString is a member function of the base class... - return rCell.getString(); -} - /* non UNO function call to set string in SwXCell */ void sw_setString( SwXCell &rCell, const OUString &rText, bool bKeepNumberFormat = false ) @@ -3557,7 +3551,7 @@ void SwXCellRange::GetDataSequence( SwTableBox * pBox = pXCell ? pXCell->GetTableBox() : 0; if(!pBox) throw uno::RuntimeException(); - pTextData[nDtaCnt++] = lcl_getString(*pXCell); + pTextData[nDtaCnt++] = pXCell->getString(); } } assert(nDtaCnt == nSize); @@ -3589,7 +3583,7 @@ uno::Sequence< uno::Sequence< uno::Any > > SAL_CALL SwXCellRange::getDataArray() // check if table box value item is set SwFrameFormat* pBoxFormat(pBox->GetFrameFormat()); const bool bIsNum = pBoxFormat->GetItemState(RES_BOXATR_VALUE, false) == SfxItemState::SET; - rCellAny = bIsNum ? uno::makeAny(pCell->getValue()) : uno::makeAny(lcl_getString(*pCell)); + rCellAny = bIsNum ? uno::makeAny(pCell->getValue()) : uno::makeAny(pCell->getString()); ++pCurrentCell; } } commit f828df4cad83760e2f722ec4b5e6e910c85f6598 Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Sun Jun 28 11:55:38 2015 +0200 refactor getNumericalData, - move some functions to be members, were sensible Change-Id: Ie94029f215102c62e96d314809ca78b079f2a6e6 diff --git a/sw/inc/unotbl.hxx b/sw/inc/unotbl.hxx index 9a1d41c..c4820ce 100644 --- a/sw/inc/unotbl.hxx +++ b/sw/inc/unotbl.hxx @@ -67,7 +67,6 @@ class SwXCell SAL_FINAL : public SwXCellBaseClass, { friend void sw_setString( SwXCell &rCell, const OUString &rText, bool bKeepNumberFormat ); - friend double sw_getValue( SwXCell &rCell ); friend void sw_setValue( SwXCell &rCell, double nVal ); const SfxItemPropertySet* m_pPropSet; @@ -117,8 +116,12 @@ public: virtual OUString SAL_CALL getFormula( ) throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual void SAL_CALL setFormula( const OUString& aFormula ) throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual double SAL_CALL getValue( ) throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; + virtual double SAL_CALL getValue( ) const throw(::com::sun::star::uno::RuntimeException, std::exception) + { return const_cast<SwXCell*>(this)->getValue(); }; virtual void SAL_CALL setValue( double nValue ) throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual ::com::sun::star::table::CellContentType SAL_CALL getType( ) throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; + virtual ::com::sun::star::table::CellContentType SAL_CALL getType( ) const throw(::com::sun::star::uno::RuntimeException, std::exception) + { return const_cast<SwXCell*>(this)->getType(); }; virtual sal_Int32 SAL_CALL getError( ) throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; //XText @@ -147,11 +150,11 @@ public: virtual ::com::sun::star::uno::Type SAL_CALL getElementType( ) throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual sal_Bool SAL_CALL hasElements( ) throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; - SwTableBox* GetTableBox()const {return pBox;} - static SwXCell* CreateXCell(SwFrameFormat* pTableFormat, SwTableBox* pBox, SwTable *pTable = 0 ); - SwTableBox* FindBox(SwTable* pTable, SwTableBox* pBox); - + SwTableBox* GetTableBox() const { return pBox; } + static SwXCell* CreateXCell(SwFrameFormat* pTableFormat, SwTableBox* pBox, SwTable *pTable = nullptr ); + SwTableBox* FindBox(SwTable* pTable, SwTableBox* pBox); SwFrameFormat* GetFrameFormat() const { return const_cast<SwFrameFormat*>(static_cast<const SwFrameFormat*>(GetRegisteredIn())); } + double GetForcedNumericalValue() const; }; class SwXTextTableRow SAL_FINAL : public cppu::WeakImplHelper diff --git a/sw/source/core/unocore/unochart.cxx b/sw/source/core/unocore/unochart.cxx index 9245689..9f5472a 100644 --- a/sw/source/core/unocore/unochart.cxx +++ b/sw/source/core/unocore/unochart.cxx @@ -2200,26 +2200,23 @@ uno::Sequence< double > SAL_CALL SwChartDataSequence::getNumericalData() SolarMutexGuard aGuard; if (bDisposed) throw lang::DisposedException(); - - uno::Sequence< double > aRes; SwFrameFormat* pTableFormat = GetFrameFormat(); - if(pTableFormat) - { - SwTable* pTable = SwTable::FindTable( pTableFormat ); - if(!pTable->IsTableComplex()) - { - SwRangeDescriptor aDesc; - if (FillRangeDescriptor( aDesc, GetCellRangeName( *pTableFormat, *pTableCrsr ) )) - { - SwXCellRange aRange(pTableCrsr, *pTableFormat, aDesc ); - - // get numerical values and make an effort to return the - // numerical value for text formatted cells - aRange.GetDataSequence( 0, 0, &aRes, true ); - } - } - } - return aRes; + if(!pTableFormat) + return {}; + SwTable* pTable = SwTable::FindTable(pTableFormat); + if(pTable->IsTableComplex()) + return {}; + SwRangeDescriptor aDesc; + if(!FillRangeDescriptor(aDesc, GetCellRangeName(*pTableFormat,*pTableCrsr))) + return {}; + auto vCells(SwXCellRange(pTableCrsr, *pTableFormat, aDesc).getCells()); + uno::Sequence< double > vNumData(vCells.size()); + std::transform(vCells.begin(), + vCells.end(), + vNumData.begin(), + [] (decltype(vCells)::value_type& xCell) + { return static_cast<SwXCell*>(xCell.get())->GetForcedNumericalValue(); }); + return vNumData; } uno::Reference< util::XCloneable > SAL_CALL SwChartDataSequence::createClone( ) diff --git a/sw/source/core/unocore/unotbl.cxx b/sw/source/core/unocore/unotbl.cxx index f178a59..32cfa1d 100644 --- a/sw/source/core/unocore/unotbl.cxx +++ b/sw/source/core/unocore/unotbl.cxx @@ -705,16 +705,6 @@ void sw_setString( SwXCell &rCell, const OUString &rText, rCell.SwXText::setString(rText); } -/* non UNO function call to get value from SwXCell */ -double sw_getValue( SwXCell &rCell ) -{ - double fRet; - if(rCell.IsValid() && !rCell.getString().isEmpty()) - fRet = rCell.pBox->GetFrameFormat()->GetTableBoxValue().GetValue(); - else - ::rtl::math::setNan( &fRet ); - return fRet; -} /* non UNO function call to set value in SwXCell */ void sw_setValue( SwXCell &rCell, double nVal ) @@ -921,7 +911,12 @@ double SwXCell::getValue() throw( uno::RuntimeException, std::exception ) { SolarMutexGuard aGuard; // #i112652# a table cell may contain NaN as a value, do not filter that - return sw_getValue( *this ); + double fRet; + if(IsValid() && !getString().isEmpty()) + fRet = pBox->GetFrameFormat()->GetTableBoxValue().GetValue(); + else + ::rtl::math::setNan( &fRet ); + return fRet; } void SwXCell::setValue(double rValue) throw( uno::RuntimeException, std::exception ) @@ -1190,6 +1185,47 @@ SwTableBox* SwXCell::FindBox(SwTable* pTable, SwTableBox* pBox2) return nullptr; } +double SwXCell::GetForcedNumericalValue() const +{ + if(table::CellContentType_TEXT != getType()) + return getValue(); + // now we'll try to get a useful numerical value + // from the text in the cell... + sal_uInt32 nFIndex; + SvNumberFormatter* pNumFormatter(const_cast<SvNumberFormatter*>(GetDoc()->GetNumberFormatter())); + // look for SwTableBoxNumFormat value in parents as well + const SfxPoolItem* pItem; + auto pBoxFormat(GetTableBox()->GetFrameFormat()); + SfxItemState eState = pBoxFormat->GetAttrSet().GetItemState(RES_BOXATR_FORMAT, true, &pItem); + + if (eState == SfxItemState::SET) + { + // please note that the language of the numberformat + // is implicitly coded into the below value as well + nFIndex = static_cast<const SwTableBoxNumFormat*>(pItem)->GetValue(); + + // since the current value indicates a text format but the call + // to 'IsNumberFormat' below won't work for text formats + // we need to get rid of the part that indicates the text format. + // According to ER this can be done like this: + nFIndex -= (nFIndex % SV_COUNTRY_LANGUAGE_OFFSET); + } + else + { + // system language is probably not the best possible choice + // but since we have to guess anyway (because the language of at + // the text is NOT the one used for the number format!) + // it is at least conform to what is used in + // SwTableShell::Execute when + // SID_ATTR_NUMBERFORMAT_VALUE is set... + LanguageType eLang = LANGUAGE_SYSTEM; + nFIndex = pNumFormatter->GetStandardIndex( eLang ); + } + double fTmp; + pNumFormatter->IsNumberFormat(const_cast<SwXCell*>(this)->getString(), nFIndex, fTmp); + return fTmp; +} + OUString SwXCell::getImplementationName() throw( uno::RuntimeException, std::exception ) { return OUString("SwXCell"); } @@ -3485,8 +3521,7 @@ void SwXCellRange::GetDataSequence( const size_t nSize = static_cast<size_t>(nRowCount) * static_cast<size_t>(nColCount); OUString* pTextData(nullptr); - double* pDblData(nullptr); - if (pAnySeq) + if (pAnySeq || pDblSeq) { assert(false); } @@ -3495,11 +3530,6 @@ void SwXCellRange::GetDataSequence( pTextSeq->realloc(nSize); pTextData = pTextSeq->getArray(); } - else if (pDblSeq) - { - pDblSeq->realloc(nSize); - pDblData = pDblSeq->getArray(); - } else { OSL_FAIL( "argument missing" ); @@ -3527,59 +3557,7 @@ void SwXCellRange::GetDataSequence( SwTableBox * pBox = pXCell ? pXCell->GetTableBox() : 0; if(!pBox) throw uno::RuntimeException(); - if (pTextData) - pTextData[nDtaCnt++] = lcl_getString(*pXCell); - else - { - double fVal = fNan; - if (!bForceNumberResults || table::CellContentType_TEXT != pXCell->getType()) - fVal = sw_getValue(*pXCell); - else - { - OSL_ENSURE( table::CellContentType_TEXT == pXCell->getType(), - "this branch of 'if' is only for text formatted cells" ); - - // now we'll try to get a useful numerical value - // from the text in the cell... - - sal_uInt32 nFIndex; - SvNumberFormatter* pNumFormatter = m_pTableCrsr->GetDoc()->GetNumberFormatter(); - - // look for SwTableBoxNumFormat value in parents as well - const SfxPoolItem* pItem; - SwFrameFormat *pBoxFormat = pXCell->GetTableBox()->GetFrameFormat(); - SfxItemState eState = pBoxFormat->GetAttrSet().GetItemState(RES_BOXATR_FORMAT, true, &pItem); - - if (eState == SfxItemState::SET) - { - // please note that the language of the numberformat - // is implicitly coded into the below value as well - nFIndex = static_cast<const SwTableBoxNumFormat*>(pItem)->GetValue(); - - // since the current value indicates a text format but the call - // to 'IsNumberFormat' below won't work for text formats - // we need to get rid of the part that indicates the text format. - // According to ER this can be done like this: - nFIndex -= (nFIndex % SV_COUNTRY_LANGUAGE_OFFSET); - } - else - { - // system language is probably not the best possible choice - // but since we have to guess anyway (because the language of at - // the text is NOT the one used for the number format!) - // it is at least conform to what is used in - // SwTableShell::Execute when - // SID_ATTR_NUMBERFORMAT_VALUE is set... - LanguageType eLang = LANGUAGE_SYSTEM; - nFIndex = pNumFormatter->GetStandardIndex( eLang ); - } - - double fTmp; - if (pNumFormatter->IsNumberFormat( lcl_getString(*pXCell), nFIndex, fTmp )) - fVal = fTmp; - } - pDblData[nDtaCnt++] = fVal; - } + pTextData[nDtaCnt++] = lcl_getString(*pXCell); } } assert(nDtaCnt == nSize); @@ -3611,7 +3589,7 @@ uno::Sequence< uno::Sequence< uno::Any > > SAL_CALL SwXCellRange::getDataArray() // check if table box value item is set SwFrameFormat* pBoxFormat(pBox->GetFrameFormat()); const bool bIsNum = pBoxFormat->GetItemState(RES_BOXATR_VALUE, false) == SfxItemState::SET; - rCellAny = bIsNum ? uno::makeAny(sw_getValue(*pCell)) : uno::makeAny(lcl_getString(*pCell)); + rCellAny = bIsNum ? uno::makeAny(pCell->getValue()) : uno::makeAny(lcl_getString(*pCell)); ++pCurrentCell; } } commit 0685f902927a263fb724e47731654169dc87a3a6 Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Sun Jun 28 09:32:05 2015 +0200 remove one client of getDataSequence Change-Id: Iec8c3653497e213c085242085737dcc5985d70b3 diff --git a/sw/source/core/unocore/unochart.cxx b/sw/source/core/unocore/unochart.cxx index afa0dda6..9245689 100644 --- a/sw/source/core/unocore/unochart.cxx +++ b/sw/source/core/unocore/unochart.cxx @@ -23,6 +23,7 @@ #include <com/sun/star/chart2/data/LabelOrigin.hpp> #include <cppuhelper/interfacecontainer.hxx> #include <cppuhelper/supportsservice.hxx> +#include <comphelper/sequence.hxx> #include <osl/mutex.hxx> #include <vcl/svapp.hxx> #include <svl/zforlist.hxx> @@ -2015,22 +2016,26 @@ uno::Sequence< uno::Any > SAL_CALL SwChartDataSequence::getData() if (bDisposed) throw lang::DisposedException(); - uno::Sequence< uno::Any > aRes; SwFrameFormat* pTableFormat = GetFrameFormat(); - if(pTableFormat) - { - SwTable* pTable = SwTable::FindTable( pTableFormat ); - if(!pTable->IsTableComplex()) - { - SwRangeDescriptor aDesc; - if (FillRangeDescriptor( aDesc, GetCellRangeName( *pTableFormat, *pTableCrsr ) )) - { - SwXCellRange aRange(pTableCrsr, *pTableFormat, aDesc ); - aRange.GetDataSequence( &aRes, 0, 0 ); - } - } - } - return aRes; + if(!pTableFormat) + return {}; + SwTable* pTable = SwTable::FindTable(pTableFormat); + if(pTable->IsTableComplex()) + return {}; + SwRangeDescriptor aDesc; + if(!FillRangeDescriptor(aDesc, GetCellRangeName(*pTableFormat,*pTableCrsr))) + return {}; + auto vData(SwXCellRange(pTableCrsr, *pTableFormat, aDesc).getDataArray()); + if(!vData.getLength()) + return {}; + std::vector< uno::Any > vResult; + vResult.reserve(vData.getLength()*vData[0].getLength()); + for(auto& rRow : vData) + std::copy( + rRow.begin(), + rRow.end(), + std::back_inserter(vResult)); + return comphelper::containerToSequence(vResult); } OUString SAL_CALL SwChartDataSequence::getSourceRangeRepresentation( ) diff --git a/sw/source/core/unocore/unotbl.cxx b/sw/source/core/unocore/unotbl.cxx index 4c5436e..f178a59 100644 --- a/sw/source/core/unocore/unotbl.cxx +++ b/sw/source/core/unocore/unotbl.cxx @@ -3484,13 +3484,11 @@ void SwXCellRange::GetDataSequence( } const size_t nSize = static_cast<size_t>(nRowCount) * static_cast<size_t>(nColCount); - uno::Any* pAnyData(nullptr); OUString* pTextData(nullptr); double* pDblData(nullptr); if (pAnySeq) { - pAnySeq->realloc(nSize); - pAnyData = pAnySeq->getArray(); + assert(false); } else if (pTextSeq) { @@ -3529,16 +3527,7 @@ void SwXCellRange::GetDataSequence( SwTableBox * pBox = pXCell ? pXCell->GetTableBox() : 0; if(!pBox) throw uno::RuntimeException(); - if (pAnyData) - { - // check if table box value item is set - bool bIsNum = pBox->GetFrameFormat()->GetItemState( RES_BOXATR_VALUE, false ) == SfxItemState::SET; - if (!bIsNum) - pAnyData[nDtaCnt++] <<= lcl_getString(*pXCell); - else - pAnyData[nDtaCnt++] <<= sw_getValue(*pXCell); - } - else if (pTextData) + if (pTextData) pTextData[nDtaCnt++] = lcl_getString(*pXCell); else { commit 9437369a4b08bdb8fd2aed514606ccc3a73c7dae Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Sun Jun 28 08:17:52 2015 +0200 simplify Change-Id: Icaf94870906ba2723de727d06037c343f26e87b8 diff --git a/sw/source/core/unocore/unotbl.cxx b/sw/source/core/unocore/unotbl.cxx index c83083b..4c5436e 100644 --- a/sw/source/core/unocore/unotbl.cxx +++ b/sw/source/core/unocore/unotbl.cxx @@ -3510,87 +3510,86 @@ void SwXCellRange::GetDataSequence( size_t nDtaCnt = 0; SwFrameFormat* pFormat = GetFrameFormat(); - if(pFormat) - { - double fNan; - ::rtl::math::setNan( & fNan ); + if(!pFormat) + return; + double fNan; + ::rtl::math::setNan(&fNan); - uno::Reference< table::XCell > xCellRef; - for(sal_Int32 nRow = 0; nRow < nRowCount; ++nRow) + uno::Reference< table::XCell > xCellRef; + for(sal_Int32 nRow = 0; nRow < nRowCount; ++nRow) + { + for(sal_Int32 nCol = 0; nCol < nColCount; ++nCol) { - for(sal_Int32 nCol = 0; nCol < nColCount; ++nCol) + SwXCell * pXCell = lcl_CreateXCell(pFormat, + aRgDesc.nLeft + nCol, + aRgDesc.nTop + nRow); + //! keep (additional) reference to object to prevent implicit destruction + //! in following UNO calls (when object will get referenced) + xCellRef = pXCell; + SwTableBox * pBox = pXCell ? pXCell->GetTableBox() : 0; + if(!pBox) + throw uno::RuntimeException(); + if (pAnyData) { - SwXCell * pXCell = lcl_CreateXCell(pFormat, - aRgDesc.nLeft + nCol, - aRgDesc.nTop + nRow); - //! keep (additional) reference to object to prevent implicit destruction - //! in following UNO calls (when object will get referenced) - xCellRef = pXCell; - SwTableBox * pBox = pXCell ? pXCell->GetTableBox() : 0; - if(!pBox) - throw uno::RuntimeException(); - if (pAnyData) - { - // check if table box value item is set - bool bIsNum = pBox->GetFrameFormat()->GetItemState( RES_BOXATR_VALUE, false ) == SfxItemState::SET; - if (!bIsNum) - pAnyData[nDtaCnt++] <<= lcl_getString(*pXCell); - else - pAnyData[nDtaCnt++] <<= sw_getValue(*pXCell); - } - else if (pTextData) - pTextData[nDtaCnt++] = lcl_getString(*pXCell); + // check if table box value item is set + bool bIsNum = pBox->GetFrameFormat()->GetItemState( RES_BOXATR_VALUE, false ) == SfxItemState::SET; + if (!bIsNum) + pAnyData[nDtaCnt++] <<= lcl_getString(*pXCell); + else + pAnyData[nDtaCnt++] <<= sw_getValue(*pXCell); + } + else if (pTextData) + pTextData[nDtaCnt++] = lcl_getString(*pXCell); + else + { + double fVal = fNan; + if (!bForceNumberResults || table::CellContentType_TEXT != pXCell->getType()) + fVal = sw_getValue(*pXCell); else { - double fVal = fNan; - if (!bForceNumberResults || table::CellContentType_TEXT != pXCell->getType()) - fVal = sw_getValue(*pXCell); - else - { - OSL_ENSURE( table::CellContentType_TEXT == pXCell->getType(), - "this branch of 'if' is only for text formatted cells" ); + OSL_ENSURE( table::CellContentType_TEXT == pXCell->getType(), + "this branch of 'if' is only for text formatted cells" ); - // now we'll try to get a useful numerical value - // from the text in the cell... + // now we'll try to get a useful numerical value + // from the text in the cell... - sal_uInt32 nFIndex; - SvNumberFormatter* pNumFormatter = m_pTableCrsr->GetDoc()->GetNumberFormatter(); + sal_uInt32 nFIndex; + SvNumberFormatter* pNumFormatter = m_pTableCrsr->GetDoc()->GetNumberFormatter(); - // look for SwTableBoxNumFormat value in parents as well - const SfxPoolItem* pItem; - SwFrameFormat *pBoxFormat = pXCell->GetTableBox()->GetFrameFormat(); - SfxItemState eState = pBoxFormat->GetAttrSet().GetItemState(RES_BOXATR_FORMAT, true, &pItem); - - if (eState == SfxItemState::SET) - { - // please note that the language of the numberformat - // is implicitly coded into the below value as well - nFIndex = static_cast<const SwTableBoxNumFormat*>(pItem)->GetValue(); - - // since the current value indicates a text format but the call - // to 'IsNumberFormat' below won't work for text formats - // we need to get rid of the part that indicates the text format. - // According to ER this can be done like this: - nFIndex -= (nFIndex % SV_COUNTRY_LANGUAGE_OFFSET); - } - else - { - // system language is probably not the best possible choice - // but since we have to guess anyway (because the language of at - // the text is NOT the one used for the number format!) - // it is at least conform to what is used in - // SwTableShell::Execute when - // SID_ATTR_NUMBERFORMAT_VALUE is set... - LanguageType eLang = LANGUAGE_SYSTEM; - nFIndex = pNumFormatter->GetStandardIndex( eLang ); - } + // look for SwTableBoxNumFormat value in parents as well + const SfxPoolItem* pItem; + SwFrameFormat *pBoxFormat = pXCell->GetTableBox()->GetFrameFormat(); + SfxItemState eState = pBoxFormat->GetAttrSet().GetItemState(RES_BOXATR_FORMAT, true, &pItem); - double fTmp; - if (pNumFormatter->IsNumberFormat( lcl_getString(*pXCell), nFIndex, fTmp )) - fVal = fTmp; + if (eState == SfxItemState::SET) + { + // please note that the language of the numberformat + // is implicitly coded into the below value as well + nFIndex = static_cast<const SwTableBoxNumFormat*>(pItem)->GetValue(); + + // since the current value indicates a text format but the call + // to 'IsNumberFormat' below won't work for text formats + // we need to get rid of the part that indicates the text format. + // According to ER this can be done like this: + nFIndex -= (nFIndex % SV_COUNTRY_LANGUAGE_OFFSET); } - pDblData[nDtaCnt++] = fVal; + else + { + // system language is probably not the best possible choice + // but since we have to guess anyway (because the language of at + // the text is NOT the one used for the number format!) + // it is at least conform to what is used in + // SwTableShell::Execute when + // SID_ATTR_NUMBERFORMAT_VALUE is set... + LanguageType eLang = LANGUAGE_SYSTEM; + nFIndex = pNumFormatter->GetStandardIndex( eLang ); + } + + double fTmp; + if (pNumFormatter->IsNumberFormat( lcl_getString(*pXCell), nFIndex, fTmp )) + fVal = fTmp; } + pDblData[nDtaCnt++] = fVal; } } } commit f98a687f1554ad7c6f4c16184086ad7b8ee4276d Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Sun Jun 28 08:11:59 2015 +0200 remove dead code Change-Id: If60fd90f1ffb8a58cc43e4c4a0f80f68b7511937 diff --git a/sw/source/core/unocore/unotbl.cxx b/sw/source/core/unocore/unotbl.cxx index 113d6b6..c83083b 100644 --- a/sw/source/core/unocore/unotbl.cxx +++ b/sw/source/core/unocore/unotbl.cxx @@ -3540,7 +3540,7 @@ void SwXCellRange::GetDataSequence( } else if (pTextData) pTextData[nDtaCnt++] = lcl_getString(*pXCell); - else if (pDblData) + else { double fVal = fNan; if (!bForceNumberResults || table::CellContentType_TEXT != pXCell->getType()) @@ -3591,9 +3591,6 @@ void SwXCellRange::GetDataSequence( } pDblData[nDtaCnt++] = fVal; } - else { - OSL_FAIL( "output sequence missing" ); - } } } } commit 57ac4a57d772546089332a1f302a4b1d8dac6961 Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Sun Jun 28 08:11:12 2015 +0200 simplify Change-Id: Ie9313bd8bb391d33e5f86fb86e0874b85594fedf diff --git a/sw/source/core/unocore/unotbl.cxx b/sw/source/core/unocore/unotbl.cxx index 2558560..113d6b6 100644 --- a/sw/source/core/unocore/unotbl.cxx +++ b/sw/source/core/unocore/unotbl.cxx @@ -3528,76 +3528,71 @@ void SwXCellRange::GetDataSequence( xCellRef = pXCell; SwTableBox * pBox = pXCell ? pXCell->GetTableBox() : 0; if(!pBox) - { throw uno::RuntimeException(); + if (pAnyData) + { + // check if table box value item is set + bool bIsNum = pBox->GetFrameFormat()->GetItemState( RES_BOXATR_VALUE, false ) == SfxItemState::SET; + if (!bIsNum) + pAnyData[nDtaCnt++] <<= lcl_getString(*pXCell); + else + pAnyData[nDtaCnt++] <<= sw_getValue(*pXCell); } - else + else if (pTextData) + pTextData[nDtaCnt++] = lcl_getString(*pXCell); + else if (pDblData) { - if (pAnyData) - { - // check if table box value item is set - bool bIsNum = pBox->GetFrameFormat()->GetItemState( RES_BOXATR_VALUE, false ) == SfxItemState::SET; - if (!bIsNum) - pAnyData[nDtaCnt++] <<= lcl_getString(*pXCell); - else - pAnyData[nDtaCnt++] <<= sw_getValue(*pXCell); - } - else if (pTextData) - pTextData[nDtaCnt++] = lcl_getString(*pXCell); - else if (pDblData) + double fVal = fNan; + if (!bForceNumberResults || table::CellContentType_TEXT != pXCell->getType()) + fVal = sw_getValue(*pXCell); + else { - double fVal = fNan; - if (!bForceNumberResults || table::CellContentType_TEXT != pXCell->getType()) - fVal = sw_getValue(*pXCell); - else - { - OSL_ENSURE( table::CellContentType_TEXT == pXCell->getType(), - "this branch of 'if' is only for text formatted cells" ); + OSL_ENSURE( table::CellContentType_TEXT == pXCell->getType(), + "this branch of 'if' is only for text formatted cells" ); - // now we'll try to get a useful numerical value - // from the text in the cell... + // now we'll try to get a useful numerical value + // from the text in the cell... - sal_uInt32 nFIndex; - SvNumberFormatter* pNumFormatter = m_pTableCrsr->GetDoc()->GetNumberFormatter(); + sal_uInt32 nFIndex; + SvNumberFormatter* pNumFormatter = m_pTableCrsr->GetDoc()->GetNumberFormatter(); - // look for SwTableBoxNumFormat value in parents as well - const SfxPoolItem* pItem; - SwFrameFormat *pBoxFormat = pXCell->GetTableBox()->GetFrameFormat(); - SfxItemState eState = pBoxFormat->GetAttrSet().GetItemState(RES_BOXATR_FORMAT, true, &pItem); + // look for SwTableBoxNumFormat value in parents as well + const SfxPoolItem* pItem; + SwFrameFormat *pBoxFormat = pXCell->GetTableBox()->GetFrameFormat(); + SfxItemState eState = pBoxFormat->GetAttrSet().GetItemState(RES_BOXATR_FORMAT, true, &pItem); - if (eState == SfxItemState::SET) - { - // please note that the language of the numberformat - // is implicitly coded into the below value as well - nFIndex = static_cast<const SwTableBoxNumFormat*>(pItem)->GetValue(); - - // since the current value indicates a text format but the call - // to 'IsNumberFormat' below won't work for text formats - // we need to get rid of the part that indicates the text format. - // According to ER this can be done like this: - nFIndex -= (nFIndex % SV_COUNTRY_LANGUAGE_OFFSET); - } - else - { - // system language is probably not the best possible choice - // but since we have to guess anyway (because the language of at - // the text is NOT the one used for the number format!) - // it is at least conform to what is used in - // SwTableShell::Execute when - // SID_ATTR_NUMBERFORMAT_VALUE is set... - LanguageType eLang = LANGUAGE_SYSTEM; - nFIndex = pNumFormatter->GetStandardIndex( eLang ); - } - - double fTmp; - if (pNumFormatter->IsNumberFormat( lcl_getString(*pXCell), nFIndex, fTmp )) - fVal = fTmp; + if (eState == SfxItemState::SET) + { + // please note that the language of the numberformat + // is implicitly coded into the below value as well + nFIndex = static_cast<const SwTableBoxNumFormat*>(pItem)->GetValue(); + + // since the current value indicates a text format but the call + // to 'IsNumberFormat' below won't work for text formats + // we need to get rid of the part that indicates the text format. + // According to ER this can be done like this: + nFIndex -= (nFIndex % SV_COUNTRY_LANGUAGE_OFFSET); } - pDblData[nDtaCnt++] = fVal; - } - else { - OSL_FAIL( "output sequence missing" ); + else + { + // system language is probably not the best possible choice + // but since we have to guess anyway (because the language of at + // the text is NOT the one used for the number format!) + // it is at least conform to what is used in + // SwTableShell::Execute when + // SID_ATTR_NUMBERFORMAT_VALUE is set... + LanguageType eLang = LANGUAGE_SYSTEM; + nFIndex = pNumFormatter->GetStandardIndex( eLang ); + } + + double fTmp; + if (pNumFormatter->IsNumberFormat( lcl_getString(*pXCell), nFIndex, fTmp )) + fVal = fTmp; } + pDblData[nDtaCnt++] = fVal; + } + else { + OSL_FAIL( "output sequence missing" ); } } } commit 5ab8a7303e26b55b9b52f71a6a98a1f565ddefa5 Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Sun Jun 28 07:55:26 2015 +0200 dont branch on the same conditional twice Change-Id: Icda8e94140d56d71b568ac52feb303bcc861ea31 diff --git a/sw/source/core/unocore/unotbl.cxx b/sw/source/core/unocore/unotbl.cxx index b255fab..2558560 100644 --- a/sw/source/core/unocore/unotbl.cxx +++ b/sw/source/core/unocore/unotbl.cxx @@ -3484,20 +3484,29 @@ void SwXCellRange::GetDataSequence( } const size_t nSize = static_cast<size_t>(nRowCount) * static_cast<size_t>(nColCount); + uno::Any* pAnyData(nullptr); + OUString* pTextData(nullptr); + double* pDblData(nullptr); if (pAnySeq) - pAnySeq->realloc( nSize ); + { + pAnySeq->realloc(nSize); + pAnyData = pAnySeq->getArray(); + } else if (pTextSeq) - pTextSeq->realloc( nSize ); + { + pTextSeq->realloc(nSize); + pTextData = pTextSeq->getArray(); + } else if (pDblSeq) - pDblSeq->realloc( nSize ); + { + pDblSeq->realloc(nSize); + pDblData = pDblSeq->getArray(); + } else { OSL_FAIL( "argument missing" ); return; } - uno::Any *pAnyData = pAnySeq ? pAnySeq->getArray() : 0; - OUString *pTextData = pTextSeq ? pTextSeq->getArray() : 0; - double *pDblData = pDblSeq ? pDblSeq->getArray() : 0; size_t nDtaCnt = 0; SwFrameFormat* pFormat = GetFrameFormat(); commit 0ae7f853ecdca838adbc369ccf4c0b862354ac86 Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Sun Jun 28 07:34:17 2015 +0200 should there be a size mismatch here, we already wrote out-of-bounds Change-Id: I303e93635985fce53aaffc9af89cfa10cecadefb diff --git a/sw/source/core/unocore/unotbl.cxx b/sw/source/core/unocore/unotbl.cxx index 68366e8..b255fab 100644 --- a/sw/source/core/unocore/unotbl.cxx +++ b/sw/source/core/unocore/unotbl.cxx @@ -3593,13 +3593,7 @@ void SwXCellRange::GetDataSequence( } } } - OSL_ENSURE( nDtaCnt == nSize, "size mismatch. Invalid cell range?" ); - if (pAnySeq) - pAnySeq->realloc( nDtaCnt ); - else if (pTextSeq) - pTextSeq->realloc( nDtaCnt ); - else if (pDblSeq) - pDblSeq->realloc( nDtaCnt ); + assert(nDtaCnt == nSize); } ///@see SwXCellRange::getData _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits