sc/inc/column.hxx                |    6 +++++-
 sc/inc/document.hxx              |    1 +
 sc/inc/table.hxx                 |    6 +++++-
 sc/source/core/data/column.cxx   |   12 ++++++++++--
 sc/source/core/data/document.cxx |    6 +++++-
 sc/source/core/data/table2.cxx   |    5 +++--
 6 files changed, 29 insertions(+), 7 deletions(-)

New commits:
commit df6e8ca0911dab7a2aa977dcb56c9faa74ea56bd
Author: Kohei Yoshida <kohei.yosh...@collabora.com>
Date:   Wed Jun 18 15:21:47 2014 -0400

    Correctly map number formats when transferring them from one doc to another.
    
    Change-Id: I7908ee84bfbe1ae2f53c0dd90b6d70503ac76312

diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx
index 547fd14..9bb6bd6 100644
--- a/sc/inc/column.hxx
+++ b/sc/inc/column.hxx
@@ -27,6 +27,7 @@
 #include "types.hxx"
 #include "mtvelements.hxx"
 #include <formula/types.hxx>
+#include <svl/zforlist.hxx>
 
 #include <set>
 #include <vector>
@@ -232,7 +233,10 @@ public:
 
     void CopyToClip(
         sc::CopyToClipContext& rCxt, SCROW nRow1, SCROW nRow2, ScColumn& 
rColumn ) const;
-    void CopyStaticToDocument(SCROW nRow1, SCROW nRow2, ScColumn& rDestCol);
+
+    void CopyStaticToDocument(
+        SCROW nRow1, SCROW nRow2, const SvNumberFormatterMergeMap& rMap, 
ScColumn& rDestCol );
+
     void CopyCellToDocument( SCROW nSrcRow, SCROW nDestRow, ScColumn& rDestCol 
);
     bool InitBlockPosition( sc::ColumnBlockPosition& rBlockPos );
     bool InitBlockPosition( sc::ColumnBlockConstPosition& rBlockPos ) const;
diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index c00f55e..c1487c1 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -40,6 +40,7 @@
 #include "calcconfig.hxx"
 #include <tools/fract.hxx>
 #include <tools/gen.hxx>
+#include <svl/zforlist.hxx>
 
 #include <memory>
 #include <map>
diff --git a/sc/inc/table.hxx b/sc/inc/table.hxx
index 45f8912..b0d298b 100644
--- a/sc/inc/table.hxx
+++ b/sc/inc/table.hxx
@@ -412,7 +412,11 @@ public:
     void        DeleteArea(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, 
sal_uInt16 nDelFlag);
     void CopyToClip( sc::CopyToClipContext& rCxt, SCCOL nCol1, SCROW nRow1, 
SCCOL nCol2, SCROW nRow2, ScTable* pTable );
     void CopyToClip( sc::CopyToClipContext& rCxt, const ScRangeList& rRanges, 
ScTable* pTable );
-    void CopyStaticToDocument(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW 
nRow2, ScTable* pDestTab);
+
+    void CopyStaticToDocument(
+        SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, const 
SvNumberFormatterMergeMap& rMap,
+        ScTable* pDestTab );
+
     void CopyCellToDocument( SCCOL nSrcCol, SCROW nSrcRow, SCCOL nDestCol, 
SCROW nDestRow, ScTable& rDestTab );
 
     bool InitColumnBlockPosition( sc::ColumnBlockPosition& rBlockPos, SCCOL 
nCol );
diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx
index 2c161f8..3e4c4ae 100644
--- a/sc/source/core/data/column.cxx
+++ b/sc/source/core/data/column.cxx
@@ -1048,7 +1048,8 @@ void ScColumn::CopyToClip(
     rColumn.CellStorageModified();
 }
 
-void ScColumn::CopyStaticToDocument(SCROW nRow1, SCROW nRow2, ScColumn& 
rDestCol)
+void ScColumn::CopyStaticToDocument(
+    SCROW nRow1, SCROW nRow2, const SvNumberFormatterMergeMap& rMap, ScColumn& 
rDestCol )
 {
     if (nRow1 > nRow2)
         return;
@@ -1159,7 +1160,14 @@ void ScColumn::CopyStaticToDocument(SCROW nRow1, SCROW 
nRow2, ScColumn& rDestCol
 
     // Dont' forget to copy the number formats over.  Charts may reference 
them.
     for (SCROW nRow = nRow1; nRow <= nRow2; ++nRow)
-        rDestCol.SetNumberFormat(nRow, GetNumberFormat(nRow));
+    {
+        sal_uInt32 nNumFmt = GetNumberFormat(nRow);
+        SvNumberFormatterMergeMap::const_iterator itNum = rMap.find(nNumFmt);
+        if (itNum != rMap.end())
+            nNumFmt = itNum->second;
+
+        rDestCol.SetNumberFormat(nRow, nNumFmt);
+    }
 
     rDestCol.CellStorageModified();
 }
diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx
index 928a478..65649f9 100644
--- a/sc/source/core/data/document.cxx
+++ b/sc/source/core/data/document.cxx
@@ -2157,8 +2157,12 @@ void ScDocument::CopyStaticToDocument(const ScRange& 
rSrcRange, SCTAB nDestTab,
     if (!pSrcTab || !pDestTab)
         return;
 
+    pDestDoc->GetFormatTable()->MergeFormatter(*GetFormatTable());
+    SvNumberFormatterMergeMap aMap = 
pDestDoc->GetFormatTable()->ConvertMergeTableToMap();
+
     pSrcTab->CopyStaticToDocument(
-        rSrcRange.aStart.Col(), rSrcRange.aStart.Row(), rSrcRange.aEnd.Col(), 
rSrcRange.aEnd.Row(), pDestTab);
+        rSrcRange.aStart.Col(), rSrcRange.aStart.Row(), rSrcRange.aEnd.Col(), 
rSrcRange.aEnd.Row(),
+        aMap, pDestTab);
 }
 
 void ScDocument::CopyCellToDocument( const ScAddress& rSrcPos, const 
ScAddress& rDestPos, ScDocument& rDestDoc )
diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx
index b16aaa2..4c75534 100644
--- a/sc/source/core/data/table2.cxx
+++ b/sc/source/core/data/table2.cxx
@@ -556,7 +556,8 @@ void ScTable::CopyToClip(
     }
 }
 
-void ScTable::CopyStaticToDocument(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, 
SCROW nRow2, ScTable* pDestTab)
+void ScTable::CopyStaticToDocument(
+    SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, const 
SvNumberFormatterMergeMap& rMap, ScTable* pDestTab )
 {
     if (nCol1 > nCol2)
         return;
@@ -565,7 +566,7 @@ void ScTable::CopyStaticToDocument(SCCOL nCol1, SCROW 
nRow1, SCCOL nCol2, SCROW
     {
         ScColumn& rSrcCol = aCol[i];
         ScColumn& rDestCol = pDestTab->aCol[i];
-        rSrcCol.CopyStaticToDocument(nRow1, nRow2, rDestCol);
+        rSrcCol.CopyStaticToDocument(nRow1, nRow2, rMap, rDestCol);
     }
 }
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to