xref: /AOO41X/main/sc/inc/document.hxx (revision ff0525f24f03981d56b7579b645949f111420994)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef SC_DOCUMENT_HXX
25 #define SC_DOCUMENT_HXX
26 
27 
28 #include <vcl/prntypes.hxx>
29 #include <vcl/timer.hxx>
30 #include <com/sun/star/uno/Reference.hxx>
31 #include <vos/ref.hxx>
32 #include "scdllapi.h"
33 #include "table.hxx"        // FastGetRowHeight (inline)
34 #include "rangelst.hxx"
35 #include "brdcst.hxx"
36 #include "tabopparams.hxx"
37 #include "formula/grammar.hxx"
38 #include <com/sun/star/chart2/XChartDocument.hpp>
39 #include "scdllapi.h"
40 
41 #include <memory>
42 #include <map>
43 #include <set>
44 
45 // Wang Xu Ming -- 2009-8-17
46 // DataPilot Migration - Cache&&Performance
47 #include <list>
48 class ScDPTableDataCache;
49 // End Comments
50 
51 class KeyEvent;
52 class OutputDevice;
53 class SdrObject;
54 class SfxBroadcaster;
55 class SfxListener;
56 class SfxHint;
57 class SfxItemSet;
58 class SfxObjectShell;
59 class SfxBindings;
60 class SfxPoolItem;
61 class SfxItemPool;
62 class SfxPrinter;
63 class SfxStatusBarManager;
64 class SfxStyleSheetBase;
65 class SvMemoryStream;
66 class SvNumberFormatter;
67 class SvxBorderLine;
68 class SvxBoxInfoItem;
69 class SvxBoxItem;
70 class SvxBrushItem;
71 class SvxForbiddenCharactersTable;
72 namespace sfx2 {
73     class LinkManager;
74     }
75 class SvxSearchItem;
76 class SvxShadowItem;
77 class Window;
78 class XColorTable;
79 class List;
80 
81 class ScAutoFormatData;
82 class ScBaseCell;
83 class ScStringCell;
84 class ScBroadcastAreaSlotMachine;
85 class ScChangeViewSettings;
86 class ScChartCollection;
87 class ScChartListenerCollection;
88 class ScConditionalFormat;
89 class ScConditionalFormatList;
90 class ScDBCollection;
91 class ScDBData;
92 class ScDetOpData;
93 class ScDetOpList;
94 class ScDocOptions;
95 class ScDocProtection;
96 class ScDocumentPool;
97 class ScDrawLayer;
98 class ScExtDocOptions;
99 class ScExternalRefManager;
100 class ScFormulaCell;
101 class ScMarkData;
102 class ScOutlineTable;
103 class ScPatternAttr;
104 class ScPrintRangeSaver;
105 class ScRangeData;
106 class ScRangeName;
107 class ScStyleSheet;
108 class ScStyleSheetPool;
109 class ScTable;
110 class ScTableProtection;
111 class ScTokenArray;
112 class ScValidationData;
113 class ScValidationDataList;
114 class ScViewOptions;
115 class ScStrCollection;
116 class TypedScStrCollection;
117 class ScChangeTrack;
118 class ScEditEngineDefaulter;
119 class ScFieldEditEngine;
120 class ScNoteEditEngine;
121 struct ScConsolidateParam;
122 class ScDPObject;
123 class ScDPCollection;
124 class ScMatrix;
125 class ScScriptTypeData;
126 class ScPoolHelper;
127 struct ScSortParam;
128 class ScRefreshTimerControl;
129 class ScUnoListenerCalls;
130 class ScUnoRefList;
131 class ScRecursionHelper;
132 struct RowInfo;
133 struct ScTableInfo;
134 struct ScTabOpParam;
135 class VirtualDevice;
136 class ScAutoNameCache;
137 class ScTemporaryChartLock;
138 class ScLookupCache;
139 struct ScLookupCacheMapImpl;
140 class SfxUndoManager;
141 class ScFormulaParserPool;
142 struct ScClipParam;
143 struct ScClipRangeNameData;
144 class ScRowBreakIterator;
145 
146 namespace com { namespace sun { namespace star {
147     namespace lang {
148         class XMultiServiceFactory;
149         struct EventObject;
150     }
151     namespace i18n {
152         class XBreakIterator;
153     }
154     namespace util {
155         class XModifyListener;
156     }
157     namespace embed {
158         class XEmbeddedObject;
159     }
160     namespace script { namespace vba {
161         class XVBAEventProcessor;
162     } }
163     namespace sheet {
164         struct TablePageBreakData;
165     }
166 } } }
167 
168 #include <svl/zforlist.hxx>
169 /*
170 #ifdef _ZFORLIST_DECLARE_TABLE
171 class SvNumberFormatterIndexTable;
172 #else
173 class Table;
174 typedef Table SvNumberFormatterIndexTable;
175 #endif
176 */
177 
178 #define SC_DOC_NEW          0xFFFF
179 
180 #define SC_MACROCALL_ALLOWED        0
181 #define SC_MACROCALL_NOTALLOWED     1
182 #define SC_MACROCALL_ASK            2
183 
184 #define SC_ASIANCOMPRESSION_INVALID     0xff
185 #define SC_ASIANKERNING_INVALID         0xff
186 
187 
188 enum ScDocumentMode
189     {
190         SCDOCMODE_DOCUMENT,
191         SCDOCMODE_CLIP,
192         SCDOCMODE_UNDO
193     };
194 
195 
196 struct ScDocStat
197 {
198     String  aDocName;
199     SCTAB   nTableCount;
200     sal_uLong   nCellCount;
201     sal_uInt16  nPageCount;
202 };
203 
204 // The constant parameters to CopyBlockFromClip
205 struct ScCopyBlockFromClipParams
206 {
207     ScDocument* pRefUndoDoc;
208     ScDocument* pClipDoc;
209     sal_uInt16      nInsFlag;
210     SCTAB       nTabStart;
211     SCTAB       nTabEnd;
212     sal_Bool        bAsLink;
213     sal_Bool        bSkipAttrForEmpty;
214 };
215 
216 
217 // for loading of binary file format symbol string cells which need font conversion
218 struct ScSymbolStringCellEntry
219 {
220     ScStringCell*   pCell;
221     SCROW           nRow;
222 };
223 
224 
225 // -----------------------------------------------------------------------
226 
227 // DDE link modes
228 const sal_uInt8 SC_DDE_DEFAULT       = 0;
229 const sal_uInt8 SC_DDE_ENGLISH       = 1;
230 const sal_uInt8 SC_DDE_TEXT          = 2;
231 const sal_uInt8 SC_DDE_IGNOREMODE    = 255;       /// For usage in FindDdeLink() only!
232 
233 
234 // -----------------------------------------------------------------------
235 enum { E_MEDIUM_FLAG_NONE = 0, E_MEDIUM_FLAG_EXCEL = 1, E_MEDIUM_FLAG_MSXML = 2 };
236 
237 class ScDocument
238 {
239 friend class ScDocumentIterator;
240 friend class ScValueIterator;
241 friend class ScHorizontalValueIterator;
242 friend class ScDBQueryDataIterator;
243 friend class ScCellIterator;
244 friend class ScQueryCellIterator;
245 friend class ScHorizontalCellIterator;
246 friend class ScHorizontalAttrIterator;
247 friend class ScDocAttrIterator;
248 friend class ScAttrRectIterator;
249 friend class ScDocShell;
250 
251 private:
252     ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xServiceManager;
253 
254     vos::ORef<ScPoolHelper> xPoolHelper;
255 
256     SfxUndoManager*     mpUndoManager;
257     ScFieldEditEngine*  pEditEngine;                    // uses pEditPool from xPoolHelper
258     ScNoteEditEngine*   pNoteEngine;                    // uses pEditPool from xPoolHelper
259     SfxItemPool*    pNoteItemPool; // SfxItemPool to be used if pDrawLayer not created.
260     SfxObjectShell*     pShell;
261     SfxPrinter*         pPrinter;
262     VirtualDevice*      pVirtualDevice_100th_mm;
263     ScDrawLayer*        pDrawLayer;                     // SdrModel
264     XColorTable*        pColorTable;
265     ScConditionalFormatList* pCondFormList;             // bedingte Formate
266     ScValidationDataList* pValidationList;              // Gueltigkeit
267     SvNumberFormatterIndexTable*    pFormatExchangeList;            // zum Umsetzen von Zahlenformaten
268     ScTable*            pTab[MAXTABCOUNT];
269     ScRangeName*        pRangeName;
270     ScDBCollection*     pDBCollection;
271     ScDPCollection*     pDPCollection;
272     // Wang Xu Ming -- 2009-8-17
273     // DataPilot Migration - Cache&&Performance
274     std::list<ScDPTableDataCache*>   m_listDPObjectsCaches;
275     // End Comments
276     ScChartCollection*  pChartCollection;
277     std::auto_ptr< ScTemporaryChartLock > apTemporaryChartLock;
278     ScPatternAttr*      pSelectionAttr;                 // Attribute eines Blocks
279     mutable sfx2::LinkManager*      pLinkManager;
280     ScFormulaCell*      pFormulaTree;                   // Berechnungsbaum Start
281     ScFormulaCell*      pEOFormulaTree;                 // Berechnungsbaum Ende, letzte Zelle
282     ScFormulaCell*      pFormulaTrack;                  // BroadcastTrack Start
283     ScFormulaCell*      pEOFormulaTrack;                // BrodcastTrack Ende, letzte Zelle
284     ScBroadcastAreaSlotMachine* pBASM;                  // BroadcastAreas
285     ScChartListenerCollection* pChartListenerCollection;
286     ScStrCollection*        pOtherObjects;                  // non-chart OLE objects
287     SvMemoryStream*     pClipData;
288     ScDetOpList*        pDetOpList;
289     ScChangeTrack*      pChangeTrack;
290     SfxBroadcaster*     pUnoBroadcaster;
291     ScUnoListenerCalls* pUnoListenerCalls;
292     ScUnoRefList*       pUnoRefUndoList;
293     ScChangeViewSettings* pChangeViewSettings;
294     ScScriptTypeData*   pScriptTypeData;
295     ScRefreshTimerControl* pRefreshTimerControl;
296     vos::ORef<SvxForbiddenCharactersTable> xForbiddenCharacters;
297 
298     ScFieldEditEngine*  pCacheFieldEditEngine;
299 
300     ::std::auto_ptr<ScDocProtection> pDocProtection;
301     ::std::auto_ptr<ScClipParam>     mpClipParam;
302 
303     ::std::auto_ptr<ScExternalRefManager> pExternalRefMgr;
304 
305     // mutable for lazy construction
306     mutable ::std::auto_ptr< ScFormulaParserPool >
307                         mxFormulaParserPool;            /// Pool for all external formula parsers used by this document.
308 
309     String              aDocName;                       // opt: Dokumentname
310     String              aDocCodeName;                       // opt: Dokumentname
311     ScRangePairListRef  xColNameRanges;
312     ScRangePairListRef  xRowNameRanges;
313 
314     ScViewOptions*      pViewOptions;                   // View-Optionen
315     ScDocOptions*       pDocOptions;                    // Dokument-Optionen
316     ScExtDocOptions*    pExtDocOptions;                 // fuer Import etc.
317     ScConsolidateParam* pConsolidateDlgData;
318 
319     ScRecursionHelper*  pRecursionHelper;               // information for recursive and iterative cell formulas
320 
321     ScAutoNameCache*    pAutoNameCache;                 // for automatic name lookup during CompileXML
322 
323     ScLookupCacheMapImpl* pLookupCacheMapImpl;          // cache for lookups like VLOOKUP and MATCH
324 
325     sal_Int64           nUnoObjectId;                   // counted up for UNO objects
326 
327     sal_uInt32          nRangeOverflowType;             // used in (xml) loading for overflow warnings
328 
329     ScRange             aEmbedRange;
330     ScAddress           aCurTextWidthCalcPos;
331     ScAddress           aOnlineSpellPos;                // within whole document
332     ScRange             aVisSpellRange;
333     ScAddress           aVisSpellPos;                   // within aVisSpellRange (see nVisSpellState)
334 
335     Timer               aTrackTimer;
336 
337     com::sun::star::uno::Reference< com::sun::star::script::vba::XVBAEventProcessor >
338                         mxVbaEvents;
339 
340 public:
341     ScTabOpList         aTableOpList;                   // list of ScInterpreterTableOpParams currently in use
342     ScInterpreterTableOpParams  aLastTableOpParams;     // remember last params
343 private:
344 
345     LanguageType        eLanguage;                      // default language
346     LanguageType        eCjkLanguage;                   // default language for asian text
347     LanguageType        eCtlLanguage;                   // default language for complex text
348     CharSet             eSrcSet;                        // Einlesen: Quell-Zeichensatz
349 
350     /** The compiler grammar used in document storage. GRAM_PODF for ODF 1.1
351         documents, GRAM_ODFF for ODF 1.2 documents. */
352     formula::FormulaGrammar::Grammar  eStorageGrammar;
353 
354     /** The compiler grammar used in ODF import after brackets had been
355         stripped (which they shouldn't, but until that's fixed) by the XML
356         importer. */
357     formula::FormulaGrammar::Grammar  eXmlImportGrammar;
358 
359     sal_uLong               nFormulaCodeInTree;             // FormelRPN im Formelbaum
360     sal_uLong               nXMLImportedFormulaCount;        // progress count during XML import
361     sal_uInt16              nInterpretLevel;                // >0 wenn im Interpreter
362     sal_uInt16              nMacroInterpretLevel;           // >0 wenn Macro im Interpreter
363     sal_uInt16              nInterpreterTableOpLevel;       // >0 if in Interpreter TableOp
364     SCTAB               nMaxTableNumber;
365     sal_uInt16              nSrcVer;                        // Dateiversion (Laden/Speichern)
366     SCROW               nSrcMaxRow;                     // Zeilenzahl zum Laden/Speichern
367     sal_uInt16              nFormulaTrackCount;
368     sal_uInt16              nHardRecalcState;               // 0: soft, 1: hard-warn, 2: hard
369     SCTAB               nVisibleTab;                    // fuer OLE etc.
370 
371     ScLkUpdMode         eLinkMode;
372 
373     sal_Bool                bAutoCalc;                      // Automatisch Berechnen
374     sal_Bool                bAutoCalcShellDisabled;         // in/von/fuer ScDocShell disabled
375     // ob noch ForcedFormulas berechnet werden muessen,
376     // im Zusammenspiel mit ScDocShell SetDocumentModified,
377     // AutoCalcShellDisabled und TrackFormulas
378     sal_Bool                bForcedFormulaPending;
379     sal_Bool                bCalculatingFormulaTree;
380     sal_Bool                bIsClip;
381     sal_Bool                bIsUndo;
382     sal_Bool                bIsVisible;                     // set from view ctor
383 
384     sal_Bool                bIsEmbedded;                    // Embedded-Bereich anzeigen/anpassen ?
385 
386     // kein SetDirty bei ScFormulaCell::CompileTokenArray sondern am Ende
387     // von ScDocument::CompileAll[WithFormats], CopyScenario, CopyBlockFromClip
388     sal_Bool                bNoSetDirty;
389     // kein Broadcast, keine Listener aufbauen waehrend aus einem anderen
390     // Doc (per Filter o.ae.) inserted wird, erst bei CompileAll / CalcAfterLoad
391     sal_Bool                bInsertingFromOtherDoc;
392     bool                bLoadingMedium;
393     bool                bImportingXML;      // special handling of formula text
394     bool                mbImportingMSXML;
395     sal_Bool                bXMLFromWrapper;    // distinguish ScXMLImportWrapper from external component
396     sal_Bool                bCalcingAfterLoad;              // in CalcAfterLoad TRUE
397     // wenn temporaer keine Listener auf/abgebaut werden sollen
398     sal_Bool                bNoListening;
399     sal_Bool                bIdleDisabled;
400     sal_Bool                bInLinkUpdate;                  // TableLink or AreaLink
401     sal_Bool                bChartListenerCollectionNeedsUpdate;
402     // ob RC_FORCED Formelzellen im Dokument sind/waren (einmal an immer an)
403     sal_Bool                bHasForcedFormulas;
404     // ob das Doc gerade zerstoert wird (kein Notify-Tracking etc. mehr)
405     sal_Bool                bInDtorClear;
406     // ob bei Spalte/Zeile einfuegen am Rand einer Referenz die Referenz
407     // erweitert wird, wird in jedem UpdateReference aus InputOptions geholt,
408     // gesetzt und am Ende von UpdateReference zurueckgesetzt
409     sal_Bool                bExpandRefs;
410     // fuer Detektiv-Update, wird bei jeder Aenderung an Formeln gesetzt
411     sal_Bool                bDetectiveDirty;
412 
413     sal_uInt8               nMacroCallMode;     // Makros per Warnung-Dialog disabled?
414     sal_Bool                bHasMacroFunc;      // valid only after loading
415 
416     sal_uInt8               nVisSpellState;
417 
418     sal_uInt8               nAsianCompression;
419     sal_uInt8               nAsianKerning;
420     sal_Bool                bSetDrawDefaults;
421 
422     sal_Bool                bPastingDrawFromOtherDoc;
423 
424     sal_uInt8                nInDdeLinkUpdate;   // originating DDE links (stacked bool)
425 
426     sal_Bool                bInUnoBroadcast;
427     sal_Bool                bInUnoListenerCall;
428     formula::FormulaGrammar::Grammar  eGrammar;
429 
430     mutable sal_Bool        bStyleSheetUsageInvalid;
431 
432     bool                mbUndoEnabled;
433     bool                mbAdjustHeightEnabled;
434     bool                mbExecuteLinkEnabled;
435     bool                mbChangeReadOnlyEnabled;    // allow changes in read-only document (for API import filters)
436     bool                mbStreamValidLocked;
437 
438     sal_Int16           mnNamedRangesLockCount;
439 
440 public:
441     SC_DLLPUBLIC sal_uLong          GetCellCount() const;       // alle Zellen
442     SCSIZE          GetCellCount(SCTAB nTab, SCCOL nCol) const;
443     sal_uLong           GetWeightedCount() const;   // Formeln und Edit staerker gewichtet
444     sal_uLong           GetCodeCount() const;       // RPN-Code in Formeln
445     DECL_LINK( GetUserDefinedColor, sal_uInt16 * );
446                                                                 // Numberformatter
447 
448 public:
449     SC_DLLPUBLIC                ScDocument( ScDocumentMode eMode = SCDOCMODE_DOCUMENT,
450                                 SfxObjectShell* pDocShell = NULL );
451     SC_DLLPUBLIC                ~ScDocument();
452 
453     inline ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >
454                     GetServiceManager() const { return xServiceManager; }
455 
456     SC_DLLPUBLIC const String&  GetName() const { return aDocName; }
457     void            SetName( const String& r ) { aDocName = r; }
458     const String&   GetCodeName() const { return aDocCodeName; }
459     void            SetCodeName( const String& r ) { aDocCodeName = r; }
460 
461     void            GetDocStat( ScDocStat& rDocStat );
462 
463     SC_DLLPUBLIC void           InitDrawLayer( SfxObjectShell* pDocShell = NULL );
464     XColorTable*    GetColorTable();
465 
466     SC_DLLPUBLIC sfx2::LinkManager*     GetLinkManager() const;
467 
468     SC_DLLPUBLIC const ScDocOptions&        GetDocOptions() const;
469     SC_DLLPUBLIC void                   SetDocOptions( const ScDocOptions& rOpt );
470     SC_DLLPUBLIC const ScViewOptions&   GetViewOptions() const;
471     SC_DLLPUBLIC void                   SetViewOptions( const ScViewOptions& rOpt );
472     void                    SetPrintOptions();
473 
474     ScExtDocOptions*        GetExtDocOptions()  { return pExtDocOptions; }
475     SC_DLLPUBLIC void                   SetExtDocOptions( ScExtDocOptions* pNewOptions );
476 
477     void                    GetLanguage( LanguageType& rLatin, LanguageType& rCjk, LanguageType& rCtl ) const;
478     void                    SetLanguage( LanguageType eLatin, LanguageType eCjk, LanguageType eCtl );
479 
480     void                    SetDrawDefaults();
481 
482     void                        SetConsolidateDlgData( const ScConsolidateParam* pData );
483     const ScConsolidateParam*   GetConsolidateDlgData() const { return pConsolidateDlgData; }
484 
485     void            Clear( sal_Bool bFromDestructor = sal_False );
486 
487     ScFieldEditEngine*  CreateFieldEditEngine();
488     void                DisposeFieldEditEngine(ScFieldEditEngine*& rpEditEngine);
489 
490     SC_DLLPUBLIC ScRangeName*   GetRangeName();
491     void            SetRangeName( ScRangeName* pNewRangeName );
492     SCTAB           GetMaxTableNumber() { return nMaxTableNumber; }
493     void            SetMaxTableNumber(SCTAB nNumber) { nMaxTableNumber = nNumber; }
494 
495     ScRangePairList*    GetColNameRanges() { return &xColNameRanges; }
496     ScRangePairList*    GetRowNameRanges() { return &xRowNameRanges; }
497     ScRangePairListRef& GetColNameRangesRef() { return xColNameRanges; }
498     ScRangePairListRef& GetRowNameRangesRef() { return xRowNameRanges; }
499 
500     SC_DLLPUBLIC ScDBCollection*    GetDBCollection() const;
501     void            SetDBCollection( ScDBCollection* pNewDBCollection,
502                                         sal_Bool bRemoveAutoFilter = sal_False );
503     ScDBData*       GetDBAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab,
504                                         sal_Bool bStartOnly = sal_False) const;
505     ScDBData*       GetDBAtArea(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2) const;
506     ScDBData*       GetFilterDBAtTable(SCTAB nTab) const;
507 //UNUSED2008-05  ScRangeData*   GetRangeAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab,
508 //UNUSED2008-05                                      sal_Bool bStartOnly = sal_False) const;
509     SC_DLLPUBLIC ScRangeData*   GetRangeAtBlock( const ScRange& rBlock, String* pName=NULL ) const;
510     ScDBData*       GetDBAtTable(SCTAB nTab, ScGetDBMode eMode) const;
511 
512     SC_DLLPUBLIC ScDPCollection*        GetDPCollection();
513     ScDPObject*         GetDPAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab) const;
514     ScDPObject*         GetDPAtBlock( const ScRange& rBlock ) const;
515     // Wang Xu Ming -- 2009-8-17
516     // DataPilot Migration - Cache&&Performance
517     SC_DLLPUBLIC ScDPTableDataCache*    GetDPObjectCache( long nID );
518     SC_DLLPUBLIC ScDPTableDataCache*    GetUsedDPObjectCache ( ScRange rRange );
519     SC_DLLPUBLIC long                                 AddDPObjectCache( ScDPTableDataCache* pData );
520     SC_DLLPUBLIC void                                 RemoveDPObjectCache( long nID );
521     SC_DLLPUBLIC void                                 RemoveUnusedDPObjectCaches();
522     SC_DLLPUBLIC void                                 GetUsedDPObjectCache( std::list<ScDPTableDataCache*>& usedlist );
523     SC_DLLPUBLIC long                                 GetNewDPObjectCacheId ();
524     // End Comments
525 
526     SC_DLLPUBLIC ScChartCollection* GetChartCollection() const;
527 
528     void                StopTemporaryChartLock();
529 
530     void            EnsureGraphicNames();
531 
532     SdrObject*      GetObjectAtPoint( SCTAB nTab, const Point& rPos );
533     sal_Bool            HasChartAtPoint( SCTAB nTab, const Point& rPos, String* pName = NULL );
534 
535     ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XChartDocument > GetChartByName( const String& rChartName );
536     SC_DLLPUBLIC void            GetChartRanges( const String& rChartName, ::std::vector< ScRangeList >& rRanges, ScDocument* pSheetNameDoc );
537     void            SetChartRanges( const String& rChartName, const ::std::vector< ScRangeList >& rRanges );
538 
539     void            UpdateChartArea( const String& rChartName, const ScRange& rNewArea,
540                                         sal_Bool bColHeaders, sal_Bool bRowHeaders, sal_Bool bAdd );
541     void            UpdateChartArea( const String& rChartName,
542                                     const ScRangeListRef& rNewList,
543                                     sal_Bool bColHeaders, sal_Bool bRowHeaders, sal_Bool bAdd );
544     void            GetOldChartParameters( const String& rName,
545                                     ScRangeList& rRanges, sal_Bool& rColHeaders, sal_Bool& rRowHeaders );
546     ::com::sun::star::uno::Reference<
547             ::com::sun::star::embed::XEmbeddedObject >
548                     FindOleObjectByName( const String& rName );
549 
550     SC_DLLPUBLIC void           MakeTable( SCTAB nTab,bool _bNeedsNameCheck = true );
551 
552     SCTAB           GetVisibleTab() const       { return nVisibleTab; }
553     SC_DLLPUBLIC void           SetVisibleTab(SCTAB nTab)   { nVisibleTab = nTab; }
554 
555     SC_DLLPUBLIC sal_Bool           HasTable( SCTAB nTab ) const;
556     SC_DLLPUBLIC sal_Bool           GetName( SCTAB nTab, String& rName ) const;
557     SC_DLLPUBLIC sal_Bool           GetCodeName( SCTAB nTab, String& rName ) const;
558     SC_DLLPUBLIC sal_Bool           SetCodeName( SCTAB nTab, const String& rName );
559     SC_DLLPUBLIC sal_Bool           GetTable( const String& rName, SCTAB& rTab ) const;
560     SC_DLLPUBLIC inline SCTAB   GetTableCount() const { return nMaxTableNumber; }
561     SvNumberFormatterIndexTable* GetFormatExchangeList() const { return pFormatExchangeList; }
562 
563     SC_DLLPUBLIC ScDocProtection* GetDocProtection() const;
564     SC_DLLPUBLIC void            SetDocProtection(const ScDocProtection* pProtect);
565     SC_DLLPUBLIC sal_Bool           IsDocProtected() const;
566     sal_Bool            IsDocEditable() const;
567     SC_DLLPUBLIC sal_Bool           IsTabProtected( SCTAB nTab ) const;
568     SC_DLLPUBLIC    ScTableProtection* GetTabProtection( SCTAB nTab ) const;
569     SC_DLLPUBLIC void SetTabProtection(SCTAB nTab, const ScTableProtection* pProtect);
570     void            CopyTabProtection(SCTAB nTabSrc, SCTAB nTabDest);
571 
572     void            LockTable(SCTAB nTab);
573     void            UnlockTable(SCTAB nTab);
574 
575     sal_Bool            IsBlockEditable( SCTAB nTab, SCCOL nStartCol, SCROW nStartRow,
576                                         SCCOL nEndCol, SCROW nEndRow,
577                                         sal_Bool* pOnlyNotBecauseOfMatrix = NULL ) const;
578     sal_Bool            IsSelectionEditable( const ScMarkData& rMark,
579                                         sal_Bool* pOnlyNotBecauseOfMatrix = NULL ) const;
580     sal_Bool            HasSelectedBlockMatrixFragment( SCCOL nStartCol, SCROW nStartRow,
581                                             SCCOL nEndCol, SCROW nEndRow,
582                                             const ScMarkData& rMark ) const;
583 
584     sal_Bool            GetMatrixFormulaRange( const ScAddress& rCellPos, ScRange& rMatrix );
585 
586     sal_Bool            IsEmbedded() const;
587     void            GetEmbedded( ScRange& rRange ) const;
588     void            SetEmbedded( const ScRange& rRange );
589     void            ResetEmbedded();
590     Rectangle       GetEmbeddedRect() const;                        // 1/100 mm
591     void            SetEmbedded( const Rectangle& rRect );          // aus VisArea (1/100 mm)
592     void            SnapVisArea( Rectangle& rRect ) const;          // 1/100 mm
593 
594     SC_DLLPUBLIC sal_Bool           ValidTabName( const String& rName ) const;
595     SC_DLLPUBLIC sal_Bool           ValidNewTabName( const String& rName ) const;
596     SC_DLLPUBLIC void           CreateValidTabName(String& rName) const;
597     SC_DLLPUBLIC sal_Bool           InsertTab( SCTAB nPos, const String& rName,
598                                 sal_Bool bExternalDocument = sal_False );
599     SC_DLLPUBLIC sal_Bool            DeleteTab( SCTAB nTab, ScDocument* pRefUndoDoc = NULL );
600     SC_DLLPUBLIC sal_Bool           RenameTab( SCTAB nTab, const String& rName,
601                                 sal_Bool bUpdateRef = sal_True,
602                                 sal_Bool bExternalDocument = sal_False );
603     sal_Bool            MoveTab( SCTAB nOldPos, SCTAB nNewPos );
604     sal_Bool            CopyTab( SCTAB nOldPos, SCTAB nNewPos,
605                                 const ScMarkData* pOnlyMarked = NULL );
606     SC_DLLPUBLIC sal_uLong          TransferTab(ScDocument* pSrcDoc, SCTAB nSrcPos, SCTAB nDestPos,
607                                     sal_Bool bInsertNew = sal_True,
608                                     sal_Bool bResultsOnly = sal_False );
609     SC_DLLPUBLIC void           TransferDrawPage(ScDocument* pSrcDoc, SCTAB nSrcPos, SCTAB nDestPos);
610     SC_DLLPUBLIC void           SetVisible( SCTAB nTab, sal_Bool bVisible );
611     SC_DLLPUBLIC sal_Bool           IsVisible( SCTAB nTab ) const;
612     sal_Bool            IsStreamValid( SCTAB nTab ) const;
613     void            SetStreamValid( SCTAB nTab, sal_Bool bSet, sal_Bool bIgnoreLock = sal_False );
614     void            LockStreamValid( bool bLock );
615     bool            IsStreamValidLocked() const                         { return mbStreamValidLocked; }
616     SC_DLLPUBLIC sal_Bool        IsPendingRowHeights( SCTAB nTab ) const;
617     SC_DLLPUBLIC void            SetPendingRowHeights( SCTAB nTab, sal_Bool bSet );
618     SC_DLLPUBLIC void           SetLayoutRTL( SCTAB nTab, sal_Bool bRTL );
619     SC_DLLPUBLIC sal_Bool           IsLayoutRTL( SCTAB nTab ) const;
620     sal_Bool            IsNegativePage( SCTAB nTab ) const;
621     SC_DLLPUBLIC void           SetScenario( SCTAB nTab, sal_Bool bFlag );
622     SC_DLLPUBLIC sal_Bool           IsScenario( SCTAB nTab ) const;
623     SC_DLLPUBLIC void           GetScenarioData( SCTAB nTab, String& rComment,
624                                         Color& rColor, sal_uInt16& rFlags ) const;
625     SC_DLLPUBLIC void           SetScenarioData( SCTAB nTab, const String& rComment,
626                                         const Color& rColor, sal_uInt16 nFlags );
627     SC_DLLPUBLIC Color GetTabBgColor( SCTAB nTab ) const;
628     SC_DLLPUBLIC void SetTabBgColor( SCTAB nTab, const Color& rColor );
629     SC_DLLPUBLIC bool IsDefaultTabBgColor( SCTAB nTab ) const;
630     void            GetScenarioFlags( SCTAB nTab, sal_uInt16& rFlags ) const;
631     SC_DLLPUBLIC sal_Bool           IsActiveScenario( SCTAB nTab ) const;
632     SC_DLLPUBLIC void           SetActiveScenario( SCTAB nTab, sal_Bool bActive );      // nur fuer Undo etc.
633     SC_DLLPUBLIC formula::FormulaGrammar::AddressConvention GetAddressConvention() const;
634     SC_DLLPUBLIC formula::FormulaGrammar::Grammar GetGrammar() const;
635     void            SetGrammar( formula::FormulaGrammar::Grammar eGram );
636     SC_DLLPUBLIC sal_uInt8          GetLinkMode( SCTAB nTab ) const;
637     sal_Bool            IsLinked( SCTAB nTab ) const;
638     SC_DLLPUBLIC const String&  GetLinkDoc( SCTAB nTab ) const;
639     const String&   GetLinkFlt( SCTAB nTab ) const;
640     const String&   GetLinkOpt( SCTAB nTab ) const;
641     SC_DLLPUBLIC const String&  GetLinkTab( SCTAB nTab ) const;
642     sal_uLong           GetLinkRefreshDelay( SCTAB nTab ) const;
643     void            SetLink( SCTAB nTab, sal_uInt8 nMode, const String& rDoc,
644                             const String& rFilter, const String& rOptions,
645                             const String& rTabName, sal_uLong nRefreshDelay );
646     sal_Bool            HasLink( const String& rDoc,
647                             const String& rFilter, const String& rOptions ) const;
648     SC_DLLPUBLIC sal_Bool           LinkExternalTab( SCTAB& nTab, const String& aDocTab,
649                                     const String& aFileName,
650                                     const String& aTabName );
651 
652     bool            HasExternalRefManager() const { return pExternalRefMgr.get(); }
653     SC_DLLPUBLIC ScExternalRefManager* GetExternalRefManager() const;
654     bool            IsInExternalReferenceMarking() const;
655     void            MarkUsedExternalReferences();
656     bool            MarkUsedExternalReferences( ScTokenArray & rArr );
657 
658     /** Returns the pool containing external formula parsers. Creates the pool
659         on first call. */
660     ScFormulaParserPool& GetFormulaParserPool() const;
661 
662     sal_Bool            HasDdeLinks() const;
663     sal_Bool            HasAreaLinks() const;
664     void            UpdateExternalRefLinks();
665     void            UpdateDdeLinks();
666     void            UpdateAreaLinks();
667 
668                     // originating DDE links
669     void            IncInDdeLinkUpdate() { if ( nInDdeLinkUpdate < 255 ) ++nInDdeLinkUpdate; }
670     void            DecInDdeLinkUpdate() { if ( nInDdeLinkUpdate ) --nInDdeLinkUpdate; }
671     sal_Bool            IsInDdeLinkUpdate() const   { return nInDdeLinkUpdate != 0; }
672 
673     SC_DLLPUBLIC void           CopyDdeLinks( ScDocument* pDestDoc ) const;
674     void            DisconnectDdeLinks();
675 
676                     // Fuer StarOne Api:
677     sal_uInt16          GetDdeLinkCount() const;
678     sal_Bool            UpdateDdeLink( const String& rAppl, const String& rTopic, const String& rItem );
679 
680     /** Tries to find a DDE link with the specified connection data.
681         @param rnDdePos  (out-param) Returns the index of the DDE link (does not include other links from link manager).
682         @return  true = DDE link found, rnDdePos valid. */
683     SC_DLLPUBLIC bool            FindDdeLink( const String& rAppl, const String& rTopic, const String& rItem, sal_uInt8 nMode, sal_uInt16& rnDdePos );
684 
685     /** Returns the connection data of the specified DDE link.
686         @param nDdePos  Index of the DDE link (does not include other links from link manager).
687         @param rAppl  (out-param) The application name.
688         @param rTopic  (out-param) The DDE topic.
689         @param rItem  (out-param) The DDE item.
690         @return  true = DDE link found, out-parameters valid. */
691     bool            GetDdeLinkData( sal_uInt16 nDdePos, String& rAppl, String& rTopic, String& rItem ) const;
692     /** Returns the link mode of the specified DDE link.
693         @param nDdePos  Index of the DDE link (does not include other links from link manager).
694         @param rnMode  (out-param) The link mode of the specified DDE link.
695         @return  true = DDE link found, rnMode valid. */
696     bool            GetDdeLinkMode( sal_uInt16 nDdePos, sal_uInt8& rnMode ) const;
697     /** Returns the result matrix of the specified DDE link.
698         @param nDdePos  Index of the DDE link (does not include other links from link manager).
699         @return  The result matrix, if the DDE link has been found, 0 otherwise. */
700     SC_DLLPUBLIC const ScMatrix* GetDdeLinkResultMatrix( sal_uInt16 nDdePos ) const;
701 
702     /** Tries to find a DDE link or creates a new, if not extant.
703         @param pResults  If not 0, sets the matrix as as DDE link result matrix (also for existing links).
704         @return  true = DDE link found; false = Unpredictable error occured, no DDE link created. */
705     SC_DLLPUBLIC bool            CreateDdeLink( const String& rAppl, const String& rTopic, const String& rItem, sal_uInt8 nMode, ScMatrix* pResults = NULL );
706     /** Sets a result matrix for the specified DDE link.
707         @param nDdePos  Index of the DDE link (does not include other links from link manager).
708         @param pResults  The array containing all results of the DDE link (intrusive-ref-counted, do not delete).
709         @return  true = DDE link found and matrix set. */
710     bool            SetDdeLinkResultMatrix( sal_uInt16 nDdePos, ScMatrix* pResults );
711 
712 
713     SfxBindings*    GetViewBindings();
714     SfxObjectShell* GetDocumentShell() const    { return pShell; }
715     ScDrawLayer*    GetDrawLayer()              { return pDrawLayer; }
716     SfxBroadcaster* GetDrawBroadcaster();       // zwecks Header-Vermeidung
717     void            BeginDrawUndo();
718     sal_Bool        IsDrawRecording() const;
719     void            EndDrawUndo();//paired with BeginDrawUndo, clear undo object if GetUndoObj is not called.
720                                 //Not necessary if GetUndoObj is called, but call EndDrawUndo paired with BeginDrawUndo is recommended
721 
722     void            BeginUnoRefUndo();
723     bool            HasUnoRefUndo() const       { return ( pUnoRefUndoList != NULL ); }
724     ScUnoRefList*   EndUnoRefUndo();            // must be deleted by caller!
725     sal_Int64       GetNewUnoId();
726     void            AddUnoRefChange( sal_Int64 nId, const ScRangeList& rOldRanges );
727 
728     // #109985#
729     sal_Bool IsChart( const SdrObject* pObject );
730 
731     SC_DLLPUBLIC void           UpdateAllCharts();
732     void            UpdateChartRef( UpdateRefMode eUpdateRefMode,
733                                     SCCOL nCol1, SCROW nRow1, SCTAB nTab1,
734                                     SCCOL nCol2, SCROW nRow2, SCTAB nTab2,
735                                     SCsCOL nDx, SCsROW nDy, SCsTAB nDz );
736                     //! setzt nur die neue RangeList, keine ChartListener o.ae.
737     void            SetChartRangeList( const String& rChartName,
738                         const ScRangeListRef& rNewRangeListRef );
739 
740     sal_Bool            HasControl( SCTAB nTab, const Rectangle& rMMRect );
741     void            InvalidateControls( Window* pWin, SCTAB nTab, const Rectangle& rMMRect );
742 
743     void            StartAnimations( SCTAB nTab, Window* pWin );
744 
745     sal_Bool            HasBackgroundDraw( SCTAB nTab, const Rectangle& rMMRect );
746     sal_Bool            HasAnyDraw( SCTAB nTab, const Rectangle& rMMRect );
747 
748     const ScSheetEvents* GetSheetEvents( SCTAB nTab ) const;
749     void            SetSheetEvents( SCTAB nTab, const ScSheetEvents* pNew );
750     bool            HasSheetEventScript( SCTAB nTab, sal_Int32 nEvent, bool bWithVbaEvents = false ) const;
751     bool            HasAnySheetEventScript( sal_Int32 nEvent, bool bWithVbaEvents = false ) const;  // on any sheet
752 
753     bool            HasAnyCalcNotification() const;
754     sal_Bool            HasCalcNotification( SCTAB nTab ) const;
755     void            SetCalcNotification( SCTAB nTab );
756     void            ResetCalcNotifications();
757 
758     SC_DLLPUBLIC ScOutlineTable*    GetOutlineTable( SCTAB nTab, sal_Bool bCreate = sal_False );
759     sal_Bool            SetOutlineTable( SCTAB nTab, const ScOutlineTable* pNewOutline );
760 
761     void            DoAutoOutline( SCCOL nStartCol, SCROW nStartRow,
762                                     SCCOL nEndCol, SCROW nEndRow, SCTAB nTab );
763 
764     sal_Bool            DoSubTotals( SCTAB nTab, ScSubTotalParam& rParam );
765     void            RemoveSubTotals( SCTAB nTab, ScSubTotalParam& rParam );
766     sal_Bool            TestRemoveSubTotals( SCTAB nTab, const ScSubTotalParam& rParam );
767     sal_Bool            HasSubTotalCells( const ScRange& rRange );
768 
769     SC_DLLPUBLIC void           PutCell( const ScAddress&, ScBaseCell* pCell, sal_Bool bForceTab = sal_False );
770 //UNUSED2009-05 SC_DLLPUBLIC void           PutCell( const ScAddress&, ScBaseCell* pCell,
771 //UNUSED2009-05                         sal_uLong nFormatIndex, sal_Bool bForceTab = sal_False);
772     SC_DLLPUBLIC void           PutCell( SCCOL nCol, SCROW nRow, SCTAB nTab, ScBaseCell* pCell,
773                             sal_Bool bForceTab = sal_False );
774     SC_DLLPUBLIC void           PutCell(SCCOL nCol, SCROW nRow, SCTAB nTab, ScBaseCell* pCell,
775                             sal_uLong nFormatIndex, sal_Bool bForceTab = sal_False);
776                     //  return sal_True = Zahlformat gesetzt
777     SC_DLLPUBLIC sal_Bool           SetString(
778         SCCOL nCol, SCROW nRow, SCTAB nTab, const String& rString,
779         SvNumberFormatter* pFormatter = NULL, bool bDetectNumberFormat = true );
780     SC_DLLPUBLIC void           SetValue( SCCOL nCol, SCROW nRow, SCTAB nTab, const double& rVal );
781     void            SetError( SCCOL nCol, SCROW nRow, SCTAB nTab, const sal_uInt16 nError);
782 
783     SC_DLLPUBLIC void           InsertMatrixFormula(SCCOL nCol1, SCROW nRow1,
784                                         SCCOL nCol2, SCROW nRow2,
785                                         const ScMarkData& rMark,
786                                         const String& rFormula,
787                                         const ScTokenArray* p = NULL,
788                                         const formula::FormulaGrammar::Grammar = formula::FormulaGrammar::GRAM_DEFAULT );
789     SC_DLLPUBLIC void           InsertTableOp(const ScTabOpParam& rParam,   // Mehrfachoperation
790                                   SCCOL nCol1, SCROW nRow1,
791                                   SCCOL nCol2, SCROW nRow2, const ScMarkData& rMark);
792 
793     SC_DLLPUBLIC void           GetString( SCCOL nCol, SCROW nRow, SCTAB nTab, String& rString );
794     SC_DLLPUBLIC void           GetInputString( SCCOL nCol, SCROW nRow, SCTAB nTab, String& rString );
795     sal_uInt16                  GetStringForFormula( const ScAddress& rPos, rtl::OUString& rString );
796     SC_DLLPUBLIC double         GetValue( const ScAddress& );
797     SC_DLLPUBLIC void           GetValue( SCCOL nCol, SCROW nRow, SCTAB nTab, double& rValue );
798     SC_DLLPUBLIC double         RoundValueAsShown( double fVal, sal_uLong nFormat );
799     SC_DLLPUBLIC void           GetNumberFormat( SCCOL nCol, SCROW nRow, SCTAB nTab,
800                                      sal_uInt32& rFormat );
801     SC_DLLPUBLIC sal_uInt32     GetNumberFormat( const ScAddress& ) const;
802                     /** If no number format attribute is set and the cell
803                         pointer passed is of type formula cell, the calculated
804                         number format of the formula cell is returned. pCell
805                         may be NULL. */
806     SC_DLLPUBLIC void           GetNumberFormatInfo( short& nType, sal_uLong& nIndex,
807                         const ScAddress& rPos, const ScBaseCell* pCell ) const;
808     void            GetFormula( SCCOL nCol, SCROW nRow, SCTAB nTab, String& rFormula,
809                                 sal_Bool bAsciiExport = sal_False ) const;
810     SC_DLLPUBLIC void           GetCellType( SCCOL nCol, SCROW nRow, SCTAB nTab, CellType& rCellType ) const;
811     SC_DLLPUBLIC CellType       GetCellType( const ScAddress& rPos ) const;
812     SC_DLLPUBLIC void           GetCell( SCCOL nCol, SCROW nRow, SCTAB nTab, ScBaseCell*& rpCell ) const;
813     SC_DLLPUBLIC ScBaseCell*        GetCell( const ScAddress& rPos ) const;
814 
815 //UNUSED2008-05  void           RefreshNoteFlags();
816 
817     SC_DLLPUBLIC sal_Bool           HasData( SCCOL nCol, SCROW nRow, SCTAB nTab );
818     SC_DLLPUBLIC sal_Bool           HasStringData( SCCOL nCol, SCROW nRow, SCTAB nTab ) const;
819     SC_DLLPUBLIC sal_Bool           HasValueData( SCCOL nCol, SCROW nRow, SCTAB nTab ) const;
820     sal_Bool            HasStringCells( const ScRange& rRange ) const;
821 
822     /** Returns true, if there is any data to create a selection list for rPos. */
823     sal_Bool            HasSelectionData( SCCOL nCol, SCROW nRow, SCTAB nTab ) const;
824 
825     /** Returns the pointer to a cell note object at the passed cell address. */
826     ScPostIt*       GetNote( const ScAddress& rPos );
827     /** Sets the passed note at the cell with the passed cell address. */
828     void            TakeNote( const ScAddress& rPos, ScPostIt*& rpNote );
829     /** Returns and forgets the cell note object at the passed cell address. */
830     ScPostIt*       ReleaseNote( const ScAddress& rPos );
831     /** Returns the pointer to an existing or created cell note object at the passed cell address. */
832     SC_DLLPUBLIC ScPostIt* GetOrCreateNote( const ScAddress& rPos );
833     /** Deletes the note at the passed cell address. */
834     void            DeleteNote( const ScAddress& rPos );
835     /** Creates the captions of all uninitialized cell notes in the specified sheet.
836         @param bForced  True = always create all captions, false = skip when Undo is disabled. */
837     void            InitializeNoteCaptions( SCTAB nTab, bool bForced = false );
838     /** Creates the captions of all uninitialized cell notes in all sheets.
839         @param bForced  True = always create all captions, false = skip when Undo is disabled. */
840     void            InitializeAllNoteCaptions( bool bForced = false );
841 
842     sal_Bool            ExtendMergeSel( SCCOL nStartCol, SCROW nStartRow,
843                                 SCCOL& rEndCol, SCROW& rEndRow, const ScMarkData& rMark,
844                                 sal_Bool bRefresh = sal_False, sal_Bool bAttrs = sal_False );
845     sal_Bool            ExtendMerge( SCCOL nStartCol, SCROW nStartRow,
846                                 SCCOL& rEndCol, SCROW& rEndRow, SCTAB nTab,
847                                 sal_Bool bRefresh = sal_False, sal_Bool bAttrs = sal_False );
848     sal_Bool            ExtendMerge( ScRange& rRange, sal_Bool bRefresh = sal_False, sal_Bool bAttrs = sal_False );
849     sal_Bool            ExtendTotalMerge( ScRange& rRange );
850     SC_DLLPUBLIC sal_Bool           ExtendOverlapped( SCCOL& rStartCol, SCROW& rStartRow,
851                                 SCCOL nEndCol, SCROW nEndRow, SCTAB nTab );
852     SC_DLLPUBLIC sal_Bool           ExtendOverlapped( ScRange& rRange );
853 
854     sal_Bool            RefreshAutoFilter( SCCOL nStartCol, SCROW nStartRow,
855                                 SCCOL nEndCol, SCROW nEndRow, SCTAB nTab );
856 
857     SC_DLLPUBLIC void           DoMergeContents( SCTAB nTab, SCCOL nStartCol, SCROW nStartRow,
858                                     SCCOL nEndCol, SCROW nEndRow );
859                     //  ohne Ueberpruefung:
860     SC_DLLPUBLIC void           DoMerge( SCTAB nTab, SCCOL nStartCol, SCROW nStartRow,
861                                     SCCOL nEndCol, SCROW nEndRow, bool bDeleteCaptions = true );
862     void            RemoveMerge( SCCOL nCol, SCROW nRow, SCTAB nTab );
863 
864     sal_Bool            IsBlockEmpty( SCTAB nTab, SCCOL nStartCol, SCROW nStartRow,
865                                                 SCCOL nEndCol, SCROW nEndRow, bool bIgnoreNotes = false ) const;
866     sal_Bool            IsPrintEmpty( SCTAB nTab, SCCOL nStartCol, SCROW nStartRow,
867                                                 SCCOL nEndCol, SCROW nEndRow,
868                                                 sal_Bool bLeftIsEmpty = sal_False,
869                                                 ScRange* pLastRange = NULL,
870                                                 Rectangle* pLastMM = NULL ) const;
871 
872     sal_Bool            IsHorOverlapped( SCCOL nCol, SCROW nRow, SCTAB nTab ) const;
873     sal_Bool            IsVerOverlapped( SCCOL nCol, SCROW nRow, SCTAB nTab ) const;
874 
875     SC_DLLPUBLIC bool           HasAttrib( SCCOL nCol1, SCROW nRow1, SCTAB nTab1,
876                                            SCCOL nCol2, SCROW nRow2, SCTAB nTab2, sal_uInt16 nMask );
877     SC_DLLPUBLIC bool           HasAttrib( const ScRange& rRange, sal_uInt16 nMask );
878 
879     void            GetBorderLines( SCCOL nCol, SCROW nRow, SCTAB nTab,
880                                     const SvxBorderLine** ppLeft,
881                                     const SvxBorderLine** ppTop,
882                                     const SvxBorderLine** ppRight,
883                                     const SvxBorderLine** ppBottom ) const;
884 
885     void            ResetChanged( const ScRange& rRange );
886 
887     void            SetDirty();
888     void            SetDirty( const ScRange& );
889     void            SetTableOpDirty( const ScRange& );  // for Interpreter TableOp
890     void            InterpretDirtyCells( const ScRangeList& rRanges );
891     void            CalcAll();
892     SC_DLLPUBLIC void           CalcAfterLoad();
893     void            CompileAll();
894     void            CompileXML();
895 
896     ScAutoNameCache* GetAutoNameCache()     { return pAutoNameCache; }
897 
898                     /** Creates a ScLookupCache cache for the range if it
899                         doesn't already exist. */
900     ScLookupCache & GetLookupCache( const ScRange & rRange );
901                     /** Only ScLookupCache ctor uses AddLookupCache(), do not
902                         use elsewhere! */
903     void            AddLookupCache( ScLookupCache & rCache );
904                     /** Only ScLookupCache dtor uses RemoveLookupCache(), do
905                         not use elsewhere! */
906     void            RemoveLookupCache( ScLookupCache & rCache );
907                     /** Zap all caches. */
908     void            ClearLookupCaches();
909 
910                     // Automatisch Berechnen
911     void            SetAutoCalc( sal_Bool bNewAutoCalc );
912     sal_Bool            GetAutoCalc() const { return bAutoCalc; }
913                     // Automatisch Berechnen in/von/fuer ScDocShell disabled
914     void            SetAutoCalcShellDisabled( sal_Bool bNew ) { bAutoCalcShellDisabled = bNew; }
915     sal_Bool            IsAutoCalcShellDisabled() const { return bAutoCalcShellDisabled; }
916                     // ForcedFormulas zu berechnen
917     void            SetForcedFormulaPending( sal_Bool bNew ) { bForcedFormulaPending = bNew; }
918     sal_Bool            IsForcedFormulaPending() const { return bForcedFormulaPending; }
919                     // if CalcFormulaTree() is currently running
920     sal_Bool            IsCalculatingFormulaTree() { return bCalculatingFormulaTree; }
921 
922     sal_uInt16          GetErrCode( const ScAddress& ) const;
923 
924                     /** Shrink a range to only include data area.
925 
926                         This is not the actually used area within the
927                         selection, but the bounds of the sheet's data area
928                         instead.
929 
930                         @returns True if the area passed intersected the data
931                                  area, false if not, in which case the values
932                                  obtained may be out of bounds, not in order or
933                                  unmodified. True does not mean that there
934                                  actually is any data within the selection.
935                      */
936     bool            ShrinkToDataArea( SCTAB nTab, SCCOL& rStartCol, SCROW& rStartRow, SCCOL& rEndCol, SCROW& rEndRow ) const;
937 
938                     /** Shrink a range to only include used data area.
939 
940                         @param o_bShrunk
941                                Out parameter, True if area was shrunk, false if not.
942 
943                         @returns True if there is any data, fakse if not.
944                      */
945     bool            ShrinkToUsedDataArea( bool& o_bShrunk,
946                                           SCTAB nTab, SCCOL& rStartCol, SCROW& rStartRow,
947                                           SCCOL& rEndCol, SCROW& rEndRow, bool bColumnsOnly ) const;
948 
949     SC_DLLPUBLIC void           GetDataArea( SCTAB nTab, SCCOL& rStartCol, SCROW& rStartRow,
950                                     SCCOL& rEndCol, SCROW& rEndRow, sal_Bool bIncludeOld, bool bOnlyDown ) const;
951     SC_DLLPUBLIC sal_Bool           GetCellArea( SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow ) const;
952     SC_DLLPUBLIC sal_Bool           GetTableArea( SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow ) const;
953     SC_DLLPUBLIC sal_Bool           GetPrintArea( SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow,
954                                     sal_Bool bNotes = sal_True ) const;
955     SC_DLLPUBLIC sal_Bool           GetPrintAreaHor( SCTAB nTab, SCROW nStartRow, SCROW nEndRow,
956                                         SCCOL& rEndCol, sal_Bool bNotes = sal_True ) const;
957     SC_DLLPUBLIC sal_Bool           GetPrintAreaVer( SCTAB nTab, SCCOL nStartCol, SCCOL nEndCol,
958                                         SCROW& rEndRow, sal_Bool bNotes = sal_True ) const;
959     void            InvalidateTableArea();
960 
961     /*
962     Get the last cell's row number , which have visual atribute or visual data in specific table
963     */
964     SC_DLLPUBLIC void           GetLastAttrCell( SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow ) const;
965 
966     SC_DLLPUBLIC sal_Bool           GetDataStart( SCTAB nTab, SCCOL& rStartCol, SCROW& rStartRow ) const;
967 
968     /**
969      * Find the maximum column position that contains printable data for the
970      * specified row range.  The final column position must be equal or less
971      * than the initial value of rEndCol.
972      */
973     void            ExtendPrintArea( OutputDevice* pDev, SCTAB nTab,
974                                     SCCOL nStartCol, SCROW nStartRow,
975                                     SCCOL& rEndCol, SCROW nEndRow );
976     SC_DLLPUBLIC SCSIZE         GetEmptyLinesInBlock( SCCOL nStartCol, SCROW nStartRow, SCTAB nStartTab,
977                                             SCCOL nEndCol, SCROW nEndRow, SCTAB nEndTab,
978                                             ScDirection eDir );
979 
980     void            FindAreaPos( SCCOL& rCol, SCROW& rRow, SCTAB nTab, SCsCOL nMovX, SCsROW nMovY );
981     SC_DLLPUBLIC void           GetNextPos( SCCOL& rCol, SCROW& rRow, SCTAB nTab, SCsCOL nMovX, SCsROW nMovY,
982                                 sal_Bool bMarked, sal_Bool bUnprotected, const ScMarkData& rMark );
983 
984     sal_Bool            GetNextMarkedCell( SCCOL& rCol, SCROW& rRow, SCTAB nTab,
985                                         const ScMarkData& rMark );
986 
987     void            LimitChartArea( SCTAB nTab, SCCOL& rStartCol, SCROW& rStartRow,
988                                                     SCCOL& rEndCol, SCROW& rEndRow );
989     void            LimitChartIfAll( ScRangeListRef& rRangeList );
990 
991     sal_Bool            InsertRow( SCCOL nStartCol, SCTAB nStartTab,
992                                SCCOL nEndCol,   SCTAB nEndTab,
993                                SCROW nStartRow, SCSIZE nSize, ScDocument* pRefUndoDoc = NULL,
994                                const ScMarkData* pTabMark = NULL );
995     SC_DLLPUBLIC sal_Bool           InsertRow( const ScRange& rRange, ScDocument* pRefUndoDoc = NULL );
996     void            DeleteRow( SCCOL nStartCol, SCTAB nStartTab,
997                                SCCOL nEndCol,   SCTAB nEndTab,
998                                SCROW nStartRow, SCSIZE nSize,
999                                ScDocument* pRefUndoDoc = NULL, sal_Bool* pUndoOutline = NULL,
1000                                const ScMarkData* pTabMark = NULL );
1001     void            DeleteRow( const ScRange& rRange,
1002                                ScDocument* pRefUndoDoc = NULL, sal_Bool* pUndoOutline = NULL );
1003     sal_Bool            InsertCol( SCROW nStartRow, SCTAB nStartTab,
1004                                SCROW nEndRow,   SCTAB nEndTab,
1005                                SCCOL nStartCol, SCSIZE nSize, ScDocument* pRefUndoDoc = NULL,
1006                                const ScMarkData* pTabMark = NULL );
1007     SC_DLLPUBLIC sal_Bool           InsertCol( const ScRange& rRange, ScDocument* pRefUndoDoc = NULL );
1008     void            DeleteCol( SCROW nStartRow, SCTAB nStartTab,
1009                                SCROW nEndRow, SCTAB nEndTab,
1010                                SCCOL nStartCol, SCSIZE nSize,
1011                                ScDocument* pRefUndoDoc = NULL, sal_Bool* pUndoOutline = NULL,
1012                                const ScMarkData* pTabMark = NULL );
1013     void            DeleteCol( const ScRange& rRange,
1014                                ScDocument* pRefUndoDoc = NULL, sal_Bool* pUndoOutline = NULL );
1015 
1016     sal_Bool            CanInsertRow( const ScRange& rRange ) const;
1017     sal_Bool            CanInsertCol( const ScRange& rRange ) const;
1018 
1019     void            FitBlock( const ScRange& rOld, const ScRange& rNew, sal_Bool bClear = sal_True );
1020     sal_Bool            CanFitBlock( const ScRange& rOld, const ScRange& rNew );
1021 
1022     sal_Bool            IsClipOrUndo() const                        { return bIsClip || bIsUndo; }
1023     sal_Bool            IsUndo() const                              { return bIsUndo; }
1024     sal_Bool            IsClipboard() const                         { return bIsClip; }
1025     bool            IsUndoEnabled() const                       { return mbUndoEnabled; }
1026     void            EnableUndo( bool bVal );
1027 
1028     bool            IsAdjustHeightEnabled() const               { return mbAdjustHeightEnabled; }
1029     void            EnableAdjustHeight( bool bVal )             { mbAdjustHeightEnabled = bVal; }
1030     bool            IsExecuteLinkEnabled() const                { return mbExecuteLinkEnabled; }
1031     void            EnableExecuteLink( bool bVal )              { mbExecuteLinkEnabled = bVal; }
1032     bool            IsChangeReadOnlyEnabled() const             { return mbChangeReadOnlyEnabled; }
1033     void            EnableChangeReadOnly( bool bVal )           { mbChangeReadOnlyEnabled = bVal; }
1034     SC_DLLPUBLIC sal_Int16       GetNamedRangesLockCount() const             { return mnNamedRangesLockCount; }
1035     void            SetNamedRangesLockCount( sal_Int16 nCount ) { mnNamedRangesLockCount = nCount; }
1036     SC_DLLPUBLIC void           ResetClip( ScDocument* pSourceDoc, const ScMarkData* pMarks );
1037     SC_DLLPUBLIC void           ResetClip( ScDocument* pSourceDoc, SCTAB nTab );
1038     void            SetCutMode( sal_Bool bCut );
1039     sal_Bool            IsCutMode();
1040     void            SetClipArea( const ScRange& rArea, sal_Bool bCut = sal_False );
1041 
1042     SC_DLLPUBLIC sal_Bool           IsDocVisible() const                        { return bIsVisible; }
1043     void            SetDocVisible( sal_Bool bSet );
1044 
1045     sal_Bool            HasOLEObjectsInArea( const ScRange& rRange, const ScMarkData* pTabMark = NULL );
1046 
1047     void            DeleteObjectsInArea( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
1048                                         const ScMarkData& rMark );
1049     void            DeleteObjectsInSelection( const ScMarkData& rMark );
1050 
1051     void            DeleteArea(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
1052                             const ScMarkData& rMark, sal_uInt16 nDelFlag);
1053     void            DeleteAreaTab(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
1054                                 SCTAB nTab, sal_uInt16 nDelFlag);
1055     void            DeleteAreaTab(const ScRange& rRange, sal_uInt16 nDelFlag);
1056 
1057     void            CopyToClip(const ScClipParam& rClipParam, ScDocument* pClipDoc,
1058                                const ScMarkData* pMarks = NULL, bool bAllTabs = false, bool bKeepScenarioFlags = false,
1059                                bool bIncludeObjects = false, bool bCloneNoteCaptions = true);
1060 
1061     void            CopyTabToClip(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
1062                                 SCTAB nTab, ScDocument* pClipDoc = NULL);
1063     void            CopyBlockFromClip( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
1064                                     const ScMarkData& rMark, SCsCOL nDx, SCsROW nDy,
1065                                     const ScCopyBlockFromClipParams* pCBFCP );
1066     void            CopyNonFilteredFromClip( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
1067                                     const ScMarkData& rMark, SCsCOL nDx, SCsROW nDy,
1068                                     const ScCopyBlockFromClipParams* pCBFCP,
1069                                     SCROW & rClipStartRow );
1070     void            StartListeningFromClip( SCCOL nCol1, SCROW nRow1,
1071                                         SCCOL nCol2, SCROW nRow2,
1072                                         const ScMarkData& rMark, sal_uInt16 nInsFlag );
1073     void            BroadcastFromClip( SCCOL nCol1, SCROW nRow1,
1074                                     SCCOL nCol2, SCROW nRow2,
1075                                     const ScMarkData& rMark, sal_uInt16 nInsFlag );
1076     /** If pDestRanges is given it overrides rDestRange, rDestRange in this
1077         case is the overall encompassing range. */
1078     void            CopyFromClip( const ScRange& rDestRange, const ScMarkData& rMark,
1079                                     sal_uInt16 nInsFlag,
1080                                     ScDocument* pRefUndoDoc = NULL,
1081                                     ScDocument* pClipDoc = NULL,
1082                                     sal_Bool bResetCut = sal_True,
1083                                     sal_Bool bAsLink = sal_False,
1084                                     sal_Bool bIncludeFiltered = sal_True,
1085                                     sal_Bool bSkipAttrForEmpty = sal_False,
1086                                     const ScRangeList * pDestRanges = NULL );
1087 
1088     void            CopyMultiRangeFromClip(const ScAddress& rDestPos, const ScMarkData& rMark,
1089                                            sal_uInt16 nInsFlag, ScDocument* pClipDoc,
1090                                            bool bResetCut = true, bool bAsLink = false,
1091                                            bool bIncludeFiltered = true,
1092                                            bool bSkipAttrForEmpty = false);
1093 
1094     void            GetClipArea(SCCOL& nClipX, SCROW& nClipY, sal_Bool bIncludeFiltered);
1095     void            GetClipStart(SCCOL& nClipX, SCROW& nClipY);
1096 
1097     sal_Bool            HasClipFilteredRows();
1098 
1099     sal_Bool            IsClipboardSource() const;
1100 
1101     SC_DLLPUBLIC void           TransposeClip( ScDocument* pTransClip, sal_uInt16 nFlags, sal_Bool bAsLink );
1102 
1103     ScClipParam&    GetClipParam();
1104     void            SetClipParam(const ScClipParam& rParam);
1105 
1106     void            MixDocument( const ScRange& rRange, sal_uInt16 nFunction, sal_Bool bSkipEmpty,
1107                                     ScDocument* pSrcDoc );
1108 
1109     void            FillTab( const ScRange& rSrcArea, const ScMarkData& rMark,
1110                                 sal_uInt16 nFlags, sal_uInt16 nFunction,
1111                                 sal_Bool bSkipEmpty, sal_Bool bAsLink );
1112     void            FillTabMarked( SCTAB nSrcTab, const ScMarkData& rMark,
1113                                 sal_uInt16 nFlags, sal_uInt16 nFunction,
1114                                 sal_Bool bSkipEmpty, sal_Bool bAsLink );
1115 
1116     void            TransliterateText( const ScMarkData& rMultiMark, sal_Int32 nType );
1117 
1118     SC_DLLPUBLIC void           InitUndo( ScDocument* pSrcDoc, SCTAB nTab1, SCTAB nTab2,
1119                                 sal_Bool bColInfo = sal_False, sal_Bool bRowInfo = sal_False );
1120     void            AddUndoTab( SCTAB nTab1, SCTAB nTab2,
1121                                 sal_Bool bColInfo = sal_False, sal_Bool bRowInfo = sal_False );
1122     SC_DLLPUBLIC void           InitUndoSelected( ScDocument* pSrcDoc, const ScMarkData& rTabSelection,
1123                                 sal_Bool bColInfo = sal_False, sal_Bool bRowInfo = sal_False );
1124 
1125                     //  nicht mehr benutzen:
1126     void            CopyToDocument(SCCOL nCol1, SCROW nRow1, SCTAB nTab1,
1127                                 SCCOL nCol2, SCROW nRow2, SCTAB nTab2,
1128                                 sal_uInt16 nFlags, sal_Bool bMarked, ScDocument* pDestDoc,
1129                                 const ScMarkData* pMarks = NULL, sal_Bool bColRowFlags = sal_True);
1130     void            UndoToDocument(SCCOL nCol1, SCROW nRow1, SCTAB nTab1,
1131                                 SCCOL nCol2, SCROW nRow2, SCTAB nTab2,
1132                                 sal_uInt16 nFlags, sal_Bool bMarked, ScDocument* pDestDoc,
1133                                 const ScMarkData* pMarks = NULL);
1134 
1135     void            CopyToDocument(const ScRange& rRange,
1136                                 sal_uInt16 nFlags, sal_Bool bMarked, ScDocument* pDestDoc,
1137                                 const ScMarkData* pMarks = NULL, sal_Bool bColRowFlags = sal_True);
1138     void            UndoToDocument(const ScRange& rRange,
1139                                 sal_uInt16 nFlags, sal_Bool bMarked, ScDocument* pDestDoc,
1140                                 const ScMarkData* pMarks = NULL);
1141 
1142     void            CopyScenario( SCTAB nSrcTab, SCTAB nDestTab, sal_Bool bNewScenario = sal_False );
1143     sal_Bool            TestCopyScenario( SCTAB nSrcTab, SCTAB nDestTab ) const;
1144     void            MarkScenario( SCTAB nSrcTab, SCTAB nDestTab,
1145                                     ScMarkData& rDestMark, sal_Bool bResetMark = sal_True,
1146                                     sal_uInt16 nNeededBits = 0 ) const;
1147     sal_Bool            HasScenarioRange( SCTAB nTab, const ScRange& rRange ) const;
1148     SC_DLLPUBLIC const ScRangeList* GetScenarioRanges( SCTAB nTab ) const;
1149 
1150     SC_DLLPUBLIC void           CopyUpdated( ScDocument* pPosDoc, ScDocument* pDestDoc );
1151 
1152     void            UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW nRow1, SCTAB nTab1,
1153                                      SCCOL nCol2, SCROW nRow2, SCTAB nTab2,
1154                                      SCsCOL nDx, SCsROW nDy, SCsTAB nDz,
1155                                      ScDocument* pUndoDoc = NULL, sal_Bool bIncludeDraw = sal_True,
1156                                      bool bUpdateNoteCaptionPos = true );
1157 
1158     SC_DLLPUBLIC void           UpdateTranspose( const ScAddress& rDestPos, ScDocument* pClipDoc,
1159                                         const ScMarkData& rMark, ScDocument* pUndoDoc = NULL );
1160 
1161     void            UpdateGrow( const ScRange& rArea, SCCOL nGrowX, SCROW nGrowY );
1162 
1163     void            Fill(   SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
1164                             const ScMarkData& rMark,
1165                             sal_uLong nFillCount, FillDir eFillDir = FILL_TO_BOTTOM,
1166                             FillCmd eFillCmd = FILL_LINEAR, FillDateCmd eFillDateCmd = FILL_DAY,
1167                             double nStepValue = 1.0, double nMaxValue = 1E307);
1168     String          GetAutoFillPreview( const ScRange& rSource, SCCOL nEndX, SCROW nEndY );
1169 
1170     sal_Bool            GetSelectionFunction( ScSubTotalFunc eFunc,
1171                                             const ScAddress& rCursor, const ScMarkData& rMark,
1172                                             double& rResult );
1173 
1174     SC_DLLPUBLIC const SfxPoolItem*         GetAttr( SCCOL nCol, SCROW nRow, SCTAB nTab, sal_uInt16 nWhich ) const;
1175     SC_DLLPUBLIC const ScPatternAttr*   GetPattern( SCCOL nCol, SCROW nRow, SCTAB nTab ) const;
1176     SC_DLLPUBLIC const ScPatternAttr*    GetMostUsedPattern( SCCOL nCol, SCROW nStartRow, SCROW nEndRow, SCTAB nTab ) const;
1177     const ScPatternAttr*    GetSelectionPattern( const ScMarkData& rMark, sal_Bool bDeep = sal_True );
1178     ScPatternAttr*          CreateSelectionPattern( const ScMarkData& rMark, sal_Bool bDeep = sal_True );
1179 
1180     const ScConditionalFormat* GetCondFormat( SCCOL nCol, SCROW nRow, SCTAB nTab ) const;
1181     SC_DLLPUBLIC const SfxItemSet*  GetCondResult( SCCOL nCol, SCROW nRow, SCTAB nTab ) const;
1182     const SfxPoolItem*  GetEffItem( SCCOL nCol, SCROW nRow, SCTAB nTab, sal_uInt16 nWhich ) const;
1183 
1184     SC_DLLPUBLIC const ::com::sun::star::uno::Reference< ::com::sun::star::i18n::XBreakIterator >& GetBreakIterator();
1185     sal_Bool            HasStringWeakCharacters( const String& rString );
1186     SC_DLLPUBLIC sal_uInt8          GetStringScriptType( const String& rString );
1187     SC_DLLPUBLIC sal_uInt8          GetCellScriptType( ScBaseCell* pCell, sal_uLong nNumberFormat );
1188     SC_DLLPUBLIC sal_uInt8          GetScriptType( SCCOL nCol, SCROW nRow, SCTAB nTab, ScBaseCell* pCell = NULL );
1189 
1190     sal_Bool            HasDetectiveOperations() const;
1191     void            AddDetectiveOperation( const ScDetOpData& rData );
1192     void            ClearDetectiveOperations();
1193     ScDetOpList*    GetDetOpList() const                { return pDetOpList; }
1194     void            SetDetOpList(ScDetOpList* pNew);
1195 
1196     sal_Bool            HasDetectiveObjects(SCTAB nTab) const;
1197 
1198     void            GetSelectionFrame( const ScMarkData& rMark,
1199                                        SvxBoxItem&      rLineOuter,
1200                                        SvxBoxInfoItem&  rLineInner );
1201     void            ApplySelectionFrame( const ScMarkData& rMark,
1202                                          const SvxBoxItem* pLineOuter,
1203                                          const SvxBoxInfoItem* pLineInner );
1204     void            ApplyFrameAreaTab( const ScRange& rRange,
1205                                          const SvxBoxItem* pLineOuter,
1206                                          const SvxBoxInfoItem* pLineInner );
1207 
1208     void            ClearSelectionItems( const sal_uInt16* pWhich, const ScMarkData& rMark );
1209     void            ChangeSelectionIndent( sal_Bool bIncrement, const ScMarkData& rMark );
1210 
1211     SC_DLLPUBLIC sal_uLong          AddCondFormat( const ScConditionalFormat& rNew );
1212     SC_DLLPUBLIC void           FindConditionalFormat( sal_uLong nKey, ScRangeList& rRanges );
1213     SC_DLLPUBLIC void           FindConditionalFormat( sal_uLong nKey, ScRangeList& rRanges, SCTAB nTab );
1214     void            ConditionalChanged( sal_uLong nKey );
1215 
1216     SC_DLLPUBLIC sal_uLong          AddValidationEntry( const ScValidationData& rNew );
1217 
1218     SC_DLLPUBLIC const ScValidationData*    GetValidationEntry( sal_uLong nIndex ) const;
1219 
1220     ScConditionalFormatList* GetCondFormList() const        // Ref-Undo
1221                     { return pCondFormList; }
1222     void            SetCondFormList(ScConditionalFormatList* pNew);
1223 
1224     ScValidationDataList* GetValidationList() const
1225                     { return pValidationList; }
1226 
1227     SC_DLLPUBLIC void           ApplyAttr( SCCOL nCol, SCROW nRow, SCTAB nTab,
1228                                 const SfxPoolItem& rAttr );
1229     SC_DLLPUBLIC void           ApplyPattern( SCCOL nCol, SCROW nRow, SCTAB nTab,
1230                                     const ScPatternAttr& rAttr );
1231     SC_DLLPUBLIC void           ApplyPatternArea( SCCOL nStartCol, SCROW nStartRow,
1232                                         SCCOL nEndCol, SCROW nEndRow,
1233                                         const ScMarkData& rMark, const ScPatternAttr& rAttr );
1234     SC_DLLPUBLIC void           ApplyPatternAreaTab( SCCOL nStartCol, SCROW nStartRow,
1235                                             SCCOL nEndCol, SCROW nEndRow, SCTAB nTab,
1236                                             const ScPatternAttr& rAttr );
1237     SC_DLLPUBLIC void           ApplyPooledPatternAreaTab( SCCOL nStartCol, SCROW nStartRow,
1238                                             SCCOL nEndCol, SCROW nEndRow, SCTAB nTab,
1239                                             const ScPatternAttr& rPooledAttr, const ScPatternAttr& rAttr );
1240     SC_DLLPUBLIC void           ApplyPatternIfNumberformatIncompatible(
1241                             const ScRange& rRange, const ScMarkData& rMark,
1242                             const ScPatternAttr& rPattern, short nNewType );
1243 
1244     void            ApplyStyle( SCCOL nCol, SCROW nRow, SCTAB nTab,
1245                                 const ScStyleSheet& rStyle);
1246     void            ApplyStyleArea( SCCOL nStartCol, SCROW nStartRow,
1247                                     SCCOL nEndCol, SCROW nEndRow,
1248                                     const ScMarkData& rMark, const ScStyleSheet& rStyle);
1249     SC_DLLPUBLIC void           ApplyStyleAreaTab( SCCOL nStartCol, SCROW nStartRow,
1250                                         SCCOL nEndCol, SCROW nEndRow, SCTAB nTab,
1251                                         const ScStyleSheet& rStyle);
1252 
1253     void            ApplySelectionStyle( const ScStyleSheet& rStyle, const ScMarkData& rMark );
1254     void            ApplySelectionLineStyle( const ScMarkData& rMark,
1255                                             const SvxBorderLine* pLine, sal_Bool bColorOnly );
1256 
1257     const ScStyleSheet* GetStyle( SCCOL nCol, SCROW nRow, SCTAB nTab ) const;
1258     const ScStyleSheet* GetSelectionStyle( const ScMarkData& rMark ) const;
1259 
1260     void            StyleSheetChanged( const SfxStyleSheetBase* pStyleSheet, sal_Bool bRemoved,
1261                                         OutputDevice* pDev,
1262                                         double nPPTX, double nPPTY,
1263                                         const Fraction& rZoomX, const Fraction& rZoomY );
1264 
1265     sal_Bool            IsStyleSheetUsed( const ScStyleSheet& rStyle, sal_Bool bGatherAllStyles ) const;
1266 
1267     SC_DLLPUBLIC sal_Bool           ApplyFlagsTab( SCCOL nStartCol, SCROW nStartRow,
1268                                             SCCOL nEndCol, SCROW nEndRow,
1269                                             SCTAB nTab, sal_Int16 nFlags );
1270     sal_Bool            RemoveFlagsTab( SCCOL nStartCol, SCROW nStartRow,
1271                                             SCCOL nEndCol, SCROW nEndRow,
1272                                             SCTAB nTab, sal_Int16 nFlags );
1273 
1274     SC_DLLPUBLIC void           SetPattern( const ScAddress&, const ScPatternAttr& rAttr,
1275                                     sal_Bool bPutToPool = sal_False );
1276     SC_DLLPUBLIC void           SetPattern( SCCOL nCol, SCROW nRow, SCTAB nTab, const ScPatternAttr& rAttr,
1277                                     sal_Bool bPutToPool = sal_False );
1278     void            DeleteNumberFormat( const sal_uInt32* pDelKeys, sal_uInt32 nCount );
1279 
1280     void            AutoFormat( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow,
1281                                     sal_uInt16 nFormatNo, const ScMarkData& rMark );
1282     void            GetAutoFormatData( SCTAB nTab, SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow,
1283                                         ScAutoFormatData& rData );
1284     sal_Bool            SearchAndReplace( const SvxSearchItem& rSearchItem,
1285                                         SCCOL& rCol, SCROW& rRow, SCTAB& rTab,
1286                                         ScMarkData& rMark,
1287                                         String& rUndoStr, ScDocument* pUndoDoc = NULL );
1288 
1289                     // Col/Row von Folgeaufrufen bestimmen
1290                     // (z.B. nicht gefunden von Anfang, oder folgende Tabellen)
1291     static void     GetSearchAndReplaceStart( const SvxSearchItem& rSearchItem,
1292                         SCCOL& rCol, SCROW& rRow );
1293 
1294     sal_Bool            Solver(SCCOL nFCol, SCROW nFRow, SCTAB nFTab,
1295                             SCCOL nVCol, SCROW nVRow, SCTAB nVTab,
1296                             const String& sValStr, double& nX);
1297 
1298     void            ApplySelectionPattern( const ScPatternAttr& rAttr, const ScMarkData& rMark );
1299     void            DeleteSelection( sal_uInt16 nDelFlag, const ScMarkData& rMark );
1300     void            DeleteSelectionTab( SCTAB nTab, sal_uInt16 nDelFlag, const ScMarkData& rMark );
1301 
1302     SC_DLLPUBLIC void           SetColWidth( SCCOL nCol, SCTAB nTab, sal_uInt16 nNewWidth );
1303     SC_DLLPUBLIC void           SetColWidthOnly( SCCOL nCol, SCTAB nTab, sal_uInt16 nNewWidth );
1304     SC_DLLPUBLIC void           SetRowHeight( SCROW nRow, SCTAB nTab, sal_uInt16 nNewHeight );
1305     SC_DLLPUBLIC void           SetRowHeightRange( SCROW nStartRow, SCROW nEndRow, SCTAB nTab,
1306                                             sal_uInt16 nNewHeight );
1307 
1308     SC_DLLPUBLIC void           SetRowHeightOnly( SCROW nStartRow, SCROW nEndRow, SCTAB nTab,
1309                                                   sal_uInt16 nNewHeight );
1310     void                        SetManualHeight( SCROW nStartRow, SCROW nEndRow, SCTAB nTab, sal_Bool bManual );
1311 
1312     SC_DLLPUBLIC sal_uInt16         GetColWidth( SCCOL nCol, SCTAB nTab ) const;
1313     SC_DLLPUBLIC sal_uInt16         GetRowHeight( SCROW nRow, SCTAB nTab, bool bHiddenAsZero = true ) const;
1314     SC_DLLPUBLIC sal_uInt16         GetRowHeight( SCROW nRow, SCTAB nTab, SCROW* pStartRow, SCROW* pEndRow, bool bHiddenAsZero = true ) const;
1315     SC_DLLPUBLIC sal_uLong          GetRowHeight( SCROW nStartRow, SCROW nEndRow, SCTAB nTab ) const;
1316     SCROW                       GetRowForHeight( SCTAB nTab, sal_uLong nHeight ) const;
1317     sal_uLong                       GetScaledRowHeight( SCROW nStartRow, SCROW nEndRow, SCTAB nTab, double fScale ) const;
1318     SC_DLLPUBLIC sal_uLong          GetColOffset( SCCOL nCol, SCTAB nTab ) const;
1319     SC_DLLPUBLIC sal_uLong          GetRowOffset( SCROW nRow, SCTAB nTab ) const;
1320 
1321     SC_DLLPUBLIC sal_uInt16         GetOriginalWidth( SCCOL nCol, SCTAB nTab ) const;
1322     SC_DLLPUBLIC sal_uInt16         GetOriginalHeight( SCROW nRow, SCTAB nTab ) const;
1323 
1324     sal_uInt16          GetCommonWidth( SCCOL nEndCol, SCTAB nTab ) const;
1325 
1326     SCROW           GetHiddenRowCount( SCROW nRow, SCTAB nTab ) const;
1327 
1328     sal_uInt16          GetOptimalColWidth( SCCOL nCol, SCTAB nTab, OutputDevice* pDev,
1329                                         double nPPTX, double nPPTY,
1330                                         const Fraction& rZoomX, const Fraction& rZoomY,
1331                                         sal_Bool bFormula,
1332                                         const ScMarkData* pMarkData = NULL,
1333                                         sal_Bool bSimpleTextImport = sal_False );
1334     SC_DLLPUBLIC sal_Bool           SetOptimalHeight( SCROW nStartRow, SCROW nEndRow, SCTAB nTab, sal_uInt16 nExtra,
1335                                         OutputDevice* pDev,
1336                                         double nPPTX, double nPPTY,
1337                                         const Fraction& rZoomX, const Fraction& rZoomY,
1338                                         sal_Bool bShrink );
1339     void            UpdateAllRowHeights( OutputDevice* pDev,
1340                                         double nPPTX, double nPPTY,
1341                                         const Fraction& rZoomX, const Fraction& rZoomY,
1342                                         const ScMarkData* pTabMark = NULL );
1343     long            GetNeededSize( SCCOL nCol, SCROW nRow, SCTAB nTab,
1344                                     OutputDevice* pDev,
1345                                     double nPPTX, double nPPTY,
1346                                     const Fraction& rZoomX, const Fraction& rZoomY,
1347                                     sal_Bool bWidth, sal_Bool bTotalSize = sal_False );
1348 
1349     SC_DLLPUBLIC void           ShowCol(SCCOL nCol, SCTAB nTab, sal_Bool bShow);
1350     SC_DLLPUBLIC void           ShowRow(SCROW nRow, SCTAB nTab, sal_Bool bShow);
1351     SC_DLLPUBLIC void           ShowRows(SCROW nRow1, SCROW nRow2, SCTAB nTab, sal_Bool bShow);
1352     SC_DLLPUBLIC void           SetColFlags( SCCOL nCol, SCTAB nTab, sal_uInt8 nNewFlags );
1353     SC_DLLPUBLIC void           SetRowFlags( SCROW nRow, SCTAB nTab, sal_uInt8 nNewFlags );
1354     SC_DLLPUBLIC void           SetRowFlags( SCROW nStartRow, SCROW nEndRow, SCTAB nTab, sal_uInt8 nNewFlags );
1355 
1356     SC_DLLPUBLIC sal_uInt8          GetColFlags( SCCOL nCol, SCTAB nTab ) const;
1357     SC_DLLPUBLIC sal_uInt8          GetRowFlags( SCROW nRow, SCTAB nTab ) const;
1358 
1359     SC_DLLPUBLIC const ScBitMaskCompressedArray< SCROW, sal_uInt8> & GetRowFlagsArray( SCTAB nTab ) const;
1360     SC_DLLPUBLIC       ScBitMaskCompressedArray< SCROW, sal_uInt8> & GetRowFlagsArrayModifiable( SCTAB nTab );
1361 
1362     SC_DLLPUBLIC void           GetAllRowBreaks(::std::set<SCROW>& rBreaks, SCTAB nTab, bool bPage, bool bManual) const;
1363     SC_DLLPUBLIC void           GetAllColBreaks(::std::set<SCCOL>& rBreaks, SCTAB nTab, bool bPage, bool bManual) const;
1364     SC_DLLPUBLIC ScBreakType    HasRowBreak(SCROW nRow, SCTAB nTab) const;
1365     SC_DLLPUBLIC ScBreakType    HasColBreak(SCCOL nCol, SCTAB nTab) const;
1366     SC_DLLPUBLIC void           SetRowBreak(SCROW nRow, SCTAB nTab, bool bPage, bool bManual);
1367     SC_DLLPUBLIC void           SetColBreak(SCCOL nCol, SCTAB nTab, bool bPage, bool bManual);
1368     void                        RemoveRowBreak(SCROW nRow, SCTAB nTab, bool bPage, bool bManual);
1369     void                        RemoveColBreak(SCCOL nCol, SCTAB nTab, bool bPage, bool bManual);
1370     ::com::sun::star::uno::Sequence<
1371         ::com::sun::star::sheet::TablePageBreakData> GetRowBreakData(SCTAB nTab) const;
1372 
1373     SC_DLLPUBLIC bool           RowHidden(SCROW nRow, SCTAB nTab, SCROW* pFirstRow = NULL, SCROW* pLastRow = NULL);
1374     SC_DLLPUBLIC bool           RowHidden(SCROW nRow, SCTAB nTab, SCROW& rLastRow);
1375     SC_DLLPUBLIC bool           HasHiddenRows(SCROW nStartRow, SCROW nEndRow, SCTAB nTab);
1376     SC_DLLPUBLIC bool           ColHidden(SCCOL nCol, SCTAB nTab, SCCOL& rLastCol);
1377     SC_DLLPUBLIC bool           ColHidden(SCCOL nCol, SCTAB nTab, SCCOL* pFirstCol = NULL, SCCOL* pLastCol = NULL);
1378     SC_DLLPUBLIC void           SetRowHidden(SCROW nStartRow, SCROW nEndRow, SCTAB nTab, bool bHidden);
1379     SC_DLLPUBLIC void           SetColHidden(SCCOL nStartCol, SCCOL nEndCol, SCTAB nTab, bool bHidden);
1380     SC_DLLPUBLIC SCROW          FirstVisibleRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab);
1381     SC_DLLPUBLIC SCROW          LastVisibleRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab);
1382     SCROW                       CountVisibleRows(SCROW nStartRow, SCROW nEndRow, SCTAB nTab);
1383 
1384     bool                        RowFiltered(SCROW nRow, SCTAB nTab, SCROW* pFirstRow = NULL, SCROW* pLastRow = NULL);
1385     bool                        HasFilteredRows(SCROW nStartRow, SCROW nEndRow, SCTAB nTab);
1386     bool                        ColFiltered(SCCOL nCol, SCTAB nTab, SCCOL* pFirstCol = NULL, SCCOL* pLastCol = NULL);
1387     SC_DLLPUBLIC void           SetRowFiltered(SCROW nStartRow, SCROW nEndRow, SCTAB nTab, bool bFiltered);
1388     SC_DLLPUBLIC void           SetColFiltered(SCCOL nStartCol, SCCOL nEndCol, SCTAB nTab, bool bFiltered);
1389     SCROW                       FirstNonFilteredRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab);
1390     SCROW                       LastNonFilteredRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab);
1391     SCROW                       CountNonFilteredRows(SCROW nStartRow, SCROW nEndRow, SCTAB nTab);
1392 
1393     /**
1394      * Write all column row flags to table's flag data, because not all column
1395      * row attributes are stored in the flag data members.  This is necessary
1396      * for ods export.
1397      */
1398     void                        SyncColRowFlags();
1399 
1400                     /// @return  the index of the last row with any set flags (auto-pagebreak is ignored).
1401     SC_DLLPUBLIC SCROW          GetLastFlaggedRow( SCTAB nTab ) const;
1402 
1403                     /// @return  the index of the last changed column (flags and column width, auto pagebreak is ignored).
1404     SCCOL           GetLastChangedCol( SCTAB nTab ) const;
1405                     /// @return  the index of the last changed row (flags and row height, auto pagebreak is ignored).
1406     SCROW           GetLastChangedRow( SCTAB nTab ) const;
1407 
1408     SCCOL           GetNextDifferentChangedCol( SCTAB nTab, SCCOL nStart) const;
1409 
1410                     // #108550#; if bCareManualSize is set then the row
1411                     // heights are compared only if the manual size flag for
1412                     // the row is set. If the bCareManualSize is not set then
1413                     // the row heights are always compared.
1414     SCROW           GetNextDifferentChangedRow( SCTAB nTab, SCROW nStart, bool bCareManualSize = true) const;
1415 
1416     // returns whether to export a Default style for this col/row or not
1417     // nDefault is setted to one possition in the current row/col where the Default style is
1418     sal_Bool            GetColDefault( SCTAB nTab, SCCOL nCol, SCROW nLastRow, SCROW& nDefault);
1419     sal_Bool            GetRowDefault( SCTAB nTab, SCROW nRow, SCCOL nLastCol, SCCOL& nDefault);
1420 
1421     sal_Bool            UpdateOutlineCol( SCCOL nStartCol, SCCOL nEndCol, SCTAB nTab, sal_Bool bShow );
1422     sal_Bool            UpdateOutlineRow( SCROW nStartRow, SCROW nEndRow, SCTAB nTab, sal_Bool bShow );
1423 
1424     void            StripHidden( SCCOL& rX1, SCROW& rY1, SCCOL& rX2, SCROW& rY2, SCTAB nTab );
1425     void            ExtendHidden( SCCOL& rX1, SCROW& rY1, SCCOL& rX2, SCROW& rY2, SCTAB nTab );
1426 
1427     SC_DLLPUBLIC ScPatternAttr*     GetDefPattern() const;
1428     SC_DLLPUBLIC ScDocumentPool*        GetPool();
1429     SC_DLLPUBLIC ScStyleSheetPool*  GetStyleSheetPool() const;
1430 
1431     // PageStyle:
1432     SC_DLLPUBLIC const String&  GetPageStyle( SCTAB nTab ) const;
1433     SC_DLLPUBLIC void           SetPageStyle( SCTAB nTab, const String& rName );
1434     Size            GetPageSize( SCTAB nTab ) const;
1435     void            SetPageSize( SCTAB nTab, const Size& rSize );
1436     void            SetRepeatArea( SCTAB nTab, SCCOL nStartCol, SCCOL nEndCol, SCROW nStartRow, SCROW nEndRow );
1437     void            InvalidatePageBreaks(SCTAB nTab);
1438     void            UpdatePageBreaks( SCTAB nTab, const ScRange* pUserArea = NULL );
1439     void            RemoveManualBreaks( SCTAB nTab );
1440     sal_Bool            HasManualBreaks( SCTAB nTab ) const;
1441 
1442     sal_Bool            IsPageStyleInUse( const String& rStrPageStyle, SCTAB* pInTab = NULL );
1443     sal_Bool            RemovePageStyleInUse( const String& rStrPageStyle );
1444     sal_Bool            RenamePageStyleInUse( const String& rOld, const String& rNew );
1445     void            ModifyStyleSheet( SfxStyleSheetBase& rPageStyle,
1446                                       const SfxItemSet&  rChanges );
1447 
1448     void            PageStyleModified( SCTAB nTab, const String& rNewName );
1449 
1450     SC_DLLPUBLIC sal_Bool           NeedPageResetAfterTab( SCTAB nTab ) const;
1451 
1452     // war vorher im PageStyle untergracht. Jetzt an jeder Tabelle:
1453     SC_DLLPUBLIC sal_Bool           HasPrintRange();
1454     SC_DLLPUBLIC sal_uInt16         GetPrintRangeCount( SCTAB nTab );
1455     SC_DLLPUBLIC const ScRange* GetPrintRange( SCTAB nTab, sal_uInt16 nPos );
1456     SC_DLLPUBLIC const ScRange* GetRepeatColRange( SCTAB nTab );
1457     SC_DLLPUBLIC const ScRange* GetRepeatRowRange( SCTAB nTab );
1458     /** Returns true, if the specified sheet is always printed. */
1459     sal_Bool            IsPrintEntireSheet( SCTAB nTab ) const;
1460 
1461     /** Removes all print ranges. */
1462     SC_DLLPUBLIC void            ClearPrintRanges( SCTAB nTab );
1463     /** Adds a new print ranges. */
1464     SC_DLLPUBLIC void            AddPrintRange( SCTAB nTab, const ScRange& rNew );
1465 //UNUSED2009-05 /** Removes all old print ranges and sets the passed print ranges. */
1466 //UNUSED2009-05 void            SetPrintRange( SCTAB nTab, const ScRange& rNew );
1467     /** Marks the specified sheet to be printed completely. Deletes old print ranges on the sheet! */
1468     SC_DLLPUBLIC void            SetPrintEntireSheet( SCTAB nTab );
1469     SC_DLLPUBLIC void           SetRepeatColRange( SCTAB nTab, const ScRange* pNew );
1470     SC_DLLPUBLIC void           SetRepeatRowRange( SCTAB nTab, const ScRange* pNew );
1471     ScPrintRangeSaver* CreatePrintRangeSaver() const;
1472     void            RestorePrintRanges( const ScPrintRangeSaver& rSaver );
1473 
1474     SC_DLLPUBLIC Rectangle      GetMMRect( SCCOL nStartCol, SCROW nStartRow,
1475                                 SCCOL nEndCol, SCROW nEndRow, SCTAB nTab );
1476     SC_DLLPUBLIC ScRange            GetRange( SCTAB nTab, const Rectangle& rMMRect );
1477 
1478     void            UpdStlShtPtrsFrmNms();
1479     void            StylesToNames();
1480 
1481     SC_DLLPUBLIC void           CopyStdStylesFrom( ScDocument* pSrcDoc );
1482 
1483     CharSet         GetSrcCharSet() const   { return eSrcSet; }
1484     sal_uLong           GetSrcVersion() const   { return nSrcVer; }
1485     SCROW           GetSrcMaxRow() const    { return nSrcMaxRow; }
1486 
1487     void            SetSrcCharSet( CharSet eNew )   { eSrcSet = eNew; }
1488     void            UpdateFontCharSet();
1489 
1490     void            FillInfo( ScTableInfo& rTabInfo, SCCOL nX1, SCROW nY1, SCCOL nX2, SCROW nY2,
1491                         SCTAB nTab, double nScaleX, double nScaleY,
1492                         sal_Bool bPageMode, sal_Bool bFormulaMode,
1493                         const ScMarkData* pMarkData = NULL );
1494 
1495     SC_DLLPUBLIC SvNumberFormatter* GetFormatTable() const;
1496 
1497     void            Sort( SCTAB nTab, const ScSortParam& rSortParam, sal_Bool bKeepQuery );
1498     SCSIZE          Query( SCTAB nTab, const ScQueryParam& rQueryParam, sal_Bool bKeepSub );
1499     sal_Bool            ValidQuery( SCROW nRow, SCTAB nTab, const ScQueryParam& rQueryParam, sal_Bool* pSpecial = NULL );
1500     SC_DLLPUBLIC sal_Bool           CreateQueryParam( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
1501                                         SCTAB nTab, ScQueryParam& rQueryParam );
1502     void            GetUpperCellString(SCCOL nCol, SCROW nRow, SCTAB nTab, String& rStr);
1503 
1504     sal_Bool            GetFilterEntries( SCCOL nCol, SCROW nRow, SCTAB nTab,
1505                                 bool bFilter, TypedScStrCollection& rStrings, bool& rHasDates);
1506     SC_DLLPUBLIC sal_Bool           GetFilterEntriesArea( SCCOL nCol, SCROW nStartRow, SCROW nEndRow,
1507                                 SCTAB nTab, TypedScStrCollection& rStrings, bool& rHasDates );
1508     sal_Bool            GetDataEntries( SCCOL nCol, SCROW nRow, SCTAB nTab,
1509                                 TypedScStrCollection& rStrings, sal_Bool bLimit = sal_False );
1510     sal_Bool            GetFormulaEntries( TypedScStrCollection& rStrings );
1511 
1512     sal_Bool            HasAutoFilter( SCCOL nCol, SCROW nRow, SCTAB nTab );
1513 
1514     SC_DLLPUBLIC sal_Bool           HasColHeader( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow,
1515                                     SCTAB nTab );
1516     SC_DLLPUBLIC sal_Bool           HasRowHeader( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow,
1517                                     SCTAB nTab );
1518 
1519     SfxPrinter*     GetPrinter( sal_Bool bCreateIfNotExist = sal_True );
1520     void            SetPrinter( SfxPrinter* pNewPrinter );
1521     VirtualDevice*  GetVirtualDevice_100th_mm();
1522     SC_DLLPUBLIC OutputDevice*  GetRefDevice(); // WYSIWYG: Printer, otherwise VirtualDevice...
1523 
1524     void            EraseNonUsedSharedNames(sal_uInt16 nLevel);
1525     sal_Bool            GetNextSpellingCell(SCCOL& nCol, SCROW& nRow, SCTAB nTab,
1526                                         sal_Bool bInSel, const ScMarkData& rMark) const;
1527 
1528     sal_Bool            ReplaceStyle(const SvxSearchItem& rSearchItem,
1529                                  SCCOL nCol, SCROW nRow, SCTAB nTab,
1530                                  ScMarkData& rMark, sal_Bool bIsUndo);
1531 
1532     void            DoColResize( SCTAB nTab, SCCOL nCol1, SCCOL nCol2, SCSIZE nAdd );
1533 
1534     void            InvalidateTextWidth( const String& rStyleName );
1535     void            InvalidateTextWidth( SCTAB nTab );
1536     void            InvalidateTextWidth( const ScAddress* pAdrFrom, const ScAddress* pAdrTo, sal_Bool bNumFormatChanged );
1537 
1538     sal_Bool            IdleCalcTextWidth();
1539     sal_Bool            IdleCheckLinks();
1540 
1541     sal_Bool            ContinueOnlineSpelling();   // sal_True = etwas gefunden
1542 
1543     void            RepaintRange( const ScRange& rRange );
1544 
1545     sal_Bool        IsIdleDisabled() const      { return bIdleDisabled; }
1546     void            DisableIdle(sal_Bool bDo)   { bIdleDisabled = bDo; }
1547 
1548     sal_Bool            IsDetectiveDirty() const     { return bDetectiveDirty; }
1549     void            SetDetectiveDirty(sal_Bool bSet) { bDetectiveDirty = bSet; }
1550 
1551     void            RemoveAutoSpellObj();
1552     void            SetOnlineSpellPos( const ScAddress& rPos );
1553     SC_DLLPUBLIC sal_Bool           SetVisibleSpellRange( const ScRange& rRange );  // sal_True = changed
1554 
1555     sal_uInt8           GetMacroCallMode() const     { return nMacroCallMode; }
1556     void            SetMacroCallMode(sal_uInt8 nNew)     { nMacroCallMode = nNew; }
1557 
1558     sal_Bool            GetHasMacroFunc() const      { return bHasMacroFunc; }
1559     void            SetHasMacroFunc(sal_Bool bSet)   { bHasMacroFunc = bSet; }
1560 
1561     sal_Bool            CheckMacroWarn();
1562 
1563     void            SetRangeOverflowType(sal_uInt32 nType)  { nRangeOverflowType = nType; }
1564     sal_Bool        HasRangeOverflow() const                { return nRangeOverflowType != 0; }
1565     SC_DLLPUBLIC sal_uInt32      GetRangeOverflowType() const            { return nRangeOverflowType; }
1566 
1567     // fuer Broadcasting/Listening
1568     void            SetNoSetDirty( sal_Bool bVal ) { bNoSetDirty = bVal; }
1569     sal_Bool            GetNoSetDirty() const { return bNoSetDirty; }
1570     void            SetInsertingFromOtherDoc( sal_Bool bVal ) { bInsertingFromOtherDoc = bVal; }
1571     sal_Bool            IsInsertingFromOtherDoc() const { return bInsertingFromOtherDoc; }
1572     void            SetLoadingMedium( bool bVal );
1573     void            SetImportingXML( bool bVal );
1574     bool            IsImportingXML() const { return bImportingXML; }
1575     void            SetImportingMSXML( bool bVal );
1576     bool            IsImportingMSXML() const { return mbImportingMSXML; }
1577     void            SetXMLFromWrapper( sal_Bool bVal );
1578     sal_Bool            IsXMLFromWrapper() const { return bXMLFromWrapper; }
1579     void            SetCalcingAfterLoad( sal_Bool bVal ) { bCalcingAfterLoad = bVal; }
1580     sal_Bool            IsCalcingAfterLoad() const { return bCalcingAfterLoad; }
1581     void            SetNoListening( sal_Bool bVal ) { bNoListening = bVal; }
1582     sal_Bool            GetNoListening() const { return bNoListening; }
1583     ScBroadcastAreaSlotMachine* GetBASM() const { return pBASM; }
1584 
1585     ScChartListenerCollection* GetChartListenerCollection() const
1586                         { return pChartListenerCollection; }
1587     void            SetChartListenerCollection( ScChartListenerCollection*,
1588                         sal_Bool bSetChartRangeLists = sal_False );
1589     void            UpdateChart( const String& rName );
1590     void            RestoreChartListener( const String& rName );
1591     SC_DLLPUBLIC void           UpdateChartListenerCollection();
1592     sal_Bool            IsChartListenerCollectionNeedsUpdate() const
1593                         { return bChartListenerCollectionNeedsUpdate; }
1594     void            SetChartListenerCollectionNeedsUpdate( sal_Bool bFlg )
1595                         { bChartListenerCollectionNeedsUpdate = bFlg; }
1596     void            AddOLEObjectToCollection(const String& rName);
1597 
1598     ScChangeViewSettings* GetChangeViewSettings() const     { return pChangeViewSettings; }
1599     SC_DLLPUBLIC void               SetChangeViewSettings(const ScChangeViewSettings& rNew);
1600 
1601     vos::ORef<SvxForbiddenCharactersTable> GetForbiddenCharacters();
1602     void            SetForbiddenCharacters( const vos::ORef<SvxForbiddenCharactersTable> xNew );
1603 
1604     sal_uInt8           GetAsianCompression() const;        // CharacterCompressionType values
1605     sal_Bool            IsValidAsianCompression() const;
1606     void            SetAsianCompression(sal_uInt8 nNew);
1607 
1608     sal_Bool            GetAsianKerning() const;
1609     sal_Bool            IsValidAsianKerning() const;
1610     void            SetAsianKerning(sal_Bool bNew);
1611 
1612     void            ApplyAsianEditSettings(ScEditEngineDefaulter& rEngine);
1613 
1614     sal_uInt8           GetEditTextDirection(SCTAB nTab) const; // EEHorizontalTextDirection values
1615 
1616     SC_DLLPUBLIC ScLkUpdMode        GetLinkMode() const             { return eLinkMode ;}
1617     void            SetLinkMode( ScLkUpdMode nSet ) {   eLinkMode  = nSet;}
1618 
1619 
1620 private:
1621     ScDocument(const ScDocument& r); // disabled with no definition
1622 
1623     void                FindMaxRotCol( SCTAB nTab, RowInfo* pRowInfo, SCSIZE nArrCount,
1624                                         SCCOL nX1, SCCOL nX2 ) const;
1625 
1626     sal_uInt16              RowDifferences( SCROW nThisRow, SCTAB nThisTab,
1627                                         ScDocument& rOtherDoc,
1628                                         SCROW nOtherRow, SCTAB nOtherTab,
1629                                         SCCOL nMaxCol, SCCOLROW* pOtherCols );
1630     sal_uInt16              ColDifferences( SCCOL nThisCol, SCTAB nThisTab,
1631                                         ScDocument& rOtherDoc,
1632                                         SCCOL nOtherCol, SCTAB nOtherTab,
1633                                         SCROW nMaxRow, SCCOLROW* pOtherRows );
1634     void                FindOrder( SCCOLROW* pOtherRows, SCCOLROW nThisEndRow, SCCOLROW nOtherEndRow,
1635                                         sal_Bool bColumns,
1636                                         ScDocument& rOtherDoc, SCTAB nThisTab, SCTAB nOtherTab,
1637                                         SCCOLROW nEndCol, SCCOLROW* pTranslate,
1638                                         ScProgress* pProgress, sal_uLong nProAdd );
1639     sal_Bool                OnlineSpellInRange( const ScRange& rSpellRange, ScAddress& rSpellPos,
1640                                         sal_uInt16 nMaxTest );
1641 
1642     DECL_LINK( TrackTimeHdl, Timer* );
1643 
1644     static ScRecursionHelper*   CreateRecursionHelperInstance();
1645 
1646 public:
1647     void                StartListeningArea( const ScRange& rRange,
1648                                             SvtListener* pListener );
1649     void                EndListeningArea( const ScRange& rRange,
1650                                             SvtListener* pListener );
1651                         /** Broadcast wrapper, calls
1652     SC_DLLPUBLIC                         rHint.GetCell()->Broadcast() and AreaBroadcast()
1653                             and TrackFormulas() and conditional format list
1654                             SourceChanged().
1655                             Preferred.
1656                          */
1657     void                Broadcast( const ScHint& rHint );
1658                         /// deprecated
1659     void                Broadcast( sal_uLong nHint, const ScAddress& rAddr,
1660                                     ScBaseCell* pCell );
1661                         /// only area, no cell broadcast
1662     void                AreaBroadcast( const ScHint& rHint );
1663                         /// only areas in range, no cell broadcasts
1664     void                AreaBroadcastInRange( const ScRange& rRange,
1665                                               const ScHint& rHint );
1666     void                DelBroadcastAreasInRange( const ScRange& rRange );
1667     void                UpdateBroadcastAreas( UpdateRefMode eUpdateRefMode,
1668                                             const ScRange& rRange,
1669                                             SCsCOL nDx, SCsROW nDy, SCsTAB nDz );
1670 
1671 
1672     void                StartListeningCell( const ScAddress& rAddress,
1673                                             SvtListener* pListener );
1674     void                EndListeningCell( const ScAddress& rAddress,
1675                                             SvtListener* pListener );
1676     void                PutInFormulaTree( ScFormulaCell* pCell );
1677     void                RemoveFromFormulaTree( ScFormulaCell* pCell );
1678     void                CalcFormulaTree( sal_Bool bOnlyForced = sal_False,
1679                                         sal_Bool bNoProgressBar = sal_False );
1680     void                ClearFormulaTree();
1681     void                AppendToFormulaTrack( ScFormulaCell* pCell );
1682     void                RemoveFromFormulaTrack( ScFormulaCell* pCell );
1683     void                TrackFormulas( sal_uLong nHintId = SC_HINT_DATACHANGED );
1684     sal_uInt16              GetFormulaTrackCount() const { return nFormulaTrackCount; }
1685     sal_Bool                IsInFormulaTree( ScFormulaCell* pCell ) const;
1686     sal_Bool                IsInFormulaTrack( ScFormulaCell* pCell ) const;
1687     sal_uInt16              GetHardRecalcState() { return nHardRecalcState; }
1688     void                SetHardRecalcState( sal_uInt16 nVal ) { nHardRecalcState = nVal; }
1689     void                StartAllListeners();
1690     const ScFormulaCell*    GetFormulaTree() const { return pFormulaTree; }
1691     sal_Bool                HasForcedFormulas() const { return bHasForcedFormulas; }
1692     void                SetForcedFormulas( sal_Bool bVal ) { bHasForcedFormulas = bVal; }
1693     sal_uLong               GetFormulaCodeInTree() const { return nFormulaCodeInTree; }
1694     sal_Bool                IsInInterpreter() const { return nInterpretLevel != 0; }
1695     sal_uInt16              GetInterpretLevel() { return nInterpretLevel; }
1696     void                IncInterpretLevel()
1697                             {
1698                                 if ( nInterpretLevel < USHRT_MAX )
1699                                     nInterpretLevel++;
1700                             }
1701     void                DecInterpretLevel()
1702                             {
1703                                 if ( nInterpretLevel )
1704                                     nInterpretLevel--;
1705                             }
1706     sal_Bool                IsInMacroInterpreter() const { return nMacroInterpretLevel != 0; }
1707     sal_uInt16              GetMacroInterpretLevel() { return nMacroInterpretLevel; }
1708     void                IncMacroInterpretLevel()
1709                             {
1710                                 if ( nMacroInterpretLevel < USHRT_MAX )
1711                                     nMacroInterpretLevel++;
1712                             }
1713     void                DecMacroInterpretLevel()
1714                             {
1715                                 if ( nMacroInterpretLevel )
1716                                     nMacroInterpretLevel--;
1717                             }
1718     sal_Bool                IsInInterpreterTableOp() const { return nInterpreterTableOpLevel != 0; }
1719     sal_uInt16              GetInterpreterTableOpLevel() { return nInterpreterTableOpLevel; }
1720     void                IncInterpreterTableOpLevel()
1721                             {
1722                                 if ( nInterpreterTableOpLevel < USHRT_MAX )
1723                                     nInterpreterTableOpLevel++;
1724                             }
1725     void                DecInterpreterTableOpLevel()
1726                             {
1727                                 if ( nInterpreterTableOpLevel )
1728                                     nInterpreterTableOpLevel--;
1729                             }
1730                         // add a formula to be remembered for TableOp broadcasts
1731     void                AddTableOpFormulaCell( ScFormulaCell* );
1732     void                InvalidateLastTableOpParams() { aLastTableOpParams.bValid = sal_False; }
1733     ScRecursionHelper&  GetRecursionHelper()
1734                             {
1735                                 if (!pRecursionHelper)
1736                                     pRecursionHelper = CreateRecursionHelperInstance();
1737                                 return *pRecursionHelper;
1738                             }
1739     sal_Bool                IsInDtorClear() const { return bInDtorClear; }
1740     void                SetExpandRefs( sal_Bool bVal ) { bExpandRefs = bVal; }
1741     sal_Bool                IsExpandRefs() { return bExpandRefs; }
1742 
1743     SC_DLLPUBLIC void               IncSizeRecalcLevel( SCTAB nTab );
1744     SC_DLLPUBLIC void               DecSizeRecalcLevel( SCTAB nTab, bool bUpdateNoteCaptionPos = true );
1745 
1746     sal_uLong               GetXMLImportedFormulaCount() const { return nXMLImportedFormulaCount; }
1747     void                IncXMLImportedFormulaCount( sal_uLong nVal )
1748                             {
1749                                 if ( nXMLImportedFormulaCount + nVal > nXMLImportedFormulaCount )
1750                                     nXMLImportedFormulaCount += nVal;
1751                             }
1752     void                DecXMLImportedFormulaCount( sal_uLong nVal )
1753                             {
1754                                 if ( nVal <= nXMLImportedFormulaCount )
1755                                     nXMLImportedFormulaCount -= nVal;
1756                                 else
1757                                     nXMLImportedFormulaCount = 0;
1758                             }
1759 
1760     void                StartTrackTimer();
1761 
1762     void            CompileDBFormula();
1763     void            CompileDBFormula( sal_Bool bCreateFormulaString );
1764     void            CompileNameFormula( sal_Bool bCreateFormulaString );
1765     void            CompileColRowNameFormula();
1766 
1767     /** Maximum string length of a column, e.g. for dBase export.
1768         @return String length in octets (!) of the destination encoding. In
1769                 case of non-octet encodings (e.g. UCS2) the length in code
1770                 points times sizeof(sal_Unicode) is returned. */
1771     sal_Int32       GetMaxStringLen( SCTAB nTab, SCCOL nCol,
1772                                      SCROW nRowStart, SCROW nRowEnd,
1773                                      CharSet eCharSet ) const;
1774     /** Maximum string length of numerical cells of a column, e.g. for dBase export.
1775         @return String length in characters (!) including the decimal
1776                 separator, and the decimal precision needed. */
1777     xub_StrLen      GetMaxNumberStringLen( sal_uInt16& nPrecision,
1778                                            SCTAB nTab, SCCOL nCol,
1779                                            SCROW nRowStart, SCROW nRowEnd ) const;
1780 
1781     void    KeyInput( const KeyEvent& rKEvt );      // TimerDelays etc.
1782 
1783     ScChangeTrack*      GetChangeTrack() const { return pChangeTrack; }
1784 
1785     //! only for import filter, deletes any existing ChangeTrack via
1786     //! EndChangeTracking() and takes ownership of new ChangeTrack pTrack
1787     SC_DLLPUBLIC void           SetChangeTrack( ScChangeTrack* pTrack );
1788 
1789     void            StartChangeTracking();
1790     void            EndChangeTracking();
1791 
1792     SC_DLLPUBLIC void           CompareDocument( ScDocument& rOtherDoc );
1793 
1794     void            AddUnoObject( SfxListener& rObject );
1795     void            RemoveUnoObject( SfxListener& rObject );
1796     void            BroadcastUno( const SfxHint &rHint );
1797     void            AddUnoListenerCall( const ::com::sun::star::uno::Reference<
1798                                             ::com::sun::star::util::XModifyListener >& rListener,
1799                                         const ::com::sun::star::lang::EventObject& rEvent );
1800 
1801     void            SetInLinkUpdate(sal_Bool bSet);             // TableLink or AreaLink
1802     sal_Bool            IsInLinkUpdate() const;                 // including DdeLink
1803 
1804     SC_DLLPUBLIC SfxItemPool*       GetEditPool() const;
1805     SC_DLLPUBLIC SfxItemPool*       GetEnginePool() const;
1806     SC_DLLPUBLIC ScFieldEditEngine& GetEditEngine();
1807     SC_DLLPUBLIC ScNoteEditEngine&  GetNoteEngine();
1808 
1809     ScRefreshTimerControl*  GetRefreshTimerControl() const
1810         { return pRefreshTimerControl; }
1811     ScRefreshTimerControl * const * GetRefreshTimerControlAddress() const
1812         { return &pRefreshTimerControl; }
1813 
1814     void            SetPastingDrawFromOtherDoc( sal_Bool bVal )
1815                         { bPastingDrawFromOtherDoc = bVal; }
1816     sal_Bool            PastingDrawFromOtherDoc() const
1817                         { return bPastingDrawFromOtherDoc; }
1818 
1819                     /// an ID unique to each document instance
1820     sal_uInt32      GetDocumentID() const;
1821 
1822     void            InvalidateStyleSheetUsage()
1823                         { bStyleSheetUsageInvalid = sal_True; }
1824     void GetSortParam( ScSortParam& rParam, SCTAB nTab );
1825     void SetSortParam( ScSortParam& rParam, SCTAB nTab );
1826 
1827     inline void     SetVbaEventProcessor( const com::sun::star::uno::Reference< com::sun::star::script::vba::XVBAEventProcessor >& rxVbaEvents )
1828                         { mxVbaEvents = rxVbaEvents; }
1829     inline com::sun::star::uno::Reference< com::sun::star::script::vba::XVBAEventProcessor >
1830                     GetVbaEventProcessor() const { return mxVbaEvents; }
1831 
1832     /** Should only be GRAM_PODF or GRAM_ODFF. */
1833     void                SetStorageGrammar( formula::FormulaGrammar::Grammar eGrammar );
1834     formula::FormulaGrammar::Grammar  GetStorageGrammar() const
1835                             { return eStorageGrammar; }
1836 
1837     SfxUndoManager*     GetUndoManager();
1838     bool IsInVBAMode() const;
1839     ScRowBreakIterator* GetRowBreakIterator(SCTAB nTab) const;
1840 
1841 private: // CLOOK-Impl-Methoden
1842 
1843     /**
1844      * Use this class as a locale variable to merge number formatter from
1845      * another document, and set NULL pointer to pFormatExchangeList when
1846      * done.
1847      */
1848     class NumFmtMergeHandler
1849     {
1850     public:
1851         explicit NumFmtMergeHandler(ScDocument* pDoc, ScDocument* pSrcDoc);
1852         ~NumFmtMergeHandler();
1853 
1854     private:
1855         ScDocument* mpDoc;
1856     };
1857 
1858     void    MergeNumberFormatter(ScDocument* pSrcDoc);
1859 
1860     void    ImplCreateOptions(); // bei Gelegenheit auf on-demand umstellen?
1861     void    ImplDeleteOptions();
1862 
1863     void    DeleteDrawLayer();
1864     void    DeleteColorTable();
1865     SC_DLLPUBLIC sal_Bool   DrawGetPrintArea( ScRange& rRange, sal_Bool bSetHor, sal_Bool bSetVer ) const;
1866     void    DrawMovePage( sal_uInt16 nOldPos, sal_uInt16 nNewPos );
1867     void    DrawCopyPage( sal_uInt16 nOldPos, sal_uInt16 nNewPos );
1868 
1869     void    UpdateDrawPrinter();
1870     void    UpdateDrawLanguages();
1871     void    UpdateDrawDefaults();
1872     SC_DLLPUBLIC void   InitClipPtrs( ScDocument* pSourceDoc );
1873 
1874     void    LoadDdeLinks(SvStream& rStream);
1875     void    SaveDdeLinks(SvStream& rStream) const;
1876 
1877     void    DeleteAreaLinksOnTab( SCTAB nTab );
1878     void    UpdateRefAreaLinks( UpdateRefMode eUpdateRefMode,
1879                              const ScRange& r, SCsCOL nDx, SCsROW nDy, SCsTAB nDz );
1880 
1881     void    CopyRangeNamesToClip(ScDocument* pClipDoc, const ScRange& rClipRange, const ScMarkData* pMarks, bool bAllTabs);
1882     void    CopyRangeNamesFromClip(ScDocument* pClipDoc, ScClipRangeNameData& rRangeNames);
1883     void    UpdateRangeNamesInFormulas(
1884         ScClipRangeNameData& rRangeNames, const ScRangeList& rDestRanges, const ScMarkData& rMark,
1885         SCCOL nXw, SCROW nYw);
1886 
1887     sal_Bool    HasPartOfMerged( const ScRange& rRange );
1888 
1889     std::map< SCTAB, ScSortParam > mSheetSortParams;
1890 
1891 public:
1892     void    FillDPCache( ScDPTableDataCache * pCache, SCTAB nDocTab, SCCOL nStartCol, SCCOL nEndCol, SCROW nStartRow, SCROW nEndRow );
1893 };
1894 inline void ScDocument::GetSortParam( ScSortParam& rParam, SCTAB nTab )
1895 {
1896     rParam = mSheetSortParams[ nTab ];
1897 }
1898 
1899 inline void ScDocument::SetSortParam( ScSortParam& rParam, SCTAB nTab )
1900 {
1901     mSheetSortParams[ nTab ] = rParam;
1902 }
1903 
1904 #endif
1905 
1906 
1907