xref: /aoo42x/main/sc/inc/global.hxx (revision cdf0e10c)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #ifndef SC_SCGLOB_HXX
29 #define SC_SCGLOB_HXX
30 
31 #include "address.hxx"
32 #include <i18npool/lang.h>
33 #include <tools/stream.hxx>
34 #include <osl/endian.h>
35 #include <com/sun/star/uno/Reference.hxx>
36 #include "scdllapi.h"
37 
38 #include <hash_map>
39 
40 class ImageList;
41 class Bitmap;
42 class SfxItemSet;
43 class Color;
44 
45 // Macro fuer den Call-Profiler unter WinNT
46 // mit S_CAP kann eine Messung gestarted, mit E_CAP wieder gestoppt werden
47 #if defined( WNT ) && defined( PROFILE )
48 
49 extern "C" {
50 	void StartCAP();
51 	void StopCAP();
52 	void DumpCAP();
53 };
54 
55 #define S_CAP	StartCAP();
56 #define E_CAP	StopCAP(); DumpCAP();
57 
58 #endif
59 
60 #if 0
61 // I18N doesn't get this right, can't specify more than one to ignore
62 #define SC_COLLATOR_IGNORES ( \
63 	::com::sun::star::i18n::CollatorOptions::CollatorOptions_IGNORE_CASE | \
64 	::com::sun::star::i18n::CollatorOptions::CollatorOptions_IGNORE_KANA | \
65 	::com::sun::star::i18n::CollatorOptions::CollatorOptions_IGNORE_WIDTH )
66 #else
67 #define SC_COLLATOR_IGNORES ( \
68 	::com::sun::star::i18n::CollatorOptions::CollatorOptions_IGNORE_CASE )
69 #endif
70 #if 0
71 // #107998# Don't ignore Width and Kana. The issue was mainly with AutoInput,
72 // but affects also comparison of names in general.
73 #define SC_TRANSLITERATION_IGNORECASE ( \
74     ::com::sun::star::i18n::TransliterationModules_IGNORE_CASE | \
75     ::com::sun::star::i18n::TransliterationModules_IGNORE_KANA | \
76     ::com::sun::star::i18n::TransliterationModules_IGNORE_WIDTH )
77 #define SC_TRANSLITERATION_CASESENSE ( \
78     ::com::sun::star::i18n::TransliterationModules_IGNORE_KANA | \
79     ::com::sun::star::i18n::TransliterationModules_IGNORE_WIDTH )
80 #else
81 #define SC_TRANSLITERATION_IGNORECASE ( \
82     ::com::sun::star::i18n::TransliterationModules_IGNORE_CASE )
83 #define SC_TRANSLITERATION_CASESENSE 0
84 #endif
85 
86 //------------------------------------------------------------------------
87 
88 //	die 1000 Namen des Calc...
89 //	Clipboard-Namen sind jetzt in so3/soapp.hxx
90 //	STRING_SCAPP war "scalc3", "scalc4", jetzt nur noch "scalc"
91 
92 #define STRING_SCAPP	"scalc"
93 #define	STRING_SCSTREAM	"StarCalcDocument"
94 
95 #define	STRING_STANDARD	"Standard"
96 
97 // characters -----------------------------------------------------------------
98 
99 //	'\r' geht auf'm Mac nicht...
100 #define CHAR_CR		char(13)
101 
102 const sal_Unicode CHAR_NBSP     = 0x00A0;
103 const sal_Unicode CHAR_SHY      = 0x00AD;
104 const sal_Unicode CHAR_ZWSP     = 0x200B;
105 const sal_Unicode CHAR_LRM      = 0x200E;
106 const sal_Unicode CHAR_RLM      = 0x200F;
107 const sal_Unicode CHAR_NBHY     = 0x2011;
108 const sal_Unicode CHAR_ZWNBSP   = 0x2060;
109 
110 // ----------------------------------------------------------------------------
111 
112 #define	MINDOUBLE	1.7e-307
113 #define	MAXDOUBLE	1.7e307
114 
115 #define MINZOOM 	20
116 #define MAXZOOM 	400
117 
118 #ifdef SC_ROWLIMIT_TYPECONVERSION_NOCONVPASS
119 const size_t MAXSUBTOTAL        = 3;
120 const size_t MAXQUERY           = 8;
121 #else
122 const SCSIZE MAXSUBTOTAL        = 3;
123 const SCSIZE MAXQUERY           = 8;
124 #endif
125 
126 #define SC_START_INDEX_DB_COLL 50000
127 										// Oberhalb dieser Grenze liegen
128 										// die Indizes fuer DBBereiche
129 
130 /*
131 #ifdef OS2
132 #define PIXEL_PER_INCH      72.0
133 #else
134 #define PIXEL_PER_INCH      96.0
135 #endif
136 */
137 
138 #define PIXEL_PER_INCH      96.0
139 
140 #define CM_PER_INCH         2.54
141 #define POINTS_PER_INCH		72.27
142 #define PIXEL_PER_POINT		(PIXEL_PER_INCH / POINTS_PER_INCH)
143 #define INCHT_PER_CM		(1.0 / CM_PER_INCH)
144 #define POINTS_PER_CM		(POINTS_PER_INCH / CM_PER_INCH)
145 #define TWIPS_PER_POINT		20.0
146 #define TWIPS_PER_INCH		(TWIPS_PER_POINT * POINTS_PER_INCH)
147 #define TWIPS_PER_CM		(TWIPS_PER_INCH / CM_PER_INCH)
148 #define CM_PER_TWIPS		(CM_PER_INCH / TWIPS_PER_INCH)
149 #define TWIPS_PER_PIXEL		(TWIPS_PER_INCH / PIXEL_PER_INCH)
150 #define TWIPS_PER_CHAR		(TWIPS_PER_INCH / 13.6)
151 #define PIXEL_PER_TWIPS		(PIXEL_PER_INCH / TWIPS_PER_INCH)
152 #define HMM_PER_TWIPS		(CM_PER_TWIPS * 1000.0)
153 
154 #define STD_COL_WIDTH		1285
155 #define STD_EXTRA_WIDTH		113		// 2mm Extra fuer optimale Breite
156 									// Standard Zeilenhoehe: Text + Rand - STD_ROWHEIGHT_DIFF
157 
158 
159 #define MAX_EXTRA_WIDTH  	23811	// 42cm in TWIPS
160 #define MAX_EXTRA_HEIGHT	23811
161 #define MAX_COL_WIDTH		56693	// 1m in TWIPS
162 #define MAX_COL_HEIGHT		56693
163 
164 #define STD_ROWHEIGHT_DIFF	23
165 #define STD_FONT_HEIGHT		200 	// entspricht 10 Punkt
166 
167 //!		statt STD_ROW_HEIGHT ScGlobal::nStdRowHeight benutzen !
168 
169 #define STD_ROW_HEIGHT		(12.8 * TWIPS_PER_POINT) 			// 256 Twips, 0.45 cm
170 
171 									// Standardgroesse als Ole-Server (Zellen)
172 #define OLE_STD_CELLS_X		4
173 #define OLE_STD_CELLS_Y		5
174 
175 #define SC_SIZE_OPTIMUM		0xFFFF
176 
177 									// Update-Flags
178 #define UF_SCROLL_LEFT		1
179 #define UF_SCROLL_RIGHT		2
180 #define UF_SCROLL_UP		4
181 #define UF_SCROLL_DOWN		8
182 #define UF_ROW				16
183 #define UF_VIEW				32
184 
185 									// Repaint-Flags (fuer Messages)
186 #define PAINT_GRID			1
187 #define PAINT_TOP			2
188 #define PAINT_LEFT			4
189 #define PAINT_EXTRAS		8
190 #define PAINT_INVERT		16
191 #define PAINT_MARKS			32
192 #define PAINT_OBJECTS		64
193 #define PAINT_SIZE			128
194 #define PAINT_ALL			( PAINT_GRID | PAINT_TOP | PAINT_LEFT | PAINT_EXTRAS | PAINT_OBJECTS | PAINT_SIZE )
195 
196 
197 									// Flags fuer Spalten / Zeilen
198 									// FILTERED immer zusammen mit HIDDEN
199 									// FILTERED und MANUALSIZE nur fuer Zeilen moeglich
200 const sal_uInt8   CR_HIDDEN      = 1;
201 //const sal_uInt8 CR_MARKED      = 2;
202 //const sal_uInt8 CR_PAGEBREAK   = 4;
203 const sal_uInt8   CR_MANUALBREAK = 8;
204 const sal_uInt8   CR_FILTERED    = 16;
205 const sal_uInt8   CR_MANUALSIZE  = 32;
206 const sal_uInt8   CR_ALL         = (CR_HIDDEN | CR_MANUALBREAK | CR_FILTERED | CR_MANUALSIZE);
207 
208 typedef sal_uInt8 ScBreakType;
209 const ScBreakType BREAK_NONE   = 0;
210 const ScBreakType BREAK_PAGE   = 1;
211 const ScBreakType BREAK_MANUAL = 2;
212 
213 // Insert-/Delete-Flags
214 const sal_uInt16 IDF_NONE       = 0x0000;
215 const sal_uInt16 IDF_VALUE      = 0x0001;   /// Numeric values (and numeric results if IDF_FORMULA is not set).
216 const sal_uInt16 IDF_DATETIME   = 0x0002;   /// Dates, times, datetime values.
217 const sal_uInt16 IDF_STRING     = 0x0004;   /// Strings (and string results if IDF_FORMULA is not set).
218 const sal_uInt16 IDF_NOTE       = 0x0008;   /// Cell notes.
219 const sal_uInt16 IDF_FORMULA    = 0x0010;   /// Formula cells.
220 const sal_uInt16 IDF_HARDATTR   = 0x0020;   /// Hard cell attributes.
221 const sal_uInt16 IDF_STYLES     = 0x0040;   /// Cell styles.
222 const sal_uInt16 IDF_OBJECTS    = 0x0080;   /// Drawing objects.
223 const sal_uInt16 IDF_EDITATTR   = 0x0100;   /// Rich-text attributes.
224 const sal_uInt16 IDF_ATTRIB     = IDF_HARDATTR | IDF_STYLES;
225 const sal_uInt16 IDF_CONTENTS   = IDF_VALUE | IDF_DATETIME | IDF_STRING | IDF_NOTE | IDF_FORMULA;
226 const sal_uInt16 IDF_ALL        = IDF_CONTENTS | IDF_ATTRIB | IDF_OBJECTS;
227 const sal_uInt16 IDF_NOCAPTIONS = 0x0200;   /// Internal use only (undo etc.): do not copy/delete caption objects of cell notes.
228 const sal_uInt16 IDF_ADDNOTES   = 0x0400;   /// Internal use only (copy from clip): do not delete existing cell contents when pasting notes.
229 
230 /// Copy flags for auto/series fill functions: do not touch notes and drawing objects.
231 const sal_uInt16 IDF_AUTOFILL   = IDF_ALL & ~(IDF_NOTE | IDF_OBJECTS);
232 
233 #define PASTE_NOFUNC		0
234 #define PASTE_ADD			1
235 #define PASTE_SUB			2
236 #define PASTE_MUL			3
237 #define PASTE_DIV			4
238 
239 #define PASTE_NONEMPTY		5
240 
241 										// Bits fuer HasAttr
242 #define HASATTR_LINES			1
243 #define HASATTR_MERGED			2
244 #define HASATTR_OVERLAPPED		4
245 #define HASATTR_PROTECTED		8
246 #define HASATTR_SHADOW			16
247 #define HASATTR_NEEDHEIGHT		32
248 #define HASATTR_SHADOW_RIGHT	64
249 #define HASATTR_SHADOW_DOWN		128
250 #define HASATTR_AUTOFILTER		256
251 #define HASATTR_CONDITIONAL		512
252 #define HASATTR_ROTATE			1024
253 #define HASATTR_NOTOVERLAPPED	2048
254 #define HASATTR_RTL				4096
255 #define HASATTR_RIGHTORCENTER   8192    // right or centered logical alignment
256 
257 #define HASATTR_PAINTEXT		( HASATTR_LINES | HASATTR_SHADOW | HASATTR_CONDITIONAL )
258 
259 
260 #define EMPTY_STRING ScGlobal::GetEmptyString()
261 
262 										//	Layer-ID's fuer Drawing
263 #define SC_LAYER_FRONT		0
264 #define SC_LAYER_BACK		1
265 #define SC_LAYER_INTERN		2
266 #define SC_LAYER_CONTROLS	3
267 #define SC_LAYER_HIDDEN     4
268 
269 										//	Tabellen linken
270 #define SC_LINK_NONE		0
271 #define SC_LINK_NORMAL		1
272 #define SC_LINK_VALUE		2
273 
274 										//	Eingabe
275 #define SC_ENTER_NORMAL		0
276 #define SC_ENTER_BLOCK		1
277 #define SC_ENTER_MATRIX		2
278 
279 										//	Step = 10pt, max. Einzug = 100 Schritte
280 #define SC_INDENT_STEP		200
281 #define SC_MAX_INDENT		20000
282 
283 										//	Szenario-Flags
284 #define SC_SCENARIO_COPYALL		1
285 #define SC_SCENARIO_SHOWFRAME	2
286 #define SC_SCENARIO_PRINTFRAME	4
287 #define SC_SCENARIO_TWOWAY		8
288 #define SC_SCENARIO_ATTRIB		16
289 #define SC_SCENARIO_VALUE		32
290 #define SC_SCENARIO_PROTECT		64
291 
292 
293 #ifndef DELETEZ
294 #define DELETEZ(pPtr) { delete pPtr; pPtr = 0; }
295 #endif
296 
297 									// Ist Bit in Set gesetzt?
298 #define IS_SET(bit,set)(((set)&(bit))==(bit))
299 
300 #define SEL_ALL			-1	// Eingabezeile: alles Selektieren
301 #define RES_CANCEL		0	// Resultate der Funk.AutoPilot-Seiten
302 #define RES_BACKWARD	1
303 #define RES_END			2
304 
305 enum CellType
306 	{
307 		CELLTYPE_NONE,
308 		CELLTYPE_VALUE,
309 		CELLTYPE_STRING,
310 		CELLTYPE_FORMULA,
311 		CELLTYPE_NOTE,
312 		CELLTYPE_EDIT,
313 		CELLTYPE_SYMBOLS 		// fuer Laden/Speichern
314 #if DBG_UTIL
315    		,CELLTYPE_DESTROYED
316 #endif
317 	};
318 
319 enum DelCellCmd
320 	{
321 		DEL_CELLSUP,
322 		DEL_CELLSLEFT,
323 		DEL_DELROWS,
324 		DEL_DELCOLS,
325 		DEL_NONE
326 	};
327 
328 enum InsCellCmd
329 	{
330 		INS_CELLSDOWN,
331 		INS_CELLSRIGHT,
332 		INS_INSROWS,
333 		INS_INSCOLS,
334 		INS_NONE
335 	};
336 
337 enum UpdateRefMode
338 	{
339 		URM_INSDEL,
340 		URM_COPY,
341 		URM_MOVE,
342 		URM_REORDER
343 	};
344 
345 enum FillDir
346 	{
347 		FILL_TO_BOTTOM,
348 		FILL_TO_RIGHT,
349 		FILL_TO_TOP,
350 		FILL_TO_LEFT
351 	};
352 
353 enum FillCmd
354 	{
355 		FILL_SIMPLE,
356 		FILL_LINEAR,
357 		FILL_GROWTH,
358 		FILL_DATE,
359 		FILL_AUTO
360 	};
361 
362 enum FillDateCmd
363 	{
364 		FILL_DAY,
365 		FILL_WEEKDAY,
366 		FILL_MONTH,
367 		FILL_YEAR
368 	};
369 
370 enum ScDirection
371 	{
372 		DIR_BOTTOM,
373 		DIR_RIGHT,
374 		DIR_TOP,
375 		DIR_LEFT
376 	};
377 
378 enum ScSizeMode
379 	{
380 		SC_SIZE_DIRECT,				// set size or hide if value is 0
381 		SC_SIZE_OPTIMAL,			// set optimal size for everything
382 		SC_SIZE_SHOW,				// show with original size
383 		SC_SIZE_VISOPT,				// set optimal size only if visible
384 		SC_SIZE_ORIGINAL			// only set size, don't change visible flag
385 	};
386 
387 enum ScInputMode
388 	{
389 		SC_INPUT_NONE,
390 		SC_INPUT_TYPE,				// Eingabe, ohne im Inplace-Modus zu sein
391 		SC_INPUT_TABLE,				// Textcursor in der Tabelle
392 		SC_INPUT_TOP				// Textcursor in der Eingabezeile
393 	};
394 
395 enum ScVObjMode						// Ausgabemodi von Objekten auf einer Seite
396 {
397 	VOBJ_MODE_SHOW,
398 	VOBJ_MODE_HIDE
399 	// #i80528# VOBJ_MODE_DUMMY removed, no longer supported
400 };
401 
402 enum ScAnchorType 					// Verankerung eines Zeichenobjekts
403 {
404 	SCA_CELL,
405 	SCA_PAGE,
406 	SCA_DONTKNOW 					// bei Mehrfachselektion
407 };
408 
409 enum ScGetDBMode
410 {
411 	SC_DB_MAKE,		// wenn noetig, "unbenannt" anlegen
412 	SC_DB_IMPORT,	// wenn noetig, "Importx" anlegen
413 	SC_DB_OLD		// nicht neu anlegen
414 };
415 
416 /// For ScDBFunc::GetDBData()
417 enum ScGetDBSelection
418 {
419     /** Keep selection as is, expand to used data area if no selection. */
420     SC_DBSEL_KEEP,
421 
422     /** Shrink selection to sheet's data area. */
423     SC_DBSEL_SHRINK_TO_SHEET_DATA,
424 
425     /** Shrink selection to actually used data area within the selection. */
426     SC_DBSEL_SHRINK_TO_USED_DATA,
427 
428     /** If only one row or portion thereof is selected, shrink row to used data
429         columns and select further rows down until end of data. If an area is
430         selected, shrink rows to actually used columns. Else, no selection,
431         expand to used data area. */
432     SC_DBSEL_ROW_DOWN,
433 
434     /** Behave as if the range corresponding to a ScDBData area was selected,
435         for API use. */
436     SC_DBSEL_FORCE_MARK
437 };
438 
439 enum ScLkUpdMode
440 {					//Verknuepfungen
441 	LM_ALWAYS,		//immer aktualisieren
442 	LM_NEVER,		//niemals
443 	LM_ON_DEMAND,	//auf nachfrage
444 	LM_UNKNOWN		//Shit happens
445 };
446 
447 
448 // -----------------------------------------------------------------------
449 
450 //==================================================================
451 
452 // -----------------------------------------------------------------------
453 
454 // enum with values equal to old DBObject enum from sdb
455 enum ScDBObject
456 {
457 	ScDbTable,
458 	ScDbQuery
459 };
460 
461 struct ScImportParam
462 {
463 	SCCOL			nCol1;
464 	SCROW			nRow1;
465 	SCCOL			nCol2;
466 	SCROW			nRow2;
467 	sal_Bool			bImport;
468 	String			aDBName;					// Alias der Datenbank
469 	String			aStatement;
470 	sal_Bool			bNative;
471 	sal_Bool			bSql;						// Statement oder Name?
472 	sal_uInt8			nType;						// enum DBObject
473 
474 	ScImportParam();
475 	ScImportParam( const ScImportParam& r );
476 	~ScImportParam();
477 
478 	ScImportParam&	operator=	( const ScImportParam& r );
479 	sal_Bool			operator==	( const ScImportParam& r ) const;
480 //UNUSED2009-05 void			Clear		();
481 };
482 
483 struct ScStringHashCode
484 {
485     size_t operator()( const String& rStr ) const
486     {
487         return rtl_ustr_hashCode_WithLength( rStr.GetBuffer(), rStr.Len() );
488     }
489 };
490 
491 // -----------------------------------------------------------------------
492 
493 class ScDocument;
494 class ScDocShell;
495 class ScDocShellRef;
496 class SvxSearchItem;
497 class ScAutoFormat;
498 class FuncCollection;
499 class ScUnoAddInCollection;
500 class ScUserList;
501 class SvxBrushItem;
502 class ScFunctionList;
503 class ScFunctionMgr;
504 class SfxItemPool;
505 class SdrModel;
506 class EditTextObject;
507 class SfxObjectShell;
508 class SvNumberFormatter;
509 class ScUnitConverter;
510 class CharClass;
511 class LocaleDataWrapper;
512 class SvtSysLocale;
513 class CalendarWrapper;
514 class CollatorWrapper;
515 class IntlWrapper;
516 class OutputDevice;
517 
518 namespace com { namespace sun { namespace star {
519     namespace lang {
520         struct Locale;
521     }
522     namespace i18n {
523         class XOrdinalSuffix;
524     }
525 }}}
526 namespace utl {
527     class TransliterationWrapper;
528 }
529 
530 #ifndef _SCALC_EXE
531 class ScGlobal
532 {
533 	static SvxSearchItem*	pSearchItem;
534 	static ScAutoFormat*	pAutoFormat;
535 	static FuncCollection*	pFuncCollection;
536 	static ScUnoAddInCollection* pAddInCollection;
537 	static ScUserList*		pUserList;
538 	static String**			ppRscString;
539 	static String* 			pStrScDoc;
540 	static String*          pEmptyString;
541 	static String*			pStrClipDocName;
542 	static SvxBrushItem*    pEmptyBrushItem;
543 	static SvxBrushItem*	pButtonBrushItem;
544 	static SvxBrushItem*	pEmbeddedBrushItem;
545 	static SvxBrushItem*	pProtectedBrushItem;
546 
547     static ImageList*       pOutlineBitmaps;
548     static ImageList*       pOutlineBitmapsHC;
549 
550 //	static Bitmap*			pAnchorBitmap;
551 //	static Bitmap*			pGrayAnchorBitmap;
552 
553 	static ScFunctionList*	pStarCalcFunctionList;
554 	static ScFunctionMgr*	pStarCalcFunctionMgr;
555 
556 	static ScUnitConverter*	pUnitConverter;
557 
558     static  SvNumberFormatter*  pEnglishFormatter;          // for UNO / XML export
559 
560     static ::com::sun::star::uno::Reference< ::com::sun::star::i18n::XOrdinalSuffix> xOrdinalSuffix;
561     static CalendarWrapper*		pCalendar;
562     static CollatorWrapper*		pCaseCollator;
563     static CollatorWrapper*		pCollator;
564     static ::utl::TransliterationWrapper* pTransliteration;
565     static ::utl::TransliterationWrapper* pCaseTransliteration;
566     static IntlWrapper*         pScIntlWrapper;
567     static ::com::sun::star::lang::Locale*		pLocale;
568 
569 public:
570     static SvtSysLocale*        pSysLocale;
571     // for faster access a pointer to the single instance provided by SvtSysLocale
572     SC_DLLPUBLIC static const CharClass*     pCharClass;
573     // for faster access a pointer to the single instance provided by SvtSysLocale
574     SC_DLLPUBLIC static const LocaleDataWrapper* pLocaleData;
575     SC_DLLPUBLIC static const LocaleDataWrapper* GetpLocaleData();
576 
577     static CalendarWrapper*     GetCalendar();
578     SC_DLLPUBLIC static CollatorWrapper*		GetCollator();
579     static CollatorWrapper*		GetCaseCollator();
580     static IntlWrapper*         GetScIntlWrapper();
581     static ::com::sun::star::lang::Locale*		GetLocale();
582 
583     SC_DLLPUBLIC static ::utl::TransliterationWrapper* GetpTransliteration(); //CHINA001
584     static ::utl::TransliterationWrapper* GetCaseTransliteration();
585 
586     SC_DLLPUBLIC static LanguageType	   		eLnge;
587 	static sal_Unicode			cListDelimiter;
588 
589 	static const String&	 	GetClipDocName();
590 	static void 			 	SetClipDocName( const String& rNew );
591 	SC_DLLPUBLIC static const SvxSearchItem&	GetSearchItem();
592 	SC_DLLPUBLIC static void					SetSearchItem( const SvxSearchItem& rNew );
593     SC_DLLPUBLIC static ScAutoFormat*		GetAutoFormat();
594 	static void					ClearAutoFormat(); //BugId 54209
595 	static FuncCollection*		GetFuncCollection();
596     SC_DLLPUBLIC static ScUnoAddInCollection* GetAddInCollection();
597     SC_DLLPUBLIC static ScUserList*			GetUserList();
598 	static void					SetUserList( const ScUserList* pNewList );
599     SC_DLLPUBLIC static const String&		GetRscString( sal_uInt16 nIndex );
600 	static void					OpenURL( const String& rURL, const String& rTarget );
601     SC_DLLPUBLIC static String				GetAbsDocName( const String& rFileName,
602 												SfxObjectShell* pShell );
603     SC_DLLPUBLIC static String				GetDocTabName( const String& rFileName,
604 												const String& rTabName );
605     SC_DLLPUBLIC static sal_uLong				GetStandardFormat( SvNumberFormatter&,
606 									sal_uLong nFormat, short nType );
607     SC_DLLPUBLIC static sal_uLong				GetStandardFormat( double, SvNumberFormatter&,
608 									sal_uLong nFormat, short nType );
609 
610     SC_DLLPUBLIC static double				nScreenPPTX;
611     SC_DLLPUBLIC static double				nScreenPPTY;
612 
613 	static ScDocShellRef*	pDrawClipDocShellRef;
614 
615 	static sal_uInt16			nDefFontHeight;
616 	static sal_uInt16			nStdRowHeight;
617 
618     SC_DLLPUBLIC static long				nLastRowHeightExtra;
619 	static long				nLastColWidthExtra;
620 
621 	static void             Init();						// am Anfang
622 	static void             InitAddIns();
623 	static void				Clear();					// bei Programmende
624 
625 	static void				UpdatePPT(OutputDevice* pDev);
626 
627 	static void             InitTextHeight(SfxItemPool* pPool);
628 	static SvxBrushItem*	GetEmptyBrushItem()	{ return pEmptyBrushItem; }
629     static SvxBrushItem*    GetButtonBrushItem();
630 	static SvxBrushItem*	GetEmbeddedBrushItem()	{ return pEmbeddedBrushItem; }
631 	static SvxBrushItem*	GetProtectedBrushItem()	{ return pProtectedBrushItem; }
632     SC_DLLPUBLIC    static const String&	GetEmptyString();
633 	static const String& 	GetScDocString();
634 
635     /** Returns the specified image list with outline symbols.
636         @param bHC  false = standard symbols; true = high contrast symbols. */
637     static ImageList*       GetOutlineSymbols( bool bHC );
638 
639 //	static const Bitmap&	GetAnchorBitmap();
640 //	static const Bitmap&	GetGrayAnchorBitmap();
641 
642     static bool             HasStarCalcFunctionList();
643 	static ScFunctionList*	GetStarCalcFunctionList();
644 	static ScFunctionMgr*	GetStarCalcFunctionMgr();
645     static void             ResetFunctionList();
646 
647 	static String			GetErrorString(sal_uInt16 nErrNumber);
648 	static String			GetLongErrorString(sal_uInt16 nErrNumber);
649 	static sal_Bool				EETextObjEqual( const EditTextObject* pObj1,
650 											const EditTextObject* pObj2 );
651 	static sal_Bool				CheckWidthInvalidate( sal_Bool& bNumFormatChanged,
652 												  const SfxItemSet& rNewAttrs,
653 												  const SfxItemSet& rOldAttrs );
654 	static sal_Bool				HasAttrChanged( const SfxItemSet& rNewAttrs,
655 											const SfxItemSet& rOldAttrs,
656 											const sal_uInt16	  nWhich );
657 
658 	static ScUnitConverter*	GetUnitConverter();
659 
660 	/// strchr() functionality on unicode, as long as we need it for ScToken etc.
661 	static const sal_Unicode* UnicodeStrChr( const sal_Unicode* pStr, sal_Unicode c );
662 
663 	static inline sal_Unicode ToUpperAlpha( sal_Unicode c )
664 		{ return ( c >= 'a' && c <= 'z' ) ? ( c-'a'+'A' ) : c; }
665 
666     /** Adds the string rToken to rTokenList, using a list separator character.
667         @param rTokenList  The string list where the token will be appended to.
668         @param rToken  The token string to append to the token list.
669         @param cSep  The character to separate the tokens.
670         @param nSepCount  Specifies how often cSep is inserted between two tokens.
671         @param bForceSep  true = Always insert separator; false = Only, if not at begin or end. */
672     SC_DLLPUBLIC static void             AddToken(
673                                 String& rTokenList, const String& rToken,
674                                 sal_Unicode cSep, xub_StrLen nSepCount = 1,
675                                 bool bForceSep = false );
676 
677     /** Returns true, if the first and last character of the string is cQuote. */
678     SC_DLLPUBLIC static bool             IsQuoted( const String& rString, sal_Unicode cQuote = '\'' );
679 
680     /** Inserts the character cQuote at beginning and end of rString.
681         @param bEscapeEmbedded      If <TRUE/>, embedded quote characters are
682                                     escaped by doubling them.
683      */
684 SC_DLLPUBLIC    static void             AddQuotes( String& rString, sal_Unicode cQuote = '\'', bool bEscapeEmbedded = true );
685 
686     /** Erases the character cQuote from rString, if it exists at beginning AND end.
687         @param bUnescapeEmbedded    If <TRUE/>, embedded doubled quote characters
688                                     are unescaped by replacing them with a
689                                     single instance.
690      */
691 SC_DLLPUBLIC    static void             EraseQuotes( String& rString, sal_Unicode cQuote = '\'', bool bUnescapeEmbedded = true );
692 
693     /** Finds an unquoted instance of cChar in rString, starting at
694         offset nStart. Unquoted instances may occur when concatenating two
695         quoted strings with a separator, for example, 's1':'s2'. Embedded
696         quotes have to be escaped by being doubled. Caller must ensure that
697         nStart points into an unquoted range or the opening quote. Specialty:
698         if cChar==cQuote the first cQuote character from nStart on is found.
699         @returns offset if found, else STRING_NOTFOUND
700      */
701 SC_DLLPUBLIC    static xub_StrLen       FindUnquoted( const String& rString, sal_Unicode cChar, xub_StrLen nStart = 0, sal_Unicode cQuote = '\'' );
702 
703     /** Finds an unquoted instance of cChar in null-terminated pString. Same
704         semantics as FindUnquoted( const String&, ...)
705         @returns: pointer to cChar if found, else NULL
706      */
707 SC_DLLPUBLIC    static const sal_Unicode* FindUnquoted( const sal_Unicode* pString, sal_Unicode cChar, sal_Unicode cQuote = '\'' );
708 
709 
710 	static	CharSet			GetCharsetValue( const String& rCharSet );
711 	static	String			GetCharsetString( CharSet eVal );
712 
713     /// a "ReadOnly" formatter for UNO/XML export
714     static  SvNumberFormatter*  GetEnglishFormatter();
715 
716 	static sal_Bool IsSystemRTL();						// depending on system language
717 	static LanguageType GetEditDefaultLanguage();	// for EditEngine::SetDefaultLanguage
718     SC_DLLPUBLIC static sal_uInt8	GetDefaultScriptType();				// for all WEAK characters
719     /** Map ATTR_((CJK|CTL)_)?FONT_... to proper WhichIDs.
720         If more than one SCRIPTTYPE_... values are or'ed together, prefers
721         first COMPLEX, then ASIAN */
722     SC_DLLPUBLIC static sal_uInt16 GetScriptedWhichID( sal_uInt8 nScriptType, sal_uInt16 nWhich );
723 
724     /** Adds a language item to the item set, if the number format item contains
725         a language that differs from its parent's language. */
726     SC_DLLPUBLIC static void             AddLanguage( SfxItemSet& rSet, SvNumberFormatter& rFormatter );
727 
728     /** Obtain the ordinal suffix for a number according to the system locale */
729     static String           GetOrdinalSuffix( sal_Int32 nNumber);
730 };
731 #endif
732 
733 //==================================================================
734 // evtl. in dbdata.hxx auslagern (?):
735 
736 enum ScQueryOp
737 	{
738 		SC_EQUAL,
739 		SC_LESS,
740 		SC_GREATER,
741 		SC_LESS_EQUAL,
742 		SC_GREATER_EQUAL,
743 		SC_NOT_EQUAL,
744 		SC_TOPVAL,
745 		SC_BOTVAL,
746 		SC_TOPPERC,
747         SC_BOTPERC,
748         SC_CONTAINS,
749         SC_DOES_NOT_CONTAIN,
750         SC_BEGINS_WITH,
751         SC_DOES_NOT_BEGIN_WITH,
752         SC_ENDS_WITH,
753         SC_DOES_NOT_END_WITH
754 	};
755 
756 // -----------------------------------------------------------------------
757 
758 enum ScQueryConnect
759 	{
760 		SC_AND,
761 		SC_OR
762 	};
763 
764 // -----------------------------------------------------------------------
765 
766 enum ScSubTotalFunc
767 	{
768 		SUBTOTAL_FUNC_NONE	= 0,
769 		SUBTOTAL_FUNC_AVE	= 1,
770 		SUBTOTAL_FUNC_CNT	= 2,
771 		SUBTOTAL_FUNC_CNT2	= 3,
772 		SUBTOTAL_FUNC_MAX	= 4,
773 		SUBTOTAL_FUNC_MIN	= 5,
774 		SUBTOTAL_FUNC_PROD	= 6,
775 		SUBTOTAL_FUNC_STD	= 7,
776 		SUBTOTAL_FUNC_STDP	= 8,
777 		SUBTOTAL_FUNC_SUM	= 9,
778 		SUBTOTAL_FUNC_VAR	= 10,
779 		SUBTOTAL_FUNC_VARP	= 11
780 	};
781 
782 
783 // -----------------------------------------------------------------------
784 
785 /*
786  * Dialog liefert die ausgezeichneten Feldwerte "leer"/"nicht leer"
787  * als Konstanten SC_EMPTYFIELDS bzw. SC_NONEMPTYFIELDS in nVal in
788  * Verbindung mit dem Schalter bQueryByString auf FALSE.
789  */
790 
791 #define SC_EMPTYFIELDS		((double)0x0042)
792 #define SC_NONEMPTYFIELDS	((double)0x0043)
793 
794 namespace utl
795 {
796 	class SearchParam;
797 	class TextSearch;
798 }
799 
800 struct ScQueryEntry
801 {
802 	sal_Bool			bDoQuery;
803 	sal_Bool			bQueryByString;
804     bool            bQueryByDate;
805 	SCCOLROW		nField;
806 	ScQueryOp		eOp;
807 	ScQueryConnect  eConnect;
808 	String*			pStr;
809 	double			nVal;
810 	utl::SearchParam*	pSearchParam;		// falls RegExp, nicht gespeichert
811 	utl::TextSearch*	pSearchText;		// falls RegExp, nicht gespeichert
812 
813 	ScQueryEntry();
814 	ScQueryEntry(const ScQueryEntry& r);
815 	~ScQueryEntry();
816 
817 	// legt ggbf. pSearchParam und pSearchText an, immer RegExp!
818 	utl::TextSearch*	GetSearchTextPtr( sal_Bool bCaseSens );
819 
820 	void			Clear();
821 	ScQueryEntry&	operator=( const ScQueryEntry& r );
822 	sal_Bool			operator==( const ScQueryEntry& r ) const;
823 };
824 
825 // -----------------------------------------------------------------------
826 
827 struct SC_DLLPUBLIC ScSubTotalParam
828 {
829 	SCCOL			nCol1;			// Selektierter Bereich
830 	SCROW			nRow1;
831 	SCCOL			nCol2;
832 	SCROW			nRow2;
833 	sal_Bool			bRemoveOnly;
834 	sal_Bool			bReplace;					// vorhandene Ergebnisse ersetzen
835 	sal_Bool			bPagebreak;					// Seitenumbruch bei Gruppenwechsel
836 	sal_Bool			bCaseSens;					// Gross-/Kleinschreibung
837 	sal_Bool			bDoSort;					// vorher sortieren
838 	sal_Bool			bAscending;					// aufsteigend sortieren
839 	sal_Bool			bUserDef;					// Benutzer-def. Sort.Reihenfolge
840 	sal_uInt16			nUserIndex;                 // Index auf Liste
841 	sal_Bool			bIncludePattern;			// Formate mit sortieren
842 	sal_Bool			bGroupActive[MAXSUBTOTAL];	// aktive Gruppen
843 	SCCOL			nField[MAXSUBTOTAL];		// zugehoeriges Feld
844 	SCCOL			nSubTotals[MAXSUBTOTAL];	// Anzahl der SubTotals
845 	SCCOL*			pSubTotals[MAXSUBTOTAL];	// Array der zu berechnenden Spalten
846 	ScSubTotalFunc*	pFunctions[MAXSUBTOTAL];	// Array der zugehoerige Funktionen
847 
848 	ScSubTotalParam();
849 	ScSubTotalParam( const ScSubTotalParam& r );
850 
851 	ScSubTotalParam&	operator=		( const ScSubTotalParam& r );
852 	sal_Bool				operator==		( const ScSubTotalParam& r ) const;
853 	void				Clear			();
854 	void 				SetSubTotals	( sal_uInt16				nGroup,
855 										  const SCCOL*			ptrSubTotals,
856 										  const ScSubTotalFunc*	ptrFuncions,
857 										  sal_uInt16				nCount );
858 };
859 
860 // -----------------------------------------------------------------------
861 class ScArea;
862 
863 struct ScConsolidateParam
864 {
865 	SCCOL			nCol;					// Cursor Position /
866 	SCROW			nRow;					// bzw. Anfang des Zielbereiches
867 	SCTAB			nTab;
868 	ScSubTotalFunc	eFunction;				// Berechnungsvorschrift
869 	sal_uInt16			nDataAreaCount;			// Anzahl der Datenbereiche
870 	ScArea**		ppDataAreas;			// Zeiger-Array auf Datenbereiche
871 	sal_Bool			bByCol;					// nach Spalten
872 	sal_Bool			bByRow;					// nach Zeilen
873 	sal_Bool			bReferenceData;			// Quelldaten referenzieren
874 
875 	ScConsolidateParam();
876 	ScConsolidateParam( const ScConsolidateParam& r );
877 	~ScConsolidateParam();
878 
879 	ScConsolidateParam&	operator=		( const ScConsolidateParam& r );
880 	sal_Bool				operator==		( const ScConsolidateParam& r ) const;
881 	void				Clear			(); // = ClearDataAreas()+Members
882 	void				ClearDataAreas	();
883 	void				SetAreas		( ScArea* const* ppAreas, sal_uInt16 nCount );
884 };
885 
886 // -----------------------------------------------------------------------
887 extern ::utl::TransliterationWrapper* GetScGlobalpTransliteration();//CHINA001
888 extern const LocaleDataWrapper* GetScGlobalpLocaleData();
889 
890 #endif
891