summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2016-11-26 11:23:24 +0100
committerEike Rathke <erack@redhat.com>2016-11-26 11:39:44 +0100
commit0a2a7436b4041bb34b01a183b9264af8488d1af3 (patch)
treeab83f3f552d7f56fe3e32c74a67c92731af82cb2
parent7b250d56981f78e77454a2a3fd670731b2358e75 (diff)
Resolves: tdf#103493 copying note captions needs a completed destination sheet
If a copied sheet's destination position is before its source position, the source's ScColumn::nTab members still pointed to the original source position when the captions were created, which led to the wrong drawing layer page being used and at the end the drawing shapes not being correctly assigned. Change-Id: I9c3cc97d8b4486756023b9ab02da28079a1d0627
-rw-r--r--sc/inc/table.hxx4
-rw-r--r--sc/source/core/data/documen2.cxx8
-rw-r--r--sc/source/core/data/table2.cxx23
3 files changed, 26 insertions, 9 deletions
diff --git a/sc/inc/table.hxx b/sc/inc/table.hxx
index e984c2ee7ccc..da69ea9a0571 100644
--- a/sc/inc/table.hxx
+++ b/sc/inc/table.hxx
@@ -454,7 +454,9 @@ public:
sc::CopyToDocContext& rCxt, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
InsertDeleteFlags nFlags, bool bMarked, ScTable* pDestTab,
const ScMarkData* pMarkData = nullptr, bool bAsLink = false, bool bColRowFlags = true,
- bool bGlobalNamesToLocal = false );
+ bool bGlobalNamesToLocal = false, bool bCopyCaptions = true );
+
+ void CopyCaptionsToTable( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, ScTable* pDestTab, bool bCloneCaption );
void UndoToTable(
sc::CopyToDocContext& rCxt, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
diff --git a/sc/source/core/data/documen2.cxx b/sc/source/core/data/documen2.cxx
index 20db59e1ad80..766aa9f0fe12 100644
--- a/sc/source/core/data/documen2.cxx
+++ b/sc/source/core/data/documen2.cxx
@@ -899,7 +899,7 @@ bool ScDocument::CopyTab( SCTAB nOldPos, SCTAB nNewPos, const ScMarkData* pOnlyM
sc::CopyToDocContext aCopyDocCxt(*this);
maTabs[nOldPos]->CopyToTable(aCopyDocCxt, 0, 0, MAXCOL, MAXROW, InsertDeleteFlags::ALL,
(pOnlyMarked != nullptr), maTabs[nNewPos], pOnlyMarked,
- false /*bAsLink*/, true /*bColRowFlags*/, bGlobalNamesToLocal );
+ false /*bAsLink*/, true /*bColRowFlags*/, bGlobalNamesToLocal, false /*bCopyCaptions*/ );
maTabs[nNewPos]->SetTabBgColor(maTabs[nOldPos]->GetTabBgColor());
SCTAB nDz = nNewPos - nOldPos;
@@ -938,6 +938,12 @@ bool ScDocument::CopyTab( SCTAB nOldPos, SCTAB nNewPos, const ScMarkData* pOnlyM
// Copy the RTL settings
maTabs[nNewPos]->SetLayoutRTL(maTabs[nOldPos]->IsLayoutRTL());
maTabs[nNewPos]->SetLoadingRTL(maTabs[nOldPos]->IsLoadingRTL());
+
+ // Finally copy the note captions, which need
+ // 1. the updated source ScColumn::nTab members if nNewPos <= nOldPos
+ // 2. row heights and column widths of the destination
+ // 3. RTL settings of the destination
+ maTabs[nOldPos]->CopyCaptionsToTable( 0, 0, MAXCOL, MAXROW, maTabs[nNewPos], true /*bCloneCaption*/);
}
return bValid;
diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx
index 0f817d94fdf7..a046bc5cab23 100644
--- a/sc/source/core/data/table2.cxx
+++ b/sc/source/core/data/table2.cxx
@@ -1089,7 +1089,7 @@ void ScTable::StartListeningFormulaCells(
void ScTable::CopyToTable(
sc::CopyToDocContext& rCxt, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
InsertDeleteFlags nFlags, bool bMarked, ScTable* pDestTab, const ScMarkData* pMarkData,
- bool bAsLink, bool bColRowFlags, bool bGlobalNamesToLocal )
+ bool bAsLink, bool bColRowFlags, bool bGlobalNamesToLocal, bool bCopyCaptions )
{
if (!ValidColRow(nCol1, nRow1) || !ValidColRow(nCol2, nRow2))
return;
@@ -1209,14 +1209,23 @@ void ScTable::CopyToTable(
if(nFlags & InsertDeleteFlags::OUTLINE) // also only when bColRowFlags
pDestTab->SetOutlineTable( pOutlineTable );
- if (nFlags & (InsertDeleteFlags::NOTE|InsertDeleteFlags::ADDNOTES))
+ if (bCopyCaptions && (nFlags & (InsertDeleteFlags::NOTE | InsertDeleteFlags::ADDNOTES)))
{
bool bCloneCaption = (nFlags & InsertDeleteFlags::NOCAPTIONS) == InsertDeleteFlags::NONE;
- for (SCCOL i = nCol1; i <= nCol2; i++)
- {
- aCol[i].CopyCellNotesToDocument(nRow1, nRow2, pDestTab->aCol[i], bCloneCaption);
- pDestTab->aCol[i].UpdateNoteCaptions(nRow1, nRow2);
- }
+ CopyCaptionsToTable( nCol1, nRow1, nCol2, nRow2, pDestTab, bCloneCaption);
+ }
+}
+
+void ScTable::CopyCaptionsToTable( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, ScTable* pDestTab,
+ bool bCloneCaption )
+{
+ if (!ValidColRow(nCol1, nRow1) || !ValidColRow(nCol2, nRow2))
+ return;
+
+ for (SCCOL i = nCol1; i <= nCol2; i++)
+ {
+ aCol[i].CopyCellNotesToDocument(nRow1, nRow2, pDestTab->aCol[i], bCloneCaption);
+ pDestTab->aCol[i].UpdateNoteCaptions(nRow1, nRow2);
}
}