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