summaryrefslogtreecommitdiff
path: root/binfilter/bf_sc/source/ui/view/sc_viewdata.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'binfilter/bf_sc/source/ui/view/sc_viewdata.cxx')
-rw-r--r--binfilter/bf_sc/source/ui/view/sc_viewdata.cxx822
1 files changed, 822 insertions, 0 deletions
diff --git a/binfilter/bf_sc/source/ui/view/sc_viewdata.cxx b/binfilter/bf_sc/source/ui/view/sc_viewdata.cxx
new file mode 100644
index 000000000000..c9b8b95cd532
--- /dev/null
+++ b/binfilter/bf_sc/source/ui/view/sc_viewdata.cxx
@@ -0,0 +1,822 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifdef _MSC_VER
+#pragma hdrstop
+#endif
+
+// INCLUDE ---------------------------------------------------------------
+
+#include "scitems.hxx"
+
+#define ITEMID_FIELD EE_FEATURE_FIELD
+#include <bf_svx/editview.hxx>
+#include <bf_svx/outliner.hxx>
+#include <bf_svx/zoomitem.hxx>
+#include <bf_xmloff/xmluconv.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <legacysmgr/legacy_binfilters_smgr.hxx>
+
+#include "viewdata.hxx"
+#include "attrib.hxx"
+#include "docsh.hxx"
+#include "bf_sc.hrc"
+#include "editutil.hxx"
+#include "miscuno.hxx"
+#include "unonames.hxx"
+#include "tabcont.hxx"
+
+#include "ViewSettingsSequenceDefines.hxx"
+
+namespace binfilter {
+using namespace ::com::sun::star;
+
+// STATIC DATA -----------------------------------------------------------
+
+#define SC_GROWY_SMALL_EXTRA 100
+#define SC_GROWY_BIG_EXTRA 200
+
+#define TAG_TABBARWIDTH "tw:"
+
+static BOOL bMoveArea = FALSE; //! Member?
+USHORT nEditAdjust = SVX_ADJUST_LEFT; //! Member !!!
+
+//==================================================================
+
+/*N*/ ScViewDataTable::ScViewDataTable() :
+/*N*/ nCurX( 0 ),
+/*N*/ nCurY( 0 ),
+/*N*/ bOldCurValid( FALSE ),
+/*N*/ eHSplitMode( SC_SPLIT_NONE ),
+/*N*/ eVSplitMode( SC_SPLIT_NONE ),
+/*N*/ nHSplitPos( 0 ),
+/*N*/ nVSplitPos( 0 ),
+/*N*/ nFixPosX( 0 ),
+/*N*/ nFixPosY( 0 ),
+/*N*/ eWhichActive( SC_SPLIT_BOTTOMLEFT )
+/*N*/ {
+/*N*/ nPosX[0]=nPosX[1]=
+/*N*/ nPosY[0]=nPosY[1]=0;
+/*N*/ nTPosX[0]=nTPosX[1]=
+/*N*/ nTPosY[0]=nTPosY[1]=0;
+/*N*/ nMPosX[0]=nMPosX[1]=
+/*N*/ nMPosY[0]=nMPosY[1]=0;
+/*N*/ nPixPosX[0]=nPixPosX[1]=
+/*N*/ nPixPosY[0]=nPixPosY[1]=0;
+/*N*/ }
+
+
+/*N*/ ScViewDataTable::~ScViewDataTable()
+/*N*/ {
+/*N*/ }
+
+/*N*/ void ScViewDataTable::WriteUserDataSequence(uno::Sequence <beans::PropertyValue>& rSettings)
+/*N*/ {
+/*N*/ rSettings.realloc(SC_TABLE_VIEWSETTINGS_COUNT);
+/*N*/ beans::PropertyValue* pSettings = rSettings.getArray();
+/*N*/ if (pSettings)
+/*N*/ {
+/*N*/ pSettings[SC_CURSOR_X].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_CURSORPOSITIONX));
+/*N*/ pSettings[SC_CURSOR_X].Value <<= sal_Int32(nCurX);
+/*N*/ pSettings[SC_CURSOR_Y].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_CURSORPOSITIONY));
+/*N*/ pSettings[SC_CURSOR_Y].Value <<= sal_Int32(nCurY);
+/*N*/ pSettings[SC_HORIZONTAL_SPLIT_MODE].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_HORIZONTALSPLITMODE));
+/*N*/ pSettings[SC_HORIZONTAL_SPLIT_MODE].Value <<= sal_Int16(eHSplitMode);
+/*N*/ pSettings[SC_VERTICAL_SPLIT_MODE].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_VERTICALSPLITMODE));
+/*N*/ pSettings[SC_VERTICAL_SPLIT_MODE].Value <<= sal_Int16(eVSplitMode);
+/*N*/ pSettings[SC_HORIZONTAL_SPLIT_POSITION].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_HORIZONTALSPLITPOSITION));
+/*N*/ if (eHSplitMode == SC_SPLIT_FIX)
+/*N*/ pSettings[SC_HORIZONTAL_SPLIT_POSITION].Value <<= sal_Int32(nFixPosX);
+/*N*/ else
+/*N*/ pSettings[SC_HORIZONTAL_SPLIT_POSITION].Value <<= nHSplitPos;
+/*N*/ pSettings[SC_VERTICAL_SPLIT_POSITION].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_VERTICALSPLITPOSITION));
+/*N*/ if (eVSplitMode == SC_SPLIT_FIX)
+/*N*/ pSettings[SC_VERTICAL_SPLIT_POSITION].Value <<= sal_Int32(nFixPosY);
+/*N*/ else
+/*N*/ pSettings[SC_VERTICAL_SPLIT_POSITION].Value <<= nVSplitPos;
+/*N*/ pSettings[SC_ACTIVE_SPLIT_RANGE].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_ACTIVESPLITRANGE));
+/*N*/ pSettings[SC_ACTIVE_SPLIT_RANGE].Value <<= sal_Int16(eWhichActive);
+/*N*/ pSettings[SC_POSITION_LEFT].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_POSITIONLEFT));
+/*N*/ pSettings[SC_POSITION_LEFT].Value <<= sal_Int32(nPosX[SC_SPLIT_LEFT]);
+/*N*/ pSettings[SC_POSITION_RIGHT].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_POSITIONRIGHT));
+/*N*/ pSettings[SC_POSITION_RIGHT].Value <<= sal_Int32(nPosX[SC_SPLIT_RIGHT]);
+/*N*/ pSettings[SC_POSITION_TOP].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_POSITIONTOP));
+/*N*/ pSettings[SC_POSITION_TOP].Value <<= sal_Int32(nPosY[SC_SPLIT_TOP]);
+/*N*/ pSettings[SC_POSITION_BOTTOM].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_POSITIONBOTTOM));
+/*N*/ pSettings[SC_POSITION_BOTTOM].Value <<= sal_Int32(nPosY[SC_SPLIT_BOTTOM]);
+/*N*/ }
+/*N*/ }
+
+// #116578#
+void ScViewDataTable::ReadUserDataSequence(const uno::Sequence <beans::PropertyValue>& aSettings)
+{
+ sal_Int32 nCount(aSettings.getLength());
+ DBG_ASSERT(nCount == SC_TABLE_VIEWSETTINGS_COUNT, " wrong Table View Settings count");
+ sal_Int32 nTemp32(0);
+ sal_Int16 nTemp16(0);
+ sal_Int32 nTempPosV(0);
+ sal_Int32 nTempPosH(0);
+ for (sal_Int32 i = 0; i < nCount; i++)
+ {
+ ::rtl::OUString sName(aSettings[i].Name);
+ if (sName.compareToAscii(SC_CURSORPOSITIONX) == 0)
+ {
+ aSettings[i].Value >>= nTemp32;
+ nCurX = static_cast<sal_uInt16>(nTemp32);
+ }
+ else if (sName.compareToAscii(SC_CURSORPOSITIONY) == 0)
+ {
+ aSettings[i].Value >>= nTemp32;
+ nCurY = static_cast<sal_uInt16>(nTemp32);
+ }
+ else if (sName.compareToAscii(SC_HORIZONTALSPLITMODE) == 0)
+ {
+ aSettings[i].Value >>= nTemp16;
+ eHSplitMode = static_cast<ScSplitMode>(nTemp16);
+ }
+ else if (sName.compareToAscii(SC_VERTICALSPLITMODE) == 0)
+ {
+ aSettings[i].Value >>= nTemp16;
+ eVSplitMode = static_cast<ScSplitMode>(nTemp16);
+ }
+ else if (sName.compareToAscii(SC_HORIZONTALSPLITPOSITION) == 0)
+ {
+ aSettings[i].Value >>= nTempPosH;
+ }
+ else if (sName.compareToAscii(SC_VERTICALSPLITPOSITION) == 0)
+ {
+ aSettings[i].Value >>= nTempPosV;
+ }
+ else if (sName.compareToAscii(SC_ACTIVESPLITRANGE) == 0)
+ {
+ aSettings[i].Value >>= nTemp16;
+ eWhichActive = static_cast<ScSplitPos>(nTemp16);
+ }
+ else if (sName.compareToAscii(SC_POSITIONLEFT) == 0)
+ {
+ aSettings[i].Value >>= nTemp32;
+ nPosX[SC_SPLIT_LEFT] = static_cast<sal_uInt16>(nTemp32);
+ }
+ else if (sName.compareToAscii(SC_POSITIONRIGHT) == 0)
+ {
+ aSettings[i].Value >>= nTemp32;
+ nPosX[SC_SPLIT_RIGHT] = static_cast<sal_uInt16>(nTemp32);
+ }
+ else if (sName.compareToAscii(SC_POSITIONTOP) == 0)
+ {
+ aSettings[i].Value >>= nTemp32;
+ nPosY[SC_SPLIT_TOP] = static_cast<sal_uInt16>(nTemp32);
+ }
+ else if (sName.compareToAscii(SC_POSITIONBOTTOM) == 0)
+ {
+ aSettings[i].Value >>= nTemp32;
+ nPosY[SC_SPLIT_BOTTOM] = static_cast<sal_uInt16>(nTemp32);
+ }
+ }
+ if (eHSplitMode == SC_SPLIT_FIX)
+ nFixPosX = static_cast<sal_uInt16>(nTempPosH);
+ else
+ nHSplitPos = nTempPosH;
+ if (eVSplitMode == SC_SPLIT_FIX)
+ nFixPosY = static_cast<sal_uInt16>(nTempPosV);
+ else
+ nVSplitPos = nTempPosV;
+}
+
+//==================================================================
+
+/*N*/ ScViewData::ScViewData( ScDocShell* pDocSh )
+/*N*/ : pDocShell ( pDocSh ),
+// pViewShell ( pViewSh ),
+/*N*/ pDoc ( NULL ),
+// pView ( pViewSh ),
+/*N*/ pOptions ( new ScViewOptions ),
+/*N*/ nTabNo ( 0 ),
+/*N*/ nRefTabNo ( 0 ),
+/*N*/ aZoomX ( 1,1 ),
+/*N*/ aZoomY ( 1,1 ),
+/*N*/ aPageZoomX ( 3,5 ), // Page-Default: 60%
+/*N*/ aPageZoomY ( 3,5 ),
+/*N*/ aLogicMode ( MAP_100TH_MM ),
+/*N*/ bIsRefMode ( FALSE ),
+/*N*/ eRefType ( SC_REFTYPE_NONE ),
+/*N*/ nFillMode ( SC_FILL_NONE ),
+/*N*/ bDelMarkValid( FALSE ),
+/*N*/ bActive ( TRUE ), //! wie initialisieren?
+/*N*/ bPagebreak ( FALSE ),
+ nTabBarWidth( 0 ), // #116578#
+/*N*/ pSpellingView ( NULL )
+/*N*/ {
+/*N*/ SetGridMode ( TRUE );
+/*N*/ SetSyntaxMode ( FALSE );
+/*N*/ SetHeaderMode ( TRUE );
+/*N*/ SetTabMode ( TRUE );
+/*N*/ SetVScrollMode ( TRUE );
+/*N*/ SetHScrollMode ( TRUE );
+/*N*/ SetOutlineMode ( TRUE );
+/*N*/
+/*N*/ aScrSize = Size( (long) ( STD_COL_WIDTH * PIXEL_PER_TWIPS * OLE_STD_CELLS_X ),
+/*N*/ (long) ( ScGlobal::nStdRowHeight * PIXEL_PER_TWIPS * OLE_STD_CELLS_Y ) );
+/*N*/ pTabData[0] = new ScViewDataTable;
+/*N*/ USHORT i;
+/*N*/ for (i=1; i<=MAXTAB; i++) pTabData[i] = NULL;
+/*N*/ pThisTab = pTabData[nTabNo];
+/*N*/ for (i=0; i<4; i++)
+/*N*/ {
+/*N*/ pEditView[i] = NULL;
+/*N*/ bEditActive[i] = FALSE;
+/*N*/ }
+/*N*/
+/*N*/ nEditEndCol = nEditCol = nEditEndRow = nEditRow = 0;
+/*N*/ nTabStartCol = SC_TABSTART_NONE;
+/*N*/
+/*N*/ if (pDocShell)
+/*N*/ {
+/*N*/ pDoc = pDocShell->GetDocument();
+/*N*/ *pOptions = pDoc->GetViewOptions();
+/*N*/ }
+/*N*/
+/*N*/ // keine ausgeblendete Tabelle anzeigen:
+/*N*/ if (pDoc && !pDoc->IsVisible(nTabNo))
+/*N*/ {
+/*?*/ while ( !pDoc->IsVisible(nTabNo) && pDoc->HasTable(nTabNo+1) )
+/*?*/ ++nTabNo;
+/*?*/
+/*?*/ pTabData[nTabNo] = new ScViewDataTable;
+/*?*/ pThisTab = pTabData[nTabNo];
+/*N*/ }
+/*N*/
+/*N*/ CalcPPT();
+/*N*/ }
+
+
+
+
+
+/*N*/ ScDocument* ScViewData::GetDocument() const
+/*N*/ {
+/*N*/ if (pDoc)
+/*N*/ return pDoc;
+/*N*/ else if (pDocShell)
+/*?*/ return pDocShell->GetDocument();
+/*N*/
+/*N*/ DBG_ERROR("kein Document an ViewData");
+/*N*/ return NULL;
+/*N*/ }
+
+/*N*/ ScViewData::~ScViewData()
+/*N*/ {
+/*N*/ for (USHORT i=0; i<=MAXTAB; i++)
+/*N*/ if (pTabData[i])
+/*N*/ delete pTabData[i];
+/*N*/
+/*N*/ KillEditView();
+/*N*/ delete pOptions;
+/*N*/ }
+
+// #116578#
+void ScViewData::SetPagebreakMode( BOOL bSet )
+{
+ bPagebreak = bSet;
+
+ CalcPPT();
+ RecalcPixPos();
+ aScenButSize = Size(0,0);
+ aLogicMode.SetScaleX( GetZoomX() );
+ aLogicMode.SetScaleY( GetZoomY() );
+}
+
+/*N*/ void ScViewData::KillEditView()
+/*N*/ {
+/*N*/ for (USHORT i=0; i<4; i++)
+/*N*/ if (pEditView[i])
+/*N*/ {
+/*?*/ if (bEditActive[i])
+/*?*/ pEditView[i]->GetEditEngine()->RemoveView(pEditView[i]);
+/*?*/ delete pEditView[i];
+/*?*/ pEditView[i] = NULL;
+/*N*/ }
+/*N*/ }
+
+
+// #116578#
+void ScViewData::SetTabNo( USHORT nNewTab )
+{
+ if (nNewTab>MAXTAB)
+ {
+ DBG_ERROR("falsche Tabellennummer");
+ return;
+ }
+
+ nTabNo = nNewTab;
+ if (!pTabData[nTabNo])
+ pTabData[nTabNo] = new ScViewDataTable;
+ pThisTab = pTabData[nTabNo];
+
+ CalcPPT(); // for common column width correction
+ RecalcPixPos(); //! nicht immer noetig!
+}
+
+
+
+
+/*N*/ void ScViewData::RecalcPixPos() // nach Zoom-Aenderungen
+/*N*/ {
+/*N*/ USHORT i;
+/*N*/
+/*N*/ for (USHORT eWhich=0; eWhich<2; eWhich++)
+/*N*/ {
+/*N*/ long nPixPosX = 0;
+/*N*/ USHORT nPosX = pThisTab->nPosX[eWhich];
+/*N*/ for (i=0; i<nPosX; i++)
+/*?*/ nPixPosX -= ToPixel(pDoc->GetColWidth(i,nTabNo), nPPTX);
+/*N*/ pThisTab->nPixPosX[eWhich] = nPixPosX;
+/*N*/
+/*N*/ long nPixPosY = 0;
+/*N*/ USHORT nPosY = pThisTab->nPosY[eWhich];
+/*N*/ for (i=0; i<nPosY; i++)
+/*?*/ nPixPosY -= ToPixel(pDoc->FastGetRowHeight(i,nTabNo), nPPTY);
+/*N*/ pThisTab->nPixPosY[eWhich] = nPixPosY;
+/*N*/ }
+/*N*/ }
+
+/*N*/ void ScViewData::CalcPPT()
+/*N*/ {
+/*N*/ nPPTX = ScGlobal::nScreenPPTX * (double) GetZoomX();
+/*N*/ if (pDocShell)
+/*N*/ nPPTX = nPPTX / pDocShell->GetOutputFactor(); // Faktor ist Drucker zu Bildschirm
+/*N*/ nPPTY = ScGlobal::nScreenPPTY * (double) GetZoomY();
+/*N*/
+/*N*/ // #83616# if detective objects are present,
+/*N*/ // try to adjust horizontal scale so the most common column width has minimal rounding errors,
+/*N*/ // to avoid differences between cell and drawing layer output
+/*N*/
+/*N*/ if ( pDoc && pDoc->HasDetectiveObjects(nTabNo) )
+/*N*/ {
+/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 USHORT nEndCol = 0;
+/*N*/ }
+/*N*/ }
+
+//------------------------------------------------------------------
+
+#define SC_OLD_TABSEP '/'
+#define SC_NEW_TABSEP '+'
+
+// #116578# WriteUserData must not access pView
+/*N*/ void ScViewData::WriteUserData(String& rData)
+/*N*/ {
+/*N*/ // nZoom (bis 364v) oder nZoom/nPageZoom/bPageMode (ab 364w)
+/*N*/ // nTab
+/*N*/ // Tab-ControlBreite
+/*N*/ // pro Tabelle:
+/*N*/ // CursorX/CursorY/HSplitMode/VSplitMode/HSplitPos/VSplitPos/SplitActive/
+/*N*/ // PosX[links]/PosX[rechts]/PosY[oben]/PosY[unten]
+/*N*/ // wenn Zeilen groesser 8192, "+" statt "/"
+/*N*/
+/*N*/ USHORT nZoom = (USHORT)((aZoomY.GetNumerator() * 100) / aZoomY.GetDenominator());
+/*N*/ rData = String::CreateFromInt32( nZoom );
+/*N*/ rData += '/';
+/*N*/ nZoom = (USHORT)((aPageZoomY.GetNumerator() * 100) / aPageZoomY.GetDenominator());
+/*N*/ rData += String::CreateFromInt32( nZoom );
+/*N*/ rData += '/';
+/*N*/ if (bPagebreak)
+/*N*/ rData += '1';
+/*N*/ else
+/*N*/ rData += '0';
+/*N*/
+/*N*/ rData += ';';
+/*N*/ rData += String::CreateFromInt32( nTabNo );
+/*N*/ rData += ';';
+/*N*/ rData.AppendAscii(RTL_CONSTASCII_STRINGPARAM( TAG_TABBARWIDTH ));
+/*N*/ rData += String::CreateFromInt32( nTabBarWidth ); // #116578#
+/*N*/
+/*N*/ USHORT nTabCount = pDoc->GetTableCount();
+/*N*/ for (USHORT i=0; i<nTabCount; i++)
+/*N*/ {
+/*N*/ rData += ';'; // Numerierung darf auf keinen Fall durcheinanderkommen
+/*N*/ if (pTabData[i])
+/*N*/ {
+/*N*/ sal_Unicode cTabSep = SC_OLD_TABSEP; // wie 3.1
+/*N*/ if ( pTabData[i]->nCurY > MAXROW_30 ||
+/*N*/ pTabData[i]->nPosY[0] > MAXROW_30 || pTabData[i]->nPosY[1] > MAXROW_30 ||
+/*N*/ ( pTabData[i]->eVSplitMode == SC_SPLIT_FIX &&
+/*N*/ pTabData[i]->nFixPosY > MAXROW_30 ) )
+/*N*/ {
+/*N*/ cTabSep = SC_NEW_TABSEP; // um eine 3.1-Version nicht umzubringen
+/*N*/ }
+/*N*/
+/*N*/
+/*N*/ rData += String::CreateFromInt32( pTabData[i]->nCurX );
+/*N*/ rData += cTabSep;
+/*N*/ rData += String::CreateFromInt32( pTabData[i]->nCurY );
+/*N*/ rData += cTabSep;
+/*N*/ rData += String::CreateFromInt32( pTabData[i]->eHSplitMode );
+/*N*/ rData += cTabSep;
+/*N*/ rData += String::CreateFromInt32( pTabData[i]->eVSplitMode );
+/*N*/ rData += cTabSep;
+/*N*/ if ( pTabData[i]->eHSplitMode == SC_SPLIT_FIX )
+/*N*/ rData += String::CreateFromInt32( pTabData[i]->nFixPosX );
+/*N*/ else
+/*N*/ rData += String::CreateFromInt32( pTabData[i]->nHSplitPos );
+/*N*/ rData += cTabSep;
+/*N*/ if ( pTabData[i]->eVSplitMode == SC_SPLIT_FIX )
+/*N*/ rData += String::CreateFromInt32( pTabData[i]->nFixPosY );
+/*N*/ else
+/*N*/ rData += String::CreateFromInt32( pTabData[i]->nVSplitPos );
+/*N*/ rData += cTabSep;
+/*N*/ rData += String::CreateFromInt32( pTabData[i]->eWhichActive );
+/*N*/ rData += cTabSep;
+/*N*/ rData += String::CreateFromInt32( pTabData[i]->nPosX[0] );
+/*N*/ rData += cTabSep;
+/*N*/ rData += String::CreateFromInt32( pTabData[i]->nPosX[1] );
+/*N*/ rData += cTabSep;
+/*N*/ rData += String::CreateFromInt32( pTabData[i]->nPosY[0] );
+/*N*/ rData += cTabSep;
+/*N*/ rData += String::CreateFromInt32( pTabData[i]->nPosY[1] );
+/*N*/ }
+/*N*/ }
+/*N*/ }
+
+// #116578# ReadUserData is needed, must not access pView
+void ScViewData::ReadUserData(const String& rData)
+{
+ if (!rData.Len()) // Leerer String kommt bei "neu Laden"
+ return; // dann auch ohne Assertion beenden
+
+ xub_StrLen nCount = rData.GetTokenCount(';');
+ if ( nCount <= 2 )
+ {
+ // #45208# beim Reload in der Seitenansicht sind evtl. die Preview-UserData
+ // stehengelassen worden. Den Zoom von der Preview will man hier nicht...
+ DBG_ERROR("ReadUserData: das sind nicht meine Daten");
+ return;
+ }
+
+ String aTabOpt;
+ xub_StrLen nTagLen = String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM(TAG_TABBARWIDTH)).Len();
+
+ //-------------------
+ // nicht pro Tabelle:
+ //-------------------
+ USHORT nTabStart = 2;
+
+ String aZoomStr = rData.GetToken(0); // Zoom/PageZoom/Modus
+ USHORT nNormZoom = aZoomStr.GetToken(0,'/').ToInt32();
+ if ( nNormZoom >= MINZOOM && nNormZoom <= MAXZOOM )
+ aZoomX = aZoomY = Fraction( nNormZoom, 100 ); // "normaler" Zoom (immer)
+ USHORT nPageZoom = aZoomStr.GetToken(1,'/').ToInt32();
+ if ( nPageZoom >= MINZOOM && nPageZoom <= MAXZOOM )
+ aPageZoomX = aPageZoomY = Fraction( nPageZoom, 100 ); // Pagebreak-Zoom, wenn gesetzt
+ sal_Unicode cMode = aZoomStr.GetToken(2,'/').GetChar(0); // 0 oder "0"/"1"
+ SetPagebreakMode( cMode == '1' );
+ // SetPagebreakMode muss immer gerufen werden wegen CalcPPT / RecalcPixPos()
+
+ //
+ // Tabelle kann ungueltig geworden sein (z.B. letzte Version):
+ //
+ USHORT nNewTab = rData.GetToken(1).ToInt32();
+ if (pDoc->HasTable( nNewTab ))
+ SetTabNo(nNewTab);
+
+ //
+ // wenn vorhanden, TabBar-Breite holen:
+ //
+ aTabOpt = rData.GetToken(2);
+
+ if ( nTagLen && aTabOpt.Copy(0,nTagLen).EqualsAscii(TAG_TABBARWIDTH) )
+ {
+ // #116578# store tab bar width locally
+ nTabBarWidth = aTabOpt.Copy(nTagLen).ToInt32();
+ nTabStart = 3;
+ }
+
+ //-------------
+ // pro Tabelle:
+ //-------------
+ USHORT nPos = 0;
+ while ( nCount > nPos+nTabStart )
+ {
+ aTabOpt = rData.GetToken(nPos+nTabStart);
+ if (!pTabData[nPos])
+ pTabData[nPos] = new ScViewDataTable;
+
+ sal_Unicode cTabSep = 0;
+ if (aTabOpt.GetTokenCount(SC_OLD_TABSEP) >= 11)
+ cTabSep = SC_OLD_TABSEP;
+#ifndef SC_LIMIT_ROWS
+ else if (aTabOpt.GetTokenCount(SC_NEW_TABSEP) >= 11)
+ cTabSep = SC_NEW_TABSEP;
+ // '+' ist nur erlaubt, wenn wir mit Zeilen > 8192 umgehen koennen
+#endif
+
+ if (cTabSep)
+ {
+ pTabData[nPos]->nCurX = aTabOpt.GetToken(0,cTabSep).ToInt32();
+ pTabData[nPos]->nCurY = aTabOpt.GetToken(1,cTabSep).ToInt32();
+ pTabData[nPos]->eHSplitMode = (ScSplitMode) aTabOpt.GetToken(2,cTabSep).ToInt32();
+ pTabData[nPos]->eVSplitMode = (ScSplitMode) aTabOpt.GetToken(3,cTabSep).ToInt32();
+
+ if ( pTabData[nPos]->eHSplitMode == SC_SPLIT_FIX )
+ {
+ pTabData[nPos]->nFixPosX = aTabOpt.GetToken(4,cTabSep).ToInt32();
+// UpdateFixX(nPos);
+ }
+ else
+ pTabData[nPos]->nHSplitPos = aTabOpt.GetToken(4,cTabSep).ToInt32();
+
+ if ( pTabData[nPos]->eVSplitMode == SC_SPLIT_FIX )
+ {
+ pTabData[nPos]->nFixPosY = aTabOpt.GetToken(5,cTabSep).ToInt32();
+// UpdateFixY(nPos);
+ }
+ else
+ pTabData[nPos]->nVSplitPos = aTabOpt.GetToken(5,cTabSep).ToInt32();
+
+ pTabData[nPos]->eWhichActive = (ScSplitPos) aTabOpt.GetToken(6,cTabSep).ToInt32();
+ pTabData[nPos]->nPosX[0] = aTabOpt.GetToken(7,cTabSep).ToInt32();
+ pTabData[nPos]->nPosX[1] = aTabOpt.GetToken(8,cTabSep).ToInt32();
+ pTabData[nPos]->nPosY[0] = aTabOpt.GetToken(9,cTabSep).ToInt32();
+ pTabData[nPos]->nPosY[1] = aTabOpt.GetToken(10,cTabSep).ToInt32();
+
+ // Test, ob der aktive Teil laut SplitMode ueberhaupt existiert
+ // (Bug #44516#)
+ ScSplitPos eTest = pTabData[nPos]->eWhichActive;
+ if ( ( WhichH( eTest ) == SC_SPLIT_RIGHT &&
+ pTabData[nPos]->eHSplitMode == SC_SPLIT_NONE ) ||
+ ( WhichV( eTest ) == SC_SPLIT_TOP &&
+ pTabData[nPos]->eVSplitMode == SC_SPLIT_NONE ) )
+ {
+ // dann wieder auf Default (unten links)
+ pTabData[nPos]->eWhichActive = SC_SPLIT_BOTTOMLEFT;
+ DBG_ERROR("SplitPos musste korrigiert werden");
+ }
+ }
+ ++nPos;
+ }
+
+ RecalcPixPos();
+}
+
+
+
+// #116578# WriteUserDataSequence must not access pView
+/*N*/ void ScViewData::WriteUserDataSequence(uno::Sequence <beans::PropertyValue>& rSettings)
+/*N*/ {
+/*N*/ rSettings.realloc(SC_VIEWSETTINGS_COUNT);
+/*N*/ // + 1, because we have to put the view id in the sequence
+/*N*/ beans::PropertyValue* pSettings = rSettings.getArray();
+/*N*/ if (pSettings)
+/*N*/ {
+ sal_uInt16 nViewID = 1; // #116578# always ScTabViewShell (ID from ScDLL::Init)
+/*N*/ pSettings[SC_VIEW_ID].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_VIEWID));
+/*N*/ ::rtl::OUStringBuffer sBuffer(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_VIEW)));
+/*N*/ SvXMLUnitConverter::convertNumber(sBuffer, static_cast<sal_Int32>(nViewID));
+/*N*/ pSettings[SC_VIEW_ID].Value <<= sBuffer.makeStringAndClear();
+/*N*/
+/*N*/ USHORT nTabCount (pDoc->GetTableCount());
+/*N*/ uno::Reference<lang::XMultiServiceFactory> xServiceFactory =
+/*N*/ ::legacy_binfilters::getLegacyProcessServiceFactory();
+/*N*/ DBG_ASSERT( xServiceFactory.is(), "got no service manager" );
+/*N*/ if( xServiceFactory.is() )
+/*N*/ {
+/*N*/ ::rtl::OUString sName(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.document.NamedPropertyValues"));
+/*N*/ uno::Reference<container::XNameContainer> xNameContainer = uno::Reference<container::XNameContainer>(xServiceFactory->createInstance(sName), uno::UNO_QUERY);
+/*N*/ if (xNameContainer.is())
+/*N*/ {
+/*N*/ for (USHORT nTab=0; nTab<nTabCount; nTab++)
+/*N*/ {
+/*N*/ if (pTabData[nTab])
+/*N*/ {
+/*N*/ uno::Sequence <beans::PropertyValue> aTableViewSettings;
+/*N*/ pTabData[nTab]->WriteUserDataSequence(aTableViewSettings);
+/*N*/ String sName;
+/*N*/ GetDocument()->GetName( nTab, sName );
+/*N*/ ::rtl::OUString sOUName(sName);
+/*N*/ uno::Any aAny;
+/*N*/ aAny <<= aTableViewSettings;
+/*N*/ try
+/*N*/ {
+/*N*/ xNameContainer->insertByName(sName, aAny);
+/*N*/ }
+/*N*/ //#101739#; two tables with the same name are possible
+/*N*/ catch ( container::ElementExistException& )
+/*N*/ {
+/*N*/ DBG_ERRORFILE("seems there are two tables with the same name");
+/*N*/ }
+/*N*/ catch ( uno::RuntimeException& )
+/*N*/ {
+/*N*/ DBG_ERRORFILE("something went wrong");
+/*N*/ }
+/*N*/ }
+/*N*/ }
+/*N*/ pSettings[SC_TABLE_VIEWSETTINGS].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_TABLES));
+/*N*/ pSettings[SC_TABLE_VIEWSETTINGS].Value <<= xNameContainer;
+/*N*/ }
+/*N*/ }
+/*N*/
+/*N*/ String sName;
+/*N*/ GetDocument()->GetName( nTabNo, sName );
+/*N*/ ::rtl::OUString sOUName(sName);
+/*N*/ pSettings[SC_ACTIVE_TABLE].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_ACTIVETABLE));
+/*N*/ pSettings[SC_ACTIVE_TABLE].Value <<= sOUName;
+/*N*/ pSettings[SC_HORIZONTAL_SCROLL_BAR_WIDTH].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_HORIZONTALSCROLLBARWIDTH));
+ pSettings[SC_HORIZONTAL_SCROLL_BAR_WIDTH].Value <<= sal_Int32( nTabBarWidth ); // #116578# use stored value
+/*N*/ sal_Int32 nZoomValue ((aZoomY.GetNumerator() * 100) / aZoomY.GetDenominator());
+/*N*/ sal_Int32 nPageZoomValue ((aPageZoomY.GetNumerator() * 100) / aPageZoomY.GetDenominator());
+/*N*/ pSettings[SC_ZOOM_TYPE].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_ZOOMTYPE));
+ pSettings[SC_ZOOM_TYPE].Value <<= sal_Int16( SVX_ZOOM_PERCENT ); // #116578# always direct value for old files
+/*N*/ pSettings[SC_ZOOM_VALUE].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_ZOOMVALUE));
+/*N*/ pSettings[SC_ZOOM_VALUE].Value <<= nZoomValue;
+/*N*/ pSettings[SC_PAGE_VIEW_ZOOM_VALUE].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_PAGEVIEWZOOMVALUE));
+/*N*/ pSettings[SC_PAGE_VIEW_ZOOM_VALUE].Value <<= nPageZoomValue;
+/*N*/ pSettings[SC_PAGE_BREAK_PREVIEW].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_SHOWPAGEBREAKPREVIEW));
+/*N*/ ScUnoHelpFunctions::SetBoolInAny( pSettings[SC_PAGE_BREAK_PREVIEW].Value, bPagebreak);
+/*N*/
+/*N*/ if (pOptions)
+/*N*/ {
+/*N*/ pSettings[SC_SHOWZERO].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_SHOWZERO));
+/*N*/ ScUnoHelpFunctions::SetBoolInAny( pSettings[SC_SHOWZERO].Value, pOptions->GetOption( VOPT_NULLVALS ) );
+/*N*/ pSettings[SC_SHOWNOTES].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_SHOWNOTES));
+/*N*/ ScUnoHelpFunctions::SetBoolInAny( pSettings[SC_SHOWNOTES].Value, pOptions->GetOption( VOPT_NOTES ) );
+/*N*/ pSettings[SC_SHOWGRID].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_SHOWGRID));
+/*N*/ ScUnoHelpFunctions::SetBoolInAny( pSettings[SC_SHOWGRID].Value, pOptions->GetOption( VOPT_GRID ) );
+/*N*/ pSettings[SC_GRIDCOLOR].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_GRIDCOLOR));
+/*N*/ String aColorName;
+/*N*/ Color aColor = pOptions->GetGridColor(&aColorName);
+/*N*/ pSettings[SC_GRIDCOLOR].Value <<= static_cast<sal_Int64>(aColor.GetColor());
+/*N*/ pSettings[SC_SHOWPAGEBR].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_SHOWPAGEBR));
+/*N*/ ScUnoHelpFunctions::SetBoolInAny( pSettings[SC_SHOWPAGEBR].Value, pOptions->GetOption( VOPT_PAGEBREAKS ) );
+/*N*/ pSettings[SC_COLROWHDR].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_COLROWHDR));
+/*N*/ ScUnoHelpFunctions::SetBoolInAny( pSettings[SC_COLROWHDR].Value, pOptions->GetOption( VOPT_HEADER ) );
+/*N*/ pSettings[SC_SHEETTABS].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_SHEETTABS));
+/*N*/ ScUnoHelpFunctions::SetBoolInAny( pSettings[SC_SHEETTABS].Value, pOptions->GetOption( VOPT_TABCONTROLS ) );
+/*N*/ pSettings[SC_OUTLSYMB].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_OUTLSYMB));
+/*N*/ ScUnoHelpFunctions::SetBoolInAny( pSettings[SC_OUTLSYMB].Value, pOptions->GetOption( VOPT_OUTLINER ) );
+/*N*/
+/*N*/ const ScGridOptions& aGridOpt = pOptions->GetGridOptions();
+/*N*/ pSettings[SC_SNAPTORASTER].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_SNAPTORASTER));
+/*N*/ ScUnoHelpFunctions::SetBoolInAny( pSettings[SC_SNAPTORASTER].Value, aGridOpt.GetUseGridSnap() );
+/*N*/ pSettings[SC_RASTERVIS].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_RASTERVIS));
+/*N*/ ScUnoHelpFunctions::SetBoolInAny( pSettings[SC_RASTERVIS].Value, aGridOpt.GetGridVisible() );
+/*N*/ pSettings[SC_RASTERRESX].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_RASTERRESX));
+/*N*/ pSettings[SC_RASTERRESX].Value <<= static_cast<sal_Int32> ( aGridOpt.GetFldDrawX() );
+/*N*/ pSettings[SC_RASTERRESY].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_RASTERRESY));
+/*N*/ pSettings[SC_RASTERRESY].Value <<= static_cast<sal_Int32> ( aGridOpt.GetFldDrawY() );
+/*N*/ pSettings[SC_RASTERSUBX].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_RASTERSUBX));
+/*N*/ pSettings[SC_RASTERSUBX].Value <<= static_cast<sal_Int32> ( aGridOpt.GetFldDivisionX() );
+/*N*/ pSettings[SC_RASTERSUBY].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_RASTERSUBY));
+/*N*/ pSettings[SC_RASTERSUBY].Value <<= static_cast<sal_Int32> ( aGridOpt.GetFldDivisionY() );
+/*N*/ pSettings[SC_RASTERSYNC].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_RASTERSYNC));
+/*N*/ ScUnoHelpFunctions::SetBoolInAny( pSettings[SC_RASTERSYNC].Value, aGridOpt.GetSynchronize() );
+/*N*/ }
+/*N*/ }
+/*N*/ }
+
+// #116578# ReadUserDataSequence is needed, must not access pView
+void ScViewData::ReadUserDataSequence(const uno::Sequence <beans::PropertyValue>& rSettings)
+{
+ sal_Int32 nCount(rSettings.getLength());
+ sal_Int32 nTemp32(0);
+ sal_Int16 nTemp16(0);
+ sal_Bool bPageMode(sal_False);
+ for (sal_Int32 i = 0; i < nCount; i++)
+ {
+ // SC_VIEWID has to parse and use by mba
+ ::rtl::OUString sName(rSettings[i].Name);
+ if (sName.compareToAscii(SC_TABLES) == 0)
+ {
+ uno::Reference<container::XNameContainer> xNameContainer;
+ if ((rSettings[i].Value >>= xNameContainer) && xNameContainer->hasElements())
+ {
+ uno::Sequence< ::rtl::OUString > aNames(xNameContainer->getElementNames());
+ for (sal_Int32 i = 0; i < aNames.getLength(); i++)
+ {
+ String sTabName(aNames[i]);
+ sal_uInt16 nTab(0);
+ if (GetDocument()->GetTable(sTabName, nTab))
+ {
+ uno::Any aAny = xNameContainer->getByName(aNames[i]);
+ uno::Sequence<beans::PropertyValue> aTabSettings;
+ if (aAny >>= aTabSettings)
+ {
+ pTabData[nTab] = new ScViewDataTable;
+ pTabData[nTab]->ReadUserDataSequence(aTabSettings);
+ }
+ }
+ }
+ }
+ }
+ else if (sName.compareToAscii(SC_ACTIVETABLE) == 0)
+ {
+ ::rtl::OUString sName;
+ if(rSettings[i].Value >>= sName)
+ {
+ String sTabName(sName);
+ sal_uInt16 nTab(0);
+ if (GetDocument()->GetTable(sTabName, nTab))
+ nTabNo = nTab;
+ }
+ }
+ else if (sName.compareToAscii(SC_HORIZONTALSCROLLBARWIDTH) == 0)
+ {
+ if (rSettings[i].Value >>= nTemp32)
+ nTabBarWidth = nTemp32; // #116578# store locally
+ }
+ else if (sName.compareToAscii(SC_ZOOMTYPE) == 0)
+ {
+ // #116578# zoom type is ignored for conversion to binary
+ }
+ else if (sName.compareToAscii(SC_ZOOMVALUE) == 0)
+ {
+ if (rSettings[i].Value >>= nTemp32)
+ {
+ Fraction aZoom(nTemp32, 100);
+ aZoomX = aZoomY = aZoom;
+ }
+ }
+ else if (sName.compareToAscii(SC_PAGEVIEWZOOMVALUE) == 0)
+ {
+ if (rSettings[i].Value >>= nTemp32)
+ {
+ Fraction aZoom(nTemp32, 100);
+ aPageZoomX = aPageZoomY = aZoom;
+ }
+ }
+ else if (sName.compareToAscii(SC_SHOWPAGEBREAKPREVIEW) == 0)
+ bPageMode = ScUnoHelpFunctions::GetBoolFromAny( rSettings[i].Value );
+ else if ( sName.compareToAscii( SC_UNO_SHOWZERO ) == 0 )
+ pOptions->SetOption(VOPT_NULLVALS, ScUnoHelpFunctions::GetBoolFromAny( rSettings[i].Value ) );
+ else if ( sName.compareToAscii( SC_UNO_SHOWNOTES ) == 0 )
+ pOptions->SetOption(VOPT_NOTES, ScUnoHelpFunctions::GetBoolFromAny( rSettings[i].Value ) );
+ else if ( sName.compareToAscii( SC_UNO_SHOWGRID ) == 0 )
+ pOptions->SetOption(VOPT_GRID, ScUnoHelpFunctions::GetBoolFromAny( rSettings[i].Value ) );
+ else if ( sName.compareToAscii( SC_UNO_GRIDCOLOR ) == 0 )
+ {
+ sal_Int64 nColor;
+ if (rSettings[i].Value >>= nColor)
+ {
+ String aColorName;
+ Color aColor(static_cast<sal_uInt32>(nColor));
+ pOptions->SetGridColor(aColor, aColorName);
+ }
+ }
+ else if ( sName.compareToAscii( SC_UNO_SHOWPAGEBR ) == 0 )
+ pOptions->SetOption(VOPT_PAGEBREAKS, ScUnoHelpFunctions::GetBoolFromAny( rSettings[i].Value ) );
+ else if ( sName.compareToAscii( SC_UNO_COLROWHDR ) == 0 )
+ pOptions->SetOption(VOPT_HEADER, ScUnoHelpFunctions::GetBoolFromAny( rSettings[i].Value ) );
+ else if ( sName.compareToAscii( SC_UNO_SHEETTABS ) == 0 )
+ pOptions->SetOption(VOPT_TABCONTROLS, ScUnoHelpFunctions::GetBoolFromAny( rSettings[i].Value ) );
+ else if ( sName.compareToAscii( SC_UNO_OUTLSYMB ) == 0 )
+ pOptions->SetOption(VOPT_OUTLINER, ScUnoHelpFunctions::GetBoolFromAny( rSettings[i].Value ) );
+ else
+ {
+ ScGridOptions aGridOpt(pOptions->GetGridOptions());
+ if ( sName.compareToAscii( SC_UNO_SNAPTORASTER ) == 0 )
+ aGridOpt.SetUseGridSnap( ScUnoHelpFunctions::GetBoolFromAny( rSettings[i].Value ) );
+ else if ( sName.compareToAscii( SC_UNO_RASTERVIS ) == 0 )
+ aGridOpt.SetGridVisible( ScUnoHelpFunctions::GetBoolFromAny( rSettings[i].Value ) );
+ else if ( sName.compareToAscii( SC_UNO_RASTERRESX ) == 0 )
+ aGridOpt.SetFldDrawX( static_cast <sal_uInt32> ( ScUnoHelpFunctions::GetInt32FromAny( rSettings[i].Value ) ) );
+ else if ( sName.compareToAscii( SC_UNO_RASTERRESY ) == 0 )
+ aGridOpt.SetFldDrawY( static_cast <sal_uInt32> ( ScUnoHelpFunctions::GetInt32FromAny( rSettings[i].Value ) ) );
+ else if ( sName.compareToAscii( SC_UNO_RASTERSUBX ) == 0 )
+ aGridOpt.SetFldDivisionX( static_cast <sal_uInt32> ( ScUnoHelpFunctions::GetInt32FromAny( rSettings[i].Value ) ) );
+ else if ( sName.compareToAscii( SC_UNO_RASTERSUBY ) == 0 )
+ aGridOpt.SetFldDivisionY( static_cast <sal_uInt32> ( ScUnoHelpFunctions::GetInt32FromAny( rSettings[i].Value ) ) );
+ else if ( sName.compareToAscii( SC_UNO_RASTERSYNC ) == 0 )
+ aGridOpt.SetSynchronize( ScUnoHelpFunctions::GetBoolFromAny( rSettings[i].Value ) );
+ pOptions->SetGridOptions(aGridOpt);
+ }
+ }
+ if (nCount)
+ SetPagebreakMode( bPageMode );
+}
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */