[Libreoffice-commits] core.git: Branch 'feature/sc-notes-storage' - sc/inc sc/source
Laurent Godard
lgodard.libre at laposte.net
Mon Sep 16 03:25:34 PDT 2013
sc/inc/column.hxx | 2 -
sc/inc/document.hxx | 1
sc/source/core/data/column2.cxx | 2 -
sc/source/core/data/document.cxx | 6 ++-
sc/source/core/data/table1.cxx | 62 +++++++++++++++++++++---------------
sc/source/core/data/table2.cxx | 24 ++++++++-----
sc/source/ui/navipi/content.cxx | 67 ++++++++++++++++++++++++++-------------
7 files changed, 105 insertions(+), 59 deletions(-)
New commits:
commit 0827d9ee3838d10feceea720bf54a2d6299b8353
Author: Laurent Godard <lgodard.libre at laposte.net>
Date: Mon Sep 16 12:24:17 2013 +0200
optim cell notes loops
Change-Id: I08a8a85a4353f7c1b3edada947110d49cfc7dddf
diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx
index 76f5127..75270d6 100644
--- a/sc/inc/column.hxx
+++ b/sc/inc/column.hxx
@@ -495,7 +495,7 @@ public:
const ScPostIt* GetCellNote( SCROW nRow ) const;
void DeleteCellNotes( sc::ColumnBlockPosition& rBlockPos, SCROW nRow1, SCROW nRow2 );
void DeleteCellNote( SCROW nRow );
- bool HasCellNote() const;
+ bool HasCellNotes() const;
void SetCellNote( SCROW nRow, ScPostIt* pNote);
void SwapCellNotes( SCROW nRow1, SCROW nRow2 );
diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index 971b377..825d83c 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -904,6 +904,7 @@ public:
void SetNote(SCCOL nCol, SCROW nRow, SCTAB nTab, ScPostIt* pNote);
bool HasNote(const ScAddress& rPos);
bool HasNote(SCCOL nCol, SCROW nRow, SCTAB nTab);
+ bool HasColNotes(SCCOL nCol, SCTAB nTab);
SC_DLLPUBLIC ScPostIt* ReleaseNote(const ScAddress& rPos);
SC_DLLPUBLIC ScPostIt* ReleaseNote(SCCOL nCol, SCROW nRow, SCTAB nTab);
SC_DLLPUBLIC ScPostIt* GetOrCreateNote(const ScAddress& rPos);
diff --git a/sc/source/core/data/column2.cxx b/sc/source/core/data/column2.cxx
index c87a8a2..d7433a4 100644
--- a/sc/source/core/data/column2.cxx
+++ b/sc/source/core/data/column2.cxx
@@ -1807,7 +1807,7 @@ void ScColumn::DeleteCellNotes( sc::ColumnBlockPosition& rBlockPos, SCROW nRow1,
maCellNotes.set_empty(rBlockPos.miCellNotePos, nRow1, nRow2);
}
-bool ScColumn::HasCellNote() const
+bool ScColumn::HasCellNotes() const
{
sc::CellNoteStoreType::const_iterator it = maCellNotes.begin(), itEnd = maCellNotes.end();
for (; it != itEnd; ++it)
diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx
index 91b1ccc..824bb3b 100644
--- a/sc/source/core/data/document.cxx
+++ b/sc/source/core/data/document.cxx
@@ -6121,12 +6121,16 @@ bool ScDocument::HasNote(const ScAddress& rPos)
{
return HasNote(rPos.Col(), rPos.Row(), rPos.Tab());
}
-
bool ScDocument::HasNote(SCCOL nCol, SCROW nRow, SCTAB nTab)
{
ScPostIt* pNote = maTabs[nTab]->aCol[nCol].GetCellNote(nRow);
return pNote != NULL;
}
+bool ScDocument::HasColNotes(SCCOL nCol, SCTAB nTab)
+{
+ return maTabs[nTab]->aCol[nCol].HasCellNotes();
+}
+
ScPostIt* ScDocument::ReleaseNote(const ScAddress& rPos)
{
return ReleaseNote(rPos.Col(), rPos.Row(), rPos.Tab());
diff --git a/sc/source/core/data/table1.cxx b/sc/source/core/data/table1.cxx
index 8ca5d88..8823d6c 100644
--- a/sc/source/core/data/table1.cxx
+++ b/sc/source/core/data/table1.cxx
@@ -528,17 +528,20 @@ bool ScTable::GetCellArea( SCCOL& rEndCol, SCROW& rEndRow ) const
if (nRow > nMaxY)
nMaxY = nRow;
}
+ if ( pDocument->HasColNotes(i, nTab) )
+ {
sc::CellNoteStoreType& maCellNotes = pDocument->GetColNotes(i, nTab);
- for (SCROW r=nMaxY; r <=MAXROW; r++) // TODO : notes suboptimal
+ for (SCROW r=nMaxY; r <=MAXROW; r++) // TODO : notes suboptimal ?
{
ScPostIt* pNote = maCellNotes.get<ScPostIt*>(r);
if (pNote)
- {
- nMaxY = r;
- if (i>nMaxX)
- nMaxX = i;
- }
+ {
+ nMaxY = r;
+ if (i>nMaxX)
+ nMaxX = i;
+ }
}
+ }
}
rEndCol = nMaxX;
@@ -581,15 +584,18 @@ bool ScTable::GetPrintArea( SCCOL& rEndCol, SCROW& rEndRow, bool bNotes, bool bF
}
if (bNotes)
{
- sc::CellNoteStoreType& maCellNotes = pDocument->GetColNotes(i, nTab);
- for (SCROW r=nMaxY; r <=MAXROW; r++) // TODO : notes suboptimal
+ if ( pDocument->HasColNotes(i, nTab) )
{
- ScPostIt* pNote = maCellNotes.get<ScPostIt*>(r);
- if (pNote)
+ sc::CellNoteStoreType& maCellNotes = pDocument->GetColNotes(i, nTab);
+ for (SCROW r=nMaxY; r <=MAXROW; r++) // TODO : notes suboptimal ?
{
- nMaxY = r;
- if (i>nMaxX)
- nMaxX = i;
+ ScPostIt* pNote = maCellNotes.get<ScPostIt*>(r);
+ if (pNote)
+ {
+ nMaxY = r;
+ if (i>nMaxX)
+ nMaxX = i;
+ }
}
}
}
@@ -714,12 +720,15 @@ bool ScTable::GetPrintAreaVer( SCCOL nStartCol, SCCOL nEndCol,
}
if (bNotes)
{
- sc::CellNoteStoreType& maCellNotes = pDocument->GetColNotes(i, nTab);
- for (SCROW r=nMaxY; r <=MAXROW; r++) // TODO : notes suboptimal
+ if ( pDocument->HasColNotes(i, nTab) )
{
- ScPostIt* pNote = maCellNotes.get<ScPostIt*>(r);
- if (pNote)
- nMaxY = r;
+ sc::CellNoteStoreType& maCellNotes = pDocument->GetColNotes(i, nTab);
+ for (SCROW r=nMaxY; r <=MAXROW; r++) // TODO : notes suboptimal ?
+ {
+ ScPostIt* pNote = maCellNotes.get<ScPostIt*>(r);
+ if (pNote)
+ nMaxY = r;
+ }
}
}
}
@@ -770,15 +779,18 @@ bool ScTable::GetDataStart( SCCOL& rStartCol, SCROW& rStartRow ) const
if (nRow < nMinY)
nMinY = nRow;
}
- sc::CellNoteStoreType& maCellNotes = pDocument->GetColNotes(i, nTab);
- for (SCROW r=0; r < nMinY; r++) // TODO : notes suboptimal
+ if ( pDocument->HasColNotes(i, nTab) )
{
- ScPostIt* pNote = maCellNotes.get<ScPostIt*>(r);
- if (pNote)
+ sc::CellNoteStoreType& maCellNotes = pDocument->GetColNotes(i, nTab);
+ for (SCROW r=0; r < nMinY; r++) // TODO : notes suboptimal ?
{
- nMinY = r;
- if (i<nMinX)
- nMinX = i;
+ ScPostIt* pNote = maCellNotes.get<ScPostIt*>(r);
+ if (pNote)
+ {
+ nMinY = r;
+ if (i<nMinX)
+ nMinX = i;
+ }
}
}
}
diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx
index 5bf1bbc..e5b128c 100644
--- a/sc/source/core/data/table2.cxx
+++ b/sc/source/core/data/table2.cxx
@@ -1496,11 +1496,14 @@ void ScTable::InitializeNoteCaptions( bool bForced )
{
for (SCCOL nCol=0; nCol<MAXCOL; nCol++)
{
- sc::CellNoteStoreType& maCellNotes = pDocument->GetColNotes(nCol, nTab);
- for (SCROW nRow=0; nRow < MAXROWCOUNT; nRow++) // TODO : notes suboptimal
+ if ( pDocument->HasColNotes(nCol, nTab) )
{
- if (ScPostIt* pNote = GetNote(nCol, nRow))
- pNote->GetOrCreateCaption( ScAddress( nCol, nRow, nTab ) );
+ sc::CellNoteStoreType& maCellNotes = pDocument->GetColNotes(nCol, nTab);
+ for (SCROW nRow=0; nRow < MAXROWCOUNT; nRow++) // TODO : notes suboptimal ?
+ {
+ if (ScPostIt* pNote = GetNote(nCol, nRow))
+ pNote->GetOrCreateCaption( ScAddress( nCol, nRow, nTab ) );
+ }
}
}
}
@@ -1834,12 +1837,15 @@ bool ScTable::IsBlockEmpty( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
bEmpty = aCol[i].IsEmptyBlock( nRow1, nRow2 );
if (!bIgnoreNotes && bEmpty)
{
- sc::CellNoteStoreType& maCellNotes = pDocument->GetColNotes(i, nTab);
- for (SCROW nRow=nRow1; nRow <= nRow2 && bEmpty; nRow++) // TODO : notes suboptimal
+ if ( pDocument->HasColNotes(i, nTab) )
{
- ScPostIt* pNote = maCellNotes.get<ScPostIt*>(nRow);
- if (pNote)
- bEmpty = false;
+ sc::CellNoteStoreType& maCellNotes = pDocument->GetColNotes(i, nTab);
+ for (SCROW nRow=nRow1; nRow <= nRow2 && bEmpty; nRow++) // TODO : notes suboptimal ?
+ {
+ ScPostIt* pNote = maCellNotes.get<ScPostIt*>(nRow);
+ if (pNote)
+ bEmpty = false;
+ }
}
}
}
diff --git a/sc/source/ui/navipi/content.cxx b/sc/source/ui/navipi/content.cxx
index 0afe65d..b9591f4 100644
--- a/sc/source/ui/navipi/content.cxx
+++ b/sc/source/ui/navipi/content.cxx
@@ -867,12 +867,20 @@ void ScContentTree::GetNoteStrings()
{
for (SCCOL nCol=0; nCol<MAXCOLCOUNT; nCol++)
{
- sc::CellNoteStoreType& maCellNotes = pDoc->GetColNotes(nCol, nTab);
- for (SCROW nRow=0; nRow < MAXROWCOUNT; nRow++) // TODO : notes suboptimal
+ if ( pDoc->HasColNotes(nCol, nTab) )
{
- ScPostIt* pNote = maCellNotes.get<ScPostIt*>(nRow);
- if (pNote)
- InsertContent(SC_CONTENT_NOTE, lcl_NoteString( *pNote ));
+ sc::CellNoteStoreType& maCellNotes = pDoc->GetColNotes(nCol, nTab);
+ for (SCROW nRow=0; nRow < MAXROWCOUNT; nRow++) // TODO : notes suboptimal ?
+ {
+ sc::CellNoteStoreType::position_type aPos = maCellNotes.position(nRow);
+ sc::CellNoteStoreType::iterator it = aPos.first;
+ if (it->type == sc::element_type_cellnote)
+ {
+ ScPostIt* pNote = maCellNotes.get<ScPostIt*>(nRow);
+ if (pNote)
+ InsertContent(SC_CONTENT_NOTE, lcl_NoteString( *pNote ));
+ }
+ }
}
}
}
@@ -891,18 +899,25 @@ ScAddress ScContentTree::GetNotePos( sal_uLong nIndex )
{
for (SCCOL nCol=0; nCol<MAXCOLCOUNT; nCol++)
{
- sc::CellNoteStoreType& maCellNotes = pDoc->GetColNotes(nCol, nTab);
-
- for (SCROW nRow=0; nRow < MAXROWCOUNT; nRow++) // TODO : notes suboptimal
+ if ( pDoc->HasColNotes(nCol, nTab) )
+ {
+ sc::CellNoteStoreType& maCellNotes = pDoc->GetColNotes(nCol, nTab);
+ for (SCROW nRow=0; nRow < MAXROWCOUNT; nRow++) // TODO : notes suboptimal ?
{
- ScPostIt* pNote = maCellNotes.get<ScPostIt*>(nRow);
- if (pNote)
+ sc::CellNoteStoreType::position_type aPos = maCellNotes.position(nRow);
+ sc::CellNoteStoreType::iterator it = aPos.first;
+ if (it->type == sc::element_type_cellnote)
{
- if (nFound == nIndex)
- return ScAddress(nCol, nRow, nTab);
- ++nFound;
+ ScPostIt* pNote = maCellNotes.get<ScPostIt*>(nRow);
+ if (pNote)
+ {
+ if (nFound == nIndex)
+ return ScAddress(nCol, nRow, nTab);
+ ++nFound;
+ }
}
}
+ }
}
}
@@ -929,22 +944,30 @@ sal_Bool ScContentTree::NoteStringsChanged()
{
for (SCCOL nCol=0; nCol<MAXCOLCOUNT; nCol++)
{
- sc::CellNoteStoreType& maCellNotes = pDoc->GetColNotes(nCol, nTab);
- for (SCROW nRow=0; nRow<MAXROWCOUNT; nRow++) // TODO : notes suboptimal
+ if ( pDoc->HasColNotes(nCol, nTab) )
{
- ScPostIt* pNote = maCellNotes.get<ScPostIt*>(nRow);
- if (pNote)
+ sc::CellNoteStoreType& maCellNotes = pDoc->GetColNotes(nCol, nTab);
+ for (SCROW nRow=0; nRow < MAXROWCOUNT; nRow++) // TODO : notes suboptimal ?
+ {
+ sc::CellNoteStoreType::position_type aPos = maCellNotes.position(nRow);
+ sc::CellNoteStoreType::iterator it = aPos.first;
+ if (it->type == sc::element_type_cellnote)
{
- if ( !pEntry )
- bEqual = false;
- else
+ ScPostIt* pNote = maCellNotes.get<ScPostIt*>(nRow);
+ if (pNote)
{
- if ( lcl_NoteString( *pNote ) != GetEntryText(pEntry) )
+ if ( !pEntry )
bEqual = false;
+ else
+ {
+ if ( lcl_NoteString( *pNote ) != GetEntryText(pEntry) )
+ bEqual = false;
- pEntry = NextSibling( pEntry );
+ pEntry = NextSibling( pEntry );
+ }
}
}
+ }
}
}
}
More information about the Libreoffice-commits
mailing list