[Libreoffice-commits] .: Branch 'feature/gsoc-calc-perf' - sc/source
Daniel Bankston
dbank at kemper.freedesktop.org
Thu May 24 14:42:18 PDT 2012
sc/source/filter/xml/xmlcelli.cxx | 119 +++++++++++++++++---------------------
sc/source/filter/xml/xmlsubti.cxx | 3
sc/source/filter/xml/xmlsubti.hxx | 2
3 files changed, 56 insertions(+), 68 deletions(-)
New commits:
commit 1ddcc44190a690a3ac221a8c4b38d830046f03ef
Author: Daniel Bankston <daniel.e.bankston at gmail.com>
Date: Thu May 24 16:31:34 2012 -0500
Make suggested code style changes
Change-Id: I9cd71b78098adc6b0fee1139ffb1a1202d9981dc
diff --git a/sc/source/filter/xml/xmlcelli.cxx b/sc/source/filter/xml/xmlcelli.cxx
index 9d1c7c0..89bf499 100644
--- a/sc/source/filter/xml/xmlcelli.cxx
+++ b/sc/source/filter/xml/xmlcelli.cxx
@@ -455,64 +455,61 @@ SvXMLImportContext *ScXMLTableRowCellContext::CreateChildContext( sal_uInt16 nPr
return pContext;
}
-namespace
+namespace {
+
+static bool ScCellExists( const ScAddress& rScAddress )
{
- static bool lcl_ScCellExists( const ScAddress& rScAddress )
- {
- return( rScAddress.Col() <= MAXCOL && rScAddress.Row() <= MAXROW );
- }
+ return( rScAddress.Col() <= MAXCOL && rScAddress.Row() <= MAXROW );
+}
- static ScRange lcl_ScGetCellRangeByPosition( const ScRange& rScRange, const SCCOL nLeft, const SCROW nTop, const SCCOL nRight, const SCROW nBottom )
- throw( lang::IndexOutOfBoundsException )
+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 )
{
- 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() );
- }
- }
- throw lang::IndexOutOfBoundsException();
- }
+ SCCOL nStartX = rScRange.aStart.Col() + nLeft;
+ SCROW nStartY = rScRange.aStart.Row() + nTop;
+ SCCOL nEndX = rScRange.aStart.Col() + nRight;
+ SCROW nEndY = rScRange.aStart.Row() + nBottom;
- static ScRange lcl_ScGetCellRangeByPosition( const ScRange& rScRange, const ScAddress& rScCell ) throw( lang::IndexOutOfBoundsException )
- {
- try
+ if( nStartX <= nEndX && nEndX <= rScRange.aEnd.Col() &&
+ nStartY <= nEndY && nEndY <= rScRange.aEnd.Row() )
{
- return lcl_ScGetCellRangeByPosition( rScRange, rScCell.Col(), rScCell.Row(), rScCell.Col(), rScCell.Row() );
+ return ScRange( nStartX, nStartY, rScRange.aStart.Tab(), nEndX, nEndY, rScRange.aEnd.Tab() );
}
- catch( lang::IndexOutOfBoundsException & ) { throw; }
}
+ return ScRange( ScAddress::INITIALIZE_INVALID );
+}
+
+ScRange getCellRangeByPosition( const ScRange& rScRange, const ScAddress& rScCell )
+{
+ return getCellRangeByPosition( rScRange, rScCell.Col(), rScCell.Row(), rScCell.Col(), rScCell.Row() );
+}
- static void lcl_ScMerge( ScDocShell* pDocSh, const ScRange& rScRange, const bool bMerge )
+void merge( ScDocShell* pDocSh, const ScRange& rScRange, const bool bMerge )
+{
+ if( pDocSh )
{
- if( pDocSh )
- {
- ScCellMergeOption aMergeOption(
- rScRange.aStart.Col(), rScRange.aStart.Row(),
- rScRange.aEnd.Col(), rScRange.aEnd.Row(), false
- );
- aMergeOption.maTabs.insert( rScRange.aStart.Tab() );
- if ( bMerge )
- pDocSh->GetDocFunc().MergeCells( aMergeOption, false, true, true );
- else
- pDocSh->GetDocFunc().UnmergeCells( aMergeOption, true, true );
- }
+ ScCellMergeOption aMergeOption(
+ rScRange.aStart.Col(), rScRange.aStart.Row(),
+ rScRange.aEnd.Col(), rScRange.aEnd.Row(), false
+ );
+ aMergeOption.maTabs.insert( rScRange.aStart.Tab() );
+ if ( bMerge )
+ pDocSh->GetDocFunc().MergeCells( aMergeOption, false, true, true );
+ else
+ pDocSh->GetDocFunc().UnmergeCells( aMergeOption, true, true );
}
}
+} //anonymous namespace
+
bool ScXMLTableRowCellContext::IsMerged( const ScRange& rScRange, const ScAddress& rScCell, ScRange& rScCellRange ) const
{
- if( lcl_ScCellExists(rScCell) )
+ if( ScCellExists(rScCell) )
{
ScDocument* pDoc = rXMLImport.GetDocument();
- rScCellRange = lcl_ScGetCellRangeByPosition( rScRange, rScCell );
+ rScCellRange = getCellRangeByPosition( rScRange, rScCell );
+ if( !rScRange.IsValid() ) return false;
pDoc->ExtendOverlapped( rScCellRange );
pDoc->ExtendMerge( rScCellRange );
rScCellRange.Justify();
@@ -527,38 +524,30 @@ bool ScXMLTableRowCellContext::IsMerged( const ScRange& rScRange, const ScAddres
void ScXMLTableRowCellContext::DoMerge( const ScAddress& rScCellPos, const sal_Int32 nCols, const sal_Int32 nRows )
{
- if( lcl_ScCellExists(rScCellPos) )
+ if( ScCellExists(rScCellPos) )
{
ScRange aScCellRange;
SCTAB nCurrentSheet = GetScImport().GetTables().GetCurrentSheet();
ScRange aScRange( 0, 0, nCurrentSheet, MAXCOL, MAXROW, nCurrentSheet ); //the whole sheet
ScDocShell* pDocSh = static_cast< ScDocShell* >( rXMLImport.GetDocument()->GetDocumentShell() );
- // Stored merge range may actually be of a larger extend than what
- // we support, in which case getCellRangeByPosition() throws
- // IndexOutOfBoundsException. Do nothing then. ???
- try
+ if( IsMerged(aScRange, rScCellPos, aScCellRange) )
{
- if( IsMerged(aScRange, rScCellPos, aScCellRange) )
- {
- //unmerge
- ScRange aScMergeRange(
- lcl_ScGetCellRangeByPosition( aScRange, aScCellRange.aStart.Col(), aScCellRange.aStart.Row(),
- aScCellRange.aEnd.Col(), aScCellRange.aEnd.Row() )
- );
- lcl_ScMerge( pDocSh, aScMergeRange, false );
- }
-
- //merge
+ //unmerge
ScRange aScMergeRange(
- lcl_ScGetCellRangeByPosition( aScRange, aScCellRange.aStart.Col(), aScCellRange.aStart.Row(),
- aScCellRange.aEnd.Col() + nCols, aScCellRange.aEnd.Row() + nRows )
+ getCellRangeByPosition( aScRange, aScCellRange.aStart.Col(), aScCellRange.aStart.Row(),
+ aScCellRange.aEnd.Col(), aScCellRange.aEnd.Row() )
);
- lcl_ScMerge( pDocSh, aScMergeRange, true );
- }
- catch( lang::IndexOutOfBoundsException & )
- {
- OSL_FAIL("ScXMLTableRowCellContext::DoMerge: range to be merged larger than what we support");
+ if( aScMergeRange.IsValid() )
+ merge( pDocSh, aScMergeRange, 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 );
}
}
diff --git a/sc/source/filter/xml/xmlsubti.cxx b/sc/source/filter/xml/xmlsubti.cxx
index ec633bf..5f33aca 100644
--- a/sc/source/filter/xml/xmlsubti.cxx
+++ b/sc/source/filter/xml/xmlsubti.cxx
@@ -685,8 +685,7 @@ table::CellAddress ScMyTables::GetRealCellPos()
return aRealCellPos;
}
-//placeholder; needs more work
-const ScAddress ScMyTables::GetRealScCellPos() const
+ScAddress ScMyTables::GetRealScCellPos() const
{
sal_Int32 nRow = 0;
sal_Int32 nCol = 0;
diff --git a/sc/source/filter/xml/xmlsubti.hxx b/sc/source/filter/xml/xmlsubti.hxx
index 4fa41cb..6fa8161 100644
--- a/sc/source/filter/xml/xmlsubti.hxx
+++ b/sc/source/filter/xml/xmlsubti.hxx
@@ -171,7 +171,7 @@ public:
{ return ScMyOLEFixer::IsOLE(rShape); }
void DeleteTable();
com::sun::star::table::CellAddress GetRealCellPos();
- const ScAddress GetRealScCellPos() const;
+ ScAddress GetRealScCellPos() const;
void AddColCount(sal_Int32 nTempColCount);
void AddColStyle(const sal_Int32 nRepeat, const rtl::OUString& rCellStyleName);
ScXMLTabProtectionData& GetCurrentProtectionData() { return maProtectionData; }
More information about the Libreoffice-commits
mailing list