[Libreoffice-commits] core.git: Branch 'libreoffice-4-2' - sc/inc sc/source

Kohei Yoshida kohei.yoshida at collabora.com
Mon Feb 3 01:15:18 PST 2014


 sc/inc/column.hxx                |    1 +
 sc/inc/document.hxx              |    6 ++++++
 sc/inc/mtvcellfunc.hxx           |    7 +++++++
 sc/inc/table.hxx                 |    1 +
 sc/source/core/data/column2.cxx  |   23 +++++++++++++++++++++++
 sc/source/core/data/document.cxx |   11 +++++++++++
 sc/source/core/data/table2.cxx   |    6 ++++++
 sc/source/filter/xml/xmlwrap.cxx |    2 ++
 8 files changed, 57 insertions(+)

New commits:
commit 17593b3e00c4d73a1985dfc1fae976d211aee007
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Sun Feb 2 13:21:35 2014 -0500

    fdo#74325: Ensure that all note objects have an sdr object before exporting.
    
    Otherwise, if a note hasn't been displayed at least once before saving
    that note would not get saved.  In the future, we should modify the export
    code to not rely on SdrObject to check the presence of note.
    
    Change-Id: Ib7ca3ac00a0c9cdd3a01facda7af479ef172afbe
    (cherry picked from commit 018500a73f3b1082b6662b7c123dfe5158ae5752)
    Reviewed-on: https://gerrit.libreoffice.org/7782
    Tested-by: Markus Mohrhard <markus.mohrhard at googlemail.com>
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>

diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx
index 67d7572..414f40d 100644
--- a/sc/inc/column.hxx
+++ b/sc/inc/column.hxx
@@ -502,6 +502,7 @@ public:
     bool IsNotesEmptyBlock(SCROW nStartRow, SCROW nEndRow) const;
 
     size_t GetNoteCount() const;
+    void CreateAllNoteCaptions();
     SCROW GetNotePosition( size_t nIndex ) const;
     void GetAllNoteEntries( std::vector<sc::NoteEntry>& rNotes ) const;
     void GetNotesInRange( SCROW nStartRow, SCROW nEndRow, std::vector<sc::NoteEntry>& rNotes ) const;
diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index 1f8ced4..4a96709 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -912,6 +912,12 @@ public:
     size_t CountNotes() const;
     size_t GetNoteCount( SCTAB nTab, SCCOL nCol ) const;
 
+    /**
+     * Ensure that all note objects have an associated sdr object.  The export
+     * code uses sdr objects to export note data.
+     */
+    void CreateAllNoteCaptions();
+
     ScAddress GetNotePosition( size_t nIndex ) const;
     SCROW GetNotePosition( SCTAB nTab, SCCOL nCol, size_t nIndex ) const;
 
diff --git a/sc/inc/mtvcellfunc.hxx b/sc/inc/mtvcellfunc.hxx
index c54d02e..793f2db 100644
--- a/sc/inc/mtvcellfunc.hxx
+++ b/sc/inc/mtvcellfunc.hxx
@@ -159,6 +159,13 @@ FindFormulaEditText(const CellStoreType& rStore, SCROW nRow1, SCROW nRow2, _Func
     return FindElement2<CellStoreType, edittext_block, formula_block, _Func, _Func>(rStore, nRow1, nRow2, rFunc, rFunc);
 }
 
+template<typename _Func>
+void ProcessNote(CellNoteStoreType& rStore, _Func& rFunc)
+{
+    FuncElseNoOp<size_t> aElse;
+    ProcessElements1<CellNoteStoreType, cellnote_block, _Func, FuncElseNoOp<size_t> >(rStore, rFunc, aElse);
+}
+
 }
 
 #endif
diff --git a/sc/inc/table.hxx b/sc/inc/table.hxx
index 2e1cfd5..f067658 100644
--- a/sc/inc/table.hxx
+++ b/sc/inc/table.hxx
@@ -382,6 +382,7 @@ public:
 
     size_t GetNoteCount( SCCOL nCol ) const;
     SCROW GetNotePosition( SCCOL nCol, size_t nIndex ) const;
