[Libreoffice-commits] .: Branch 'feature/gsoc-calc-perf' - sc/source
Daniel Bankston
dbank at kemper.freedesktop.org
Tue Jun 5 00:24:43 PDT 2012
sc/source/filter/xml/XMLStylesImportHelper.cxx | 5
sc/source/filter/xml/XMLStylesImportHelper.hxx | 4
sc/source/filter/xml/xmlcelli.cxx | 301 ++++++++++---------------
sc/source/filter/xml/xmlcelli.hxx | 8
4 files changed, 131 insertions(+), 187 deletions(-)
New commits:
commit b91e54a89586717fef49531d9626fbd2c75cf24e
Author: Daniel Bankston <daniel.e.bankston at gmail.com>
Date: Tue Jun 5 02:17:07 2012 -0500
Replace CellAddress with ScAddress in ScXMLTableRowCellContext::EndElement()
Replaced CellAddress with ScAddress in EndElement() and adjusted related
methods.
Also removed commented-out code.
Also did intermediate conversion for XText::getString() as related code was unnecessary since there is now direct access to ScAddress cell position.
Change-Id: Ia237d0deb2d03a9d0470208d289947d474bc6d38
diff --git a/sc/source/filter/xml/XMLStylesImportHelper.cxx b/sc/source/filter/xml/XMLStylesImportHelper.cxx
index 471e531..9947db7 100644
--- a/sc/source/filter/xml/XMLStylesImportHelper.cxx
+++ b/sc/source/filter/xml/XMLStylesImportHelper.cxx
@@ -500,10 +500,9 @@ void ScMyStylesImportHelper::AddRange(const ScRange& rRange)
}
}
-void ScMyStylesImportHelper::AddCell(const com::sun::star::table::CellAddress& rAddress)
+void ScMyStylesImportHelper::AddCell(const ScAddress& rAddress)
{
- ScAddress aScAddress( static_cast<SCCOL>(rAddress.Column), static_cast<SCROW>(rAddress.Row), rAddress.Sheet );
- ScRange aScRange( aScAddress, aScAddress );
+ ScRange aScRange( rAddress, rAddress );
AddRange(aScRange);
}
diff --git a/sc/source/filter/xml/XMLStylesImportHelper.hxx b/sc/source/filter/xml/XMLStylesImportHelper.hxx
index 3f8b90b..c5bf5d3 100644
--- a/sc/source/filter/xml/XMLStylesImportHelper.hxx
+++ b/sc/source/filter/xml/XMLStylesImportHelper.hxx
@@ -32,8 +32,6 @@
#include "rangelst.hxx"
#include "simplerangelist.hxx"
#include <rtl/ustring.hxx>
-#include <com/sun/star/table/CellRangeAddress.hpp>
-#include <com/sun/star/table/CellAddress.hpp>
#include <set>
#include <vector>
@@ -179,7 +177,7 @@ public:
void SetAttributes(rtl::OUString* pStyleName,
rtl::OUString* pCurrency, const sal_Int16 nCellType);
void AddRange(const ScRange& rRange);
- void AddCell(const com::sun::star::table::CellAddress& rAddress);
+ void AddCell(const ScAddress& rAddress);
void InsertRow(const sal_Int32 nRow, const sal_Int32 nTab, ScDocument* pDoc); // a row is inserted before nRow
void InsertCol(const sal_Int32 nCol, const sal_Int32 nTab, ScDocument* pDoc); // a col is inserted before nCol
void EndTable();
diff --git a/sc/source/filter/xml/xmlcelli.cxx b/sc/source/filter/xml/xmlcelli.cxx
index 9e36e95..e6cf759 100644
--- a/sc/source/filter/xml/xmlcelli.cxx
+++ b/sc/source/filter/xml/xmlcelli.cxx
@@ -42,6 +42,7 @@
#include "postit.hxx"
#include "sheetdata.hxx"
#include "docsh.hxx"
+#include "cellform.hxx"
#include "XMLTableShapeImportHelper.hxx"
#include "XMLTextPContext.hxx"
@@ -282,6 +283,15 @@ void ScXMLTableRowCellContext::UnlockSolarMutex()
}
}
+namespace {
+
+bool scCellExists( const ScAddress& rCellPos )
+{
+ return( rCellPos.Col() <= MAXCOL && rCellPos.Row() <= MAXROW );
+}
+
+}
+
void ScXMLTableRowCellContext::SetCursorOnTextImport(const rtl::OUString& rOUTempText)
{
//extra step here until this area is fully converted
@@ -530,8 +540,10 @@ void ScXMLTableRowCellContext::SetContentValidation(com::sun::star::uno::Referen
}
void ScXMLTableRowCellContext::SetCellProperties(const uno::Reference<table::XCellRange>& xCellRange,
- const table::CellAddress& aCellAddress)
+ const ScAddress& aScCellAddress)
{
+ com::sun::star::table::CellAddress aCellAddress;
+ ScUnoConversion::FillApiAddress( aCellAddress, aScCellAddress );
if (CellExists(aCellAddress) && pContentValidationName && !pContentValidationName->isEmpty())
{
sal_Int32 nBottom = aCellAddress.Row + nRepeatedRows - 1;
@@ -557,7 +569,7 @@ void ScXMLTableRowCellContext::SetCellProperties(const uno::Reference<table::XCe
}
}
-void ScXMLTableRowCellContext::SetAnnotation(const table::CellAddress& aCellAddress)
+void ScXMLTableRowCellContext::SetAnnotation(const ScAddress& rPos)
{
ScDocument* pDoc = rXMLImport.GetDocument();
if( !pDoc || !mxAnnotationData.get() )
@@ -565,8 +577,6 @@ void ScXMLTableRowCellContext::SetAnnotation(const table::CellAddress& aCellAddr
LockSolarMutex();
- ScAddress aPos;
- ScUnoConversion::FillScAddress( aPos, aCellAddress );
ScPostIt* pNote = 0;
uno::Reference< drawing::XShapes > xShapes = rXMLImport.GetTables().GetCurrentXShapes();
@@ -589,7 +599,7 @@ void ScXMLTableRowCellContext::SetAnnotation(const table::CellAddress& aCellAddr
{
OSL_ENSURE( !pCaption->GetLogicRect().IsEmpty(), "ScXMLTableRowCellContext::SetAnnotation - invalid caption rectangle" );
// create the cell note with the caption object
- pNote = ScNoteUtil::CreateNoteFromCaption( *pDoc, aPos, *pCaption, true );
+ pNote = ScNoteUtil::CreateNoteFromCaption( *pDoc, rPos, *pCaption, true );
// forget pointer to object (do not create note again below)
pObject = 0;
}
@@ -617,7 +627,7 @@ void ScXMLTableRowCellContext::SetAnnotation(const table::CellAddress& aCellAddr
if( xOutlinerObj.get() )
{
// create cell note with all data from drawing object
- pNote = ScNoteUtil::CreateNoteFromObjectData( *pDoc, aPos,
+ pNote = ScNoteUtil::CreateNoteFromObjectData( *pDoc, rPos,
xItemSet.release(), xOutlinerObj.release(),
aCaptionRect, mxAnnotationData->mbShown, false );
}
@@ -626,7 +636,7 @@ void ScXMLTableRowCellContext::SetAnnotation(const table::CellAddress& aCellAddr
else if( !mxAnnotationData->maSimpleText.isEmpty() )
{
// create note from simple text
- pNote = ScNoteUtil::CreateNoteFromString( *pDoc, aPos,
+ pNote = ScNoteUtil::CreateNoteFromString( *pDoc, rPos,
mxAnnotationData->maSimpleText, mxAnnotationData->mbShown, false );
}
@@ -654,32 +664,30 @@ void ScXMLTableRowCellContext::SetAnnotation(const table::CellAddress& aCellAddr
// store the style names for stream copying
ScSheetSaveData* pSheetData = ScModelObj::getImplementation(rXMLImport.GetModel())->GetSheetSaveData();
- pSheetData->HandleNoteStyles( mxAnnotationData->maStyleName, mxAnnotationData->maTextStyle, aPos );
+ pSheetData->HandleNoteStyles( mxAnnotationData->maStyleName, mxAnnotationData->maTextStyle, rPos );
std::vector<ScXMLAnnotationStyleEntry>::const_iterator aIter = mxAnnotationData->maContentStyles.begin();
std::vector<ScXMLAnnotationStyleEntry>::const_iterator aEnd = mxAnnotationData->maContentStyles.end();
while (aIter != aEnd)
{
- pSheetData->AddNoteContentStyle( aIter->mnFamily, aIter->maName, aPos, aIter->maSelection );
+ pSheetData->AddNoteContentStyle( aIter->mnFamily, aIter->maName, rPos, aIter->maSelection );
++aIter;
}
}
// core implementation
-void ScXMLTableRowCellContext::SetDetectiveObj( const table::CellAddress& rPosition )
+void ScXMLTableRowCellContext::SetDetectiveObj( const ScAddress& rPosition )
{
- if( CellExists(rPosition) && pDetectiveObjVec && pDetectiveObjVec->size() )
+ if( scCellExists(rPosition) && pDetectiveObjVec && pDetectiveObjVec->size() )
{
LockSolarMutex();
- ScDetectiveFunc aDetFunc( rXMLImport.GetDocument(), rPosition.Sheet );
+ ScDetectiveFunc aDetFunc( rXMLImport.GetDocument(), rPosition.Tab() );
uno::Reference<container::XIndexAccess> xShapesIndex (rXMLImport.GetTables().GetCurrentXShapes(), uno::UNO_QUERY); // make draw page
ScMyImpDetectiveObjVec::iterator aItr(pDetectiveObjVec->begin());
ScMyImpDetectiveObjVec::iterator aEndItr(pDetectiveObjVec->end());
while(aItr != aEndItr)
{
- ScAddress aScAddress;
- ScUnoConversion::FillScAddress( aScAddress, rPosition );
- aDetFunc.InsertObject( aItr->eObjType, aScAddress, aItr->aSourceRange, aItr->bHasError );
+ aDetFunc.InsertObject( aItr->eObjType, rPosition, aItr->aSourceRange, aItr->bHasError );
if (xShapesIndex.is())
{
sal_Int32 nShapes = xShapesIndex->getCount();
@@ -692,18 +700,18 @@ void ScXMLTableRowCellContext::SetDetectiveObj( const table::CellAddress& rPosit
}
// core implementation
-void ScXMLTableRowCellContext::SetCellRangeSource( const table::CellAddress& rPosition )
+void ScXMLTableRowCellContext::SetCellRangeSource( const ScAddress& rPosition )
{
- if( CellExists(rPosition) && pCellRangeSource && !pCellRangeSource->sSourceStr.isEmpty() &&
+ if( scCellExists(rPosition) && pCellRangeSource && !pCellRangeSource->sSourceStr.isEmpty() &&
!pCellRangeSource->sFilterName.isEmpty() && !pCellRangeSource->sURL.isEmpty() )
{
ScDocument* pDoc = rXMLImport.GetDocument();
if (pDoc)
{
LockSolarMutex();
- ScRange aDestRange( static_cast<SCCOL>(rPosition.Column), static_cast<SCROW>(rPosition.Row), rPosition.Sheet,
- static_cast<SCCOL>(rPosition.Column + pCellRangeSource->nColumns - 1),
- static_cast<SCROW>(rPosition.Row + pCellRangeSource->nRows - 1), rPosition.Sheet );
+ ScRange aDestRange( rPosition.Col(), rPosition.Row(), rPosition.Tab(),
+ rPosition.Col() + static_cast<SCCOL>(pCellRangeSource->nColumns - 1),
+ rPosition.Row() + static_cast<SCROW>(pCellRangeSource->nRows - 1), rPosition.Tab() );
String sFilterName( pCellRangeSource->sFilterName );
String sSourceStr( pCellRangeSource->sSourceStr );
ScAreaLink* pLink = new ScAreaLink( pDoc->GetDocumentShell(), pCellRangeSource->sURL,
@@ -714,14 +722,51 @@ void ScXMLTableRowCellContext::SetCellRangeSource( const table::CellAddress& rPo
}
}
-bool lcl_IsEmptyOrNote( ScDocument* pDoc, const table::CellAddress& rCurrentPos )
+bool lcl_IsEmptyOrNote( ScDocument* pDoc, const ScAddress& rScCurrentPos )
{
- ScAddress aScAddress;
- ScUnoConversion::FillScAddress( aScAddress, rCurrentPos );
- ScBaseCell* pCell = pDoc->GetCell( aScAddress );
+ ScBaseCell* pCell = pDoc->GetCell( rScCurrentPos );
return ( !pCell || pCell->GetCellType() == CELLTYPE_NOTE );
}
+namespace {
+
+// from ScCellObj::GetOutputString_Imp(). all of it may not be necessary.
+rtl::OUString getOutputString(ScDocument* pDoc, const ScAddress& aCellPos)
+{
+ rtl::OUString aVal;
+ if ( pDoc )
+ {
+ ScBaseCell* pCell = pDoc->GetCell( aCellPos );
+ if ( pCell && pCell->GetCellType() != CELLTYPE_NOTE )
+ {
+ if ( pCell->GetCellType() == CELLTYPE_EDIT )
+ {
+ // GetString an der EditCell macht Leerzeichen aus Umbruechen,
+ // hier werden die Umbrueche aber gebraucht
+ const EditTextObject* pData = ((ScEditCell*)pCell)->GetData();
+ if (pData)
+ {
+ EditEngine& rEngine = pDoc->GetEditEngine();
+ rEngine.SetText( *pData );
+ aVal = rEngine.GetText( LINEEND_LF );
+ }
+ // Edit-Zellen auch nicht per NumberFormatter formatieren
+ // (passend zur Ausgabe)
+ }
+ else
+ {
+ // wie in GetString am Dokument (column)
+ Color* pColor;
+ sal_uLong nNumFmt = pDoc->GetNumberFormat( aCellPos );
+ ScCellFormat::GetString( pCell, nNumFmt, aVal, &pColor, *pDoc->GetFormatTable() );
+ }
+ }
+ }
+ return aVal;
+}
+
+}
+
void ScXMLTableRowCellContext::EndElement()
{
if (!bHasSubTable)
@@ -743,15 +788,7 @@ void ScXMLTableRowCellContext::EndElement()
}
ScMyTables& rTables = rXMLImport.GetTables();
- //extra step here until this area is fully converted
- com::sun::star::table::CellAddress aCellPos;
- ScAddress aScCellPos = rXMLImport.GetTables().GetRealScCellPos();
- ScUnoConversion::FillApiAddress( aCellPos, aScCellPos );
-
- if (aCellPos.Column > 0 && nRepeatedRows > 1)
- aCellPos.Row -= (nRepeatedRows - 1);
-
- //duplicated for now
+ ScAddress aScCellPos = rTables.GetRealScCellPos();
if (aScCellPos.Col() > 0 && nRepeatedRows > 1)
aScCellPos.SetRow( aScCellPos.Row() - (nRepeatedRows - 1) );
@@ -772,99 +809,47 @@ void ScXMLTableRowCellContext::EndElement()
// #i61702# The formatted text content of xBaseCell / xLockable is invalidated,
// so it can't be used after calling removeActionLock (getString always uses the document).
- if (CellExists(aCellPos) && ((nCellsRepeated > 1) || (nRepeatedRows > 1)))
- {
- if (!xBaseCell.is())
- {
- try
- {
- xBaseCell.set(xCellRange->getCellByPosition(aCellPos.Column, aCellPos.Row));
- }
- catch (lang::IndexOutOfBoundsException&)
- {
- OSL_FAIL("It seems here are to many columns or rows");
- }
- }
- uno::Reference <text::XText> xTempText (xBaseCell, uno::UNO_QUERY);
- if (xTempText.is())
- {
- pOUText.reset(xTempText->getString());
- }
- }
+ if (scCellExists(aScCellPos) && ((nCellsRepeated > 1) || (nRepeatedRows > 1)))
+ pOUText.reset( getOutputString(rXMLImport.GetDocument(), aScCellPos) );
+
if (!pOUTextContent && !pOUText && !pOUTextValue)
bIsEmpty = true;
}
bool bWasEmpty = bIsEmpty;
-// uno::Reference <table::XCell> xCell;
- table::CellAddress aCurrentPos( aCellPos );
+
+ ScAddress aScCurrentPos( aScCellPos );
if ((pContentValidationName && !pContentValidationName->isEmpty()) ||
mxAnnotationData.get() || pDetectiveObjVec || pCellRangeSource)
bIsEmpty = false;
for (sal_Int32 i = 0; i < nCellsRepeated; ++i)
{
- aCurrentPos.Column = aCellPos.Column + i;
+ aScCurrentPos.SetCol( aScCurrentPos.Col() + i );
if (i > 0)
rTables.AddColumn(false);
if (!bIsEmpty)
{
for (sal_Int32 j = 0; j < nRepeatedRows; ++j)
{
- aCurrentPos.Row = aCellPos.Row + j;
- if ((aCurrentPos.Column == 0) && (j > 0))
+ aScCurrentPos.SetRow( aScCurrentPos.Row() + j );
+ if( (aScCurrentPos.Col() == 0) && (j > 0) )
{
rTables.AddRow();
rTables.AddColumn(false);
}
- if (CellExists(aCurrentPos))
+ if( scCellExists(aScCurrentPos) )
{
- // test - bypass the API
- // if (xBaseCell.is() && (aCurrentPos == aCellPos))
- // xCell.set(xBaseCell);
- // else
- // {
- // try
- // {
- // xCell.set(xCellRange->getCellByPosition(aCurrentPos.Column, aCurrentPos.Row));
- // }
- // catch (lang::IndexOutOfBoundsException&)
- // {
- // OSL_FAIL("It seems here are to many columns or rows");
- // }
- // }
-
- // test - bypass the API
- // if ((!(bIsCovered) || (xCell->getType() == table::CellContentType_EMPTY)))
- if ((!(bIsCovered) || lcl_IsEmptyOrNote( rXMLImport.GetDocument(), aCurrentPos )))
+ if( ( !(bIsCovered) || lcl_IsEmptyOrNote(rXMLImport.GetDocument(), aScCurrentPos) ) )
{
switch (nCellType)
{
- case util::NumberFormat::TEXT:
+ case util::NumberFormat::TEXT:
{
bool bDoIncrement = true;
- if (rTables.IsPartOfMatrix(static_cast<SCCOL>(aCurrentPos.Column), static_cast<SCROW>(aCurrentPos.Row)))
+ if( rTables.IsPartOfMatrix(aScCurrentPos.Col(), aScCurrentPos.Row()) )
{
LockSolarMutex();
- // test - bypass the API
- // ScCellObj* pCellObj = (ScCellObj*)ScCellRangesBase::getImplementation(xCell);
- // if (pCellObj)
- // {
- // if(pOUTextValue && pOUTextValue->getLength())
- // pCellObj->SetFormulaResultString(*pOUTextValue);
- // else if (pOUTextContent && pOUTextContent->getLength())
- // pCellObj->SetFormulaResultString(*pOUTextContent);
- // else if ( i > 0 && pOUText && pOUText->getLength() )
- // {
- // pCellObj->SetFormulaResultString(*pOUText);
- // }
- // else
- // bDoIncrement = false;
- // }
- // else
- // bDoIncrement = false;
- ScAddress aScAddress;
- ScUnoConversion::FillScAddress( aScAddress, aCurrentPos );
- ScBaseCell* pCell = rXMLImport.GetDocument()->GetCell( aScAddress );
+ ScBaseCell* pCell = rXMLImport.GetDocument()->GetCell( aScCurrentPos );
bDoIncrement = ( pCell && pCell->GetCellType() == CELLTYPE_FORMULA );
if ( bDoIncrement )
{
@@ -881,21 +866,6 @@ void ScXMLTableRowCellContext::EndElement()
}
else
{
- // test - bypass the API
- // uno::Reference <text::XText> xText (xCell, uno::UNO_QUERY);
- // if (xText.is())
- // {
- // if(pOUTextValue && pOUTextValue->getLength())
- // xText->setString(*pOUTextValue);
- // else if (pOUTextContent && pOUTextContent->getLength())
- // xText->setString(*pOUTextContent);
- // else if ( i > 0 && pOUText && pOUText->getLength() )
- // {
- // xText->setString(*pOUText);
- // }
- // else
- // bDoIncrement = false;
- // }
LockSolarMutex();
ScBaseCell* pNewCell = NULL;
ScDocument* pDoc = rXMLImport.GetDocument();
@@ -908,11 +878,7 @@ void ScXMLTableRowCellContext::EndElement()
bDoIncrement = pNewCell != NULL;
if ( bDoIncrement )
- {
- ScAddress aScAddress;
- ScUnoConversion::FillScAddress( aScAddress, aCurrentPos );
- pDoc->PutCell( aScAddress, pNewCell );
- }
+ pDoc->PutCell( aScCurrentPos, pNewCell );
}
// #i56027# This is about setting simple text, not edit cells,
// so ProgressBarIncrement must be called with bEditCell = FALSE.
@@ -922,30 +888,22 @@ void ScXMLTableRowCellContext::EndElement()
rXMLImport.ProgressBarIncrement(false);
}
break;
- case util::NumberFormat::NUMBER:
- case util::NumberFormat::PERCENT:
- case util::NumberFormat::CURRENCY:
- case util::NumberFormat::TIME:
- case util::NumberFormat::DATETIME:
- case util::NumberFormat::LOGICAL:
+ case util::NumberFormat::NUMBER:
+ case util::NumberFormat::PERCENT:
+ case util::NumberFormat::CURRENCY:
+ case util::NumberFormat::TIME:
+ case util::NumberFormat::DATETIME:
+ case util::NumberFormat::LOGICAL:
{
- if( rTables.IsPartOfMatrix(static_cast<SCCOL>(aCurrentPos.Column), static_cast<SCROW>(aCurrentPos.Row)) )
+ if( rTables.IsPartOfMatrix(aScCurrentPos.Col(), aScCurrentPos.Row()) )
{
LockSolarMutex();
- // test - bypass the API
- // ScCellObj* pCellObj = (ScCellObj*)ScCellRangesBase::getImplementation(xCell);
- // if (pCellObj)
- // pCellObj->SetFormulaResultDouble(fValue);
- ScAddress aScAddress;
- ScUnoConversion::FillScAddress( aScAddress, aCurrentPos );
- ScBaseCell* pCell = rXMLImport.GetDocument()->GetCell( aScAddress );
+ ScBaseCell* pCell = rXMLImport.GetDocument()->GetCell( aScCurrentPos );
if ( pCell && pCell->GetCellType() == CELLTYPE_FORMULA )
static_cast<ScFormulaCell*>(pCell)->SetHybridDouble( fValue );
}
else
{
- // test - bypass the API
- // xCell->setValue(fValue);
LockSolarMutex();
// #i62435# Initialize the value cell's script type
@@ -957,15 +915,13 @@ void ScXMLTableRowCellContext::EndElement()
if ( rXMLImport.IsLatinDefaultStyle() )
pNewCell->SetScriptType( SCRIPTTYPE_LATIN );
rXMLImport.GetDocument()->PutCell(
- sal::static_int_cast<SCCOL>( aCurrentPos.Column ),
- sal::static_int_cast<SCROW>( aCurrentPos.Row ),
- sal::static_int_cast<SCTAB>( aCurrentPos.Sheet ),
- pNewCell );
+ aScCurrentPos.Col(), aScCurrentPos.Row(),
+ aScCurrentPos.Tab(), pNewCell );
}
rXMLImport.ProgressBarIncrement(false);
}
break;
- default:
+ default:
{
OSL_FAIL("no cell type given");
}
@@ -973,15 +929,15 @@ void ScXMLTableRowCellContext::EndElement()
}
}
- SetAnnotation(aCurrentPos);
- SetDetectiveObj( aCurrentPos );
- SetCellRangeSource( aCurrentPos );
+ SetAnnotation( aScCurrentPos );
+ SetDetectiveObj( aScCurrentPos );
+ SetCellRangeSource( aScCurrentPos );
}
else
{
if (!bWasEmpty || mxAnnotationData.get())
{
- if (aCurrentPos.Row > MAXROW)
+ if (aScCurrentPos.Row() > MAXROW)
rXMLImport.SetRangeOverflowType(SCWARN_IMPORT_ROW_OVERFLOW);
else
rXMLImport.SetRangeOverflowType(SCWARN_IMPORT_COLUMN_OVERFLOW);
@@ -996,7 +952,7 @@ void ScXMLTableRowCellContext::EndElement()
// with bEditCell = TRUE.
if (bHasTextImport)
rXMLImport.ProgressBarIncrement(true);
- if ((i == 0) && (aCellPos.Column == 0))
+ if ((i == 0) && (aScCellPos.Col() == 0))
for (sal_Int32 j = 1; j < nRepeatedRows; ++j)
{
rTables.AddRow();
@@ -1006,35 +962,29 @@ void ScXMLTableRowCellContext::EndElement()
}
if (nCellsRepeated > 1 || nRepeatedRows > 1)
{
- SetCellProperties(xCellRange, aCellPos); // set now only the validation for the complete range with the given cell as start cell
- //SetType(xCellRange, aCellPos);
- SCCOL nStartCol(aCellPos.Column < MAXCOL ? static_cast<SCCOL>(aCellPos.Column) : MAXCOL);
- SCROW nStartRow(aCellPos.Row < MAXROW ? static_cast<SCROW>(aCellPos.Row) : MAXROW);
- SCCOL nEndCol(aCellPos.Column + nCellsRepeated - 1 < MAXCOL ? static_cast<SCCOL>(aCellPos.Column + nCellsRepeated - 1) : MAXCOL);
- SCROW nEndRow(aCellPos.Row + nRepeatedRows - 1 < MAXROW ? static_cast<SCROW>(aCellPos.Row + nRepeatedRows - 1) : MAXROW);
- ScRange aScRange( nStartCol, nStartRow, aCellPos.Sheet,
- nEndCol, nEndRow, aCellPos.Sheet );
+ SetCellProperties(xCellRange, aScCellPos); // set now only the validation for the complete range with the given cell as start cell
+ SCCOL nStartCol( aScCellPos.Col() < MAXCOL ? aScCellPos.Col() : MAXCOL );
+ SCROW nStartRow( aScCellPos.Row() < MAXROW ? aScCellPos.Row() : MAXROW );
+ SCCOL nEndCol( aScCellPos.Col() + nCellsRepeated - 1 < MAXCOL ? aScCellPos.Col() + nCellsRepeated - 1 : MAXCOL );
+ SCROW nEndRow( aScCellPos.Row() + nRepeatedRows - 1 < MAXROW ? aScCellPos.Row() + nRepeatedRows - 1 : MAXROW );
+ ScRange aScRange( nStartCol, nStartRow, aScCellPos.Tab(),
+ nEndCol, nEndRow, aScCellPos.Tab() );
rXMLImport.GetStylesImportHelper()->AddRange(aScRange);
}
- else if (CellExists(aCellPos))
+ else if( scCellExists(aScCellPos) )
{
- rXMLImport.GetStylesImportHelper()->AddCell(aCellPos);
-
- // test - bypass the API
- // SetCellProperties(xCell); // set now only the validation
- SetCellProperties(xCellRange, aCellPos);
-
- //SetType(xTempCell);
+ rXMLImport.GetStylesImportHelper()->AddCell(aScCellPos);
+ SetCellProperties(xCellRange, aScCellPos);
}
}
else // if ( !pOUFormula )
{
- if (CellExists(aCellPos))
+ if (scCellExists(aScCellPos))
{
uno::Reference <table::XCell> xCell;
try
{
- xCell.set(xCellRange->getCellByPosition(aCellPos.Column , aCellPos.Row));
+ xCell.set(xCellRange->getCellByPosition(aScCellPos.Col() , aScCellPos.Row()));
}
catch (lang::IndexOutOfBoundsException&)
{
@@ -1044,14 +994,11 @@ void ScXMLTableRowCellContext::EndElement()
{
SetCellProperties(xCell); // set now only the validation
OSL_ENSURE(((nCellsRepeated == 1) && (nRepeatedRows == 1)), "repeated cells with formula not possible now");
- rXMLImport.GetStylesImportHelper()->AddCell(aCellPos);
+ rXMLImport.GetStylesImportHelper()->AddCell(aScCellPos);
if (!bIsMatrix)
{
LockSolarMutex();
- ScAddress aScAddress;
- ScUnoConversion::FillScAddress( aScAddress, aCellPos );
-
ScDocument* pDoc = rXMLImport.GetDocument();
rtl::OUString aText = pOUFormula->first;
@@ -1073,7 +1020,7 @@ void ScXMLTableRowCellContext::EndElement()
pCode->AddStringXML( aFormulaNmsp );
pDoc->IncXMLImportedFormulaCount( aText.getLength() );
- pNewCell = new ScFormulaCell( pDoc, aScAddress, pCode, eGrammar, MM_NONE );
+ pNewCell = new ScFormulaCell( pDoc, aScCellPos, pCode, eGrammar, MM_NONE );
delete pCode;
}
else if ( aText[0] == '\'' && aText.getLength() > 1 )
@@ -1098,9 +1045,9 @@ void ScXMLTableRowCellContext::EndElement()
}
if (pNewCell)
- pDoc->PutCell( aScAddress, pNewCell );
+ pDoc->PutCell( aScCellPos, pNewCell );
- ScBaseCell* pCell = rXMLImport.GetDocument()->GetCell( aScAddress );
+ ScBaseCell* pCell = rXMLImport.GetDocument()->GetCell( aScCellPos );
if ( pCell && pCell->GetCellType() == CELLTYPE_FORMULA )
{
if (bFormulaTextResult && pOUTextValue && !pOUTextValue->isEmpty())
@@ -1115,22 +1062,22 @@ void ScXMLTableRowCellContext::EndElement()
if (nMatrixCols > 0 && nMatrixRows > 0)
{
rTables.AddMatrixRange(
- static_cast<SCCOL>(aCellPos.Column),
- static_cast<SCROW>(aCellPos.Row),
- static_cast<SCCOL>(aCellPos.Column + nMatrixCols - 1),
- static_cast<SCROW>(aCellPos.Row + nMatrixRows - 1),
+ aScCellPos.Col(),
+ aScCellPos.Row(),
+ aScCellPos.Col() + nMatrixCols - 1,
+ aScCellPos.Row() + nMatrixRows - 1,
pOUFormula->first, pOUFormula->second, eGrammar);
}
}
- SetAnnotation( aCellPos );
- SetDetectiveObj( aCellPos );
- SetCellRangeSource( aCellPos );
+ SetAnnotation( aScCellPos );
+ SetDetectiveObj( aScCellPos );
+ SetCellRangeSource( aScCellPos );
rXMLImport.ProgressBarIncrement(false);
}
}
else
{
- if (aCellPos.Row > MAXROW)
+ if (aScCellPos.Row() > MAXROW)
rXMLImport.SetRangeOverflowType(SCWARN_IMPORT_ROW_OVERFLOW);
else
rXMLImport.SetRangeOverflowType(SCWARN_IMPORT_COLUMN_OVERFLOW);
diff --git a/sc/source/filter/xml/xmlcelli.hxx b/sc/source/filter/xml/xmlcelli.hxx
index 70137f0..858270a 100644
--- a/sc/source/filter/xml/xmlcelli.hxx
+++ b/sc/source/filter/xml/xmlcelli.hxx
@@ -86,7 +86,7 @@ class ScXMLTableRowCellContext : public SvXMLImportContext
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,
- const com::sun::star::table::CellAddress& aCellAddress);
+ const ScAddress& aCellAddress);
void SetCellProperties(const com::sun::star::uno::Reference<com::sun::star::table::XCell>& xCell);
void LockSolarMutex();
@@ -115,9 +115,9 @@ public:
inline void SetString(const rtl::OUString& rOUTempText) { pOUTextContent.reset(rOUTempText); }
void SetCursorOnTextImport(const rtl::OUString& rOUTempText);
- void SetAnnotation(const ::com::sun::star::table::CellAddress& rPosition );
- void SetDetectiveObj( const ::com::sun::star::table::CellAddress& rPosition );
- void SetCellRangeSource( const ::com::sun::star::table::CellAddress& rPosition );
+ void SetAnnotation( const ScAddress& rPosition );
+ void SetDetectiveObj( const ScAddress& rPosition );
+ void SetCellRangeSource( const ScAddress& rPosition );
virtual void EndElement();
};
More information about the Libreoffice-commits
mailing list