diff options
Diffstat (limited to 'sc/inc/document.hxx')
-rw-r--r-- | sc/inc/document.hxx | 1871 |
1 files changed, 1871 insertions, 0 deletions
diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx new file mode 100644 index 000000000000..5c4685223281 --- /dev/null +++ b/sc/inc/document.hxx @@ -0,0 +1,1871 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + +#ifndef SC_DOCUMENT_HXX +#define SC_DOCUMENT_HXX + + +#include <vcl/prntypes.hxx> +#include <vcl/timer.hxx> +#include <com/sun/star/uno/Reference.hxx> +#include <vos/ref.hxx> +#include "scdllapi.h" +#include "table.hxx" // FastGetRowHeight (inline) +#include "rangelst.hxx" +#include "brdcst.hxx" +#include "tabopparams.hxx" +#include "formula/grammar.hxx" +#include <com/sun/star/chart2/XChartDocument.hpp> +#include "scdllapi.h" + +#include <memory> +#include <map> +#include <set> + +// Wang Xu Ming -- 2009-8-17 +// DataPilot Migration - Cache&&Performance +#include <list> +#include "dpobject.hxx" +#include "dptabdat.hxx" +// End Comments + +class KeyEvent; +class OutputDevice; +class SdrObject; +class SfxBroadcaster; +class SfxListener; +class SfxHint; +class SfxItemSet; +class SfxObjectShell; +class SfxBindings; +class SfxPoolItem; +class SfxItemPool; +class SfxPrinter; +class SfxStatusBarManager; +class SfxStyleSheetBase; +class SvMemoryStream; +class SvNumberFormatter; +class SvxBorderLine; +class SvxBoxInfoItem; +class SvxBoxItem; +class SvxBrushItem; +class SvxForbiddenCharactersTable; +namespace sfx2 { + class LinkManager; + } +class SvxSearchItem; +class SvxShadowItem; +class Window; +class XColorTable; +class List; + +class ScAutoFormatData; +class ScBaseCell; +class ScStringCell; +class ScBroadcastAreaSlotMachine; +class ScChangeViewSettings; +class ScChartCollection; +class ScChartListenerCollection; +class ScConditionalFormat; +class ScConditionalFormatList; +class ScDBCollection; +class ScDBData; +class ScDetOpData; +class ScDetOpList; +class ScDocOptions; +class ScDocProtection; +class ScDocumentPool; +class ScDrawLayer; +class ScExtDocOptions; +class ScExternalRefManager; +class ScFormulaCell; +class ScMarkData; +class ScOutlineTable; +class ScPatternAttr; +class ScPrintRangeSaver; +class ScRangeData; +class ScRangeName; +class ScStyleSheet; +class ScStyleSheetPool; +class ScTable; +class ScTableProtection; +class ScTokenArray; +class ScValidationData; +class ScValidationDataList; +class ScViewOptions; +class ScStrCollection; +class TypedScStrCollection; +class ScChangeTrack; +class ScFieldEditEngine; +class ScNoteEditEngine; +struct ScConsolidateParam; +class ScDPObject; +class ScDPCollection; +class ScMatrix; +class ScScriptTypeData; +class ScPoolHelper; +struct ScSortParam; +class ScRefreshTimerControl; +class ScUnoListenerCalls; +class ScUnoRefList; +class ScRecursionHelper; +struct RowInfo; +struct ScTableInfo; +struct ScTabOpParam; +class VirtualDevice; +class ScAutoNameCache; +class ScTemporaryChartLock; +class ScLookupCache; +struct ScLookupCacheMapImpl; +class SfxUndoManager; +class ScFormulaParserPool; +struct ScClipParam; +struct ScClipRangeNameData; +class ScRowBreakIterator; + +namespace com { namespace sun { namespace star { + namespace lang { + class XMultiServiceFactory; + struct EventObject; + } + namespace i18n { + class XBreakIterator; + } + namespace util { + class XModifyListener; + } + namespace embed { + class XEmbeddedObject; + } + namespace script { namespace vba { + class XVBAEventProcessor; + } } + namespace sheet { + struct TablePageBreakData; + } +} } } + +#include <svl/zforlist.hxx> +/* +#ifdef _ZFORLIST_DECLARE_TABLE +class SvNumberFormatterIndexTable; +#else +class Table; +typedef Table SvNumberFormatterIndexTable; +#endif +*/ + +#define SC_DOC_NEW 0xFFFF + +#define SC_MACROCALL_ALLOWED 0 +#define SC_MACROCALL_NOTALLOWED 1 +#define SC_MACROCALL_ASK 2 + +#define SC_ASIANCOMPRESSION_INVALID 0xff +#define SC_ASIANKERNING_INVALID 0xff + + +enum ScDocumentMode + { + SCDOCMODE_DOCUMENT, + SCDOCMODE_CLIP, + SCDOCMODE_UNDO + }; + + +struct ScDocStat +{ + String aDocName; + SCTAB nTableCount; + ULONG nCellCount; + USHORT nPageCount; +}; + +// The constant parameters to CopyBlockFromClip +struct ScCopyBlockFromClipParams +{ + ScDocument* pRefUndoDoc; + ScDocument* pClipDoc; + USHORT nInsFlag; + SCTAB nTabStart; + SCTAB nTabEnd; + BOOL bAsLink; + BOOL bSkipAttrForEmpty; +}; + + +// for loading of binary file format symbol string cells which need font conversion +struct ScSymbolStringCellEntry +{ + ScStringCell* pCell; + SCROW nRow; +}; + + +// ----------------------------------------------------------------------- + +// DDE link modes +const BYTE SC_DDE_DEFAULT = 0; +const BYTE SC_DDE_ENGLISH = 1; +const BYTE SC_DDE_TEXT = 2; +const BYTE SC_DDE_IGNOREMODE = 255; /// For usage in FindDdeLink() only! + + +// ----------------------------------------------------------------------- + +class ScDocument +{ +friend class ScDocumentIterator; +friend class ScValueIterator; +friend class ScDBQueryDataIterator; +friend class ScCellIterator; +friend class ScQueryCellIterator; +friend class ScHorizontalCellIterator; +friend class ScHorizontalAttrIterator; +friend class ScDocAttrIterator; +friend class ScAttrRectIterator; +friend class ScDocShell; + +private: + ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xServiceManager; + + vos::ORef<ScPoolHelper> xPoolHelper; + + SfxUndoManager* mpUndoManager; + ScFieldEditEngine* pEditEngine; // uses pEditPool from xPoolHelper + ScNoteEditEngine* pNoteEngine; // uses pEditPool from xPoolHelper + SfxItemPool* pNoteItemPool; // SfxItemPool to be used if pDrawLayer not created. + SfxObjectShell* pShell; + SfxPrinter* pPrinter; + VirtualDevice* pVirtualDevice_100th_mm; + ScDrawLayer* pDrawLayer; // SdrModel + XColorTable* pColorTable; + ScConditionalFormatList* pCondFormList; // bedingte Formate + ScValidationDataList* pValidationList; // Gueltigkeit + SvNumberFormatterIndexTable* pFormatExchangeList; // zum Umsetzen von Zahlenformaten + ScTable* pTab[MAXTABCOUNT]; + ScRangeName* pRangeName; + ScDBCollection* pDBCollection; + ScDPCollection* pDPCollection; + // Wang Xu Ming -- 2009-8-17 + // DataPilot Migration - Cache&&Performance + std::list<ScDPObject> m_listDPObjectsInClip; + std::list<ScDPTableDataCache*> m_listDPObjectsCaches; + // End Comments + ScChartCollection* pChartCollection; + std::auto_ptr< ScTemporaryChartLock > apTemporaryChartLock; + ScPatternAttr* pSelectionAttr; // Attribute eines Blocks + mutable sfx2::LinkManager* pLinkManager; + ScFormulaCell* pFormulaTree; // Berechnungsbaum Start + ScFormulaCell* pEOFormulaTree; // Berechnungsbaum Ende, letzte Zelle + ScFormulaCell* pFormulaTrack; // BroadcastTrack Start + ScFormulaCell* pEOFormulaTrack; // BrodcastTrack Ende, letzte Zelle + ScBroadcastAreaSlotMachine* pBASM; // BroadcastAreas + ScChartListenerCollection* pChartListenerCollection; + ScStrCollection* pOtherObjects; // non-chart OLE objects + SvMemoryStream* pClipData; + ScDetOpList* pDetOpList; + ScChangeTrack* pChangeTrack; + SfxBroadcaster* pUnoBroadcaster; + ScUnoListenerCalls* pUnoListenerCalls; + ScUnoRefList* pUnoRefUndoList; + ScChangeViewSettings* pChangeViewSettings; + ScScriptTypeData* pScriptTypeData; + ScRefreshTimerControl* pRefreshTimerControl; + vos::ORef<SvxForbiddenCharactersTable> xForbiddenCharacters; + + ScFieldEditEngine* pCacheFieldEditEngine; + + ::std::auto_ptr<ScDocProtection> pDocProtection; + ::std::auto_ptr<ScClipParam> mpClipParam; + + ::std::auto_ptr<ScExternalRefManager> pExternalRefMgr; + + // mutable for lazy construction + mutable ::std::auto_ptr< ScFormulaParserPool > + mxFormulaParserPool; /// Pool for all external formula parsers used by this document. + + String aDocName; // opt: Dokumentname + String aDocCodeName; // opt: Dokumentname + ScRangePairListRef xColNameRanges; + ScRangePairListRef xRowNameRanges; + + ScViewOptions* pViewOptions; // View-Optionen + ScDocOptions* pDocOptions; // Dokument-Optionen + ScExtDocOptions* pExtDocOptions; // fuer Import etc. + ScConsolidateParam* pConsolidateDlgData; + + ScRecursionHelper* pRecursionHelper; // information for recursive and iterative cell formulas + + ScAutoNameCache* pAutoNameCache; // for automatic name lookup during CompileXML + + ScLookupCacheMapImpl* pLookupCacheMapImpl; // cache for lookups like VLOOKUP and MATCH + + sal_Int64 nUnoObjectId; // counted up for UNO objects + + sal_uInt32 nRangeOverflowType; // used in (xml) loading for overflow warnings + + ScRange aEmbedRange; + ScAddress aCurTextWidthCalcPos; + ScAddress aOnlineSpellPos; // within whole document + ScRange aVisSpellRange; + ScAddress aVisSpellPos; // within aVisSpellRange (see nVisSpellState) + + Timer aTrackTimer; + + com::sun::star::uno::Reference< com::sun::star::script::vba::XVBAEventProcessor > + mxVbaEvents; + +public: + ScTabOpList aTableOpList; // list of ScInterpreterTableOpParams currently in use + ScInterpreterTableOpParams aLastTableOpParams; // remember last params +private: + + LanguageType eLanguage; // default language + LanguageType eCjkLanguage; // default language for asian text + LanguageType eCtlLanguage; // default language for complex text + CharSet eSrcSet; // Einlesen: Quell-Zeichensatz + + /** The compiler grammar used in document storage. GRAM_PODF for ODF 1.1 + documents, GRAM_ODFF for ODF 1.2 documents. */ + formula::FormulaGrammar::Grammar eStorageGrammar; + + /** The compiler grammar used in ODF import after brackets had been + stripped (which they shouldn't, but until that's fixed) by the XML + importer. */ + formula::FormulaGrammar::Grammar eXmlImportGrammar; + + ULONG nFormulaCodeInTree; // FormelRPN im Formelbaum + ULONG nXMLImportedFormulaCount; // progress count during XML import + USHORT nInterpretLevel; // >0 wenn im Interpreter + USHORT nMacroInterpretLevel; // >0 wenn Macro im Interpreter + USHORT nInterpreterTableOpLevel; // >0 if in Interpreter TableOp + SCTAB nMaxTableNumber; + USHORT nSrcVer; // Dateiversion (Laden/Speichern) + SCROW nSrcMaxRow; // Zeilenzahl zum Laden/Speichern + USHORT nFormulaTrackCount; + USHORT nHardRecalcState; // 0: soft, 1: hard-warn, 2: hard + SCTAB nVisibleTab; // fuer OLE etc. + + ScLkUpdMode eLinkMode; + + BOOL bAutoCalc; // Automatisch Berechnen + BOOL bAutoCalcShellDisabled; // in/von/fuer ScDocShell disabled + // ob noch ForcedFormulas berechnet werden muessen, + // im Zusammenspiel mit ScDocShell SetDocumentModified, + // AutoCalcShellDisabled und TrackFormulas + BOOL bForcedFormulaPending; + BOOL bCalculatingFormulaTree; + BOOL bIsClip; + BOOL bIsUndo; + BOOL bIsVisible; // set from view ctor + + BOOL bIsEmbedded; // Embedded-Bereich anzeigen/anpassen ? + + // kein SetDirty bei ScFormulaCell::CompileTokenArray sondern am Ende + // von ScDocument::CompileAll[WithFormats], CopyScenario, CopyBlockFromClip + BOOL bNoSetDirty; + // kein Broadcast, keine Listener aufbauen waehrend aus einem anderen + // Doc (per Filter o.ae.) inserted wird, erst bei CompileAll / CalcAfterLoad + BOOL bInsertingFromOtherDoc; + bool bLoadingMedium; + bool bImportingXML; // special handling of formula text + BOOL bXMLFromWrapper; // distinguish ScXMLImportWrapper from external component + BOOL bCalcingAfterLoad; // in CalcAfterLoad TRUE + // wenn temporaer keine Listener auf/abgebaut werden sollen + BOOL bNoListening; + BOOL bIdleDisabled; + BOOL bInLinkUpdate; // TableLink or AreaLink + BOOL bChartListenerCollectionNeedsUpdate; + // ob RC_FORCED Formelzellen im Dokument sind/waren (einmal an immer an) + BOOL bHasForcedFormulas; + // ob das Doc gerade zerstoert wird (kein Notify-Tracking etc. mehr) + BOOL bInDtorClear; + // ob bei Spalte/Zeile einfuegen am Rand einer Referenz die Referenz + // erweitert wird, wird in jedem UpdateReference aus InputOptions geholt, + // gesetzt und am Ende von UpdateReference zurueckgesetzt + BOOL bExpandRefs; + // fuer Detektiv-Update, wird bei jeder Aenderung an Formeln gesetzt + BOOL bDetectiveDirty; + + BYTE nMacroCallMode; // Makros per Warnung-Dialog disabled? + BOOL bHasMacroFunc; // valid only after loading + + BYTE nVisSpellState; + + BYTE nAsianCompression; + BYTE nAsianKerning; + BOOL bSetDrawDefaults; + + BOOL bPastingDrawFromOtherDoc; + + BYTE nInDdeLinkUpdate; // originating DDE links (stacked bool) + + BOOL bInUnoBroadcast; + BOOL bInUnoListenerCall; + formula::FormulaGrammar::Grammar eGrammar; + + mutable BOOL bStyleSheetUsageInvalid; + + bool mbUndoEnabled; + bool mbAdjustHeightEnabled; + bool mbExecuteLinkEnabled; + bool mbChangeReadOnlyEnabled; // allow changes in read-only document (for API import filters) + bool mbStreamValidLocked; + + sal_Int16 mnNamedRangesLockCount; + +public: + SC_DLLPUBLIC ULONG GetCellCount() const; // alle Zellen + SCSIZE GetCellCount(SCTAB nTab, SCCOL nCol) const; + ULONG GetWeightedCount() const; // Formeln und Edit staerker gewichtet + ULONG GetCodeCount() const; // RPN-Code in Formeln + DECL_LINK( GetUserDefinedColor, USHORT * ); + // Numberformatter + +public: + SC_DLLPUBLIC ScDocument( ScDocumentMode eMode = SCDOCMODE_DOCUMENT, + SfxObjectShell* pDocShell = NULL ); + SC_DLLPUBLIC ~ScDocument(); + + inline ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > + GetServiceManager() const { return xServiceManager; } + + SC_DLLPUBLIC const String& GetName() const { return aDocName; } + void SetName( const String& r ) { aDocName = r; } + const String& GetCodeName() const { return aDocCodeName; } + void SetCodeName( const String& r ) { aDocCodeName = r; } + + void GetDocStat( ScDocStat& rDocStat ); + + SC_DLLPUBLIC void InitDrawLayer( SfxObjectShell* pDocShell = NULL ); + XColorTable* GetColorTable(); + + SC_DLLPUBLIC sfx2::LinkManager* GetLinkManager() const; + + SC_DLLPUBLIC const ScDocOptions& GetDocOptions() const; + SC_DLLPUBLIC void SetDocOptions( const ScDocOptions& rOpt ); + SC_DLLPUBLIC const ScViewOptions& GetViewOptions() const; + SC_DLLPUBLIC void SetViewOptions( const ScViewOptions& rOpt ); + void SetPrintOptions(); + + ScExtDocOptions* GetExtDocOptions() { return pExtDocOptions; } + SC_DLLPUBLIC void SetExtDocOptions( ScExtDocOptions* pNewOptions ); + + void GetLanguage( LanguageType& rLatin, LanguageType& rCjk, LanguageType& rCtl ) const; + void SetLanguage( LanguageType eLatin, LanguageType eCjk, LanguageType eCtl ); + + void SetDrawDefaults(); + + void SetConsolidateDlgData( const ScConsolidateParam* pData ); + const ScConsolidateParam* GetConsolidateDlgData() const { return pConsolidateDlgData; } + + void Clear( sal_Bool bFromDestructor = sal_False ); + + ScFieldEditEngine* CreateFieldEditEngine(); + void DisposeFieldEditEngine(ScFieldEditEngine*& rpEditEngine); + + SC_DLLPUBLIC ScRangeName* GetRangeName(); + void SetRangeName( ScRangeName* pNewRangeName ); + SCTAB GetMaxTableNumber() { return nMaxTableNumber; } + void SetMaxTableNumber(SCTAB nNumber) { nMaxTableNumber = nNumber; } + + ScRangePairList* GetColNameRanges() { return &xColNameRanges; } + ScRangePairList* GetRowNameRanges() { return &xRowNameRanges; } + ScRangePairListRef& GetColNameRangesRef() { return xColNameRanges; } + ScRangePairListRef& GetRowNameRangesRef() { return xRowNameRanges; } + + SC_DLLPUBLIC ScDBCollection* GetDBCollection() const; + void SetDBCollection( ScDBCollection* pNewDBCollection, + BOOL bRemoveAutoFilter = FALSE ); + ScDBData* GetDBAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab, + BOOL bStartOnly = FALSE) const; + ScDBData* GetDBAtArea(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2) const; + +//UNUSED2008-05 ScRangeData* GetRangeAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab, +//UNUSED2008-05 BOOL bStartOnly = FALSE) const; + SC_DLLPUBLIC ScRangeData* GetRangeAtBlock( const ScRange& rBlock, String* pName=NULL ) const; + + SC_DLLPUBLIC ScDPCollection* GetDPCollection(); + ScDPObject* GetDPAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab) const; + ScDPObject* GetDPAtBlock( const ScRange& rBlock ) const; + // Wang Xu Ming -- 2009-8-17 + // DataPilot Migration - Cache&&Performance + SC_DLLPUBLIC ScDPTableDataCache* GetDPObjectCache( long nID ); + SC_DLLPUBLIC ScDPTableDataCache* GetUsedDPObjectCache ( ScRange rRange ); + SC_DLLPUBLIC long AddDPObjectCache( ScDPTableDataCache* pData ); + SC_DLLPUBLIC void RemoveDPObjectCache( long nID ); + SC_DLLPUBLIC void RemoveUnusedDPObjectCaches(); + SC_DLLPUBLIC void GetUsedDPObjectCache( std::list<ScDPTableDataCache*>& usedlist ); + SC_DLLPUBLIC long GetNewDPObjectCacheId (); + // End Comments + + SC_DLLPUBLIC ScChartCollection* GetChartCollection() const; + + void StopTemporaryChartLock(); + + void EnsureGraphicNames(); + + SdrObject* GetObjectAtPoint( SCTAB nTab, const Point& rPos ); + BOOL HasChartAtPoint( SCTAB nTab, const Point& rPos, String* pName = NULL ); + + ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XChartDocument > GetChartByName( const String& rChartName ); + SC_DLLPUBLIC void GetChartRanges( const String& rChartName, ::std::vector< ScRangeList >& rRanges, ScDocument* pSheetNameDoc ); + void SetChartRanges( const String& rChartName, const ::std::vector< ScRangeList >& rRanges ); + + void UpdateChartArea( const String& rChartName, const ScRange& rNewArea, + BOOL bColHeaders, BOOL bRowHeaders, BOOL bAdd ); + void UpdateChartArea( const String& rChartName, + const ScRangeListRef& rNewList, + BOOL bColHeaders, BOOL bRowHeaders, BOOL bAdd ); + void GetOldChartParameters( const String& rName, + ScRangeList& rRanges, BOOL& rColHeaders, BOOL& rRowHeaders ); + ::com::sun::star::uno::Reference< + ::com::sun::star::embed::XEmbeddedObject > + FindOleObjectByName( const String& rName ); + + SC_DLLPUBLIC void MakeTable( SCTAB nTab,bool _bNeedsNameCheck = true ); + + SCTAB GetVisibleTab() const { return nVisibleTab; } + SC_DLLPUBLIC void SetVisibleTab(SCTAB nTab) { nVisibleTab = nTab; } + + SC_DLLPUBLIC BOOL HasTable( SCTAB nTab ) const; + SC_DLLPUBLIC BOOL GetName( SCTAB nTab, String& rName ) const; + SC_DLLPUBLIC BOOL GetCodeName( SCTAB nTab, String& rName ) const; + SC_DLLPUBLIC BOOL SetCodeName( SCTAB nTab, String& rName ); + SC_DLLPUBLIC BOOL GetTable( const String& rName, SCTAB& rTab ) const; + SC_DLLPUBLIC inline SCTAB GetTableCount() const { return nMaxTableNumber; } + SvNumberFormatterIndexTable* GetFormatExchangeList() const { return pFormatExchangeList; } + + SC_DLLPUBLIC ScDocProtection* GetDocProtection() const; + SC_DLLPUBLIC void SetDocProtection(const ScDocProtection* pProtect); + SC_DLLPUBLIC BOOL IsDocProtected() const; + BOOL IsDocEditable() const; + SC_DLLPUBLIC BOOL IsTabProtected( SCTAB nTab ) const; + SC_DLLPUBLIC ScTableProtection* GetTabProtection( SCTAB nTab ) const; + SC_DLLPUBLIC void SetTabProtection(SCTAB nTab, const ScTableProtection* pProtect); + void CopyTabProtection(SCTAB nTabSrc, SCTAB nTabDest); + + void LockTable(SCTAB nTab); + void UnlockTable(SCTAB nTab); + + BOOL IsBlockEditable( SCTAB nTab, SCCOL nStartCol, SCROW nStartRow, + SCCOL nEndCol, SCROW nEndRow, + BOOL* pOnlyNotBecauseOfMatrix = NULL ) const; + BOOL IsSelectionEditable( const ScMarkData& rMark, + BOOL* pOnlyNotBecauseOfMatrix = NULL ) const; + BOOL HasSelectedBlockMatrixFragment( SCCOL nStartCol, SCROW nStartRow, + SCCOL nEndCol, SCROW nEndRow, + const ScMarkData& rMark ) const; + + BOOL GetMatrixFormulaRange( const ScAddress& rCellPos, ScRange& rMatrix ); + + BOOL IsEmbedded() const; + void GetEmbedded( ScRange& rRange ) const; + void SetEmbedded( const ScRange& rRange ); + void ResetEmbedded(); + Rectangle GetEmbeddedRect() const; // 1/100 mm + void SetEmbedded( const Rectangle& rRect ); // aus VisArea (1/100 mm) + void SnapVisArea( Rectangle& rRect ) const; // 1/100 mm + + SC_DLLPUBLIC BOOL ValidTabName( const String& rName ) const; + SC_DLLPUBLIC BOOL ValidNewTabName( const String& rName ) const; + SC_DLLPUBLIC void CreateValidTabName(String& rName) const; + SC_DLLPUBLIC BOOL InsertTab( SCTAB nPos, const String& rName, + BOOL bExternalDocument = FALSE ); + SC_DLLPUBLIC BOOL DeleteTab( SCTAB nTab, ScDocument* pRefUndoDoc = NULL ); + SC_DLLPUBLIC BOOL RenameTab( SCTAB nTab, const String& rName, + BOOL bUpdateRef = TRUE, + BOOL bExternalDocument = FALSE ); + BOOL MoveTab( SCTAB nOldPos, SCTAB nNewPos ); + BOOL CopyTab( SCTAB nOldPos, SCTAB nNewPos, + const ScMarkData* pOnlyMarked = NULL ); + SC_DLLPUBLIC ULONG TransferTab(ScDocument* pSrcDoc, SCTAB nSrcPos, SCTAB nDestPos, + BOOL bInsertNew = TRUE, + BOOL bResultsOnly = FALSE ); + SC_DLLPUBLIC void TransferDrawPage(ScDocument* pSrcDoc, SCTAB nSrcPos, SCTAB nDestPos); + SC_DLLPUBLIC void SetVisible( SCTAB nTab, BOOL bVisible ); + SC_DLLPUBLIC BOOL IsVisible( SCTAB nTab ) const; + BOOL IsStreamValid( SCTAB nTab ) const; + void SetStreamValid( SCTAB nTab, BOOL bSet, BOOL bIgnoreLock = FALSE ); + void LockStreamValid( bool bLock ); + bool IsStreamValidLocked() const { return mbStreamValidLocked; } + BOOL IsPendingRowHeights( SCTAB nTab ) const; + void SetPendingRowHeights( SCTAB nTab, BOOL bSet ); + SC_DLLPUBLIC void SetLayoutRTL( SCTAB nTab, BOOL bRTL ); + SC_DLLPUBLIC BOOL IsLayoutRTL( SCTAB nTab ) const; + BOOL IsNegativePage( SCTAB nTab ) const; + SC_DLLPUBLIC void SetScenario( SCTAB nTab, BOOL bFlag ); + SC_DLLPUBLIC BOOL IsScenario( SCTAB nTab ) const; + SC_DLLPUBLIC void GetScenarioData( SCTAB nTab, String& rComment, + Color& rColor, USHORT& rFlags ) const; + SC_DLLPUBLIC void SetScenarioData( SCTAB nTab, const String& rComment, + const Color& rColor, USHORT nFlags ); + SC_DLLPUBLIC Color GetTabBgColor( SCTAB nTab ) const; + SC_DLLPUBLIC void SetTabBgColor( SCTAB nTab, const Color& rColor ); + SC_DLLPUBLIC bool IsDefaultTabBgColor( SCTAB nTab ) const; + void GetScenarioFlags( SCTAB nTab, USHORT& rFlags ) const; + SC_DLLPUBLIC BOOL IsActiveScenario( SCTAB nTab ) const; + SC_DLLPUBLIC void SetActiveScenario( SCTAB nTab, BOOL bActive ); // nur fuer Undo etc. + SC_DLLPUBLIC formula::FormulaGrammar::AddressConvention GetAddressConvention() const; + SC_DLLPUBLIC formula::FormulaGrammar::Grammar GetGrammar() const; + void SetGrammar( formula::FormulaGrammar::Grammar eGram ); + SC_DLLPUBLIC BYTE GetLinkMode( SCTAB nTab ) const; + BOOL IsLinked( SCTAB nTab ) const; + SC_DLLPUBLIC const String& GetLinkDoc( SCTAB nTab ) const; + const String& GetLinkFlt( SCTAB nTab ) const; + const String& GetLinkOpt( SCTAB nTab ) const; + SC_DLLPUBLIC const String& GetLinkTab( SCTAB nTab ) const; + ULONG GetLinkRefreshDelay( SCTAB nTab ) const; + void SetLink( SCTAB nTab, BYTE nMode, const String& rDoc, + const String& rFilter, const String& rOptions, + const String& rTabName, ULONG nRefreshDelay ); + BOOL HasLink( const String& rDoc, + const String& rFilter, const String& rOptions ) const; + SC_DLLPUBLIC BOOL LinkExternalTab( SCTAB& nTab, const String& aDocTab, + const String& aFileName, + const String& aTabName ); + + bool HasExternalRefManager() const { return pExternalRefMgr.get(); } + SC_DLLPUBLIC ScExternalRefManager* GetExternalRefManager() const; + bool IsInExternalReferenceMarking() const; + void MarkUsedExternalReferences(); + bool MarkUsedExternalReferences( ScTokenArray & rArr ); + + /** Returns the pool containing external formula parsers. Creates the pool + on first call. */ + ScFormulaParserPool& GetFormulaParserPool() const; + + BOOL HasDdeLinks() const; + BOOL HasAreaLinks() const; + void UpdateExternalRefLinks(); + void UpdateDdeLinks(); + void UpdateAreaLinks(); + + // originating DDE links + void IncInDdeLinkUpdate() { if ( nInDdeLinkUpdate < 255 ) ++nInDdeLinkUpdate; } + void DecInDdeLinkUpdate() { if ( nInDdeLinkUpdate ) --nInDdeLinkUpdate; } + BOOL IsInDdeLinkUpdate() const { return nInDdeLinkUpdate != 0; } + + SC_DLLPUBLIC void CopyDdeLinks( ScDocument* pDestDoc ) const; + void DisconnectDdeLinks(); + + // Fuer StarOne Api: + USHORT GetDdeLinkCount() const; + BOOL UpdateDdeLink( const String& rAppl, const String& rTopic, const String& rItem ); + + /** Tries to find a DDE link with the specified connection data. + @param rnDdePos (out-param) Returns the index of the DDE link (does not include other links from link manager). + @return true = DDE link found, rnDdePos valid. */ + SC_DLLPUBLIC bool FindDdeLink( const String& rAppl, const String& rTopic, const String& rItem, BYTE nMode, USHORT& rnDdePos ); + + /** Returns the connection data of the specified DDE link. + @param nDdePos Index of the DDE link (does not include other links from link manager). + @param rAppl (out-param) The application name. + @param rTopic (out-param) The DDE topic. + @param rItem (out-param) The DDE item. + @return true = DDE link found, out-parameters valid. */ + bool GetDdeLinkData( USHORT nDdePos, String& rAppl, String& rTopic, String& rItem ) const; + /** Returns the link mode of the specified DDE link. + @param nDdePos Index of the DDE link (does not include other links from link manager). + @param rnMode (out-param) The link mode of the specified DDE link. + @return true = DDE link found, rnMode valid. */ + bool GetDdeLinkMode( USHORT nDdePos, BYTE& rnMode ) const; + /** Returns the result matrix of the specified DDE link. + @param nDdePos Index of the DDE link (does not include other links from link manager). + @return The result matrix, if the DDE link has been found, 0 otherwise. */ + SC_DLLPUBLIC const ScMatrix* GetDdeLinkResultMatrix( USHORT nDdePos ) const; + + /** Tries to find a DDE link or creates a new, if not extant. + @param pResults If not 0, sets the matrix as as DDE link result matrix (also for existing links). + @return true = DDE link found; false = Unpredictable error occured, no DDE link created. */ + SC_DLLPUBLIC bool CreateDdeLink( const String& rAppl, const String& rTopic, const String& rItem, BYTE nMode, ScMatrix* pResults = NULL ); + /** Sets a result matrix for the specified DDE link. + @param nDdePos Index of the DDE link (does not include other links from link manager). + @param pResults The array containing all results of the DDE link (intrusive-ref-counted, do not delete). + @return true = DDE link found and matrix set. */ + bool SetDdeLinkResultMatrix( USHORT nDdePos, ScMatrix* pResults ); + + + SfxBindings* GetViewBindings(); + SfxObjectShell* GetDocumentShell() const { return pShell; } + ScDrawLayer* GetDrawLayer() { return pDrawLayer; } + SfxBroadcaster* GetDrawBroadcaster(); // zwecks Header-Vermeidung + void BeginDrawUndo(); + + void BeginUnoRefUndo(); + bool HasUnoRefUndo() const { return ( pUnoRefUndoList != NULL ); } + ScUnoRefList* EndUnoRefUndo(); // must be deleted by caller! + sal_Int64 GetNewUnoId(); + void AddUnoRefChange( sal_Int64 nId, const ScRangeList& rOldRanges ); + + // #109985# + sal_Bool IsChart( const SdrObject* pObject ); + + SC_DLLPUBLIC void UpdateAllCharts(); + void UpdateChartRef( UpdateRefMode eUpdateRefMode, + SCCOL nCol1, SCROW nRow1, SCTAB nTab1, + SCCOL nCol2, SCROW nRow2, SCTAB nTab2, + SCsCOL nDx, SCsROW nDy, SCsTAB nDz ); + //! setzt nur die neue RangeList, keine ChartListener o.ae. + void SetChartRangeList( const String& rChartName, + const ScRangeListRef& rNewRangeListRef ); + + BOOL HasControl( SCTAB nTab, const Rectangle& rMMRect ); + void InvalidateControls( Window* pWin, SCTAB nTab, const Rectangle& rMMRect ); + + void StartAnimations( SCTAB nTab, Window* pWin ); + + BOOL HasBackgroundDraw( SCTAB nTab, const Rectangle& rMMRect ); + BOOL HasAnyDraw( SCTAB nTab, const Rectangle& rMMRect ); + + const ScSheetEvents* GetSheetEvents( SCTAB nTab ) const; + void SetSheetEvents( SCTAB nTab, const ScSheetEvents* pNew ); + bool HasSheetEventScript( SCTAB nTab, sal_Int32 nEvent, bool bWithVbaEvents = false ) const; + bool HasAnySheetEventScript( sal_Int32 nEvent, bool bWithVbaEvents = false ) const; // on any sheet + + BOOL HasCalcNotification( SCTAB nTab ) const; + void SetCalcNotification( SCTAB nTab ); + void ResetCalcNotifications(); + + SC_DLLPUBLIC ScOutlineTable* GetOutlineTable( SCTAB nTab, BOOL bCreate = FALSE ); + BOOL SetOutlineTable( SCTAB nTab, const ScOutlineTable* pNewOutline ); + + void DoAutoOutline( SCCOL nStartCol, SCROW nStartRow, + SCCOL nEndCol, SCROW nEndRow, SCTAB nTab ); + + BOOL DoSubTotals( SCTAB nTab, ScSubTotalParam& rParam ); + void RemoveSubTotals( SCTAB nTab, ScSubTotalParam& rParam ); + BOOL TestRemoveSubTotals( SCTAB nTab, const ScSubTotalParam& rParam ); + BOOL HasSubTotalCells( const ScRange& rRange ); + + SC_DLLPUBLIC void PutCell( const ScAddress&, ScBaseCell* pCell, BOOL bForceTab = FALSE ); +//UNUSED2009-05 SC_DLLPUBLIC void PutCell( const ScAddress&, ScBaseCell* pCell, +//UNUSED2009-05 ULONG nFormatIndex, BOOL bForceTab = FALSE); + SC_DLLPUBLIC void PutCell( SCCOL nCol, SCROW nRow, SCTAB nTab, ScBaseCell* pCell, + BOOL bForceTab = FALSE ); + SC_DLLPUBLIC void PutCell(SCCOL nCol, SCROW nRow, SCTAB nTab, ScBaseCell* pCell, + ULONG nFormatIndex, BOOL bForceTab = FALSE); + // return TRUE = Zahlformat gesetzt + SC_DLLPUBLIC BOOL SetString( + SCCOL nCol, SCROW nRow, SCTAB nTab, const String& rString, + SvNumberFormatter* pFormatter = NULL, bool bDetectNumberFormat = true ); + SC_DLLPUBLIC void SetValue( SCCOL nCol, SCROW nRow, SCTAB nTab, const double& rVal ); + void SetError( SCCOL nCol, SCROW nRow, SCTAB nTab, const USHORT nError); + + SC_DLLPUBLIC void InsertMatrixFormula(SCCOL nCol1, SCROW nRow1, + SCCOL nCol2, SCROW nRow2, + const ScMarkData& rMark, + const String& rFormula, + const ScTokenArray* p = NULL, + const formula::FormulaGrammar::Grammar = formula::FormulaGrammar::GRAM_DEFAULT ); + SC_DLLPUBLIC void InsertTableOp(const ScTabOpParam& rParam, // Mehrfachoperation + SCCOL nCol1, SCROW nRow1, + SCCOL nCol2, SCROW nRow2, const ScMarkData& rMark); + + SC_DLLPUBLIC void GetString( SCCOL nCol, SCROW nRow, SCTAB nTab, String& rString ); + SC_DLLPUBLIC void GetInputString( SCCOL nCol, SCROW nRow, SCTAB nTab, String& rString ); + SC_DLLPUBLIC double GetValue( const ScAddress& ); + SC_DLLPUBLIC void GetValue( SCCOL nCol, SCROW nRow, SCTAB nTab, double& rValue ); + SC_DLLPUBLIC double RoundValueAsShown( double fVal, ULONG nFormat ); + SC_DLLPUBLIC void GetNumberFormat( SCCOL nCol, SCROW nRow, SCTAB nTab, + sal_uInt32& rFormat ); + SC_DLLPUBLIC sal_uInt32 GetNumberFormat( const ScAddress& ) const; + /** If no number format attribute is set and the cell + pointer passed is of type formula cell, the calculated + number format of the formula cell is returned. pCell + may be NULL. */ + SC_DLLPUBLIC void GetNumberFormatInfo( short& nType, ULONG& nIndex, + const ScAddress& rPos, const ScBaseCell* pCell ) const; + void GetFormula( SCCOL nCol, SCROW nRow, SCTAB nTab, String& rFormula, + BOOL bAsciiExport = FALSE ) const; + SC_DLLPUBLIC void GetCellType( SCCOL nCol, SCROW nRow, SCTAB nTab, CellType& rCellType ) const; + SC_DLLPUBLIC CellType GetCellType( const ScAddress& rPos ) const; + SC_DLLPUBLIC void GetCell( SCCOL nCol, SCROW nRow, SCTAB nTab, ScBaseCell*& rpCell ) const; + SC_DLLPUBLIC ScBaseCell* GetCell( const ScAddress& rPos ) const; + +//UNUSED2008-05 void RefreshNoteFlags(); + + SC_DLLPUBLIC BOOL HasData( SCCOL nCol, SCROW nRow, SCTAB nTab ); + SC_DLLPUBLIC BOOL HasStringData( SCCOL nCol, SCROW nRow, SCTAB nTab ) const; + SC_DLLPUBLIC BOOL HasValueData( SCCOL nCol, SCROW nRow, SCTAB nTab ) const; + BOOL HasStringCells( const ScRange& rRange ) const; + + /** Returns true, if there is any data to create a selection list for rPos. */ + BOOL HasSelectionData( SCCOL nCol, SCROW nRow, SCTAB nTab ) const; + + /** Returns the pointer to a cell note object at the passed cell address. */ + ScPostIt* GetNote( const ScAddress& rPos ); + /** Sets the passed note at the cell with the passed cell address. */ + void TakeNote( const ScAddress& rPos, ScPostIt*& rpNote ); + /** Returns and forgets the cell note object at the passed cell address. */ + ScPostIt* ReleaseNote( const ScAddress& rPos ); + /** Returns the pointer to an existing or created cell note object at the passed cell address. */ + SC_DLLPUBLIC ScPostIt* GetOrCreateNote( const ScAddress& rPos ); + /** Deletes the note at the passed cell address. */ + void DeleteNote( const ScAddress& rPos ); + /** Creates the captions of all uninitialized cell notes in the specified sheet. + @param bForced True = always create all captions, false = skip when Undo is disabled. */ + void InitializeNoteCaptions( SCTAB nTab, bool bForced = false ); + /** Creates the captions of all uninitialized cell notes in all sheets. + @param bForced True = always create all captions, false = skip when Undo is disabled. */ + void InitializeAllNoteCaptions( bool bForced = false ); + + BOOL ExtendMergeSel( SCCOL nStartCol, SCROW nStartRow, + SCCOL& rEndCol, SCROW& rEndRow, const ScMarkData& rMark, + BOOL bRefresh = FALSE, BOOL bAttrs = FALSE ); + BOOL ExtendMerge( SCCOL nStartCol, SCROW nStartRow, + SCCOL& rEndCol, SCROW& rEndRow, SCTAB nTab, + BOOL bRefresh = FALSE, BOOL bAttrs = FALSE ); + BOOL ExtendMerge( ScRange& rRange, BOOL bRefresh = FALSE, BOOL bAttrs = FALSE ); + BOOL ExtendTotalMerge( ScRange& rRange ); + SC_DLLPUBLIC BOOL ExtendOverlapped( SCCOL& rStartCol, SCROW& rStartRow, + SCCOL nEndCol, SCROW nEndRow, SCTAB nTab ); + SC_DLLPUBLIC BOOL ExtendOverlapped( ScRange& rRange ); + + BOOL RefreshAutoFilter( SCCOL nStartCol, SCROW nStartRow, + SCCOL nEndCol, SCROW nEndRow, SCTAB nTab ); + + SC_DLLPUBLIC void DoMergeContents( SCTAB nTab, SCCOL nStartCol, SCROW nStartRow, + SCCOL nEndCol, SCROW nEndRow ); + // ohne Ueberpruefung: + SC_DLLPUBLIC void DoMerge( SCTAB nTab, SCCOL nStartCol, SCROW nStartRow, + SCCOL nEndCol, SCROW nEndRow, bool bDeleteCaptions = true ); + void RemoveMerge( SCCOL nCol, SCROW nRow, SCTAB nTab ); + + BOOL IsBlockEmpty( SCTAB nTab, SCCOL nStartCol, SCROW nStartRow, + SCCOL nEndCol, SCROW nEndRow, bool bIgnoreNotes = false ) const; + BOOL IsPrintEmpty( SCTAB nTab, SCCOL nStartCol, SCROW nStartRow, + SCCOL nEndCol, SCROW nEndRow, + BOOL bLeftIsEmpty = FALSE, + ScRange* pLastRange = NULL, + Rectangle* pLastMM = NULL ) const; + + BOOL IsHorOverlapped( SCCOL nCol, SCROW nRow, SCTAB nTab ) const; + BOOL IsVerOverlapped( SCCOL nCol, SCROW nRow, SCTAB nTab ) const; + + SC_DLLPUBLIC bool HasAttrib( SCCOL nCol1, SCROW nRow1, SCTAB nTab1, + SCCOL nCol2, SCROW nRow2, SCTAB nTab2, USHORT nMask ); + SC_DLLPUBLIC bool HasAttrib( const ScRange& rRange, USHORT nMask ); + + void GetBorderLines( SCCOL nCol, SCROW nRow, SCTAB nTab, + const SvxBorderLine** ppLeft, + const SvxBorderLine** ppTop, + const SvxBorderLine** ppRight, + const SvxBorderLine** ppBottom ) const; + + void ResetChanged( const ScRange& rRange ); + + void SetDirty(); + void SetDirty( const ScRange& ); + void SetTableOpDirty( const ScRange& ); // for Interpreter TableOp + void InterpretDirtyCells( const ScRangeList& rRanges ); + void CalcAll(); + SC_DLLPUBLIC void CalcAfterLoad(); + void CompileAll(); + void CompileXML(); + + ScAutoNameCache* GetAutoNameCache() { return pAutoNameCache; } + + /** Creates a ScLookupCache cache for the range if it + doesn't already exist. */ + ScLookupCache & GetLookupCache( const ScRange & rRange ); + /** Only ScLookupCache ctor uses AddLookupCache(), do not + use elsewhere! */ + void AddLookupCache( ScLookupCache & rCache ); + /** Only ScLookupCache dtor uses RemoveLookupCache(), do + not use elsewhere! */ + void RemoveLookupCache( ScLookupCache & rCache ); + /** Zap all caches. */ + void ClearLookupCaches(); + + // Automatisch Berechnen + void SetAutoCalc( BOOL bNewAutoCalc ); + BOOL GetAutoCalc() const { return bAutoCalc; } + // Automatisch Berechnen in/von/fuer ScDocShell disabled + void SetAutoCalcShellDisabled( BOOL bNew ) { bAutoCalcShellDisabled = bNew; } + BOOL IsAutoCalcShellDisabled() const { return bAutoCalcShellDisabled; } + // ForcedFormulas zu berechnen + void SetForcedFormulaPending( BOOL bNew ) { bForcedFormulaPending = bNew; } + BOOL IsForcedFormulaPending() const { return bForcedFormulaPending; } + // if CalcFormulaTree() is currently running + BOOL IsCalculatingFormulaTree() { return bCalculatingFormulaTree; } + + USHORT GetErrCode( const ScAddress& ) const; + + /** Shrink a range to only include data area. + This is not the actually used area within the + selection, but the bounds of the sheet's data area + instead. */ + bool ShrinkToDataArea( SCTAB nTab, SCCOL& rStartCol, SCROW& rStartRow, SCCOL& rEndCol, SCROW& rEndRow ) const; + + /** Shrink a range to only include used data area. */ + bool ShrinkToUsedDataArea( SCTAB nTab, SCCOL& rStartCol, SCROW& rStartRow, SCCOL& rEndCol, SCROW& rEndRow, bool bColumnsOnly ) const; + + void GetDataArea( SCTAB nTab, SCCOL& rStartCol, SCROW& rStartRow, + SCCOL& rEndCol, SCROW& rEndRow, BOOL bIncludeOld, bool bOnlyDown ) const; + SC_DLLPUBLIC BOOL GetCellArea( SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow ) const; + SC_DLLPUBLIC BOOL GetTableArea( SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow ) const; + SC_DLLPUBLIC BOOL GetPrintArea( SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow, + BOOL bNotes = TRUE ) const; + SC_DLLPUBLIC BOOL GetPrintAreaHor( SCTAB nTab, SCROW nStartRow, SCROW nEndRow, + SCCOL& rEndCol, BOOL bNotes = TRUE ) const; + SC_DLLPUBLIC BOOL GetPrintAreaVer( SCTAB nTab, SCCOL nStartCol, SCCOL nEndCol, + SCROW& rEndRow, BOOL bNotes = TRUE ) const; + void InvalidateTableArea(); + + + SC_DLLPUBLIC BOOL GetDataStart( SCTAB nTab, SCCOL& rStartCol, SCROW& rStartRow ) const; + + /** + * Find the maximum column position that contains printable data for the + * specified row range. The final column position must be equal or less + * than the initial value of rEndCol. + */ + void ExtendPrintArea( OutputDevice* pDev, SCTAB nTab, + SCCOL nStartCol, SCROW nStartRow, + SCCOL& rEndCol, SCROW nEndRow ); + SC_DLLPUBLIC SCSIZE GetEmptyLinesInBlock( SCCOL nStartCol, SCROW nStartRow, SCTAB nStartTab, + SCCOL nEndCol, SCROW nEndRow, SCTAB nEndTab, + ScDirection eDir ); + + void FindAreaPos( SCCOL& rCol, SCROW& rRow, SCTAB nTab, SCsCOL nMovX, SCsROW nMovY ); + SC_DLLPUBLIC void GetNextPos( SCCOL& rCol, SCROW& rRow, SCTAB nTab, SCsCOL nMovX, SCsROW nMovY, + BOOL bMarked, BOOL bUnprotected, const ScMarkData& rMark ); + + BOOL GetNextMarkedCell( SCCOL& rCol, SCROW& rRow, SCTAB nTab, + const ScMarkData& rMark ); + + void LimitChartArea( SCTAB nTab, SCCOL& rStartCol, SCROW& rStartRow, + SCCOL& rEndCol, SCROW& rEndRow ); + void LimitChartIfAll( ScRangeListRef& rRangeList ); + + BOOL InsertRow( SCCOL nStartCol, SCTAB nStartTab, + SCCOL nEndCol, SCTAB nEndTab, + SCROW nStartRow, SCSIZE nSize, ScDocument* pRefUndoDoc = NULL, + const ScMarkData* pTabMark = NULL ); + SC_DLLPUBLIC BOOL InsertRow( const ScRange& rRange, ScDocument* pRefUndoDoc = NULL ); + void DeleteRow( SCCOL nStartCol, SCTAB nStartTab, + SCCOL nEndCol, SCTAB nEndTab, + SCROW nStartRow, SCSIZE nSize, + ScDocument* pRefUndoDoc = NULL, BOOL* pUndoOutline = NULL, + const ScMarkData* pTabMark = NULL ); + void DeleteRow( const ScRange& rRange, + ScDocument* pRefUndoDoc = NULL, BOOL* pUndoOutline = NULL ); + BOOL InsertCol( SCROW nStartRow, SCTAB nStartTab, + SCROW nEndRow, SCTAB nEndTab, + SCCOL nStartCol, SCSIZE nSize, ScDocument* pRefUndoDoc = NULL, + const ScMarkData* pTabMark = NULL ); + SC_DLLPUBLIC BOOL InsertCol( const ScRange& rRange, ScDocument* pRefUndoDoc = NULL ); + void DeleteCol( SCROW nStartRow, SCTAB nStartTab, + SCROW nEndRow, SCTAB nEndTab, + SCCOL nStartCol, SCSIZE nSize, + ScDocument* pRefUndoDoc = NULL, BOOL* pUndoOutline = NULL, + const ScMarkData* pTabMark = NULL ); + void DeleteCol( const ScRange& rRange, + ScDocument* pRefUndoDoc = NULL, BOOL* pUndoOutline = NULL ); + + BOOL CanInsertRow( const ScRange& rRange ) const; + BOOL CanInsertCol( const ScRange& rRange ) const; + + void FitBlock( const ScRange& rOld, const ScRange& rNew, BOOL bClear = TRUE ); + BOOL CanFitBlock( const ScRange& rOld, const ScRange& rNew ); + + BOOL IsClipOrUndo() const { return bIsClip || bIsUndo; } + BOOL IsUndo() const { return bIsUndo; } + BOOL IsClipboard() const { return bIsClip; } + bool IsUndoEnabled() const { return mbUndoEnabled; } + void EnableUndo( bool bVal ); + + bool IsAdjustHeightEnabled() const { return mbAdjustHeightEnabled; } + void EnableAdjustHeight( bool bVal ) { mbAdjustHeightEnabled = bVal; } + bool IsExecuteLinkEnabled() const { return mbExecuteLinkEnabled; } + void EnableExecuteLink( bool bVal ) { mbExecuteLinkEnabled = bVal; } + bool IsChangeReadOnlyEnabled() const { return mbChangeReadOnlyEnabled; } + void EnableChangeReadOnly( bool bVal ) { mbChangeReadOnlyEnabled = bVal; } + SC_DLLPUBLIC sal_Int16 GetNamedRangesLockCount() const { return mnNamedRangesLockCount; } + void SetNamedRangesLockCount( sal_Int16 nCount ) { mnNamedRangesLockCount = nCount; } + SC_DLLPUBLIC void ResetClip( ScDocument* pSourceDoc, const ScMarkData* pMarks ); + SC_DLLPUBLIC void ResetClip( ScDocument* pSourceDoc, SCTAB nTab ); + void SetCutMode( BOOL bCut ); + BOOL IsCutMode(); + void SetClipArea( const ScRange& rArea, BOOL bCut = FALSE ); + + SC_DLLPUBLIC BOOL IsDocVisible() const { return bIsVisible; } + void SetDocVisible( BOOL bSet ); + + BOOL HasOLEObjectsInArea( const ScRange& rRange, const ScMarkData* pTabMark = NULL ); + + void DeleteObjectsInArea( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, + const ScMarkData& rMark ); + void DeleteObjectsInSelection( const ScMarkData& rMark ); + + void DeleteArea(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, + const ScMarkData& rMark, USHORT nDelFlag); + void DeleteAreaTab(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, + SCTAB nTab, USHORT nDelFlag); + void DeleteAreaTab(const ScRange& rRange, USHORT nDelFlag); + + void CopyToClip(const ScClipParam& rClipParam, ScDocument* pClipDoc, + const ScMarkData* pMarks = NULL, bool bAllTabs = false, bool bKeepScenarioFlags = false, + bool bIncludeObjects = false, bool bCloneNoteCaptions = true); + + void CopyTabToClip(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, + SCTAB nTab, ScDocument* pClipDoc = NULL); + void CopyBlockFromClip( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, + const ScMarkData& rMark, SCsCOL nDx, SCsROW nDy, + const ScCopyBlockFromClipParams* pCBFCP ); + void CopyNonFilteredFromClip( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, + const ScMarkData& rMark, SCsCOL nDx, SCsROW nDy, + const ScCopyBlockFromClipParams* pCBFCP, + SCROW & rClipStartRow ); + void StartListeningFromClip( SCCOL nCol1, SCROW nRow1, + SCCOL nCol2, SCROW nRow2, + const ScMarkData& rMark, USHORT nInsFlag ); + void BroadcastFromClip( SCCOL nCol1, SCROW nRow1, + SCCOL nCol2, SCROW nRow2, + const ScMarkData& rMark, USHORT nInsFlag ); + /** If pDestRanges is given it overrides rDestRange, rDestRange in this + case is the overall encompassing range. */ + void CopyFromClip( const ScRange& rDestRange, const ScMarkData& rMark, + USHORT nInsFlag, + ScDocument* pRefUndoDoc = NULL, + ScDocument* pClipDoc = NULL, + BOOL bResetCut = TRUE, + BOOL bAsLink = FALSE, + BOOL bIncludeFiltered = TRUE, + BOOL bSkipAttrForEmpty = FALSE, + const ScRangeList * pDestRanges = NULL ); + + void CopyMultiRangeFromClip(const ScAddress& rDestPos, const ScMarkData& rMark, + sal_uInt16 nInsFlag, ScDocument* pClipDoc, + bool bResetCut = true, bool bAsLink = false, + bool bIncludeFiltered = true, + bool bSkipAttrForEmpty = false); + + void GetClipArea(SCCOL& nClipX, SCROW& nClipY, BOOL bIncludeFiltered); + void GetClipStart(SCCOL& nClipX, SCROW& nClipY); + + BOOL HasClipFilteredRows(); + + BOOL IsClipboardSource() const; + + SC_DLLPUBLIC void TransposeClip( ScDocument* pTransClip, USHORT nFlags, BOOL bAsLink ); + + ScClipParam& GetClipParam(); + void SetClipParam(const ScClipParam& rParam); + + void MixDocument( const ScRange& rRange, USHORT nFunction, BOOL bSkipEmpty, + ScDocument* pSrcDoc ); + + void FillTab( const ScRange& rSrcArea, const ScMarkData& rMark, + USHORT nFlags, USHORT nFunction, + BOOL bSkipEmpty, BOOL bAsLink ); + void FillTabMarked( SCTAB nSrcTab, const ScMarkData& rMark, + USHORT nFlags, USHORT nFunction, + BOOL bSkipEmpty, BOOL bAsLink ); + + void TransliterateText( const ScMarkData& rMultiMark, sal_Int32 nType ); + + SC_DLLPUBLIC void InitUndo( ScDocument* pSrcDoc, SCTAB nTab1, SCTAB nTab2, + BOOL bColInfo = FALSE, BOOL bRowInfo = FALSE ); + void AddUndoTab( SCTAB nTab1, SCTAB nTab2, + BOOL bColInfo = FALSE, BOOL bRowInfo = FALSE ); + SC_DLLPUBLIC void InitUndoSelected( ScDocument* pSrcDoc, const ScMarkData& rTabSelection, + BOOL bColInfo = FALSE, BOOL bRowInfo = FALSE ); + + // nicht mehr benutzen: + void CopyToDocument(SCCOL nCol1, SCROW nRow1, SCTAB nTab1, + SCCOL nCol2, SCROW nRow2, SCTAB nTab2, + USHORT nFlags, BOOL bMarked, ScDocument* pDestDoc, + const ScMarkData* pMarks = NULL, BOOL bColRowFlags = TRUE); + void UndoToDocument(SCCOL nCol1, SCROW nRow1, SCTAB nTab1, + SCCOL nCol2, SCROW nRow2, SCTAB nTab2, + USHORT nFlags, BOOL bMarked, ScDocument* pDestDoc, + const ScMarkData* pMarks = NULL); + + void CopyToDocument(const ScRange& rRange, + USHORT nFlags, BOOL bMarked, ScDocument* pDestDoc, + const ScMarkData* pMarks = NULL, BOOL bColRowFlags = TRUE); + void UndoToDocument(const ScRange& rRange, + USHORT nFlags, BOOL bMarked, ScDocument* pDestDoc, + const ScMarkData* pMarks = NULL); + + void CopyScenario( SCTAB nSrcTab, SCTAB nDestTab, BOOL bNewScenario = FALSE ); + BOOL TestCopyScenario( SCTAB nSrcTab, SCTAB nDestTab ) const; + void MarkScenario( SCTAB nSrcTab, SCTAB nDestTab, + ScMarkData& rDestMark, BOOL bResetMark = TRUE, + USHORT nNeededBits = 0 ) const; + BOOL HasScenarioRange( SCTAB nTab, const ScRange& rRange ) const; + SC_DLLPUBLIC const ScRangeList* GetScenarioRanges( SCTAB nTab ) const; + + SC_DLLPUBLIC void CopyUpdated( ScDocument* pPosDoc, ScDocument* pDestDoc ); + + void UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW nRow1, SCTAB nTab1, + SCCOL nCol2, SCROW nRow2, SCTAB nTab2, + SCsCOL nDx, SCsROW nDy, SCsTAB nDz, + ScDocument* pUndoDoc = NULL, BOOL bIncludeDraw = TRUE, + bool bUpdateNoteCaptionPos = true ); + + SC_DLLPUBLIC void UpdateTranspose( const ScAddress& rDestPos, ScDocument* pClipDoc, + const ScMarkData& rMark, ScDocument* pUndoDoc = NULL ); + + void UpdateGrow( const ScRange& rArea, SCCOL nGrowX, SCROW nGrowY ); + + void Fill( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, + const ScMarkData& rMark, + ULONG nFillCount, FillDir eFillDir = FILL_TO_BOTTOM, + FillCmd eFillCmd = FILL_LINEAR, FillDateCmd eFillDateCmd = FILL_DAY, + double nStepValue = 1.0, double nMaxValue = 1E307); + String GetAutoFillPreview( const ScRange& rSource, SCCOL nEndX, SCROW nEndY ); + + BOOL GetSelectionFunction( ScSubTotalFunc eFunc, + const ScAddress& rCursor, const ScMarkData& rMark, + double& rResult ); + + SC_DLLPUBLIC const SfxPoolItem* GetAttr( SCCOL nCol, SCROW nRow, SCTAB nTab, USHORT nWhich ) const; + SC_DLLPUBLIC const ScPatternAttr* GetPattern( SCCOL nCol, SCROW nRow, SCTAB nTab ) const; + SC_DLLPUBLIC const ScPatternAttr* GetMostUsedPattern( SCCOL nCol, SCROW nStartRow, SCROW nEndRow, SCTAB nTab ) const; + const ScPatternAttr* GetSelectionPattern( const ScMarkData& rMark, BOOL bDeep = TRUE ); + ScPatternAttr* CreateSelectionPattern( const ScMarkData& rMark, BOOL bDeep = TRUE ); + + const ScConditionalFormat* GetCondFormat( SCCOL nCol, SCROW nRow, SCTAB nTab ) const; + SC_DLLPUBLIC const SfxItemSet* GetCondResult( SCCOL nCol, SCROW nRow, SCTAB nTab ) const; + const SfxPoolItem* GetEffItem( SCCOL nCol, SCROW nRow, SCTAB nTab, USHORT nWhich ) const; + + SC_DLLPUBLIC const ::com::sun::star::uno::Reference< ::com::sun::star::i18n::XBreakIterator >& GetBreakIterator(); + BOOL HasStringWeakCharacters( const String& rString ); + SC_DLLPUBLIC BYTE GetStringScriptType( const String& rString ); + SC_DLLPUBLIC BYTE GetCellScriptType( ScBaseCell* pCell, ULONG nNumberFormat ); + SC_DLLPUBLIC BYTE GetScriptType( SCCOL nCol, SCROW nRow, SCTAB nTab, ScBaseCell* pCell = NULL ); + + BOOL HasDetectiveOperations() const; + void AddDetectiveOperation( const ScDetOpData& rData ); + void ClearDetectiveOperations(); + ScDetOpList* GetDetOpList() const { return pDetOpList; } + void SetDetOpList(ScDetOpList* pNew); + + BOOL HasDetectiveObjects(SCTAB nTab) const; + + void GetSelectionFrame( const ScMarkData& rMark, + SvxBoxItem& rLineOuter, + SvxBoxInfoItem& rLineInner ); + void ApplySelectionFrame( const ScMarkData& rMark, + const SvxBoxItem* pLineOuter, + const SvxBoxInfoItem* pLineInner ); + void ApplyFrameAreaTab( const ScRange& rRange, + const SvxBoxItem* pLineOuter, + const SvxBoxInfoItem* pLineInner ); + + void ClearSelectionItems( const USHORT* pWhich, const ScMarkData& rMark ); + void ChangeSelectionIndent( BOOL bIncrement, const ScMarkData& rMark ); + + SC_DLLPUBLIC ULONG AddCondFormat( const ScConditionalFormat& rNew ); + SC_DLLPUBLIC void FindConditionalFormat( ULONG nKey, ScRangeList& rRanges ); + SC_DLLPUBLIC void FindConditionalFormat( ULONG nKey, ScRangeList& rRanges, SCTAB nTab ); + void ConditionalChanged( ULONG nKey ); + + SC_DLLPUBLIC ULONG AddValidationEntry( const ScValidationData& rNew ); + + SC_DLLPUBLIC const ScValidationData* GetValidationEntry( ULONG nIndex ) const; + + ScConditionalFormatList* GetCondFormList() const // Ref-Undo + { return pCondFormList; } + void SetCondFormList(ScConditionalFormatList* pNew); + + ScValidationDataList* GetValidationList() const + { return pValidationList; } + + SC_DLLPUBLIC void ApplyAttr( SCCOL nCol, SCROW nRow, SCTAB nTab, + const SfxPoolItem& rAttr ); + SC_DLLPUBLIC void ApplyPattern( SCCOL nCol, SCROW nRow, SCTAB nTab, + const ScPatternAttr& rAttr ); + SC_DLLPUBLIC void ApplyPatternArea( SCCOL nStartCol, SCROW nStartRow, + SCCOL nEndCol, SCROW nEndRow, + const ScMarkData& rMark, const ScPatternAttr& rAttr ); + SC_DLLPUBLIC void ApplyPatternAreaTab( SCCOL nStartCol, SCROW nStartRow, + SCCOL nEndCol, SCROW nEndRow, SCTAB nTab, + const ScPatternAttr& rAttr ); + SC_DLLPUBLIC void ApplyPatternIfNumberformatIncompatible( + const ScRange& rRange, const ScMarkData& rMark, + const ScPatternAttr& rPattern, short nNewType ); + + void ApplyStyle( SCCOL nCol, SCROW nRow, SCTAB nTab, + const ScStyleSheet& rStyle); + void ApplyStyleArea( SCCOL nStartCol, SCROW nStartRow, + SCCOL nEndCol, SCROW nEndRow, + const ScMarkData& rMark, const ScStyleSheet& rStyle); + SC_DLLPUBLIC void ApplyStyleAreaTab( SCCOL nStartCol, SCROW nStartRow, + SCCOL nEndCol, SCROW nEndRow, SCTAB nTab, + const ScStyleSheet& rStyle); + + void ApplySelectionStyle( const ScStyleSheet& rStyle, const ScMarkData& rMark ); + void ApplySelectionLineStyle( const ScMarkData& rMark, + const SvxBorderLine* pLine, BOOL bColorOnly ); + + const ScStyleSheet* GetStyle( SCCOL nCol, SCROW nRow, SCTAB nTab ) const; + const ScStyleSheet* GetSelectionStyle( const ScMarkData& rMark ) const; + + void StyleSheetChanged( const SfxStyleSheetBase* pStyleSheet, BOOL bRemoved, + OutputDevice* pDev, + double nPPTX, double nPPTY, + const Fraction& rZoomX, const Fraction& rZoomY ); + + BOOL IsStyleSheetUsed( const ScStyleSheet& rStyle, BOOL bGatherAllStyles ) const; + + SC_DLLPUBLIC BOOL ApplyFlagsTab( SCCOL nStartCol, SCROW nStartRow, + SCCOL nEndCol, SCROW nEndRow, + SCTAB nTab, INT16 nFlags ); + BOOL RemoveFlagsTab( SCCOL nStartCol, SCROW nStartRow, + SCCOL nEndCol, SCROW nEndRow, + SCTAB nTab, INT16 nFlags ); + + SC_DLLPUBLIC void SetPattern( const ScAddress&, const ScPatternAttr& rAttr, + BOOL bPutToPool = FALSE ); + SC_DLLPUBLIC void SetPattern( SCCOL nCol, SCROW nRow, SCTAB nTab, const ScPatternAttr& rAttr, + BOOL bPutToPool = FALSE ); + void DeleteNumberFormat( const sal_uInt32* pDelKeys, sal_uInt32 nCount ); + + void AutoFormat( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, + USHORT nFormatNo, const ScMarkData& rMark ); + void GetAutoFormatData( SCTAB nTab, SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, + ScAutoFormatData& rData ); + BOOL SearchAndReplace( const SvxSearchItem& rSearchItem, + SCCOL& rCol, SCROW& rRow, SCTAB& rTab, + ScMarkData& rMark, + String& rUndoStr, ScDocument* pUndoDoc = NULL ); + + // Col/Row von Folgeaufrufen bestimmen + // (z.B. nicht gefunden von Anfang, oder folgende Tabellen) + static void GetSearchAndReplaceStart( const SvxSearchItem& rSearchItem, + SCCOL& rCol, SCROW& rRow ); + + BOOL Solver(SCCOL nFCol, SCROW nFRow, SCTAB nFTab, + SCCOL nVCol, SCROW nVRow, SCTAB nVTab, + const String& sValStr, double& nX); + + void ApplySelectionPattern( const ScPatternAttr& rAttr, const ScMarkData& rMark ); + void DeleteSelection( USHORT nDelFlag, const ScMarkData& rMark ); + void DeleteSelectionTab( SCTAB nTab, USHORT nDelFlag, const ScMarkData& rMark ); + + SC_DLLPUBLIC void SetColWidth( SCCOL nCol, SCTAB nTab, USHORT nNewWidth ); + SC_DLLPUBLIC void SetRowHeight( SCROW nRow, SCTAB nTab, USHORT nNewHeight ); + SC_DLLPUBLIC void SetRowHeightRange( SCROW nStartRow, SCROW nEndRow, SCTAB nTab, + USHORT nNewHeight ); + + SC_DLLPUBLIC void SetRowHeightOnly( SCROW nStartRow, SCROW nEndRow, SCTAB nTab, + USHORT nNewHeight ); + void SetManualHeight( SCROW nStartRow, SCROW nEndRow, SCTAB nTab, BOOL bManual ); + + SC_DLLPUBLIC USHORT GetColWidth( SCCOL nCol, SCTAB nTab ) const; + SC_DLLPUBLIC USHORT GetRowHeight( SCROW nRow, SCTAB nTab, bool bHiddenAsZero = true ) const; + SC_DLLPUBLIC USHORT GetRowHeight( SCROW nRow, SCTAB nTab, SCROW* pStartRow, SCROW* pEndRow, bool bHiddenAsZero = true ) const; + SC_DLLPUBLIC ULONG GetRowHeight( SCROW nStartRow, SCROW nEndRow, SCTAB nTab ) const; + SCROW GetRowForHeight( SCTAB nTab, ULONG nHeight ) const; + ULONG GetScaledRowHeight( SCROW nStartRow, SCROW nEndRow, SCTAB nTab, double fScale ) const; + SC_DLLPUBLIC ULONG GetColOffset( SCCOL nCol, SCTAB nTab ) const; + SC_DLLPUBLIC ULONG GetRowOffset( SCROW nRow, SCTAB nTab ) const; + + SC_DLLPUBLIC USHORT GetOriginalWidth( SCCOL nCol, SCTAB nTab ) const; + SC_DLLPUBLIC USHORT GetOriginalHeight( SCROW nRow, SCTAB nTab ) const; + + USHORT GetCommonWidth( SCCOL nEndCol, SCTAB nTab ) const; + + SCROW GetHiddenRowCount( SCROW nRow, SCTAB nTab ) const; + + USHORT GetOptimalColWidth( SCCOL nCol, SCTAB nTab, OutputDevice* pDev, + double nPPTX, double nPPTY, + const Fraction& rZoomX, const Fraction& rZoomY, + BOOL bFormula, + const ScMarkData* pMarkData = NULL, + BOOL bSimpleTextImport = FALSE ); + SC_DLLPUBLIC BOOL SetOptimalHeight( SCROW nStartRow, SCROW nEndRow, SCTAB nTab, USHORT nExtra, + OutputDevice* pDev, + double nPPTX, double nPPTY, + const Fraction& rZoomX, const Fraction& rZoomY, + BOOL bShrink ); + void UpdateAllRowHeights( OutputDevice* pDev, + double nPPTX, double nPPTY, + const Fraction& rZoomX, const Fraction& rZoomY, + const ScMarkData* pTabMark = NULL ); + long GetNeededSize( SCCOL nCol, SCROW nRow, SCTAB nTab, + OutputDevice* pDev, + double nPPTX, double nPPTY, + const Fraction& rZoomX, const Fraction& rZoomY, + BOOL bWidth, BOOL bTotalSize = FALSE ); + + SC_DLLPUBLIC void ShowCol(SCCOL nCol, SCTAB nTab, BOOL bShow); + SC_DLLPUBLIC void ShowRow(SCROW nRow, SCTAB nTab, BOOL bShow); + SC_DLLPUBLIC void ShowRows(SCROW nRow1, SCROW nRow2, SCTAB nTab, BOOL bShow); + SC_DLLPUBLIC void SetColFlags( SCCOL nCol, SCTAB nTab, BYTE nNewFlags ); + SC_DLLPUBLIC void SetRowFlags( SCROW nRow, SCTAB nTab, BYTE nNewFlags ); + SC_DLLPUBLIC void SetRowFlags( SCROW nStartRow, SCROW nEndRow, SCTAB nTab, BYTE nNewFlags ); + + SC_DLLPUBLIC BYTE GetColFlags( SCCOL nCol, SCTAB nTab ) const; + SC_DLLPUBLIC BYTE GetRowFlags( SCROW nRow, SCTAB nTab ) const; + + SC_DLLPUBLIC const ScBitMaskCompressedArray< SCROW, BYTE> & GetRowFlagsArray( SCTAB nTab ) const; + SC_DLLPUBLIC ScBitMaskCompressedArray< SCROW, BYTE> & GetRowFlagsArrayModifiable( SCTAB nTab ); + + SC_DLLPUBLIC void GetAllRowBreaks(::std::set<SCROW>& rBreaks, SCTAB nTab, bool bPage, bool bManual) const; + SC_DLLPUBLIC void GetAllColBreaks(::std::set<SCCOL>& rBreaks, SCTAB nTab, bool bPage, bool bManual) const; + SC_DLLPUBLIC ScBreakType HasRowBreak(SCROW nRow, SCTAB nTab) const; + SC_DLLPUBLIC ScBreakType HasColBreak(SCCOL nCol, SCTAB nTab) const; + SC_DLLPUBLIC void SetRowBreak(SCROW nRow, SCTAB nTab, bool bPage, bool bManual); + SC_DLLPUBLIC void SetColBreak(SCCOL nCol, SCTAB nTab, bool bPage, bool bManual); + void RemoveRowBreak(SCROW nRow, SCTAB nTab, bool bPage, bool bManual); + void RemoveColBreak(SCCOL nCol, SCTAB nTab, bool bPage, bool bManual); + ::com::sun::star::uno::Sequence< + ::com::sun::star::sheet::TablePageBreakData> GetRowBreakData(SCTAB nTab) const; + + SC_DLLPUBLIC bool RowHidden(SCROW nRow, SCTAB nTab, SCROW* pFirstRow = NULL, SCROW* pLastRow = NULL); + SC_DLLPUBLIC bool RowHidden(SCROW nRow, SCTAB nTab, SCROW& rLastRow); + SC_DLLPUBLIC bool HasHiddenRows(SCROW nStartRow, SCROW nEndRow, SCTAB nTab); + SC_DLLPUBLIC bool ColHidden(SCCOL nCol, SCTAB nTab, SCCOL& rLastCol); + SC_DLLPUBLIC bool ColHidden(SCCOL nCol, SCTAB nTab, SCCOL* pFirstCol = NULL, SCCOL* pLastCol = NULL); + SC_DLLPUBLIC void SetRowHidden(SCROW nStartRow, SCROW nEndRow, SCTAB nTab, bool bHidden); + SC_DLLPUBLIC void SetColHidden(SCCOL nStartCol, SCCOL nEndCol, SCTAB nTab, bool bHidden); + SC_DLLPUBLIC SCROW FirstVisibleRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab); + SC_DLLPUBLIC SCROW LastVisibleRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab); + SCROW CountVisibleRows(SCROW nStartRow, SCROW nEndRow, SCTAB nTab); + + bool RowFiltered(SCROW nRow, SCTAB nTab, SCROW* pFirstRow = NULL, SCROW* pLastRow = NULL); + bool HasFilteredRows(SCROW nStartRow, SCROW nEndRow, SCTAB nTab); + bool ColFiltered(SCCOL nCol, SCTAB nTab, SCCOL* pFirstCol = NULL, SCCOL* pLastCol = NULL); + SC_DLLPUBLIC void SetRowFiltered(SCROW nStartRow, SCROW nEndRow, SCTAB nTab, bool bFiltered); + SC_DLLPUBLIC void SetColFiltered(SCCOL nStartCol, SCCOL nEndCol, SCTAB nTab, bool bFiltered); + SCROW FirstNonFilteredRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab); + SCROW LastNonFilteredRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab); + SCROW CountNonFilteredRows(SCROW nStartRow, SCROW nEndRow, SCTAB nTab); + + /** + * Write all column row flags to table's flag data, because not all column + * row attributes are stored in the flag data members. This is necessary + * for ods export. + */ + void SyncColRowFlags(); + + /// @return the index of the last row with any set flags (auto-pagebreak is ignored). + SC_DLLPUBLIC SCROW GetLastFlaggedRow( SCTAB nTab ) const; + + /// @return the index of the last changed column (flags and column width, auto pagebreak is ignored). + SCCOL GetLastChangedCol( SCTAB nTab ) const; + /// @return the index of the last changed row (flags and row height, auto pagebreak is ignored). + SCROW GetLastChangedRow( SCTAB nTab ) const; + + SCCOL GetNextDifferentChangedCol( SCTAB nTab, SCCOL nStart) const; + + // #108550#; if bCareManualSize is set then the row + // heights are compared only if the manual size flag for + // the row is set. If the bCareManualSize is not set then + // the row heights are always compared. + SCROW GetNextDifferentChangedRow( SCTAB nTab, SCROW nStart, bool bCareManualSize = true) const; + + // returns whether to export a Default style for this col/row or not + // nDefault is setted to one possition in the current row/col where the Default style is + BOOL GetColDefault( SCTAB nTab, SCCOL nCol, SCROW nLastRow, SCROW& nDefault); + BOOL GetRowDefault( SCTAB nTab, SCROW nRow, SCCOL nLastCol, SCCOL& nDefault); + + BOOL UpdateOutlineCol( SCCOL nStartCol, SCCOL nEndCol, SCTAB nTab, BOOL bShow ); + BOOL UpdateOutlineRow( SCROW nStartRow, SCROW nEndRow, SCTAB nTab, BOOL bShow ); + + void StripHidden( SCCOL& rX1, SCROW& rY1, SCCOL& rX2, SCROW& rY2, SCTAB nTab ); + void ExtendHidden( SCCOL& rX1, SCROW& rY1, SCCOL& rX2, SCROW& rY2, SCTAB nTab ); + + SC_DLLPUBLIC ScPatternAttr* GetDefPattern() const; + SC_DLLPUBLIC ScDocumentPool* GetPool(); + SC_DLLPUBLIC ScStyleSheetPool* GetStyleSheetPool() const; + + // PageStyle: + SC_DLLPUBLIC const String& GetPageStyle( SCTAB nTab ) const; + SC_DLLPUBLIC void SetPageStyle( SCTAB nTab, const String& rName ); + Size GetPageSize( SCTAB nTab ) const; + void SetPageSize( SCTAB nTab, const Size& rSize ); + void SetRepeatArea( SCTAB nTab, SCCOL nStartCol, SCCOL nEndCol, SCROW nStartRow, SCROW nEndRow ); + void InvalidatePageBreaks(SCTAB nTab); + void UpdatePageBreaks( SCTAB nTab, const ScRange* pUserArea = NULL ); + void RemoveManualBreaks( SCTAB nTab ); + BOOL HasManualBreaks( SCTAB nTab ) const; + + BOOL IsPageStyleInUse( const String& rStrPageStyle, SCTAB* pInTab = NULL ); + BOOL RemovePageStyleInUse( const String& rStrPageStyle ); + BOOL RenamePageStyleInUse( const String& rOld, const String& rNew ); + void ModifyStyleSheet( SfxStyleSheetBase& rPageStyle, + const SfxItemSet& rChanges ); + + void PageStyleModified( SCTAB nTab, const String& rNewName ); + + SC_DLLPUBLIC BOOL NeedPageResetAfterTab( SCTAB nTab ) const; + + // war vorher im PageStyle untergracht. Jetzt an jeder Tabelle: + SC_DLLPUBLIC BOOL HasPrintRange(); + SC_DLLPUBLIC USHORT GetPrintRangeCount( SCTAB nTab ); + SC_DLLPUBLIC const ScRange* GetPrintRange( SCTAB nTab, USHORT nPos ); + SC_DLLPUBLIC const ScRange* GetRepeatColRange( SCTAB nTab ); + SC_DLLPUBLIC const ScRange* GetRepeatRowRange( SCTAB nTab ); + /** Returns true, if the specified sheet is always printed. */ + BOOL IsPrintEntireSheet( SCTAB nTab ) const; + + /** Removes all print ranges. */ + SC_DLLPUBLIC void ClearPrintRanges( SCTAB nTab ); + /** Adds a new print ranges. */ + SC_DLLPUBLIC void AddPrintRange( SCTAB nTab, const ScRange& rNew ); +//UNUSED2009-05 /** Removes all old print ranges and sets the passed print ranges. */ +//UNUSED2009-05 void SetPrintRange( SCTAB nTab, const ScRange& rNew ); + /** Marks the specified sheet to be printed completely. Deletes old print ranges on the sheet! */ + SC_DLLPUBLIC void SetPrintEntireSheet( SCTAB nTab ); + SC_DLLPUBLIC void SetRepeatColRange( SCTAB nTab, const ScRange* pNew ); + SC_DLLPUBLIC void SetRepeatRowRange( SCTAB nTab, const ScRange* pNew ); + ScPrintRangeSaver* CreatePrintRangeSaver() const; + void RestorePrintRanges( const ScPrintRangeSaver& rSaver ); + + SC_DLLPUBLIC Rectangle GetMMRect( SCCOL nStartCol, SCROW nStartRow, + SCCOL nEndCol, SCROW nEndRow, SCTAB nTab ); + SC_DLLPUBLIC ScRange GetRange( SCTAB nTab, const Rectangle& rMMRect ); + + void UpdStlShtPtrsFrmNms(); + void StylesToNames(); + + SC_DLLPUBLIC void CopyStdStylesFrom( ScDocument* pSrcDoc ); + + CharSet GetSrcCharSet() const { return eSrcSet; } + ULONG GetSrcVersion() const { return nSrcVer; } + SCROW GetSrcMaxRow() const { return nSrcMaxRow; } + + void SetSrcCharSet( CharSet eNew ) { eSrcSet = eNew; } + void UpdateFontCharSet(); + + void FillInfo( ScTableInfo& rTabInfo, SCCOL nX1, SCROW nY1, SCCOL nX2, SCROW nY2, + SCTAB nTab, double nScaleX, double nScaleY, + BOOL bPageMode, BOOL bFormulaMode, + const ScMarkData* pMarkData = NULL ); + + SC_DLLPUBLIC SvNumberFormatter* GetFormatTable() const; + + void Sort( SCTAB nTab, const ScSortParam& rSortParam, BOOL bKeepQuery ); + SCSIZE Query( SCTAB nTab, const ScQueryParam& rQueryParam, BOOL bKeepSub ); + BOOL ValidQuery( SCROW nRow, SCTAB nTab, const ScQueryParam& rQueryParam, BOOL* pSpecial = NULL ); + SC_DLLPUBLIC BOOL CreateQueryParam( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, + SCTAB nTab, ScQueryParam& rQueryParam ); + void GetUpperCellString(SCCOL nCol, SCROW nRow, SCTAB nTab, String& rStr); + + BOOL GetFilterEntries( SCCOL nCol, SCROW nRow, SCTAB nTab, + bool bFilter, TypedScStrCollection& rStrings, bool& rHasDates); + SC_DLLPUBLIC BOOL GetFilterEntriesArea( SCCOL nCol, SCROW nStartRow, SCROW nEndRow, + SCTAB nTab, TypedScStrCollection& rStrings, bool& rHasDates ); + BOOL GetDataEntries( SCCOL nCol, SCROW nRow, SCTAB nTab, + TypedScStrCollection& rStrings, BOOL bLimit = FALSE ); + BOOL GetFormulaEntries( TypedScStrCollection& rStrings ); + + BOOL HasAutoFilter( SCCOL nCol, SCROW nRow, SCTAB nTab ); + + SC_DLLPUBLIC BOOL HasColHeader( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, + SCTAB nTab ); + SC_DLLPUBLIC BOOL HasRowHeader( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, + SCTAB nTab ); + + SfxPrinter* GetPrinter( BOOL bCreateIfNotExist = TRUE ); + void SetPrinter( SfxPrinter* pNewPrinter ); + VirtualDevice* GetVirtualDevice_100th_mm(); + SC_DLLPUBLIC OutputDevice* GetRefDevice(); // WYSIWYG: Printer, otherwise VirtualDevice... + + void EraseNonUsedSharedNames(USHORT nLevel); + BOOL GetNextSpellingCell(SCCOL& nCol, SCROW& nRow, SCTAB nTab, + BOOL bInSel, const ScMarkData& rMark) const; + + BOOL ReplaceStyle(const SvxSearchItem& rSearchItem, + SCCOL nCol, SCROW nRow, SCTAB nTab, + ScMarkData& rMark, BOOL bIsUndo); + + void DoColResize( SCTAB nTab, SCCOL nCol1, SCCOL nCol2, SCSIZE nAdd ); + + void InvalidateTextWidth( const String& rStyleName ); + void InvalidateTextWidth( SCTAB nTab ); + void InvalidateTextWidth( const ScAddress* pAdrFrom, const ScAddress* pAdrTo, BOOL bNumFormatChanged ); + + BOOL IdleCalcTextWidth(); + BOOL IdleCheckLinks(); + + BOOL ContinueOnlineSpelling(); // TRUE = etwas gefunden + + BOOL IsIdleDisabled() const { return bIdleDisabled; } + void DisableIdle(BOOL bDo) { bIdleDisabled = bDo; } + + BOOL IsDetectiveDirty() const { return bDetectiveDirty; } + void SetDetectiveDirty(BOOL bSet) { bDetectiveDirty = bSet; } + + void RemoveAutoSpellObj(); + void SetOnlineSpellPos( const ScAddress& rPos ); + SC_DLLPUBLIC BOOL SetVisibleSpellRange( const ScRange& rRange ); // TRUE = changed + + BYTE GetMacroCallMode() const { return nMacroCallMode; } + void SetMacroCallMode(BYTE nNew) { nMacroCallMode = nNew; } + + BOOL GetHasMacroFunc() const { return bHasMacroFunc; } + void SetHasMacroFunc(BOOL bSet) { bHasMacroFunc = bSet; } + + BOOL CheckMacroWarn(); + + void SetRangeOverflowType(sal_uInt32 nType) { nRangeOverflowType = nType; } + sal_Bool HasRangeOverflow() const { return nRangeOverflowType != 0; } + SC_DLLPUBLIC sal_uInt32 GetRangeOverflowType() const { return nRangeOverflowType; } + + // fuer Broadcasting/Listening + void SetNoSetDirty( BOOL bVal ) { bNoSetDirty = bVal; } + BOOL GetNoSetDirty() const { return bNoSetDirty; } + void SetInsertingFromOtherDoc( BOOL bVal ) { bInsertingFromOtherDoc = bVal; } + BOOL IsInsertingFromOtherDoc() const { return bInsertingFromOtherDoc; } + void SetLoadingMedium( bool bVal ); + void SetImportingXML( bool bVal ); + bool IsImportingXML() const { return bImportingXML; } + void SetXMLFromWrapper( BOOL bVal ); + BOOL IsXMLFromWrapper() const { return bXMLFromWrapper; } + void SetCalcingAfterLoad( BOOL bVal ) { bCalcingAfterLoad = bVal; } + BOOL IsCalcingAfterLoad() const { return bCalcingAfterLoad; } + void SetNoListening( BOOL bVal ) { bNoListening = bVal; } + BOOL GetNoListening() const { return bNoListening; } + ScBroadcastAreaSlotMachine* GetBASM() const { return pBASM; } + + ScChartListenerCollection* GetChartListenerCollection() const + { return pChartListenerCollection; } + void SetChartListenerCollection( ScChartListenerCollection*, + BOOL bSetChartRangeLists = FALSE ); + void UpdateChart( const String& rName ); + void RestoreChartListener( const String& rName ); + SC_DLLPUBLIC void UpdateChartListenerCollection(); + BOOL IsChartListenerCollectionNeedsUpdate() const + { return bChartListenerCollectionNeedsUpdate; } + void SetChartListenerCollectionNeedsUpdate( BOOL bFlg ) + { bChartListenerCollectionNeedsUpdate = bFlg; } + void AddOLEObjectToCollection(const String& rName); + + ScChangeViewSettings* GetChangeViewSettings() const { return pChangeViewSettings; } + SC_DLLPUBLIC void SetChangeViewSettings(const ScChangeViewSettings& rNew); + + vos::ORef<SvxForbiddenCharactersTable> GetForbiddenCharacters(); + void SetForbiddenCharacters( const vos::ORef<SvxForbiddenCharactersTable> xNew ); + + BYTE GetAsianCompression() const; // CharacterCompressionType values + BOOL IsValidAsianCompression() const; + void SetAsianCompression(BYTE nNew); + + BOOL GetAsianKerning() const; + BOOL IsValidAsianKerning() const; + void SetAsianKerning(BOOL bNew); + + BYTE GetEditTextDirection(SCTAB nTab) const; // EEHorizontalTextDirection values + + SC_DLLPUBLIC ScLkUpdMode GetLinkMode() const { return eLinkMode ;} + void SetLinkMode( ScLkUpdMode nSet ) { eLinkMode = nSet;} + + +private: + ScDocument(const ScDocument& r); // disabled with no definition + + void FindMaxRotCol( SCTAB nTab, RowInfo* pRowInfo, SCSIZE nArrCount, + SCCOL nX1, SCCOL nX2 ) const; + + USHORT RowDifferences( SCROW nThisRow, SCTAB nThisTab, + ScDocument& rOtherDoc, + SCROW nOtherRow, SCTAB nOtherTab, + SCCOL nMaxCol, SCCOLROW* pOtherCols ); + USHORT ColDifferences( SCCOL nThisCol, SCTAB nThisTab, + ScDocument& rOtherDoc, + SCCOL nOtherCol, SCTAB nOtherTab, + SCROW nMaxRow, SCCOLROW* pOtherRows ); + void FindOrder( SCCOLROW* pOtherRows, SCCOLROW nThisEndRow, SCCOLROW nOtherEndRow, + BOOL bColumns, + ScDocument& rOtherDoc, SCTAB nThisTab, SCTAB nOtherTab, + SCCOLROW nEndCol, SCCOLROW* pTranslate, + ScProgress* pProgress, ULONG nProAdd ); + BOOL OnlineSpellInRange( const ScRange& rSpellRange, ScAddress& rSpellPos, + USHORT nMaxTest ); + + DECL_LINK( TrackTimeHdl, Timer* ); + + static ScRecursionHelper* CreateRecursionHelperInstance(); + +public: + void StartListeningArea( const ScRange& rRange, + SvtListener* pListener ); + void EndListeningArea( const ScRange& rRange, + SvtListener* pListener ); + /** Broadcast wrapper, calls + SC_DLLPUBLIC rHint.GetCell()->Broadcast() and AreaBroadcast() + and TrackFormulas() and conditional format list + SourceChanged(). + Preferred. + */ + void Broadcast( const ScHint& rHint ); + /// deprecated + void Broadcast( ULONG nHint, const ScAddress& rAddr, + ScBaseCell* pCell ); + /// only area, no cell broadcast + void AreaBroadcast( const ScHint& rHint ); + /// only areas in range, no cell broadcasts + void AreaBroadcastInRange( const ScRange& rRange, + const ScHint& rHint ); + void DelBroadcastAreasInRange( const ScRange& rRange ); + void UpdateBroadcastAreas( UpdateRefMode eUpdateRefMode, + const ScRange& rRange, + SCsCOL nDx, SCsROW nDy, SCsTAB nDz ); + + + void StartListeningCell( const ScAddress& rAddress, + SvtListener* pListener ); + void EndListeningCell( const ScAddress& rAddress, + SvtListener* pListener ); + void PutInFormulaTree( ScFormulaCell* pCell ); + void RemoveFromFormulaTree( ScFormulaCell* pCell ); + void CalcFormulaTree( BOOL bOnlyForced = FALSE, + BOOL bNoProgressBar = FALSE ); + void ClearFormulaTree(); + void AppendToFormulaTrack( ScFormulaCell* pCell ); + void RemoveFromFormulaTrack( ScFormulaCell* pCell ); + void TrackFormulas( ULONG nHintId = SC_HINT_DATACHANGED ); + USHORT GetFormulaTrackCount() const { return nFormulaTrackCount; } + BOOL IsInFormulaTree( ScFormulaCell* pCell ) const; + BOOL IsInFormulaTrack( ScFormulaCell* pCell ) const; + USHORT GetHardRecalcState() { return nHardRecalcState; } + void SetHardRecalcState( USHORT nVal ) { nHardRecalcState = nVal; } + void StartAllListeners(); + const ScFormulaCell* GetFormulaTree() const { return pFormulaTree; } + BOOL HasForcedFormulas() const { return bHasForcedFormulas; } + void SetForcedFormulas( BOOL bVal ) { bHasForcedFormulas = bVal; } + ULONG GetFormulaCodeInTree() const { return nFormulaCodeInTree; } + BOOL IsInInterpreter() const { return nInterpretLevel != 0; } + USHORT GetInterpretLevel() { return nInterpretLevel; } + void IncInterpretLevel() + { + if ( nInterpretLevel < USHRT_MAX ) + nInterpretLevel++; + } + void DecInterpretLevel() + { + if ( nInterpretLevel ) + nInterpretLevel--; + } + BOOL IsInMacroInterpreter() const { return nMacroInterpretLevel != 0; } + USHORT GetMacroInterpretLevel() { return nMacroInterpretLevel; } + void IncMacroInterpretLevel() + { + if ( nMacroInterpretLevel < USHRT_MAX ) + nMacroInterpretLevel++; + } + void DecMacroInterpretLevel() + { + if ( nMacroInterpretLevel ) + nMacroInterpretLevel--; + } + BOOL IsInInterpreterTableOp() const { return nInterpreterTableOpLevel != 0; } + USHORT GetInterpreterTableOpLevel() { return nInterpreterTableOpLevel; } + void IncInterpreterTableOpLevel() + { + if ( nInterpreterTableOpLevel < USHRT_MAX ) + nInterpreterTableOpLevel++; + } + void DecInterpreterTableOpLevel() + { + if ( nInterpreterTableOpLevel ) + nInterpreterTableOpLevel--; + } + // add a formula to be remembered for TableOp broadcasts + void AddTableOpFormulaCell( ScFormulaCell* ); + void InvalidateLastTableOpParams() { aLastTableOpParams.bValid = FALSE; } + ScRecursionHelper& GetRecursionHelper() + { + if (!pRecursionHelper) + pRecursionHelper = CreateRecursionHelperInstance(); + return *pRecursionHelper; + } + BOOL IsInDtorClear() const { return bInDtorClear; } + void SetExpandRefs( BOOL bVal ) { bExpandRefs = bVal; } + BOOL IsExpandRefs() { return bExpandRefs; } + + SC_DLLPUBLIC void IncSizeRecalcLevel( SCTAB nTab ); + SC_DLLPUBLIC void DecSizeRecalcLevel( SCTAB nTab, bool bUpdateNoteCaptionPos = true ); + + ULONG GetXMLImportedFormulaCount() const { return nXMLImportedFormulaCount; } + void IncXMLImportedFormulaCount( ULONG nVal ) + { + if ( nXMLImportedFormulaCount + nVal > nXMLImportedFormulaCount ) + nXMLImportedFormulaCount += nVal; + } + void DecXMLImportedFormulaCount( ULONG nVal ) + { + if ( nVal <= nXMLImportedFormulaCount ) + nXMLImportedFormulaCount -= nVal; + else + nXMLImportedFormulaCount = 0; + } + + void StartTrackTimer(); + + void CompileDBFormula(); + void CompileDBFormula( BOOL bCreateFormulaString ); + void CompileNameFormula( BOOL bCreateFormulaString ); + void CompileColRowNameFormula(); + + /** Maximum string length of a column, e.g. for dBase export. + @return String length in octets (!) of the destination encoding. In + case of non-octet encodings (e.g. UCS2) the length in code + points times sizeof(sal_Unicode) is returned. */ + sal_Int32 GetMaxStringLen( SCTAB nTab, SCCOL nCol, + SCROW nRowStart, SCROW nRowEnd, + CharSet eCharSet ) const; + /** Maximum string length of numerical cells of a column, e.g. for dBase export. + @return String length in characters (!) including the decimal + separator, and the decimal precision needed. */ + xub_StrLen GetMaxNumberStringLen( sal_uInt16& nPrecision, + SCTAB nTab, SCCOL nCol, + SCROW nRowStart, SCROW nRowEnd ) const; + + void KeyInput( const KeyEvent& rKEvt ); // TimerDelays etc. + + ScChangeTrack* GetChangeTrack() const { return pChangeTrack; } + + //! only for import filter, deletes any existing ChangeTrack via + //! EndChangeTracking() and takes ownership of new ChangeTrack pTrack + SC_DLLPUBLIC void SetChangeTrack( ScChangeTrack* pTrack ); + + void StartChangeTracking(); + void EndChangeTracking(); + + SC_DLLPUBLIC void CompareDocument( ScDocument& rOtherDoc ); + + void AddUnoObject( SfxListener& rObject ); + void RemoveUnoObject( SfxListener& rObject ); + void BroadcastUno( const SfxHint &rHint ); + void AddUnoListenerCall( const ::com::sun::star::uno::Reference< + ::com::sun::star::util::XModifyListener >& rListener, + const ::com::sun::star::lang::EventObject& rEvent ); + + void SetInLinkUpdate(BOOL bSet); // TableLink or AreaLink + BOOL IsInLinkUpdate() const; // including DdeLink + + SC_DLLPUBLIC SfxItemPool* GetEditPool() const; + SC_DLLPUBLIC SfxItemPool* GetEnginePool() const; + SC_DLLPUBLIC ScFieldEditEngine& GetEditEngine(); + SC_DLLPUBLIC ScNoteEditEngine& GetNoteEngine(); +//UNUSED2009-05 SfxItemPool& GetNoteItemPool(); + + ScRefreshTimerControl* GetRefreshTimerControl() const + { return pRefreshTimerControl; } + ScRefreshTimerControl * const * GetRefreshTimerControlAddress() const + { return &pRefreshTimerControl; } + + void SetPastingDrawFromOtherDoc( BOOL bVal ) + { bPastingDrawFromOtherDoc = bVal; } + BOOL PastingDrawFromOtherDoc() const + { return bPastingDrawFromOtherDoc; } + + /// an ID unique to each document instance + sal_uInt32 GetDocumentID() const; + + void InvalidateStyleSheetUsage() + { bStyleSheetUsageInvalid = TRUE; } + void GetSortParam( ScSortParam& rParam, SCTAB nTab ); + void SetSortParam( ScSortParam& rParam, SCTAB nTab ); + + inline void SetVbaEventProcessor( const com::sun::star::uno::Reference< com::sun::star::script::vba::XVBAEventProcessor >& rxVbaEvents ) + { mxVbaEvents = rxVbaEvents; } + inline com::sun::star::uno::Reference< com::sun::star::script::vba::XVBAEventProcessor > + GetVbaEventProcessor() const { return mxVbaEvents; } + + /** Should only be GRAM_PODF or GRAM_ODFF. */ + void SetStorageGrammar( formula::FormulaGrammar::Grammar eGrammar ); + formula::FormulaGrammar::Grammar GetStorageGrammar() const + { return eStorageGrammar; } + + SfxUndoManager* GetUndoManager(); + bool IsInVBAMode() const; + ScRowBreakIterator* GetRowBreakIterator(SCTAB nTab) const; + +private: // CLOOK-Impl-Methoden + + /** + * Use this class as a locale variable to merge number formatter from + * another document, and set NULL pointer to pFormatExchangeList when + * done. + */ + class NumFmtMergeHandler + { + public: + explicit NumFmtMergeHandler(ScDocument* pDoc, ScDocument* pSrcDoc); + ~NumFmtMergeHandler(); + + private: + ScDocument* mpDoc; + }; + + void MergeNumberFormatter(ScDocument* pSrcDoc); + + void ImplCreateOptions(); // bei Gelegenheit auf on-demand umstellen? + void ImplDeleteOptions(); + + void DeleteDrawLayer(); + void DeleteColorTable(); + SC_DLLPUBLIC BOOL DrawGetPrintArea( ScRange& rRange, BOOL bSetHor, BOOL bSetVer ) const; + void DrawMovePage( USHORT nOldPos, USHORT nNewPos ); + void DrawCopyPage( USHORT nOldPos, USHORT nNewPos ); + + void UpdateDrawPrinter(); + void UpdateDrawLanguages(); + void UpdateDrawDefaults(); + SC_DLLPUBLIC void InitClipPtrs( ScDocument* pSourceDoc ); + + void LoadDdeLinks(SvStream& rStream); + void SaveDdeLinks(SvStream& rStream) const; + + void DeleteAreaLinksOnTab( SCTAB nTab ); + void UpdateRefAreaLinks( UpdateRefMode eUpdateRefMode, + const ScRange& r, SCsCOL nDx, SCsROW nDy, SCsTAB nDz ); + + void CopyRangeNamesToClip(ScDocument* pClipDoc, const ScRange& rClipRange, const ScMarkData* pMarks, bool bAllTabs); + void CopyRangeNamesFromClip(ScDocument* pClipDoc, ScClipRangeNameData& rRangeNames); + void UpdateRangeNamesInFormulas( + ScClipRangeNameData& rRangeNames, const ScRangeList& rDestRanges, const ScMarkData& rMark, + SCCOL nXw, SCROW nYw); + + BOOL HasPartOfMerged( const ScRange& rRange ); + + std::map< SCTAB, ScSortParam > mSheetSortParams; + +}; +inline void ScDocument::GetSortParam( ScSortParam& rParam, SCTAB nTab ) +{ + rParam = mSheetSortParams[ nTab ]; +} + +inline void ScDocument::SetSortParam( ScSortParam& rParam, SCTAB nTab ) +{ + mSheetSortParams[ nTab ] = rParam; +} + +#endif + + |