summaryrefslogtreecommitdiff
path: root/binfilter/bf_sc/source/core/data/sc_documen8.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'binfilter/bf_sc/source/core/data/sc_documen8.cxx')
-rw-r--r--binfilter/bf_sc/source/core/data/sc_documen8.cxx648
1 files changed, 648 insertions, 0 deletions
diff --git a/binfilter/bf_sc/source/core/data/sc_documen8.cxx b/binfilter/bf_sc/source/core/data/sc_documen8.cxx
new file mode 100644
index 000000000000..918fea3fd13b
--- /dev/null
+++ b/binfilter/bf_sc/source/core/data/sc_documen8.cxx
@@ -0,0 +1,648 @@
+/* -*- 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 "scitems.hxx"
+#define ITEMID_FIELD EE_FEATURE_FIELD
+
+#include <bf_svx/frmdiritem.hxx>
+#include <bf_svx/langitem.hxx>
+#include <bf_svx/linkmgr.hxx>
+#include <bf_sfx2/printer.hxx>
+#include <bf_svtools/flagitem.hxx>
+#define _SVSTDARR_USHORTS
+#include <bf_svtools/zformat.hxx>
+#include <bf_sfx2/misccfg.hxx>
+#include <bf_sfx2/app.hxx>
+
+
+#include "poolhelp.hxx"
+#include "docpool.hxx"
+#include "stlpool.hxx"
+#include "docoptio.hxx"
+#include "viewopti.hxx"
+#include "rechead.hxx"
+#include "ddelink.hxx"
+#include "scmatrix.hxx"
+#include "arealink.hxx"
+#include "patattr.hxx"
+#include "editutil.hxx"
+#include "document.hxx"
+#include "refupdat.hxx"
+#include "scmod.hxx"
+#include "globstr.hrc"
+#include "bf_sc.hrc"
+namespace binfilter {
+
+#define GET_SCALEVALUE(set,id) ((const SfxUInt16Item&)(set.Get( id ))).GetValue()
+
+// states for online spelling in the visible range (0 is set initially)
+#define VSPL_START 0
+#define VSPL_DONE 1
+
+
+// STATIC DATA -----------------------------------------------------------
+
+
+
+//------------------------------------------------------------------------
+
+/*N*/ void ScDocument::ImplLoadDocOptions( SvStream& rStream )
+/*N*/ {
+/*N*/ USHORT d,m,y;
+/*N*/
+/*N*/ DBG_ASSERT( pDocOptions, "No DocOptions to load! :-(" );
+/*N*/
+/*N*/ pDocOptions->Load( rStream );
+/*N*/
+/*N*/ if ( pDocOptions->GetStdPrecision() > 20 ) //!!! ist 20 als Maximum konstant ???
+/*N*/ {
+/*?*/ DBG_ERROR( "Document options corrupted. Setting to defaults." );
+/*?*/ pDocOptions->ResetDocOptions();
+/*N*/ }
+/*N*/
+/*N*/ pDocOptions->GetDate( d,m,y );
+/*N*/ SvNumberFormatter* pFormatter = xPoolHelper->GetFormTable();
+/*N*/ pFormatter->ChangeNullDate( d,m,y );
+/*N*/ pFormatter->ChangeStandardPrec( pDocOptions->GetStdPrecision() );
+/*N*/ pFormatter->SetYear2000( pDocOptions->GetYear2000() );
+/*N*/ }
+
+//------------------------------------------------------------------------
+
+/*N*/ void ScDocument::ImplLoadViewOptions( SvStream& rStream )
+/*N*/ {
+/*N*/ DBG_ASSERT( pViewOptions, "No ViewOptions to load! :-(" );
+/*N*/ rStream >> *pViewOptions;
+/*N*/ }
+
+//------------------------------------------------------------------------
+
+/*N*/ void ScDocument::ImplSaveDocOptions( SvStream& rStream ) const
+/*N*/ {
+/*N*/ DBG_ASSERT( pDocOptions, "No DocOptions to save! :-(" );
+/*N*/ pDocOptions->Save( rStream );
+/*N*/ }
+
+//------------------------------------------------------------------------
+
+/*N*/ void ScDocument::ImplSaveViewOptions( SvStream& rStream ) const
+/*N*/ {
+/*N*/ DBG_ASSERT( pViewOptions, "No ViewOptions to save! :-(" );
+/*N*/ rStream << *pViewOptions;
+/*N*/ }
+
+//------------------------------------------------------------------------
+
+/*N*/ void ScDocument::ImplCreateOptions()
+/*N*/ {
+/*N*/ pDocOptions = new ScDocOptions();
+/*N*/ pViewOptions = new ScViewOptions();
+/*N*/ }
+
+//------------------------------------------------------------------------
+
+/*N*/ void ScDocument::ImplDeleteOptions()
+/*N*/ {
+/*N*/ delete pDocOptions;
+/*N*/ delete pViewOptions;
+/*N*/ }
+
+//------------------------------------------------------------------------
+
+/*N*/ SfxPrinter* ScDocument::GetPrinter()
+/*N*/ {
+/*N*/ if ( !pPrinter )
+/*N*/ {
+/*N*/ SfxItemSet* pSet =
+/*N*/ new SfxItemSet( *xPoolHelper->GetDocPool(),
+/*N*/ SID_PRINTER_NOTFOUND_WARN, SID_PRINTER_NOTFOUND_WARN,
+/*N*/ SID_PRINTER_CHANGESTODOC, SID_PRINTER_CHANGESTODOC,
+/*N*/ SID_SCPRINTOPTIONS, SID_SCPRINTOPTIONS,
+/*N*/ NULL );
+/*N*/
+/*N*/ SfxMiscCfg* pOffCfg = SFX_APP()->GetMiscConfig();
+/*N*/ if ( pOffCfg )
+/*N*/ {
+/*N*/ USHORT nFlags = 0;
+/*N*/ if ( pOffCfg->IsPaperOrientationWarning() )
+/*N*/ nFlags |= SFX_PRINTER_CHG_ORIENTATION;
+/*N*/ if ( pOffCfg->IsPaperSizeWarning() )
+/*N*/ nFlags |= SFX_PRINTER_CHG_SIZE;
+/*N*/ pSet->Put( SfxFlagItem( SID_PRINTER_CHANGESTODOC, nFlags ) );
+/*N*/ pSet->Put( SfxBoolItem( SID_PRINTER_NOTFOUND_WARN, pOffCfg->IsNotFoundWarning() ) );
+/*N*/ }
+/*N*/
+/*N*/ pPrinter = new SfxPrinter( pSet );
+/*N*/ UpdateDrawPrinter();
+/*N*/ pPrinter->SetDigitLanguage( SC_MOD()->GetOptDigitLanguage() );
+/*N*/ }
+/*N*/
+/*N*/ return pPrinter;
+/*N*/ }
+
+//------------------------------------------------------------------------
+
+/*N*/ void ScDocument::SetPrinter( SfxPrinter* pNewPrinter )
+/*N*/ {
+/*N*/ if ( pNewPrinter == pPrinter )
+/*N*/ {
+/*N*/ // #i6706# SetPrinter is called with the same printer again if
+/*N*/ // the JobSetup has changed. In that case just call UpdateDrawPrinter
+/*N*/ // (SetRefDevice for drawing layer) because of changed text sizes.
+/*N*/ UpdateDrawPrinter();
+/*N*/ }
+/*N*/ else
+/*N*/ {
+/*N*/ SfxPrinter* pOld = pPrinter;
+/*N*/ pPrinter = pNewPrinter;
+/*N*/ UpdateDrawPrinter();
+/*N*/ pPrinter->SetDigitLanguage( SC_MOD()->GetOptDigitLanguage() );
+/*N*/ delete pOld;
+/*N*/ }
+/*N*/ InvalidateTextWidth(); // in both cases
+/*N*/ }
+
+//------------------------------------------------------------------------
+
+/*N*/ void ScDocument::SetPrintOptions()
+/*N*/ {
+/*N*/ if ( !pPrinter ) GetPrinter(); // setzt pPrinter
+/*N*/ DBG_ASSERT( pPrinter, "Error in printer creation :-/" );
+/*N*/
+/*N*/ if ( pPrinter )
+/*N*/ {
+/*N*/ SfxMiscCfg* pOffCfg = SFX_APP()->GetMiscConfig();
+/*N*/ if ( pOffCfg )
+/*N*/ {
+/*N*/ SfxItemSet aOptSet( pPrinter->GetOptions() );
+/*N*/
+/*N*/ USHORT nFlags = 0;
+/*N*/ if ( pOffCfg->IsPaperOrientationWarning() )
+/*N*/ nFlags |= SFX_PRINTER_CHG_ORIENTATION;
+/*N*/ if ( pOffCfg->IsPaperSizeWarning() )
+/*N*/ nFlags |= SFX_PRINTER_CHG_SIZE;
+/*N*/ aOptSet.Put( SfxFlagItem( SID_PRINTER_CHANGESTODOC, nFlags ) );
+/*N*/ aOptSet.Put( SfxBoolItem( SID_PRINTER_NOTFOUND_WARN, pOffCfg->IsNotFoundWarning() ) );
+/*N*/
+/*N*/ pPrinter->SetOptions( aOptSet );
+/*N*/ }
+/*N*/ }
+/*N*/ }
+
+//------------------------------------------------------------------------
+
+
+//------------------------------------------------------------------------
+
+
+//------------------------------------------------------------------------
+
+
+//------------------------------------------------------------------------
+
+
+//------------------------------------------------------------------------
+
+
+//------------------------------------------------------------------------
+
+/*N*/ BOOL ScDocument::RemovePageStyleInUse( const String& rStyle )
+/*N*/ {
+/*N*/ BOOL bWasInUse = FALSE;
+/*N*/ const USHORT nCount = GetTableCount();
+/*N*/
+/*N*/ for ( USHORT i=0; i<nCount && pTab[i]; i++ )
+/*N*/ if ( pTab[i]->GetPageStyle() == rStyle )
+/*N*/ {
+/*N*/ bWasInUse = TRUE;
+/*N*/ pTab[i]->SetPageStyle( ScGlobal::GetRscString(STR_STYLENAME_STANDARD) );
+/*N*/ }
+/*N*/
+/*N*/ return bWasInUse;
+/*N*/ }
+
+
+//------------------------------------------------------------------------
+
+/*M*/ BYTE ScDocument::GetEditTextDirection(USHORT nTab) const
+/*M*/ {
+/*M*/ EEHorizontalTextDirection eRet = EE_HTEXTDIR_DEFAULT;
+/*M*/
+/*M*/ String aStyleName = GetPageStyle( nTab );
+/*M*/ SfxStyleSheetBase* pStyle = xPoolHelper->GetStylePool()->Find( aStyleName, SFX_STYLE_FAMILY_PAGE );
+/*M*/ if ( pStyle )
+/*M*/ {
+/*M*/ SfxItemSet& rStyleSet = pStyle->GetItemSet();
+/*M*/ SvxFrameDirection eDirection = (SvxFrameDirection)
+/*M*/ ((const SvxFrameDirectionItem&)rStyleSet.Get( ATTR_WRITINGDIR )).GetValue();
+/*M*/
+/*M*/ if ( eDirection == FRMDIR_HORI_LEFT_TOP )
+/*M*/ eRet = EE_HTEXTDIR_L2R;
+/*M*/ else if ( eDirection == FRMDIR_HORI_RIGHT_TOP )
+/*M*/ eRet = EE_HTEXTDIR_R2L;
+/*M*/ // else (invalid for EditEngine): keep "default"
+/*M*/ }
+/*M*/
+/*M*/ return eRet;
+/*M*/ }
+
+//------------------------------------------------------------------------
+
+/*N*/ void ScDocument::InvalidateTextWidth( const ScAddress* pAdrFrom,
+/*N*/ const ScAddress* pAdrTo,
+/*N*/ BOOL bBroadcast )
+/*N*/ {
+/*N*/ bBroadcast = (bBroadcast && GetDocOptions().IsCalcAsShown() && !IsImportingXML());
+/*N*/ if ( pAdrFrom && !pAdrTo )
+/*N*/ {
+/*?*/ const USHORT nTab = pAdrFrom->Tab();
+/*?*/
+/*?*/ if ( pTab[nTab] )
+/*?*/ pTab[nTab]->InvalidateTextWidth( pAdrFrom, NULL, bBroadcast );
+/*N*/ }
+/*N*/ else
+/*N*/ {
+/*N*/ const USHORT nTabStart = pAdrFrom ? pAdrFrom->Tab() : 0;
+/*N*/ const USHORT nTabEnd = pAdrTo ? pAdrTo->Tab() : MAXTAB;
+/*N*/
+/*N*/ for ( USHORT nTab=nTabStart; nTab<=nTabEnd; nTab++ )
+/*N*/ if ( pTab[nTab] )
+/*N*/ pTab[nTab]->InvalidateTextWidth( pAdrFrom, pAdrTo, bBroadcast );
+/*N*/ }
+/*N*/ }
+
+//------------------------------------------------------------------------
+
+#define CALCMAX 1000 // Berechnungen
+#define ABORT_EVENTS (INPUT_ANY & ~INPUT_TIMER & ~INPUT_OTHER)
+
+//------------------------------------------------------------------------
+
+
+// SPELL_MAXCELLS muss mindestens 256 sein, solange am Iterator keine
+// Start-Spalte gesetzt werden kann
+
+//! SPELL_MAXTEST fuer Timer und Idle unterschiedlich ???
+
+// SPELL_MAXTEST now divided between visible and rest of document
+
+#define SPELL_MAXTEST_VIS 1
+#define SPELL_MAXTEST_ALL 3
+#define SPELL_MAXCELLS 256
+
+//------------------------------------------------------------------------
+
+/*N*/ void ScDocument::SaveDdeLinks(SvStream& rStream) const
+/*N*/ {
+/*N*/ // bei 4.0-Export alle mit Modus != DEFAULT weglassen
+/*N*/ BOOL bExport40 = ( rStream.GetVersion() <= SOFFICE_FILEFORMAT_40 );
+/*N*/
+/*N*/ const ::binfilter::SvBaseLinks& rLinks = pLinkManager->GetLinks();
+/*N*/ USHORT nCount = rLinks.Count();
+/*N*/
+/*N*/ // erstmal zaehlen...
+/*N*/
+/*N*/ USHORT nDdeCount = 0;
+/*N*/ USHORT i;
+/*N*/ for (i=0; i<nCount; i++)
+/*N*/ {
+/*N*/ ::binfilter::SvBaseLink* pBase = *rLinks[i];
+/*N*/ if (pBase->ISA(ScDdeLink))
+/*?*/ if ( !bExport40 || ((ScDdeLink*)pBase)->GetMode() == SC_DDE_DEFAULT )
+/*?*/ ++nDdeCount;
+/*N*/ }
+/*N*/
+/*N*/ // Header
+/*N*/
+/*N*/ ScMultipleWriteHeader aHdr( rStream );
+/*N*/ rStream << nDdeCount;
+/*N*/
+/*N*/ // Links speichern
+/*N*/
+/*N*/ for (i=0; i<nCount; i++)
+/*N*/ {
+/*N*/ ::binfilter::SvBaseLink* pBase = *rLinks[i];
+/*N*/ if (pBase->ISA(ScDdeLink))
+/*N*/ {
+/*?*/ ScDdeLink* pLink = (ScDdeLink*)pBase;
+/*?*/ if ( !bExport40 || pLink->GetMode() == SC_DDE_DEFAULT )
+/*?*/ pLink->Store( rStream, aHdr );
+/*N*/ }
+/*N*/ }
+/*N*/ }
+
+/*N*/ void ScDocument::LoadDdeLinks(SvStream& rStream)
+/*N*/ {
+/*N*/ ScMultipleReadHeader aHdr( rStream );
+/*N*/
+/*N*/ USHORT nCount;
+/*N*/ rStream >> nCount;
+/*N*/ for (USHORT i=0; i<nCount; i++)
+/*N*/ {
+/*?*/ ScDdeLink* pLink = new ScDdeLink( this, rStream, aHdr );
+/*?*/ pLinkManager->InsertDDELink( pLink,
+/*?*/ pLink->GetAppl(), pLink->GetTopic(), pLink->GetItem() );
+/*N*/ }
+/*N*/ }
+
+/*N*/ void ScDocument::SetInLinkUpdate(BOOL bSet)
+/*N*/ {
+/*N*/ // called from TableLink and AreaLink
+/*N*/
+/*N*/ DBG_ASSERT( bInLinkUpdate != bSet, "SetInLinkUpdate twice" );
+/*N*/ bInLinkUpdate = bSet;
+/*N*/ }
+
+
+/*N*/ BOOL ScDocument::UpdateDdeLink( const String& rAppl, const String& rTopic, const String& rItem )
+/*N*/ {
+/*N*/ // fuer refresh() per StarOne Api
+/*N*/ // ResetValue() fuer einzelnen Link nicht noetig
+/*N*/ //! wenn's mal alles asynchron wird, aber auch hier
+/*N*/
+/*N*/ BOOL bFound = FALSE;
+/*N*/ if (pLinkManager)
+/*N*/ {
+/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 const ::binfilter::SvBaseLinks& rLinks = pLinkManager->GetLinks();
+/*N*/ }
+/*N*/ return bFound;
+/*N*/ }
+
+
+
+/*N*/ USHORT ScDocument::GetDdeLinkCount() const
+/*N*/ {
+/*N*/ USHORT nDdeCount = 0;
+/*N*/ if (pLinkManager)
+/*N*/ {
+/*N*/ const ::binfilter::SvBaseLinks& rLinks = pLinkManager->GetLinks();
+/*N*/ USHORT nCount = rLinks.Count();
+/*N*/ for (USHORT i=0; i<nCount; i++)
+/*N*/ if ((*rLinks[i])->ISA(ScDdeLink))
+/*N*/ ++nDdeCount;
+/*N*/ }
+/*N*/ return nDdeCount;
+/*N*/ }
+
+/*N*/ BOOL ScDocument::GetDdeLinkData( USHORT nPos, String& rAppl, String& rTopic, String& rItem ) const
+/*N*/ {
+/*N*/ USHORT nDdeCount = 0;
+/*N*/ if (pLinkManager)
+/*N*/ {
+/*N*/ const ::binfilter::SvBaseLinks& rLinks = pLinkManager->GetLinks();
+/*N*/ USHORT nCount = rLinks.Count();
+/*N*/ for (USHORT i=0; i<nCount; i++)
+/*N*/ {
+/*N*/ ::binfilter::SvBaseLink* pBase = *rLinks[i];
+/*N*/ if (pBase->ISA(ScDdeLink))
+/*N*/ {
+/*N*/ if ( nDdeCount == nPos )
+/*N*/ {
+/*N*/ ScDdeLink* pDde = (ScDdeLink*)pBase;
+/*N*/ rAppl = pDde->GetAppl();
+/*N*/ rTopic = pDde->GetTopic();
+/*N*/ rItem = pDde->GetItem();
+/*N*/ return TRUE;
+/*N*/ }
+/*N*/ ++nDdeCount;
+/*N*/ }
+/*N*/ }
+/*N*/ }
+/*N*/ return FALSE;
+/*N*/ }
+
+/*N*/ BOOL ScDocument::GetDdeLinkMode(USHORT nPos, USHORT& nMode)
+/*N*/ {
+/*N*/ USHORT nDdeCount = 0;
+/*N*/ if (pLinkManager)
+/*N*/ {
+/*N*/ const ::binfilter::SvBaseLinks& rLinks = pLinkManager->GetLinks();
+/*N*/ USHORT nCount = rLinks.Count();
+/*N*/ for (USHORT i=0; i<nCount; i++)
+/*N*/ {
+/*N*/ ::binfilter::SvBaseLink* pBase = *rLinks[i];
+/*N*/ if (pBase->ISA(ScDdeLink))
+/*N*/ {
+/*N*/ if ( nDdeCount == nPos )
+/*N*/ {
+/*N*/ ScDdeLink* pDde = (ScDdeLink*)pBase;
+/*N*/ nMode = pDde->GetMode();
+/*N*/ return TRUE;
+/*N*/ }
+/*N*/ ++nDdeCount;
+/*N*/ }
+/*N*/ }
+/*N*/ }
+/*N*/ return FALSE;
+/*N*/ }
+
+/*N*/ BOOL ScDocument::GetDdeLinkResultDimension( USHORT nPos, USHORT& nCol, USHORT& nRow, ScMatrix*& pMatrix)
+/*N*/ {
+/*N*/ USHORT nDdeCount = 0;
+/*N*/ if (pLinkManager)
+/*N*/ {
+/*N*/ const ::binfilter::SvBaseLinks& rLinks = pLinkManager->GetLinks();
+/*N*/ USHORT nCount = rLinks.Count();
+/*N*/ for (USHORT i=0; i<nCount; i++)
+/*N*/ {
+/*N*/ ::binfilter::SvBaseLink* pBase = *rLinks[i];
+/*N*/ if (pBase->ISA(ScDdeLink))
+/*N*/ {
+/*N*/ if ( nDdeCount == nPos )
+/*N*/ {
+/*N*/ ScDdeLink* pDde = (ScDdeLink*)pBase;
+/*N*/ pMatrix = pDde->GetResult();
+/*N*/ if (pMatrix)
+/*N*/ {
+/*N*/ pMatrix->GetDimensions(nCol, nRow);
+/*N*/ return TRUE;
+/*N*/ }
+/*N*/ }
+/*N*/ ++nDdeCount;
+/*N*/ }
+/*N*/ }
+/*N*/ }
+/*N*/ return FALSE;
+/*N*/ }
+
+/*N*/ BOOL ScDocument::GetDdeLinkResult(const ScMatrix* pMatrix, USHORT nCol, USHORT nRow, String& rStrValue, double& rDoubValue, BOOL& bIsString)
+/*N*/ {
+DBG_BF_ASSERT(0, "STRIP"); //STRIP001 if (pMatrix)
+/*N*/ return TRUE;
+/*N*/ }
+
+/*N*/ void ScDocument::CreateDdeLink(const String& rAppl, const String& rTopic, const String& rItem, const BYTE nMode )
+/*N*/ {
+ // DDE-Link anlegen und nicht updaten (z.B. fuer Excel-Import,
+DBG_BF_ASSERT(0, "STRIP"); //STRIP001 //STRIP001 // damit nicht ohne Nachfrage Verbindungen aufgebaut werden)
+/*N*/ }
+
+/*N*/ BOOL ScDocument::FindDdeLink(const String& rAppl, const String& rTopic, const String& rItem, const BYTE nMode, USHORT& nPos )
+/*N*/ {
+/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 if (pLinkManager)
+/*N*/ return FALSE;
+/*N*/ }
+
+/*N*/ BOOL ScDocument::CreateDdeLinkResultDimension(USHORT nPos, USHORT nCols, USHORT nRows, ScMatrix*& pMatrix)
+/*N*/ {
+DBG_BF_ASSERT(0, "STRIP"); //STRIP001 USHORT nDdeCount = 0;
+/*N*/ return FALSE;
+/*N*/ }
+
+void ScDocument::SetDdeLinkResult(ScMatrix* pMatrix, const USHORT nCol, const USHORT nRow, const String& rStrValue, const double& rDoubValue, BOOL bString, BOOL bEmpty)
+{
+DBG_BF_ASSERT(0, "STRIP"); //STRIP001 DBG_ASSERT(pMatrix, "there is no matrix");
+/*N*/ }
+
+//------------------------------------------------------------------------
+
+/*N*/ void ScDocument::UpdateRefAreaLinks( UpdateRefMode eUpdateRefMode,
+/*N*/ const ScRange& rRange, short nDx, short nDy, short nDz )
+/*N*/ {
+/*N*/ if (pLinkManager)
+/*N*/ {
+/*N*/ const ::binfilter::SvBaseLinks& rLinks = pLinkManager->GetLinks();
+/*N*/ USHORT nCount = rLinks.Count();
+/*N*/ for (USHORT i=0; i<nCount; i++)
+/*N*/ {
+/*?*/ ::binfilter::SvBaseLink* pBase = *rLinks[i];
+/*?*/ if (pBase->ISA(ScAreaLink))
+/*?*/ {
+/*?*/ ScAreaLink* pLink = (ScAreaLink*) pBase;
+/*?*/ ScRange aOutRange = pLink->GetDestArea();
+/*?*/
+/*?*/ USHORT nCol1 = aOutRange.aStart.Col();
+/*?*/ USHORT nRow1 = aOutRange.aStart.Row();
+/*?*/ USHORT nTab1 = aOutRange.aStart.Tab();
+/*?*/ USHORT nCol2 = aOutRange.aEnd.Col();
+/*?*/ USHORT nRow2 = aOutRange.aEnd.Row();
+/*?*/ USHORT nTab2 = aOutRange.aEnd.Tab();
+/*?*/
+/*?*/ ScRefUpdateRes eRes =
+/*?*/ ScRefUpdate::Update( this, eUpdateRefMode,
+/*?*/ rRange.aStart.Col(), rRange.aStart.Row(), rRange.aStart.Tab(),
+/*?*/ rRange.aEnd.Col(), rRange.aEnd.Row(), rRange.aEnd.Tab(), nDx, nDy, nDz,
+/*?*/ nCol1, nRow1, nTab1, nCol2, nRow2, nTab2 );
+/*?*/ if ( eRes != UR_NOTHING )
+/*?*/ pLink->SetDestArea( ScRange( nCol1, nRow1, nTab1, nCol2, nRow2, nTab2 ) );
+/*?*/ }
+/*N*/ }
+/*N*/ }
+/*N*/ }
+
+/*N*/ void ScDocument::SaveAreaLinks(SvStream& rStream) const
+/*N*/ {
+/*N*/ const ::binfilter::SvBaseLinks& rLinks = pLinkManager->GetLinks();
+/*N*/ USHORT nCount = rLinks.Count();
+/*N*/
+/*N*/ // erstmal zaehlen...
+/*N*/
+/*N*/ USHORT nAreaCount = 0;
+/*N*/ USHORT i;
+/*N*/ for (i=0; i<nCount; i++)
+/*N*/ if ((*rLinks[i])->ISA(ScAreaLink)) // rLinks[i] = Pointer auf Ref
+/*N*/ ++nAreaCount;
+/*N*/
+/*N*/ // Header
+/*N*/
+/*N*/ ScMultipleWriteHeader aHdr( rStream );
+/*N*/ rStream << nAreaCount;
+/*N*/
+/*N*/ // Links speichern
+/*N*/
+/*N*/ for (i=0; i<nCount; i++)
+/*N*/ {
+/*N*/ ::binfilter::SvBaseLink* pBase = *rLinks[i];
+/*N*/ if (pBase->ISA(ScAreaLink))
+/*N*/ {
+/*?*/ ScAreaLink* pLink = (ScAreaLink*)pBase;
+/*?*/
+/*?*/ aHdr.StartEntry();
+/*?*/
+/*?*/ rStream.WriteByteString( pLink->GetFile(), rStream.GetStreamCharSet() );
+/*?*/ rStream.WriteByteString( pLink->GetFilter(), rStream.GetStreamCharSet() );
+/*?*/ rStream.WriteByteString( pLink->GetSource(), rStream.GetStreamCharSet() );
+/*?*/ rStream << pLink->GetDestArea(); // ScRange
+/*?*/ rStream.WriteByteString( pLink->GetOptions(), rStream.GetStreamCharSet() );
+/*?*/ // filter options starting from 336
+/*?*/
+/*?*/ aHdr.EndEntry();
+/*N*/ }
+/*N*/ }
+/*N*/ }
+
+/*N*/ void ScDocument::LoadAreaLinks(SvStream& rStream)
+/*N*/ {
+/*N*/ ScMultipleReadHeader aHdr( rStream );
+/*N*/
+/*N*/ if (!pShell)
+/*N*/ {
+/*N*/ DBG_ERROR("AreaLinks koennen nicht ohne Shell geladen werden");
+/*N*/ return;
+/*N*/ }
+/*N*/
+/*N*/ String aFile, aFilter, aOptions, aSource;
+/*N*/ ScRange aDestArea;
+/*N*/
+/*N*/ USHORT nCount;
+/*N*/ rStream >> nCount;
+/*N*/ for (USHORT i=0; i<nCount; i++)
+/*N*/ {
+/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 aHdr.StartEntry();
+/*?*/
+/*N*/ }
+/*N*/ }
+
+
+//------------------------------------------------------------------------
+
+// TimerDelays etc.
+
+// ----------------------------------------------------------------------------
+
+/*N*/ BOOL ScDocument::CheckMacroWarn()
+/*N*/ {
+/*N*/ // The check for macro configuration, macro warning and disabling is now handled
+/*N*/ // in SfxObjectShell::AdjustMacroMode, called by SfxObjectShell::CallBasic.
+/*N*/
+/*N*/ return TRUE;
+/*N*/ }
+
+
+
+//------------------------------------------------------------------------
+
+
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */