[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