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_SCGLOB_HXX 25 #define SC_SCGLOB_HXX 26 27 #include "address.hxx" 28 #include <i18npool/lang.h> 29 #include <tools/stream.hxx> 30 #include <osl/endian.h> 31 #include <com/sun/star/uno/Reference.hxx> 32 #include "scdllapi.h" 33 34 #include <hash_map> 35 36 class ImageList; 37 class Bitmap; 38 class SfxItemSet; 39 class Color; 40 41 // Macro fuer den Call-Profiler unter WinNT 42 // mit S_CAP kann eine Messung gestarted, mit E_CAP wieder gestoppt werden 43 #if defined( WNT ) && defined( PROFILE ) 44 45 extern "C" { 46 void StartCAP(); 47 void StopCAP(); 48 void DumpCAP(); 49 }; 50 51 #define S_CAP StartCAP(); 52 #define E_CAP StopCAP(); DumpCAP(); 53 54 #endif 55 56 #if 0 57 // I18N doesn't get this right, can't specify more than one to ignore 58 #define SC_COLLATOR_IGNORES ( \ 59 ::com::sun::star::i18n::CollatorOptions::CollatorOptions_IGNORE_CASE | \ 60 ::com::sun::star::i18n::CollatorOptions::CollatorOptions_IGNORE_KANA | \ 61 ::com::sun::star::i18n::CollatorOptions::CollatorOptions_IGNORE_WIDTH ) 62 #else 63 #define SC_COLLATOR_IGNORES ( \ 64 ::com::sun::star::i18n::CollatorOptions::CollatorOptions_IGNORE_CASE ) 65 #endif 66 #if 0 67 // #107998# Don't ignore Width and Kana. The issue was mainly with AutoInput, 68 // but affects also comparison of names in general. 69 #define SC_TRANSLITERATION_IGNORECASE ( \ 70 ::com::sun::star::i18n::TransliterationModules_IGNORE_CASE | \ 71 ::com::sun::star::i18n::TransliterationModules_IGNORE_KANA | \ 72 ::com::sun::star::i18n::TransliterationModules_IGNORE_WIDTH ) 73 #define SC_TRANSLITERATION_CASESENSE ( \ 74 ::com::sun::star::i18n::TransliterationModules_IGNORE_KANA | \ 75 ::com::sun::star::i18n::TransliterationModules_IGNORE_WIDTH ) 76 #else 77 #define SC_TRANSLITERATION_IGNORECASE ( \ 78 ::com::sun::star::i18n::TransliterationModules_IGNORE_CASE ) 79 #define SC_TRANSLITERATION_CASESENSE 0 80 #endif 81 82 //------------------------------------------------------------------------ 83 84 // die 1000 Namen des Calc... 85 // Clipboard-Namen sind jetzt in so3/soapp.hxx 86 // STRING_SCAPP war "scalc3", "scalc4", jetzt nur noch "scalc" 87 88 #define STRING_SCAPP "scalc" 89 #define STRING_SCSTREAM "StarCalcDocument" 90 91 #define STRING_STANDARD "Standard" 92 93 // characters ----------------------------------------------------------------- 94 95 // '\r' geht auf'm Mac nicht... 96 #define CHAR_CR char(13) 97 98 const sal_Unicode CHAR_NBSP = 0x00A0; 99 const sal_Unicode CHAR_SHY = 0x00AD; 100 const sal_Unicode CHAR_ZWSP = 0x200B; 101 const sal_Unicode CHAR_LRM = 0x200E; 102 const sal_Unicode CHAR_RLM = 0x200F; 103 const sal_Unicode CHAR_NBHY = 0x2011; 104 const sal_Unicode CHAR_ZWNBSP = 0x2060; 105 106 // ---------------------------------------------------------------------------- 107 108 #define MINDOUBLE 1.7e-307 109 #define MAXDOUBLE 1.7e307 110 111 #define MINZOOM 20 112 #define MAXZOOM 400 113 114 #ifdef SC_ROWLIMIT_TYPECONVERSION_NOCONVPASS 115 const size_t MAXSUBTOTAL = 3; 116 const size_t MAXQUERY = 8; 117 #else 118 const SCSIZE MAXSUBTOTAL = 3; 119 const SCSIZE MAXQUERY = 8; 120 #endif 121 122 #define SC_START_INDEX_DB_COLL 50000 123 // Oberhalb dieser Grenze liegen 124 // die Indizes fuer DBBereiche 125 126 /* 127 #ifdef OS2 128 #define PIXEL_PER_INCH 72.0 129 #else 130 #define PIXEL_PER_INCH 96.0 131 #endif 132 */ 133 134 #define PIXEL_PER_INCH 96.0 135 136 #define CM_PER_INCH 2.54 137 #define POINTS_PER_INCH 72.27 138 #define PIXEL_PER_POINT (PIXEL_PER_INCH / POINTS_PER_INCH) 139 #define INCHT_PER_CM (1.0 / CM_PER_INCH) 140 #define POINTS_PER_CM (POINTS_PER_INCH / CM_PER_INCH) 141 #define TWIPS_PER_POINT 20.0 142 #define TWIPS_PER_INCH (TWIPS_PER_POINT * POINTS_PER_INCH) 143 #define TWIPS_PER_CM (TWIPS_PER_INCH / CM_PER_INCH) 144 #define CM_PER_TWIPS (CM_PER_INCH / TWIPS_PER_INCH) 145 #define TWIPS_PER_PIXEL (TWIPS_PER_INCH / PIXEL_PER_INCH) 146 #define TWIPS_PER_CHAR (TWIPS_PER_INCH / 13.6) 147 #define PIXEL_PER_TWIPS (PIXEL_PER_INCH / TWIPS_PER_INCH) 148 #define HMM_PER_TWIPS (CM_PER_TWIPS * 1000.0) 149 150 #define STD_COL_WIDTH 1285 151 #define STD_EXTRA_WIDTH 113 // 2mm Extra fuer optimale Breite 152 // Standard Zeilenhoehe: Text + Rand - STD_ROWHEIGHT_DIFF 153 154 155 #define MAX_EXTRA_WIDTH 23811 // 42cm in TWIPS 156 #define MAX_EXTRA_HEIGHT 23811 157 #define MAX_COL_WIDTH 56693 // 1m in TWIPS 158 #define MAX_COL_HEIGHT 56693 159 160 #define STD_ROWHEIGHT_DIFF 23 161 #define STD_FONT_HEIGHT 200 // entspricht 10 Punkt 162 163 //! statt STD_ROW_HEIGHT ScGlobal::nStdRowHeight benutzen ! 164 165 #define STD_ROW_HEIGHT (12.8 * TWIPS_PER_POINT) // 256 Twips, 0.45 cm 166 167 // Standardgroesse als Ole-Server (Zellen) 168 #define OLE_STD_CELLS_X 4 169 #define OLE_STD_CELLS_Y 5 170 171 #define SC_SIZE_OPTIMUM 0xFFFF 172 173 // Update-Flags 174 #define UF_SCROLL_LEFT 1 175 #define UF_SCROLL_RIGHT 2 176 #define UF_SCROLL_UP 4 177 #define UF_SCROLL_DOWN 8 178 #define UF_ROW 16 179 #define UF_VIEW 32 180 181 // Repaint-Flags (fuer Messages) 182 #define PAINT_GRID 1 183 #define PAINT_TOP 2 184 #define PAINT_LEFT 4 185 #define PAINT_EXTRAS 8 186 #define PAINT_INVERT 16 187 #define PAINT_MARKS 32 188 #define PAINT_OBJECTS 64 189 #define PAINT_SIZE 128 190 #define PAINT_ALL ( PAINT_GRID | PAINT_TOP | PAINT_LEFT | PAINT_EXTRAS | PAINT_OBJECTS | PAINT_SIZE ) 191 192 193 // Flags fuer Spalten / Zeilen 194 // FILTERED immer zusammen mit HIDDEN 195 // FILTERED und MANUALSIZE nur fuer Zeilen moeglich 196 const sal_uInt8 CR_HIDDEN = 1; 197 //const sal_uInt8 CR_MARKED = 2; 198 //const sal_uInt8 CR_PAGEBREAK = 4; 199 const sal_uInt8 CR_MANUALBREAK = 8; 200 const sal_uInt8 CR_FILTERED = 16; 201 const sal_uInt8 CR_MANUALSIZE = 32; 202 const sal_uInt8 CR_ALL = (CR_HIDDEN | CR_MANUALBREAK | CR_FILTERED | CR_MANUALSIZE); 203 204 typedef sal_uInt8 ScBreakType; 205 const ScBreakType BREAK_NONE = 0; 206 const ScBreakType BREAK_PAGE = 1; 207 const ScBreakType BREAK_MANUAL = 2; 208 209 // Insert-/Delete-Flags 210 const sal_uInt16 IDF_NONE = 0x0000; 211 const sal_uInt16 IDF_VALUE = 0x0001; /// Numeric values (and numeric results if IDF_FORMULA is not set). 212 const sal_uInt16 IDF_DATETIME = 0x0002; /// Dates, times, datetime values. 213 const sal_uInt16 IDF_STRING = 0x0004; /// Strings (and string results if IDF_FORMULA is not set). 214 const sal_uInt16 IDF_NOTE = 0x0008; /// Cell notes. 215 const sal_uInt16 IDF_FORMULA = 0x0010; /// Formula cells. 216 const sal_uInt16 IDF_HARDATTR = 0x0020; /// Hard cell attributes. 217 const sal_uInt16 IDF_STYLES = 0x0040; /// Cell styles. 218 const sal_uInt16 IDF_OBJECTS = 0x0080; /// Drawing objects. 219 const sal_uInt16 IDF_EDITATTR = 0x0100; /// Rich-text attributes. 220 const sal_uInt16 IDF_ATTRIB = IDF_HARDATTR | IDF_STYLES; 221 const sal_uInt16 IDF_CONTENTS = IDF_VALUE | IDF_DATETIME | IDF_STRING | IDF_NOTE | IDF_FORMULA; 222 const sal_uInt16 IDF_ALL = IDF_CONTENTS | IDF_ATTRIB | IDF_OBJECTS; 223 const sal_uInt16 IDF_NOCAPTIONS = 0x0200; /// Internal use only (undo etc.): do not copy/delete caption objects of cell notes. 224 const sal_uInt16 IDF_ADDNOTES = 0x0400; /// Internal use only (copy from clip): do not delete existing cell contents when pasting notes. 225 226 /// Copy flags for auto/series fill functions: do not touch notes and drawing objects. 227 const sal_uInt16 IDF_AUTOFILL = IDF_ALL & ~(IDF_NOTE | IDF_OBJECTS); 228 229 #define PASTE_NOFUNC 0 230 #define PASTE_ADD 1 231 #define PASTE_SUB 2 232 #define PASTE_MUL 3 233 #define PASTE_DIV 4 234 235 #define PASTE_NONEMPTY 5 236 237 // Bits fuer HasAttr 238 #define HASATTR_LINES 1 239 #define HASATTR_MERGED 2 240 #define HASATTR_OVERLAPPED 4 241 #define HASATTR_PROTECTED 8 242 #define HASATTR_SHADOW 16 243 #define HASATTR_NEEDHEIGHT 32 244 #define HASATTR_SHADOW_RIGHT 64 245 #define HASATTR_SHADOW_DOWN 128 246 #define HASATTR_AUTOFILTER 256 247 #define HASATTR_CONDITIONAL 512 248 #define HASATTR_ROTATE 1024 249 #define HASATTR_NOTOVERLAPPED 2048 250 #define HASATTR_RTL 4096 251 #define HASATTR_RIGHTORCENTER 8192 // right or centered logical alignment 252 253 #define HASATTR_PAINTEXT ( HASATTR_LINES | HASATTR_SHADOW | HASATTR_CONDITIONAL ) 254 255 256 #define EMPTY_STRING ScGlobal::GetEmptyString() 257 258 // Layer-ID's fuer Drawing 259 #define SC_LAYER_FRONT 0 260 #define SC_LAYER_BACK 1 261 #define SC_LAYER_INTERN 2 262 #define SC_LAYER_CONTROLS 3 263 #define SC_LAYER_HIDDEN 4 264 265 // Tabellen linken 266 #define SC_LINK_NONE 0 267 #define SC_LINK_NORMAL 1 268 #define SC_LINK_VALUE 2 269 270 // Eingabe 271 #define SC_ENTER_NORMAL 0 272 #define SC_ENTER_BLOCK 1 273 #define SC_ENTER_MATRIX 2 274 275 // Step = 10pt, max. Einzug = 100 Schritte 276 #define SC_INDENT_STEP 200 277 #define SC_MAX_INDENT 20000 278 279 // Szenario-Flags 280 #define SC_SCENARIO_COPYALL 1 281 #define SC_SCENARIO_SHOWFRAME 2 282 #define SC_SCENARIO_PRINTFRAME 4 283 #define SC_SCENARIO_TWOWAY 8 284 #define SC_SCENARIO_ATTRIB 16 285 #define SC_SCENARIO_VALUE 32 286 #define SC_SCENARIO_PROTECT 64 287 288 289 #ifndef DELETEZ 290 #define DELETEZ(pPtr) { delete pPtr; pPtr = 0; } 291 #endif 292 293 // Ist Bit in Set gesetzt? 294 #define IS_SET(bit,set)(((set)&(bit))==(bit)) 295 296 #define SEL_ALL -1 // Eingabezeile: alles Selektieren 297 #define RES_CANCEL 0 // Resultate der Funk.AutoPilot-Seiten 298 #define RES_BACKWARD 1 299 #define RES_END 2 300 301 enum CellType 302 { 303 CELLTYPE_NONE, 304 CELLTYPE_VALUE, 305 CELLTYPE_STRING, 306 CELLTYPE_FORMULA, 307 CELLTYPE_NOTE, 308 CELLTYPE_EDIT, 309 CELLTYPE_SYMBOLS // fuer Laden/Speichern 310 #if DBG_UTIL 311 ,CELLTYPE_DESTROYED 312 #endif 313 }; 314 315 enum DelCellCmd 316 { 317 DEL_CELLSUP, 318 DEL_CELLSLEFT, 319 DEL_DELROWS, 320 DEL_DELCOLS, 321 DEL_NONE 322 }; 323 324 enum InsCellCmd 325 { 326 INS_CELLSDOWN, 327 INS_CELLSRIGHT, 328 INS_INSROWS, 329 INS_INSCOLS, 330 INS_NONE 331 }; 332 333 enum UpdateRefMode 334 { 335 URM_INSDEL, 336 URM_COPY, 337 URM_MOVE, 338 URM_REORDER 339 }; 340 341 enum FillDir 342 { 343 FILL_TO_BOTTOM, 344 FILL_TO_RIGHT, 345 FILL_TO_TOP, 346 FILL_TO_LEFT 347 }; 348 349 enum FillCmd 350 { 351 FILL_SIMPLE, 352 FILL_LINEAR, 353 FILL_GROWTH, 354 FILL_DATE, 355 FILL_AUTO 356 }; 357 358 enum FillDateCmd 359 { 360 FILL_DAY, 361 FILL_WEEKDAY, 362 FILL_MONTH, 363 FILL_YEAR 364 }; 365 366 enum ScDirection 367 { 368 DIR_BOTTOM, 369 DIR_RIGHT, 370 DIR_TOP, 371 DIR_LEFT 372 }; 373 374 enum ScSizeMode 375 { 376 SC_SIZE_DIRECT, // set size or hide if value is 0 377 SC_SIZE_OPTIMAL, // set optimal size for everything 378 SC_SIZE_SHOW, // show with original size 379 SC_SIZE_VISOPT, // set optimal size only if visible 380 SC_SIZE_ORIGINAL // only set size, don't change visible flag 381 }; 382 383 enum ScInputMode 384 { 385 SC_INPUT_NONE, 386 SC_INPUT_TYPE, // Eingabe, ohne im Inplace-Modus zu sein 387 SC_INPUT_TABLE, // Textcursor in der Tabelle 388 SC_INPUT_TOP // Textcursor in der Eingabezeile 389 }; 390 391 enum ScVObjMode // Ausgabemodi von Objekten auf einer Seite 392 { 393 VOBJ_MODE_SHOW, 394 VOBJ_MODE_HIDE 395 // #i80528# VOBJ_MODE_DUMMY removed, no longer supported 396 }; 397 398 enum ScAnchorType // Verankerung eines Zeichenobjekts 399 { 400 SCA_CELL, 401 SCA_PAGE, 402 SCA_DONTKNOW // bei Mehrfachselektion 403 }; 404 405 enum ScGetDBMode 406 { 407 SC_DB_MAKE, // wenn noetig, "unbenannt" anlegen 408 SC_DB_IMPORT, // wenn noetig, "Importx" anlegen 409 SC_DB_OLD, // nicht neu anlegen 410 SC_DB_MAKE_FILTER, // to create a new filter/sort/subtotal 411 SC_DB_MAKE_SORT, 412 SC_DB_MAKE_SUBTOTAL, 413 SC_DB_OLD_FILTER //to find a existed filter 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