summaryrefslogtreecommitdiff
path: root/binfilter/bf_sc/source/core/data/sc_documen3.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'binfilter/bf_sc/source/core/data/sc_documen3.cxx')
-rw-r--r--binfilter/bf_sc/source/core/data/sc_documen3.cxx917
1 files changed, 917 insertions, 0 deletions
diff --git a/binfilter/bf_sc/source/core/data/sc_documen3.cxx b/binfilter/bf_sc/source/core/data/sc_documen3.cxx
new file mode 100644
index 000000000000..09dfd5b9f0d5
--- /dev/null
+++ b/binfilter/bf_sc/source/core/data/sc_documen3.cxx
@@ -0,0 +1,917 @@
+/* -*- 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
+
+#ifdef WIN
+// SFX
+#define _SFXAPPWIN_HXX
+#define _SFX_SAVEOPT_HXX
+//#define _SFX_CHILDWIN_HXX ***
+#define _SFXCTRLITEM_HXX
+#define _SFXPRNMON_HXX
+#define _INTRO_HXX
+#define _SFXMSGDESCR_HXX
+#define _SFXMSGPOOL_HXX
+#define _SFXFILEDLG_HXX
+#define _PASSWD_HXX
+#define _SFXTBXCTRL_HXX
+#define _SFXSTBITEM_HXX
+#define _SFXMNUITEM_HXX
+#define _SFXIMGMGR_HXX
+#define _SFXTBXMGR_HXX
+#define _SFXSTBMGR_HXX
+#define _SFX_MINFITEM_HXX
+#define _SFXEVENT_HXX
+
+//sfxdlg.hxx
+//#define _SFXTABDLG_HXX
+#define _BASEDLGS_HXX
+#define _SFX_DINFDLG_HXX
+#define _SFXDINFEDT_HXX
+#define _SFX_MGETEMPL_HXX
+#define _SFX_TPLPITEM_HXX
+#define _SFX_STYLEDLG_HXX
+#define _NEWSTYLE_HXX
+#define _SFXDOCTEMPL_HXX
+#define _SFXDOCTDLG_HXX
+#define _SFX_TEMPLDLG_HXX
+#define _SFXNEW_HXX
+#define _SFXDOCMAN_HXX
+//#define _SFXDOCKWIN_HXX ***
+
+//sfxdoc.hxx
+//#define _SFX_OBJSH_HXX
+//#define _SFX_CLIENTSH_HXX ***
+//#define _SFXDOCINF_HXX
+#define _SFX_OBJFAC_HXX
+#define _SFX_DOCFILT_HXX
+#define _SFXDOCFILE_HXX
+#define _VIEWFAC_HXX
+#define _SFXVIEWFRM_HXX
+//#define _SFXVIEWSH_HXX ***
+#define _MDIFRM_HXX
+#define _SFX_IPFRM_HXX
+#define _SFX_INTERNO_HXX
+
+#endif //WIN
+
+// INCLUDE ---------------------------------------------------------------
+
+#include "scitems.hxx"
+#include <bf_svx/langitem.hxx>
+#include <bf_svx/linkmgr.hxx>
+#include <bf_svtools/zforlist.hxx>
+#include <vcl/svapp.hxx>
+#include "document.hxx"
+#include "attrib.hxx"
+#include "rangenam.hxx"
+#include "dbcolect.hxx"
+#include "pivot.hxx"
+#include "docpool.hxx"
+#include "poolhelp.hxx"
+#include "refupdat.hxx"
+#include "docoptio.hxx"
+#include "viewopti.hxx"
+#include "scextopt.hxx"
+#include "tablink.hxx"
+#include "conditio.hxx"
+#include "detdata.hxx"
+#include "scmod.hxx" // SC_MOD
+#include "inputopt.hxx" // GetExpandRefs
+#include "bf_sc.hrc" // SID_LINK
+#include "hints.hxx"
+#include "dpobject.hxx"
+
+namespace binfilter {
+using namespace ::com::sun::star;
+
+//------------------------------------------------------------------------
+
+/*N*/ ScRangeName* ScDocument::GetRangeName()
+/*N*/ {
+/*N*/ return pRangeName;
+/*N*/ }
+
+/*N*/ void ScDocument::SetRangeName( ScRangeName* pNewRangeName )
+/*N*/ {
+/*N*/ if (pRangeName)
+/*N*/ delete pRangeName;
+/*N*/ pRangeName = pNewRangeName;
+/*N*/ }
+
+
+
+/*N*/ ScDBCollection* ScDocument::GetDBCollection() const
+/*N*/ {
+/*N*/ return pDBCollection;
+/*N*/ }
+
+
+/*N*/ ScDBData* ScDocument::GetDBAtCursor(USHORT nCol, USHORT nRow, USHORT nTab, BOOL bStartOnly) const
+/*N*/ {
+/*N*/ if (pDBCollection)
+/*N*/ return pDBCollection->GetDBAtCursor(nCol, nRow, nTab, bStartOnly);
+/*N*/ else
+/*N*/ return NULL;
+/*N*/ }
+
+/*N*/ ScDBData* ScDocument::GetDBAtArea(USHORT nTab, USHORT nCol1, USHORT nRow1, USHORT nCol2, USHORT nRow2) const
+/*N*/ {
+/*N*/ if (pDBCollection)
+/*N*/ return pDBCollection->GetDBAtArea(nTab, nCol1, nRow1, nCol2, nRow2);
+/*N*/ else
+/*N*/ return NULL;
+/*N*/ }
+
+/*N*/ ScDPCollection* ScDocument::GetDPCollection()
+/*N*/ {
+/*N*/ if (!pDPCollection)
+/*N*/ pDPCollection = new ScDPCollection(this);
+/*N*/ return pDPCollection;
+/*N*/ }
+
+
+
+
+
+
+
+
+/*N*/ void ScDocument::SetScenario( USHORT nTab, BOOL bFlag )
+/*N*/ {
+/*N*/ if (nTab<=MAXTAB && pTab[nTab])
+/*N*/ pTab[nTab]->SetScenario(bFlag);
+/*N*/ }
+
+/*N*/ BOOL ScDocument::IsScenario( USHORT nTab ) const
+/*N*/ {
+/*N*/ if (nTab<=MAXTAB && pTab[nTab])
+/*N*/ return pTab[nTab]->IsScenario();
+/*N*/
+/*N*/ return FALSE;
+/*N*/ }
+
+/*N*/ void ScDocument::SetScenarioData( USHORT nTab, const String& rComment,
+/*N*/ const Color& rColor, USHORT nFlags )
+/*N*/ {
+/*N*/ if (nTab<=MAXTAB && pTab[nTab] && pTab[nTab]->IsScenario())
+/*N*/ {
+/*N*/ pTab[nTab]->SetScenarioComment( rComment );
+/*N*/ pTab[nTab]->SetScenarioColor( rColor );
+/*N*/ pTab[nTab]->SetScenarioFlags( nFlags );
+/*N*/ }
+/*N*/ }
+
+/*N*/ void ScDocument::GetScenarioData( USHORT nTab, String& rComment,
+/*N*/ Color& rColor, USHORT& rFlags ) const
+/*N*/ {
+/*N*/ if (nTab<=MAXTAB && pTab[nTab] && pTab[nTab]->IsScenario())
+/*N*/ {
+/*N*/ pTab[nTab]->GetScenarioComment( rComment );
+/*N*/ rColor = pTab[nTab]->GetScenarioColor();
+/*N*/ rFlags = pTab[nTab]->GetScenarioFlags();
+/*N*/ }
+/*N*/ }
+
+/*N*/ BOOL ScDocument::IsLinked( USHORT nTab ) const
+/*N*/ {
+/*N*/ if (nTab<=MAXTAB && pTab[nTab])
+/*N*/ return pTab[nTab]->IsLinked();
+/*N*/ return FALSE;
+/*N*/ }
+
+/*N*/ BOOL ScDocument::GetLinkMode( USHORT nTab ) const
+/*N*/ {
+/*N*/ if (nTab<=MAXTAB && pTab[nTab])
+/*N*/ return pTab[nTab]->GetLinkMode();
+/*N*/ return SC_LINK_NONE;
+/*N*/ }
+
+/*N*/ const String& ScDocument::GetLinkDoc( USHORT nTab ) const
+/*N*/ {
+/*N*/ if (nTab<=MAXTAB && pTab[nTab])
+/*N*/ return pTab[nTab]->GetLinkDoc();
+/*N*/ return EMPTY_STRING;
+/*N*/ }
+
+/*N*/ const String& ScDocument::GetLinkFlt( USHORT nTab ) const
+/*N*/ {
+/*N*/ if (nTab<=MAXTAB && pTab[nTab])
+/*N*/ return pTab[nTab]->GetLinkFlt();
+/*N*/ return EMPTY_STRING;
+/*N*/ }
+
+/*N*/ const String& ScDocument::GetLinkOpt( USHORT nTab ) const
+/*N*/ {
+/*N*/ if (nTab<=MAXTAB && pTab[nTab])
+/*N*/ return pTab[nTab]->GetLinkOpt();
+/*N*/ return EMPTY_STRING;
+/*N*/ }
+
+/*N*/ const String& ScDocument::GetLinkTab( USHORT nTab ) const
+/*N*/ {
+/*N*/ if (nTab<=MAXTAB && pTab[nTab])
+/*N*/ return pTab[nTab]->GetLinkTab();
+/*N*/ return EMPTY_STRING;
+/*N*/ }
+
+/*N*/ ULONG ScDocument::GetLinkRefreshDelay( USHORT nTab ) const
+/*N*/ {
+/*N*/ if (nTab<=MAXTAB && pTab[nTab])
+/*N*/ return pTab[nTab]->GetLinkRefreshDelay();
+/*N*/ return 0;
+/*N*/ }
+
+/*N*/ void ScDocument::SetLink( USHORT nTab, BYTE nMode, const String& rDoc,
+/*N*/ const String& rFilter, const String& rOptions,
+/*N*/ const String& rTabName, ULONG nRefreshDelay )
+/*N*/ {
+/*N*/ if (nTab<=MAXTAB && pTab[nTab])
+/*N*/ pTab[nTab]->SetLink( nMode, rDoc, rFilter, rOptions, rTabName, nRefreshDelay );
+/*N*/ }
+
+/*N*/ BOOL ScDocument::HasLink( const String& rDoc,
+/*N*/ const String& rFilter, const String& rOptions ) const
+/*N*/ {
+/*N*/ USHORT nCount = GetTableCount();
+/*N*/ for (USHORT i=0; i<nCount; i++)
+/*N*/ if (pTab[i]->IsLinked()
+/*N*/ && pTab[i]->GetLinkDoc() == rDoc
+/*N*/ && pTab[i]->GetLinkFlt() == rFilter
+/*N*/ && pTab[i]->GetLinkOpt() == rOptions)
+/*N*/ return TRUE;
+/*N*/
+/*N*/ return FALSE;
+/*N*/ }
+
+
+/*N*/ BOOL ScDocument::LinkExternalTab( USHORT& rTab, const String& aDocTab,
+/*N*/ const String& aFileName, const String& aTabName )
+/*N*/ {
+/*N*/ if ( IsClipboard() )
+/*N*/ {
+/*N*/ DBG_ERRORFILE( "LinkExternalTab in Clipboard" );
+/*N*/ return FALSE;
+/*N*/ }
+/*N*/ rTab = 0;
+/*N*/ String aFilterName; // wird vom Loader gefuellt
+/*N*/ String aOptions; // Filter-Optionen
+/*N*/ ScDocumentLoader aLoader( aFileName, aFilterName, aOptions,
+/*N*/ pExtDocOptions ? pExtDocOptions->nLinkCnt + 1 : 1 );
+/*N*/ if ( aLoader.IsError() )
+/*N*/ return FALSE;
+/*N*/ ScDocument* pSrcDoc = aLoader.GetDocument();
+/*N*/
+/*N*/ // Tabelle kopieren
+/*N*/ USHORT nSrcTab;
+/*N*/ if ( pSrcDoc->GetTable( aTabName, nSrcTab ) )
+/*N*/ {
+/*N*/ if ( !InsertTab( SC_TAB_APPEND, aDocTab, TRUE ) )
+/*N*/ {
+/*N*/ DBG_ERRORFILE("can't insert external document table");
+/*N*/ return FALSE;
+/*N*/ }
+/*N*/ rTab = GetTableCount() - 1;
+/*N*/ // nicht neu einfuegen, nur Ergebnisse
+/*N*/ TransferTab( pSrcDoc, nSrcTab, rTab, FALSE, TRUE );
+/*N*/ }
+/*N*/ else
+/*N*/ return FALSE;
+/*N*/
+/*N*/ ULONG nRefreshDelay = 0;
+/*N*/
+/*N*/ BOOL bWasThere = HasLink( aFileName, aFilterName, aOptions );
+/*N*/ SetLink( rTab, SC_LINK_VALUE, aFileName, aFilterName, aOptions, aTabName, nRefreshDelay );
+/*N*/ if ( !bWasThere ) // Link pro Quelldokument nur einmal eintragen
+/*N*/ {
+/*N*/ ScTableLink* pLink = new ScTableLink( pShell, aFileName, aFilterName, aOptions, nRefreshDelay );
+/*N*/ pLink->SetInCreate( TRUE );
+/*N*/ pLinkManager->InsertFileLink( *pLink, OBJECT_CLIENT_FILE, aFileName,
+/*N*/ &aFilterName );
+/*N*/ pLink->Update();
+/*N*/ pLink->SetInCreate( FALSE );
+/*N*/ }
+/*N*/ return TRUE;
+/*N*/ }
+
+/*N*/ ScOutlineTable* ScDocument::GetOutlineTable( USHORT nTab, BOOL bCreate )
+/*N*/ {
+/*N*/ ScOutlineTable* pVal = NULL;
+/*N*/
+/*N*/ if (VALIDTAB(nTab))
+/*N*/ if (pTab[nTab])
+/*N*/ {
+/*N*/ pVal = pTab[nTab]->GetOutlineTable();
+/*N*/ if (!pVal)
+/*N*/ if (bCreate)
+/*N*/ {
+/*N*/ pTab[nTab]->StartOutlineTable();
+/*N*/ pVal = pTab[nTab]->GetOutlineTable();
+/*N*/ }
+/*N*/ }
+/*N*/
+/*N*/ return pVal;
+/*N*/ }
+
+
+
+
+
+
+
+// kopiert aus diesem Dokument die Zellen von Positionen, an denen in pPosDoc
+// auch Zellen stehen, nach pDestDoc
+
+
+
+
+
+/*N*/ const ScRangeList* ScDocument::GetScenarioRanges( USHORT nTab ) const
+/*N*/ {
+/*N*/ if (nTab<=MAXTAB && pTab[nTab])
+/*N*/ return pTab[nTab]->GetScenarioRanges();
+/*N*/
+/*N*/ return NULL;
+/*N*/ }
+
+/*N*/ BOOL ScDocument::IsActiveScenario( USHORT nTab ) const
+/*N*/ {
+/*N*/ if (nTab<=MAXTAB && pTab[nTab])
+/*N*/ return pTab[nTab]->IsActiveScenario();
+/*N*/
+/*N*/ return FALSE;
+/*N*/ }
+
+/*N*/ void ScDocument::SetActiveScenario( USHORT nTab, BOOL bActive )
+/*N*/ {
+/*N*/ if (nTab<=MAXTAB && pTab[nTab])
+/*N*/ pTab[nTab]->SetActiveScenario( bActive );
+/*N*/ }
+
+
+/*N*/ void ScDocument::AddUnoObject( SfxListener& rObject )
+/*N*/ {
+/*N*/ if (!pUnoBroadcaster)
+/*N*/ pUnoBroadcaster = new SfxBroadcaster;
+/*N*/
+/*N*/ rObject.StartListening( *pUnoBroadcaster );
+/*N*/ }
+
+/*N*/ void ScDocument::RemoveUnoObject( SfxListener& rObject )
+/*N*/ {
+/*N*/ if (pUnoBroadcaster)
+/*N*/ {
+/*N*/ rObject.EndListening( *pUnoBroadcaster );
+/*N*/
+/*N*/ if ( bInUnoBroadcast )
+/*N*/ {
+/*?*/ // #107294# Broadcasts from ScDocument::BroadcastUno are the only way that
+/*?*/ // uno object methods are called without holding a reference.
+/*?*/ //
+/*?*/ // If RemoveUnoObject is called from an object dtor in the finalizer thread
+/*?*/ // while the main thread is calling BroadcastUno, the dtor thread must wait
+/*?*/ // (or the object's Notify might try to access a deleted object).
+/*?*/ // The SolarMutex can't be locked here because if a component is called from
+/*?*/ // a VCL event, the main thread has the SolarMutex locked all the time.
+/*?*/ //
+/*?*/ // This check is done after calling EndListening, so a later BroadcastUno call
+/*?*/ // won't touch this object.
+/*?*/
+/*?*/ osl::SolarMutex& rSolarMutex = Application::GetSolarMutex();
+/*?*/ if ( rSolarMutex.tryToAcquire() )
+/*?*/ {
+/*?*/ // BroadcastUno is always called with the SolarMutex locked, so if it
+/*?*/ // can be acquired, this is within the same thread (should not happen)
+/*?*/ DBG_ERRORFILE( "RemoveUnoObject called from BroadcastUno" );
+/*?*/ rSolarMutex.release();
+/*?*/ }
+/*?*/ else
+/*?*/ {
+/*?*/ // let the thread that called BroadcastUno continue
+/*?*/ while ( bInUnoBroadcast )
+/*?*/ {
+/*?*/ osl::Thread::yield();
+/*?*/ }
+/*?*/ }
+/*N*/ }
+/*N*/ }
+/*N*/ else
+/*?*/ DBG_ERROR("No Uno broadcaster");
+/*N*/ }
+
+/*N*/ void ScDocument::BroadcastUno( const SfxHint &rHint )
+/*N*/ {
+/*N*/ if (pUnoBroadcaster)
+/*N*/ {
+/*N*/ bInUnoBroadcast = TRUE;
+/*N*/ pUnoBroadcaster->Broadcast( rHint );
+/*N*/ bInUnoBroadcast = FALSE;
+/*N*/ }
+/*N*/ }
+
+/*N*/ void ScDocument::UpdateReference( UpdateRefMode eUpdateRefMode,
+/*N*/ USHORT nCol1, USHORT nRow1, USHORT nTab1,
+/*N*/ USHORT nCol2, USHORT nRow2, USHORT nTab2,
+/*N*/ short nDx, short nDy, short nDz,
+/*N*/ ScDocument* pUndoDoc, BOOL bIncludeDraw )
+/*N*/ {
+/*N*/ PutInOrder( nCol1, nCol2 );
+/*N*/ PutInOrder( nRow1, nRow2 );
+/*N*/ PutInOrder( nTab1, nTab2 );
+/*N*/ if (VALIDTAB(nTab1) && VALIDTAB(nTab2))
+/*N*/ {
+/*N*/ BOOL bExpandRefsOld = IsExpandRefs();
+/*N*/ if ( eUpdateRefMode == URM_INSDEL && (nDx > 0 || nDy > 0 || nDz > 0) )
+/*N*/ SetExpandRefs( SC_MOD()->GetInputOptions().GetExpandRefs() );
+/*N*/ USHORT i;
+/*N*/ USHORT iMax;
+/*N*/ if ( eUpdateRefMode == URM_COPY )
+/*N*/ {
+/*N*/ i = nTab1;
+/*N*/ iMax = nTab2;
+/*N*/ }
+/*N*/ else
+/*N*/ {
+/*N*/ ScRange aRange( nCol1, nRow1, nTab1, nCol2, nRow2, nTab2 );
+/*N*/ xColNameRanges->UpdateReference( eUpdateRefMode, this, aRange, nDx, nDy, nDz );
+/*N*/ xRowNameRanges->UpdateReference( eUpdateRefMode, this, aRange, nDx, nDy, nDz );
+/*N*/ pDBCollection->UpdateReference( eUpdateRefMode, nCol1, nRow1, nTab1, nCol2, nRow2, nTab2, nDx, nDy, nDz );
+/*N*/ pRangeName->UpdateReference( eUpdateRefMode, aRange, nDx, nDy, nDz );
+/*N*/ if (pPivotCollection)
+/*N*/ pPivotCollection->UpdateReference( eUpdateRefMode, nCol1, nRow1, nTab1, nCol2, nRow2, nTab2, nDx, nDy, nDz );
+/*N*/ if ( pDPCollection )
+/*N*/ pDPCollection->UpdateReference( eUpdateRefMode, aRange, nDx, nDy, nDz );
+/*N*/ UpdateChartRef( eUpdateRefMode, nCol1, nRow1, nTab1, nCol2, nRow2, nTab2, nDx, nDy, nDz );
+/*N*/ UpdateRefAreaLinks( eUpdateRefMode, aRange, nDx, nDy, nDz );
+/*N*/ if ( pCondFormList )
+/*N*/ pCondFormList->UpdateReference( eUpdateRefMode, aRange, nDx, nDy, nDz );
+/*N*/ if ( pDetOpList )
+/*N*/ pDetOpList->UpdateReference( this, eUpdateRefMode, aRange, nDx, nDy, nDz );
+/*N*/ if ( pUnoBroadcaster )
+/*N*/ pUnoBroadcaster->Broadcast( ScUpdateRefHint(
+/*N*/ eUpdateRefMode, aRange, nDx, nDy, nDz ) );
+/*N*/ i = 0;
+/*N*/ iMax = MAXTAB;
+/*N*/ }
+/*N*/ for ( ; i<=iMax; i++)
+/*N*/ if (pTab[i])
+/*N*/ pTab[i]->UpdateReference(
+/*N*/ eUpdateRefMode, nCol1, nRow1, nTab1, nCol2, nRow2, nTab2,
+/*N*/ nDx, nDy, nDz, pUndoDoc, bIncludeDraw );
+/*N*/
+/*N*/ if ( bIsEmbedded )
+/*N*/ {
+/*N*/ USHORT theCol1, theRow1, theTab1, theCol2, theRow2, theTab2;
+/*N*/ theCol1 = aEmbedRange.aStart.Col();
+/*N*/ theRow1 = aEmbedRange.aStart.Row();
+/*N*/ theTab1 = aEmbedRange.aStart.Tab();
+/*N*/ theCol2 = aEmbedRange.aEnd.Col();
+/*N*/ theRow2 = aEmbedRange.aEnd.Row();
+/*N*/ theTab2 = aEmbedRange.aEnd.Tab();
+/*N*/ if ( ScRefUpdate::Update( this, eUpdateRefMode, nCol1,nRow1,nTab1, nCol2,nRow2,nTab2,
+/*N*/ nDx,nDy,nDz, theCol1,theRow1,theTab1, theCol2,theRow2,theTab2 ) )
+/*N*/ {
+/*N*/ aEmbedRange = ScRange( theCol1,theRow1,theTab1, theCol2,theRow2,theTab2 );
+/*N*/ }
+/*N*/ }
+/*N*/ SetExpandRefs( bExpandRefsOld );
+ }
+/*N*/ }
+
+
+
+/*N*/ void ScDocument::Fill(USHORT nCol1, USHORT nRow1, USHORT nCol2, USHORT nRow2, const ScMarkData& rMark,
+/*N*/ USHORT nFillCount, FillDir eFillDir, FillCmd eFillCmd, FillDateCmd eFillDateCmd,
+/*N*/ double nStepValue, double nMaxValue)
+/*N*/ {
+/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 PutInOrder( nCol1, nCol2 );
+/*N*/ }
+
+
+/*N*/ void ScDocument::AutoFormat( USHORT nStartCol, USHORT nStartRow, USHORT nEndCol, USHORT nEndRow,
+/*N*/ USHORT nFormatNo, const ScMarkData& rMark )
+/*N*/ {
+/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 PutInOrder( nStartCol, nEndCol );
+/*N*/ }
+
+
+// Outline anpassen
+
+/*N*/ BOOL ScDocument::UpdateOutlineCol( USHORT nStartCol, USHORT nEndCol, USHORT nTab, BOOL bShow )
+/*N*/ {
+/*N*/ if ( nTab<=MAXTAB && pTab[nTab] )
+/*N*/ return pTab[nTab]->UpdateOutlineCol( nStartCol, nEndCol, bShow );
+/*N*/
+/*N*/ DBG_ERROR("missing tab");
+/*N*/ return FALSE;
+/*N*/ }
+
+/*N*/ BOOL ScDocument::UpdateOutlineRow( USHORT nStartRow, USHORT nEndRow, USHORT nTab, BOOL bShow )
+/*N*/ {
+/*N*/ if ( nTab<=MAXTAB && pTab[nTab] )
+/*N*/ return pTab[nTab]->UpdateOutlineRow( nStartRow, nEndRow, bShow );
+/*N*/
+/*N*/ DBG_ERROR("missing tab");
+/*N*/ return FALSE;
+/*N*/ }
+
+/*N*/ void ScDocument::Sort(USHORT nTab, const ScSortParam& rSortParam, BOOL bKeepQuery)
+/*N*/ {
+/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 if ( nTab<=MAXTAB && pTab[nTab] )
+/*N*/ }
+
+/*N*/ USHORT ScDocument::Query(USHORT nTab, const ScQueryParam& rQueryParam, BOOL bKeepSub)
+/*N*/ {
+/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 if ( nTab<=MAXTAB && pTab[nTab] )
+/*N*/ return 0;
+/*N*/ }
+
+
+
+
+
+/*N*/ BOOL ScDocument::CreateQueryParam(USHORT nCol1, USHORT nRow1, USHORT nCol2, USHORT nRow2, USHORT nTab, ScQueryParam& rQueryParam)
+/*N*/ {
+/*N*/ if ( nTab<=MAXTAB && pTab[nTab] )
+/*N*/ return pTab[nTab]->CreateQueryParam(nCol1, nRow1, nCol2, nRow2, rQueryParam);
+/*N*/
+/*N*/ DBG_ERROR("missing tab");
+/*N*/ return FALSE;
+/*N*/ }
+
+/*N*/ BOOL ScDocument::HasColHeader( USHORT nStartCol, USHORT nStartRow, USHORT nEndCol, USHORT nEndRow,
+/*N*/ USHORT nTab )
+/*N*/ {
+/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 if (VALIDTAB(nTab))
+/*N*/ return FALSE;
+/*N*/ }
+
+// Funktionen werden als 1 schon vom InputHandler eingefuegt
+#define SC_STRTYPE_NAMES 2
+#define SC_STRTYPE_DBNAMES 3
+#define SC_STRTYPE_HEADERS 4
+
+
+
+/*N*/ BOOL ScDocument::IsEmbedded() const
+/*N*/ {
+/*N*/ return bIsEmbedded;
+/*N*/ }
+
+
+
+
+
+/*N*/ ScRange ScDocument::GetRange( USHORT nTab, const Rectangle& rMMRect )
+/*N*/ {
+/*N*/ ScTable* pTable = pTab[nTab];
+/*N*/ if (!pTable)
+/*N*/ {
+/*N*/ DBG_ERROR("GetRange ohne Tabelle");
+/*N*/ return ScRange();
+/*N*/ }
+/*N*/
+/*N*/ long nSize;
+/*N*/ long nTwips;
+/*N*/ long nAdd;
+/*N*/ BOOL bEnd;
+/*N*/
+/*N*/ nSize = 0;
+/*N*/ nTwips = (long) (rMMRect.Left() / HMM_PER_TWIPS);
+/*N*/
+/*N*/ USHORT nX1 = 0;
+/*N*/ bEnd = FALSE;
+/*N*/ while (!bEnd)
+/*N*/ {
+/*N*/ nAdd = (long) pTable->GetColWidth(nX1);
+/*N*/ if (nSize+nAdd <= nTwips+1 && nX1<MAXCOL)
+/*N*/ {
+/*N*/ nSize += nAdd;
+/*N*/ ++nX1;
+/*N*/ }
+/*N*/ else
+/*N*/ bEnd = TRUE;
+/*N*/ }
+/*N*/
+/*N*/ nTwips = (long) (rMMRect.Right() / HMM_PER_TWIPS);
+/*N*/
+/*N*/ USHORT nX2 = nX1;
+/*N*/ bEnd = FALSE;
+/*N*/ while (!bEnd)
+/*N*/ {
+/*N*/ nAdd = (long) pTable->GetColWidth(nX2);
+/*N*/ if (nSize+nAdd < nTwips && nX2<MAXCOL)
+/*N*/ {
+/*N*/ nSize += nAdd;
+/*N*/ ++nX2;
+/*N*/ }
+/*N*/ else
+/*N*/ bEnd = TRUE;
+/*N*/ }
+/*N*/
+/*N*/
+/*N*/ nSize = 0;
+/*N*/ nTwips = (long) (rMMRect.Top() / HMM_PER_TWIPS);
+/*N*/
+/*N*/ USHORT nY1 = 0;
+/*N*/ bEnd = FALSE;
+/*N*/ while (!bEnd)
+/*N*/ {
+/*N*/ nAdd = (long) pTable->GetRowHeight(nY1);
+/*N*/ if (nSize+nAdd <= nTwips+1 && nY1<MAXROW)
+/*N*/ {
+/*N*/ nSize += nAdd;
+/*N*/ ++nY1;
+/*N*/ }
+/*N*/ else
+/*N*/ bEnd = TRUE;
+/*N*/ }
+/*N*/
+/*N*/ nTwips = (long) (rMMRect.Bottom() / HMM_PER_TWIPS);
+/*N*/
+/*N*/ USHORT nY2 = nY1;
+/*N*/ bEnd = FALSE;
+/*N*/ while (!bEnd)
+/*N*/ {
+/*N*/ nAdd = (long) pTable->GetRowHeight(nY2);
+/*N*/ if (nSize+nAdd < nTwips && nY2<MAXROW)
+/*N*/ {
+/*N*/ nSize += nAdd;
+/*N*/ ++nY2;
+/*N*/ }
+/*N*/ else
+/*N*/ bEnd = TRUE;
+/*N*/ }
+/*N*/
+/*N*/ return ScRange( nX1,nY1,nTab, nX2,nY2,nTab );
+/*N*/ }
+
+
+// VisArea auf Zellgrenzen anpassen
+
+/*N*/ void lcl_SnapHor( ScTable* pTable, long& rVal, USHORT& rStartCol )
+/*N*/ {
+/*N*/ USHORT nCol = 0;
+/*N*/ long nTwips = (long) (rVal / HMM_PER_TWIPS);
+/*N*/ long nSnap = 0;
+/*N*/ while ( nCol<MAXCOL )
+/*N*/ {
+/*N*/ long nAdd = pTable->GetColWidth(nCol);
+/*N*/ if ( nSnap + nAdd/2 < nTwips || nCol < rStartCol )
+/*N*/ {
+/*N*/ nSnap += nAdd;
+/*N*/ ++nCol;
+/*N*/ }
+/*N*/ else
+/*N*/ break;
+/*N*/ }
+/*N*/ rVal = (long) ( nSnap * HMM_PER_TWIPS );
+/*N*/ rStartCol = nCol;
+/*N*/ }
+
+/*N*/ void lcl_SnapVer( ScTable* pTable, long& rVal, USHORT& rStartRow )
+/*N*/ {
+/*N*/ USHORT nRow = 0;
+/*N*/ long nTwips = (long) (rVal / HMM_PER_TWIPS);
+/*N*/ long nSnap = 0;
+/*N*/ while ( nRow<MAXROW )
+/*N*/ {
+/*N*/ long nAdd = pTable->GetRowHeight(nRow);
+/*N*/ if ( nSnap + nAdd/2 < nTwips || nRow < rStartRow )
+/*N*/ {
+/*N*/ nSnap += nAdd;
+/*N*/ ++nRow;
+/*N*/ }
+/*N*/ else
+/*N*/ break;
+/*N*/ }
+/*N*/ rVal = (long) ( nSnap * HMM_PER_TWIPS );
+/*N*/ rStartRow = nRow;
+/*N*/ }
+
+/*N*/ void ScDocument::SnapVisArea( Rectangle& rRect ) const
+/*N*/ {
+/*N*/ ScTable* pTable = pTab[nVisibleTab];
+/*N*/ if (!pTable)
+/*N*/ {
+/*N*/ DBG_ERROR("SetEmbedded ohne Tabelle");
+/*N*/ return;
+/*N*/ }
+/*N*/
+/*N*/ USHORT nCol = 0;
+/*N*/ lcl_SnapHor( pTable, rRect.Left(), nCol );
+/*N*/ ++nCol; // mindestens eine Spalte
+/*N*/ lcl_SnapHor( pTable, rRect.Right(), nCol );
+/*N*/
+/*N*/ USHORT nRow = 0;
+/*N*/ lcl_SnapVer( pTable, rRect.Top(), nRow );
+/*N*/ ++nRow; // mindestens eine Zeile
+/*N*/ lcl_SnapVer( pTable, rRect.Bottom(), nRow );
+/*N*/ }
+
+/*N*/ void ScDocument::SetDocProtection( BOOL bProtect, const uno::Sequence<sal_Int8>& rPasswd )
+/*N*/ {
+/*N*/ bProtected = bProtect;
+/*N*/ aProtectPass = rPasswd;
+/*N*/ }
+
+/*N*/ void ScDocument::SetTabProtection( USHORT nTab, BOOL bProtect, const uno::Sequence<sal_Int8>& rPasswd )
+/*N*/ {
+/*N*/ if (VALIDTAB(nTab))
+/*N*/ if (pTab[nTab])
+/*N*/ pTab[nTab]->SetProtection( bProtect, rPasswd );
+/*N*/ }
+
+/*N*/ BOOL ScDocument::IsDocProtected() const
+/*N*/ {
+/*N*/ return bProtected;
+/*N*/ }
+
+/*N*/ BOOL ScDocument::IsDocEditable() const
+/*N*/ {
+/*N*/ // import into read-only document is possible - must be extended if other filters use api
+/*N*/
+/*N*/ return !bProtected && ( !pShell || !pShell->IsReadOnly() || bImportingXML );
+/*N*/ }
+
+/*N*/ BOOL ScDocument::IsTabProtected( USHORT nTab ) const
+/*N*/ {
+/*N*/ if (VALIDTAB(nTab))
+/*N*/ if (pTab[nTab])
+/*N*/ return pTab[nTab]->IsProtected();
+/*N*/
+/*N*/ DBG_ERROR("Falsche Tabellennummer");
+/*N*/ return FALSE;
+/*N*/ }
+
+/*N*/ const uno::Sequence<sal_Int8>& ScDocument::GetDocPassword() const
+/*N*/ {
+/*N*/ return aProtectPass;
+/*N*/ }
+
+/*N*/ const uno::Sequence<sal_Int8>& ScDocument::GetTabPassword( USHORT nTab ) const
+/*N*/ {
+/*N*/ if (VALIDTAB(nTab))
+/*N*/ if (pTab[nTab])
+/*N*/ return pTab[nTab]->GetPassword();
+/*N*/
+/*N*/ DBG_ERROR("Falsche Tabellennummer");
+/*N*/ return aProtectPass;
+/*N*/ }
+
+/*N*/ const ScDocOptions& ScDocument::GetDocOptions() const
+/*N*/ {
+/*N*/ DBG_ASSERT( pDocOptions, "No DocOptions! :-(" );
+/*N*/ return *pDocOptions;
+/*N*/ }
+
+/*N*/ void ScDocument::SetDocOptions( const ScDocOptions& rOpt )
+/*N*/ {
+/*N*/ USHORT d,m,y;
+/*N*/
+/*N*/ DBG_ASSERT( pDocOptions, "No DocOptions! :-(" );
+/*N*/ *pDocOptions = rOpt;
+/*N*/ rOpt.GetDate( d,m,y );
+/*N*/
+/*N*/ SvNumberFormatter* pFormatter = xPoolHelper->GetFormTable();
+/*N*/ pFormatter->ChangeNullDate( d,m,y );
+/*N*/ pFormatter->ChangeStandardPrec( (USHORT)rOpt.GetStdPrecision() );
+/*N*/ pFormatter->SetYear2000( rOpt.GetYear2000() );
+/*N*/ }
+
+/*N*/ const ScViewOptions& ScDocument::GetViewOptions() const
+/*N*/ {
+/*N*/ DBG_ASSERT( pViewOptions, "No ViewOptions! :-(" );
+/*N*/ return *pViewOptions;
+/*N*/ }
+
+/*N*/ void ScDocument::SetViewOptions( const ScViewOptions& rOpt )
+/*N*/ {
+/*N*/ DBG_ASSERT( pViewOptions, "No ViewOptions! :-(" );
+/*N*/ *pViewOptions = rOpt;
+/*N*/ }
+
+/*N*/ void ScDocument::GetLanguage( LanguageType& rLatin, LanguageType& rCjk, LanguageType& rCtl ) const
+/*N*/ {
+/*N*/ rLatin = eLanguage;
+/*N*/ rCjk = eCjkLanguage;
+/*N*/ rCtl = eCtlLanguage;
+/*N*/ }
+
+/*N*/ void ScDocument::SetLanguage( LanguageType eLatin, LanguageType eCjk, LanguageType eCtl )
+/*N*/ {
+/*N*/ eLanguage = eLatin;
+/*N*/ eCjkLanguage = eCjk;
+/*N*/ eCtlLanguage = eCtl;
+/*N*/ if ( xPoolHelper.is() )
+/*N*/ {
+/*N*/ ScDocumentPool* pPool = xPoolHelper->GetDocPool();
+/*N*/ pPool->SetPoolDefaultItem( SvxLanguageItem( eLanguage, ATTR_FONT_LANGUAGE ) );
+/*N*/ pPool->SetPoolDefaultItem( SvxLanguageItem( eCjkLanguage, ATTR_CJK_FONT_LANGUAGE ) );
+/*N*/ pPool->SetPoolDefaultItem( SvxLanguageItem( eCtlLanguage, ATTR_CTL_FONT_LANGUAGE ) );
+/*N*/ }
+/*N*/
+/*N*/ UpdateDrawLanguages(); // set edit engine defaults in drawing layer pool
+/*N*/ }
+
+/*N*/ Rectangle ScDocument::GetMMRect( USHORT nStartCol, USHORT nStartRow,
+/*N*/ USHORT nEndCol, USHORT nEndRow, USHORT nTab )
+/*N*/ {
+/*N*/ if (nTab > MAXTAB || !pTab[nTab])
+/*N*/ {
+/*N*/ DBG_ERROR("GetMMRect: falsche Tabelle");
+/*N*/ return Rectangle(0,0,0,0);
+/*N*/ }
+/*N*/
+/*N*/ USHORT i;
+/*N*/ Rectangle aRect;
+/*N*/
+/*N*/ for (i=0; i<nStartCol; i++)
+/*N*/ aRect.Left() += GetColWidth(i,nTab);
+/*N*/ for (i=0; i<nStartRow; i++)
+/*N*/ aRect.Top() += FastGetRowHeight(i,nTab);
+/*N*/
+/*N*/ aRect.Right() = aRect.Left();
+/*N*/ aRect.Bottom() = aRect.Top();
+/*N*/
+/*N*/ for (i=nStartCol; i<=nEndCol; i++)
+/*N*/ aRect.Right() += GetColWidth(i,nTab);
+/*N*/ for (i=nStartRow; i<=nEndRow; i++)
+/*N*/ aRect.Bottom() += FastGetRowHeight(i,nTab);
+/*N*/
+/*N*/ aRect.Left() = (long)(aRect.Left() * HMM_PER_TWIPS);
+/*N*/ aRect.Right() = (long)(aRect.Right() * HMM_PER_TWIPS);
+/*N*/ aRect.Top() = (long)(aRect.Top() * HMM_PER_TWIPS);
+/*N*/ aRect.Bottom() = (long)(aRect.Bottom() * HMM_PER_TWIPS);
+/*N*/
+/*N*/ return aRect;
+/*N*/ }
+
+/*N*/ void ScDocument::DoMerge( USHORT nTab, USHORT nStartCol, USHORT nStartRow,
+/*N*/ USHORT nEndCol, USHORT nEndRow )
+/*N*/ {
+/*N*/ ScMergeAttr aAttr( nEndCol-nStartCol+1, nEndRow-nStartRow+1 );
+/*N*/ ApplyAttr( nStartCol, nStartRow, nTab, aAttr );
+/*N*/
+/*N*/ if ( nEndCol > nStartCol )
+/*N*/ ApplyFlagsTab( nStartCol+1, nStartRow, nEndCol, nStartRow, nTab, SC_MF_HOR );
+/*N*/ if ( nEndRow > nStartRow )
+/*N*/ ApplyFlagsTab( nStartCol, nStartRow+1, nStartCol, nEndRow, nTab, SC_MF_VER );
+/*N*/ if ( nEndCol > nStartCol && nEndRow > nStartRow )
+/*N*/ ApplyFlagsTab( nStartCol+1, nStartRow+1, nEndCol, nEndRow, nTab, SC_MF_HOR | SC_MF_VER );
+/*N*/ }
+
+
+/*N*/ void ScDocument::ExtendPrintArea( OutputDevice* pDev, USHORT nTab,
+/*N*/ USHORT nStartCol, USHORT nStartRow, USHORT& rEndCol, USHORT nEndRow )
+/*N*/ {
+/*N*/ if ( nTab <= MAXTAB && pTab[nTab] )
+/*N*/ pTab[nTab]->ExtendPrintArea( pDev, nStartCol, nStartRow, rEndCol, nEndRow );
+/*N*/ }
+
+/*N*/ void ScDocument::IncSizeRecalcLevel( USHORT nTab )
+/*N*/ {
+/*N*/ if ( nTab <= MAXTAB && pTab[nTab] )
+/*N*/ pTab[nTab]->IncRecalcLevel();
+/*N*/ }
+
+/*N*/ void ScDocument::DecSizeRecalcLevel( USHORT nTab )
+/*N*/ {
+/*N*/ if ( nTab <= MAXTAB && pTab[nTab] )
+/*N*/ pTab[nTab]->DecRecalcLevel();
+/*N*/ }
+
+
+
+
+} //namespace binfilter
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */