[Libreoffice-commits] .: Branch 'feature/gsoc-calc-perf' - sc/source
Daniel Bankston
dbank at kemper.freedesktop.org
Fri May 25 15:25:46 PDT 2012
sc/source/filter/xml/xmlcelli.cxx | 68 ++++++++++----------------------------
sc/source/filter/xml/xmlcelli.hxx | 4 +-
sc/source/filter/xml/xmlsubti.cxx | 32 +----------------
3 files changed, 24 insertions(+), 80 deletions(-)
New commits:
commit 14be196c746fe307ddc7b4abbedf00df62c7dcac
Author: Daniel Bankston <daniel.e.bankston at gmail.com>
Date: Fri May 25 17:22:21 2012 -0500
Remove unnecessary code in ODS import for matrix and merge
MyScTables matrix methods and ScXMLTableRowCellContext merge methods used
getCellRangePosition() (that was adopted from ScCellRangeObj) which contains
logic that is no longer necessary since since the UNO calls have been converted
to direct Sc calls.
Change-Id: Ibfa335860d142effb120d3e4f28a36d3d3c58666
diff --git a/sc/source/filter/xml/xmlcelli.cxx b/sc/source/filter/xml/xmlcelli.cxx
index e7e0bf4..305a478 100644
--- a/sc/source/filter/xml/xmlcelli.cxx
+++ b/sc/source/filter/xml/xmlcelli.cxx
@@ -462,29 +462,6 @@ static bool ScCellExists( const ScAddress& rScAddress )
return( rScAddress.Col() <= MAXCOL && rScAddress.Row() <= MAXROW );
}
-ScRange getCellRangeByPosition( const ScRange& rScRange, const SCCOL nLeft, const SCROW nTop, const SCCOL nRight, const SCROW nBottom )
-{
- if( nLeft >= 0 && nTop >= 0 && nRight >= 0 && nBottom >= 0 )
- {
- SCCOL nStartX = rScRange.aStart.Col() + nLeft;
- SCROW nStartY = rScRange.aStart.Row() + nTop;
- SCCOL nEndX = rScRange.aStart.Col() + nRight;
- SCROW nEndY = rScRange.aStart.Row() + nBottom;
-
- if( nStartX <= nEndX && nEndX <= rScRange.aEnd.Col() &&
- nStartY <= nEndY && nEndY <= rScRange.aEnd.Row() )
- {
- return ScRange( nStartX, nStartY, rScRange.aStart.Tab(), nEndX, nEndY, rScRange.aEnd.Tab() );
- }
- }
- return ScRange( ScAddress::INITIALIZE_INVALID );
-}
-
-ScRange getCellRangeByPosition( const ScRange& rScRange, const ScAddress& rScCell )
-{
- return getCellRangeByPosition( rScRange, rScCell.Col(), rScCell.Row(), rScCell.Col(), rScCell.Row() );
-}
-
void merge( ScDocShell* pDocSh, const ScRange& rScRange, const bool bMerge )
{
if( pDocSh )
@@ -503,18 +480,16 @@ void merge( ScDocShell* pDocSh, const ScRange& rScRange, const bool bMerge )
} //anonymous namespace
-bool ScXMLTableRowCellContext::IsMerged( const ScRange& rScRange, const ScAddress& rScCell, ScRange& rScCellRange ) const
+bool ScXMLTableRowCellContext::IsMerged( ScRange& rScRange, const ScAddress& rScCell ) const
{
if( ScCellExists(rScCell) )
{
ScDocument* pDoc = rXMLImport.GetDocument();
- rScCellRange = getCellRangeByPosition( rScRange, rScCell );
- if( !rScRange.IsValid() ) return false;
- pDoc->ExtendOverlapped( rScCellRange );
- pDoc->ExtendMerge( rScCellRange );
- rScCellRange.Justify();
- if( rScCellRange.aStart.Col() == rScCell.Col() && rScCellRange.aEnd.Col() == rScCell.Col() &&
- rScCellRange.aStart.Row() == rScCell.Row() && rScCellRange.aEnd.Row() == rScCell.Row() )
+ pDoc->ExtendOverlapped( rScRange );
+ pDoc->ExtendMerge( rScRange );
+ rScRange.Justify();
+ if( rScRange.aStart.Col() == rScCell.Col() && rScRange.aEnd.Col() == rScCell.Col() &&
+ rScRange.aStart.Row() == rScCell.Row() && rScRange.aEnd.Row() == rScCell.Row() )
return false;
else
return true;
@@ -522,32 +497,27 @@ bool ScXMLTableRowCellContext::IsMerged( const ScRange& rScRange, const ScAddres
return false;
}
-void ScXMLTableRowCellContext::DoMerge( const ScAddress& rScCellPos, const sal_Int32 nCols, const sal_Int32 nRows )
+void ScXMLTableRowCellContext::DoMerge( const ScAddress& rScCellPos, const SCCOL nCols, const SCROW nRows )
{
if( ScCellExists(rScCellPos) )
{
- ScRange aScCellRange;
SCTAB nCurrentSheet = GetScImport().GetTables().GetCurrentSheet();
- ScRange aScRange( 0, 0, nCurrentSheet, MAXCOL, MAXROW, nCurrentSheet ); //the whole sheet
+ ScRange aScRange(
+ rScCellPos.Col(), rScCellPos.Row(), nCurrentSheet,
+ rScCellPos.Col(), rScCellPos.Row(), nCurrentSheet
+ );
ScDocShell* pDocSh = static_cast< ScDocShell* >( rXMLImport.GetDocument()->GetDocumentShell() );
- if( IsMerged(aScRange, rScCellPos, aScCellRange) )
+ if( IsMerged(aScRange, rScCellPos) )
{
//unmerge
- ScRange aScMergeRange(
- getCellRangeByPosition( aScRange, aScCellRange.aStart.Col(), aScCellRange.aStart.Row(),
- aScCellRange.aEnd.Col(), aScCellRange.aEnd.Row() )
- );
- if( aScMergeRange.IsValid() )
- merge( pDocSh, aScMergeRange, false );
+ merge( pDocSh, aScRange, false );
}
-
//merge
- ScRange aScMergeRange(
- getCellRangeByPosition( aScRange, aScCellRange.aStart.Col(), aScCellRange.aStart.Row(),
- aScCellRange.aEnd.Col() + nCols, aScCellRange.aEnd.Row() + nRows )
- );
- if( aScMergeRange.IsValid() )
- merge( pDocSh, aScMergeRange, true );
+ SCCOL newEndCol = aScRange.aStart.Col() + nCols;
+ SCROW newEndRow = aScRange.aStart.Row() + nRows;
+ aScRange.aEnd.SetCol( newEndCol );
+ aScRange.aEnd.SetRow( newEndRow );
+ merge( pDocSh, aScRange, true );
}
}
@@ -828,7 +798,7 @@ void ScXMLTableRowCellContext::EndElement()
if (xCellRange.is())
{
if (bIsMerged)
- DoMerge(aScCellPos, nMergedCols - 1, nMergedRows - 1);
+ DoMerge(aScCellPos, static_cast<SCCOL>(nMergedCols - 1), static_cast<SCROW>(nMergedRows - 1));
if ( !pOUFormula )
{
::boost::optional< rtl::OUString > pOUText;
diff --git a/sc/source/filter/xml/xmlcelli.hxx b/sc/source/filter/xml/xmlcelli.hxx
index 4f8b4f9..9cdcac5 100644
--- a/sc/source/filter/xml/xmlcelli.hxx
+++ b/sc/source/filter/xml/xmlcelli.hxx
@@ -82,8 +82,8 @@ class ScXMLTableRowCellContext : public SvXMLImportContext
sal_Int16 GetCellType(const rtl::OUString& sOUValue) const;
- bool IsMerged(const ScRange& rScRange, const ScAddress& rScCell, ScRange& rScCellAddress) const;
- void DoMerge(const ScAddress& rScCellPos, const sal_Int32 nCols, const sal_Int32 nRows);
+ bool IsMerged(ScRange& rScRange, const ScAddress& rScCell) const;
+ void DoMerge(const ScAddress& rScCellPos, const SCCOL nCols, const SCROW nRows);
void SetContentValidation(com::sun::star::uno::Reference<com::sun::star::beans::XPropertySet>& xPropSet);
void SetCellProperties(const com::sun::star::uno::Reference<com::sun::star::table::XCellRange>& xCellRange,
diff --git a/sc/source/filter/xml/xmlsubti.cxx b/sc/source/filter/xml/xmlsubti.cxx
index 9342961..b830a6f 100644
--- a/sc/source/filter/xml/xmlsubti.cxx
+++ b/sc/source/filter/xml/xmlsubti.cxx
@@ -804,44 +804,18 @@ bool ScMyTables::IsPartOfMatrix(const SCCOL nColumn, const SCROW nRow)
return bResult;
}
-namespace {
-
-ScRange getCellRangeByPosition( const ScRange& rScRange, const SCCOL nLeft, const SCROW nTop, const SCCOL nRight, const SCROW nBottom )
-{
- if( nLeft >= 0 && nTop >= 0 && nRight >= 0 && nBottom >= 0 )
- {
- SCCOL nStartX = rScRange.aStart.Col() + nLeft;
- SCROW nStartY = rScRange.aStart.Row() + nTop;
- SCCOL nEndX = rScRange.aStart.Col() + nRight;
- SCROW nEndY = rScRange.aStart.Row() + nBottom;
-
- if( nStartX <= nEndX && nEndX <= rScRange.aEnd.Col() &&
- nStartY <= nEndY && nEndY <= rScRange.aEnd.Row() )
- {
- return ScRange( nStartX, nStartY, rScRange.aStart.Tab(), nEndX, nEndY, rScRange.aEnd.Tab() );
- }
- }
- return ScRange( ScAddress::INITIALIZE_INVALID );
-}
-
-} //anonymous namespace
-
void ScMyTables::SetMatrix(const ScRange& rScRange, const rtl::OUString& rFormula,
const rtl::OUString& rFormulaNmsp, const formula::FormulaGrammar::Grammar eGrammar)
{
- ScRange aWholeSheetRange( 0, 0, nCurrentSheet, MAXCOL, MAXROW, nCurrentSheet ); //the whole sheet
- ScRange aMatrixRange(
- getCellRangeByPosition( aWholeSheetRange, rScRange.aStart.Col(), rScRange.aStart.Row(), rScRange.aEnd.Col(), rScRange.aEnd.Row() )
- );
ScDocShell* pDocSh = static_cast< ScDocShell* >( rImport.GetDocument()->GetDocumentShell() );
if ( !rFormula.isEmpty() )
- pDocSh->GetDocFunc().EnterMatrix( aMatrixRange, NULL, NULL, rFormula, sal_True, sal_True, rFormulaNmsp, eGrammar );
+ pDocSh->GetDocFunc().EnterMatrix( rScRange, NULL, NULL, rFormula, sal_True, sal_True, rFormulaNmsp, eGrammar );
else
{
// empty string -> erase array formula
ScMarkData aMark;
- aMark.SetMarkArea( aMatrixRange );
- aMark.SelectTable( aMatrixRange.aStart.Tab(), sal_True );
+ aMark.SetMarkArea( rScRange );
+ aMark.SelectTable( rScRange.aStart.Tab(), sal_True );
pDocSh->GetDocFunc().DeleteContents( aMark, IDF_CONTENTS, sal_True, sal_True );
}
}
More information about the Libreoffice-commits
mailing list