+    void CreateAllNoteCaptions();
 
     void GetAllNoteEntries( std::vector<sc::NoteEntry>& rNotes ) const;
     void GetNotesInRange( const ScRange& rRange, std::vector<sc::NoteEntry>& rNotes ) const;
diff --git a/sc/source/core/data/column2.cxx b/sc/source/core/data/column2.cxx
index 20d3ee7..6aef111 100644
--- a/sc/source/core/data/column2.cxx
+++ b/sc/source/core/data/column2.cxx
@@ -1229,6 +1229,29 @@ size_t ScColumn::GetNoteCount() const
     return nCount;
 }
 
+namespace {
+
+class NoteCaptionCreator
+{
+    ScAddress maPos;
+public:
+    NoteCaptionCreator( SCTAB nTab, SCCOL nCol ) : maPos(nCol,0,nTab) {}
+
+    void operator() ( size_t nRow, ScPostIt* p )
+    {
+        maPos.SetRow(nRow);
+        p->GetOrCreateCaption(maPos);
+    }
+};
+
+}
+
+void ScColumn::CreateAllNoteCaptions()
+{
+    NoteCaptionCreator aFunc(nTab, nCol);
+    sc::ProcessNote(maCellNotes, aFunc);
+}
+
 SCROW ScColumn::GetNotePosition( size_t nIndex ) const
 {
     // Return the row position of the nth note in the column.
diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx
index 11b6507..6bbe835 100644
--- a/sc/source/core/data/document.cxx
+++ b/sc/source/core/data/document.cxx
@@ -6188,6 +6188,17 @@ size_t ScDocument::GetNoteCount( SCTAB nTab, SCCOL nCol ) const
     return pTab->GetNoteCount(nCol);
 }
 
+void ScDocument::CreateAllNoteCaptions()
+{
+    TableContainer::iterator it = maTabs.begin(), itEnd = maTabs.end();
+    for (; it != itEnd; ++it)
+    {
+        ScTable* p = *it;
+        if (p)
+            p->CreateAllNoteCaptions();
+    }
+}
+
 ScAddress ScDocument::GetNotePosition( size_t nIndex ) const
 {
     for (size_t nTab = 0; nTab < maTabs.size(); ++nTab)
diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx
index ce4871a..e81a5e2 100644
--- a/sc/source/core/data/table2.cxx
+++ b/sc/source/core/data/table2.cxx
@@ -1510,6 +1510,12 @@ SCROW ScTable::GetNotePosition( SCCOL nCol, size_t nIndex ) const
     return aCol[nCol].GetNotePosition(nIndex);
 }
 
+void ScTable::CreateAllNoteCaptions()
+{
+    for (SCCOL i = 0; i <= MAXCOL; ++i)
+        aCol[i].CreateAllNoteCaptions();
+}
+
 void ScTable::GetAllNoteEntries( std::vector<sc::NoteEntry>& rNotes ) const
 {
     for (SCCOL nCol = 0; nCol < MAXCOLCOUNT; ++nCol)
diff --git a/sc/source/filter/xml/xmlwrap.cxx b/sc/source/filter/xml/xmlwrap.cxx
index c2ad8ec..5fdf581 100644
--- a/sc/source/filter/xml/xmlwrap.cxx
+++ b/sc/source/filter/xml/xmlwrap.cxx
@@ -762,6 +762,8 @@ sal_Bool ScXMLImportWrapper::ExportToComponent(const uno::Reference<uno::XCompon
 
 sal_Bool ScXMLImportWrapper::Export(sal_Bool bStylesOnly)
 {
+    rDoc.CreateAllNoteCaptions();
+
     uno::Reference<uno::XComponentContext> xContext(comphelper::getProcessComponentContext());
 
     uno::Reference<xml::sax::XWriter> xWriter = xml::sax::Writer::create(xContext);


More information about the Libreoffice-commits mailing list