diff options
author | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2011-05-18 15:55:20 +0200 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2011-05-18 15:55:20 +0200 |
commit | edd1216b163b7824c7a79ffa3e9d9f68b56d6754 (patch) | |
tree | e2f07d2892ba22c84f02285cbad635efa19ce7be /sc | |
parent | 52bd6de2d9ccc7eb6591e258989dccf9c86703fc (diff) |
rework ScPreview to work with unlimited number of sheets
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/ui/inc/preview.hxx | 6 | ||||
-rw-r--r-- | sc/source/ui/view/preview.cxx | 22 |
2 files changed, 21 insertions, 7 deletions
diff --git a/sc/source/ui/inc/preview.hxx b/sc/source/ui/inc/preview.hxx index 6988259526d0..1ea80fd92202 100644 --- a/sc/source/ui/inc/preview.hxx +++ b/sc/source/ui/inc/preview.hxx @@ -32,6 +32,8 @@ #include <vcl/window.hxx> #include "printfun.hxx" // ScPrintState +#include <vector> + class ScDocShell; class ScPreviewShell; class FmFormView; @@ -48,8 +50,8 @@ private: sal_Bool bValid; // folgende Werte gueltig SCTAB nTabCount; SCTAB nTabsTested; // fuer wieviele Tabellen ist nPages gueltig? - long nPages[MAXTABCOUNT]; - long nFirstAttr[MAXTABCOUNT]; + std::vector<long> nPages; + std::vector<long> nFirstAttr; SCTAB nTab; // Tabelle long nTabPage; // Seite von Tabelle long nTabStart; // erste Seite der Tabelle (wirklich) diff --git a/sc/source/ui/view/preview.cxx b/sc/source/ui/view/preview.cxx index a58eef8e2335..42d7f3098d10 100644 --- a/sc/source/ui/view/preview.cxx +++ b/sc/source/ui/view/preview.cxx @@ -82,7 +82,7 @@ #define SC_PREVIEW_SHADOWSIZE 2 -long lcl_GetDisplayStart( SCTAB nTab, ScDocument* pDoc, long* pPages ) +long lcl_GetDisplayStart( SCTAB nTab, ScDocument* pDoc, std::vector<long>& nPages ) { long nDisplayStart = 0; for (SCTAB i=0; i<nTab; i++) @@ -90,7 +90,7 @@ long lcl_GetDisplayStart( SCTAB nTab, ScDocument* pDoc, long* pPages ) if ( pDoc->NeedPageResetAfterTab(i) ) nDisplayStart = 0; else - nDisplayStart += pPages[i]; + nDisplayStart += nPages[i]; } return nDisplayStart; } @@ -102,6 +102,8 @@ ScPreview::ScPreview( Window* pParent, ScDocShell* pDocSh, ScPreviewShell* pView nZoom( 100 ), bValid( false ), nTabsTested( 0 ), + nPages(), + nFirstAttr(), nTab( 0 ), nTabStart( 0 ), nDisplayStart( 0 ), @@ -191,10 +193,10 @@ void ScPreview::TestLastPage() if (nTotalPages) { nPageNo = nTotalPages - 1; - nTab = nTabCount - 1; + nTab = static_cast<SCTAB>(nPages.size()) -1; while (nTab > 0 && !nPages[nTab]) // letzte nicht leere Tabelle --nTab; - DBG_ASSERT(nPages[nTab],"alle Tabellen leer?"); + DBG_ASSERT(0 < static_cast<SCTAB>(nPages.size()),"alle Tabellen leer?"); nTabPage = nPages[nTab] - 1; nTabStart = 0; for (sal_uInt16 i=0; i<nTab; i++) @@ -246,8 +248,16 @@ void ScPreview::CalcPages( SCTAB /*nToWhichTab*/ ) ScMarkData aMarkData; aMarkData.SelectTable( nCurTab, true ); + while (nStart > static_cast<SCTAB>(nPages.size())) + nPages.push_back(0); + while (nStart > static_cast<SCTAB>(nFirstAttr.size())) + nFirstAttr.push_back(0); for (SCTAB i=nStart; i<nAnz; i++) { + if ( i == static_cast<SCTAB>(nPages.size())) + nPages.push_back(0); + if ( i == static_cast<SCTAB>(nFirstAttr.size())) + nFirstAttr.push_back(0); if (!aOptions.GetAllSheets() && !aMarkData.GetTableSelect( i )) { nPages[i] = 0; nFirstAttr[i] = 0; @@ -309,7 +319,7 @@ void ScPreview::RecalcPages() // nur nPageNo geaendert if (!bDone) { long nPartPages = 0; - for (SCTAB i=0; i<nTabsTested; i++) + for (SCTAB i=0; i<nTabsTested && nTab < static_cast<SCTAB>(nPages.size()); i++) { long nThisStart = nPartPages; nPartPages += nPages[i]; @@ -807,6 +817,8 @@ void ScPreview::SetPageNo( long nPage ) long ScPreview::GetFirstPage(SCTAB nTabP) { + if (nTabP >= static_cast<SCTAB>(nPages.size()) ) + OSL_FAIL("nPages out ouf bounds, FIX IT"); SCTAB nDocTabCount = pDocShell->GetDocument()->GetTableCount(); if (nTabP >= nDocTabCount) nTabP = nDocTabCount-1; |