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 }; 411 412 /// For ScDBFunc::GetDBData() 413 enum ScGetDBSelection 414 { 415 /** Keep selection as is, expand to used data area if no selection. */ 416 SC_DBSEL_KEEP, 417 418 /** Shrink selection to sheet's data area. */ 419 SC_DBSEL_SHRINK_TO_SHEET_DATA, 420 421 /** Shrink selection to actually used data area within the selection. */ 422 SC_DBSEL_SHRINK_TO_USED_DATA, 423 424 /** If only one row or portion thereof is selected, shrink row to used data 425 columns and select further rows down until end of data. If an area is 426 selected, shrink rows to actually used columns. Else, no selection, 427 expand to used data area. */ 428 SC_DBSEL_ROW_DOWN, 429 430 /** Behave as if the range corresponding to a ScDBData area was selected, 431 for API use. */ 432 SC_DBSEL_FORCE_MARK 433 }; 434 435 enum ScLkUpdMode 436 { //Verknuepfungen 437 LM_ALWAYS, //immer aktualisieren 438 LM_NEVER, //niemals 439 LM_ON_DEMAND, //auf nachfrage 440 LM_UNKNOWN //Shit happens 441 }; 442 443 444 // ----------------------------------------------------------------------- 445 446 //================================================================== 447 448 // ----------------------------------------------------------------------- 449 450 // enum with values equal to old DBObject enum from sdb 451 enum ScDBObject 452 { 453 ScDbTable, 454 ScDbQuery 455 }; 456 457 struct ScImportParam 458 { 459 SCCOL nCol1; 460 SCROW nRow1; 461 SCCOL nCol2; 462 SCROW nRow2; 463 sal_Bool bImport; 464 String aDBName; // Alias der Datenbank 465 String aStatement; 466 sal_Bool bNative; 467 sal_Bool bSql; // Statement oder Name? 468 sal_uInt8 nType; // enum DBObject 469 470 ScImportParam(); 471 ScImportParam( const ScImportParam& r ); 472 ~ScImportParam(); 473 474 ScImportParam& operator= ( const ScImportParam& r ); 475 sal_Bool operator== ( const ScImportParam& r ) const; 476 //UNUSED2009-05 void Clear (); 477 }; 478 479 struct ScStringHashCode 480 { 481 size_t operator()( const String& rStr ) const 482 { 483 return rtl_ustr_hashCode_WithLength( rStr.GetBuffer(), rStr.Len() ); 484 } 485 }; 486 487 // ----------------------------------------------------------------------- 488 489 class ScDocument; 490 class ScDocShell; 491 class ScDocShellRef; 492 class SvxSearchItem; 493 class ScAutoFormat; 494 class FuncCollection; 495 class ScUnoAddInCollection; 496 class ScUserList; 497 class SvxBrushItem; 498 class ScFunctionList; 499 class ScFunctionMgr; 500 class SfxItemPool; 501 class SdrModel; 502 class EditTextObject; 503 class SfxObjectShell; 504 class SvNumberFormatter; 505 class ScUnitConverter; 506 class CharClass; 507 class LocaleDataWrapper; 508 class SvtSysLocale; 509 class CalendarWrapper; 510 class CollatorWrapper; 511 class IntlWrapper; 512 class OutputDevice; 513 514 namespace com { namespace sun { namespace star { 515 namespace lang { 516 struct Locale; 517 } 518 namespace i18n { 519 class XOrdinalSuffix; 520 } 521 }}} 522 namespace utl { 523 class TransliterationWrapper; 524 } 525 526 #ifndef _SCALC_EXE 527 class ScGlobal 528 { 529 static SvxSearchItem* pSearchItem; 530 static ScAutoFormat* pAutoFormat; 531 static FuncCollection* pFuncCollection; 532 static ScUnoAddInCollection* pAddInCollection; 533 static ScUserList* pUserList; 534 static String** ppRscString; 535 static String* pStrScDoc; 536 static String* pEmptyString; 537 static String* pStrClipDocName; 538 static SvxBrushItem* pEmptyBrushItem; 539 static SvxBrushItem* pButtonBrushItem; 540 static SvxBrushItem* pEmbeddedBrushItem; 541 static SvxBrushItem* pProtectedBrushItem; 542 543 static ImageList* pOutlineBitmaps; 544 static ImageList* pOutlineBitmapsHC; 545 546 // static Bitmap* pAnchorBitmap; 547 // static Bitmap* pGrayAnchorBitmap; 548 549 static ScFunctionList* pStarCalcFunctionList; 550 static ScFunctionMgr* pStarCalcFunctionMgr; 551 552 static ScUnitConverter* pUnitConverter; 553 554 static SvNumberFormatter* pEnglishFormatter; // for UNO / XML export 555 556 static ::com::sun::star::uno::Reference< ::com::sun::star::i18n::XOrdinalSuffix> xOrdinalSuffix; 557 static CalendarWrapper* pCalendar; 558 static CollatorWrapper* pCaseCollator; 559 static CollatorWrapper* pCollator; 560 static ::utl::TransliterationWrapper* pTransliteration; 561 static ::utl::TransliterationWrapper* pCaseTransliteration; 562 static IntlWrapper* pScIntlWrapper; 563 static ::com::sun::star::lang::Locale* pLocale; 564 565 public: 566 static SvtSysLocale* pSysLocale; 567 // for faster access a pointer to the single instance provided by SvtSysLocale 568 SC_DLLPUBLIC static const CharClass* pCharClass; 569 // for faster access a pointer to the single instance provided by SvtSysLocale 570 SC_DLLPUBLIC static const LocaleDataWrapper* pLocaleData; 571 SC_DLLPUBLIC static const LocaleDataWrapper* GetpLocaleData(); 572 573 static CalendarWrapper* GetCalendar(); 574 SC_DLLPUBLIC static CollatorWrapper* GetCollator(); 575 static CollatorWrapper* GetCaseCollator(); 576 static IntlWrapper* GetScIntlWrapper(); 577 static ::com::sun::star::lang::Locale* GetLocale(); 578 579 SC_DLLPUBLIC static ::utl::TransliterationWrapper* GetpTransliteration(); //CHINA001 580 static ::utl::TransliterationWrapper* GetCaseTransliteration(); 581 582 SC_DLLPUBLIC static LanguageType eLnge; 583 static sal_Unicode cListDelimiter; 584 585 static const String& GetClipDocName(); 586 static void SetClipDocName( const String& rNew ); 587 SC_DLLPUBLIC static const SvxSearchItem& GetSearchItem(); 588 SC_DLLPUBLIC static void SetSearchItem( const SvxSearchItem& rNew ); 589 SC_DLLPUBLIC static ScAutoFormat* GetAutoFormat(); 590 static void ClearAutoFormat(); //BugId 54209 591 static FuncCollection* GetFuncCollection(); 592 SC_DLLPUBLIC static ScUnoAddInCollection* GetAddInCollection(); 593 SC_DLLPUBLIC static ScUserList* GetUserList(); 594 static void SetUserList( const ScUserList* pNewList ); 595 SC_DLLPUBLIC static const String& GetRscString( sal_uInt16 nIndex ); 596 static void OpenURL( const String& rURL, const String& rTarget ); 597 SC_DLLPUBLIC static String GetAbsDocName( const String& rFileName, 598 SfxObjectShell* pShell ); 599 SC_DLLPUBLIC static String GetDocTabName( const String& rFileName, 600 const String& rTabName ); 601 SC_DLLPUBLIC static sal_uLong GetStandardFormat( SvNumberFormatter&, 602 sal_uLong nFormat, short nType ); 603 SC_DLLPUBLIC static sal_uLong GetStandardFormat( double, SvNumberFormatter&, 604 sal_uLong nFormat, short nType ); 605 606 SC_DLLPUBLIC static double nScreenPPTX; 607 SC_DLLPUBLIC static double nScreenPPTY; 608 609 static ScDocShellRef* pDrawClipDocShellRef; 610 611 static sal_uInt16 nDefFontHeight; 612 static sal_uInt16 nStdRowHeight; 613 614 SC_DLLPUBLIC static long nLastRowHeightExtra; 615 static long nLastColWidthExtra; 616 617 static void Init(); // am Anfang 618 static void InitAddIns(); 619 static void Clear(); // bei Programmende 620 621 static void UpdatePPT(OutputDevice* pDev); 622 623 static void InitTextHeight(SfxItemPool* pPool); 624 static SvxBrushItem* GetEmptyBrushItem() { return pEmptyBrushItem; } 625 static SvxBrushItem* GetButtonBrushItem(); 626 static SvxBrushItem* GetEmbeddedBrushItem() { return pEmbeddedBrushItem; } 627 static SvxBrushItem* GetProtectedBrushItem() { return pProtectedBrushItem; } 628 SC_DLLPUBLIC static const String& GetEmptyString(); 629 static const String& GetScDocString(); 630 631 /** Returns the specified image list with outline symbols. 632 @param bHC false = standard symbols; true = high contrast symbols. */ 633 static ImageList* GetOutlineSymbols( bool bHC ); 634 635 // static const Bitmap& GetAnchorBitmap(); 636 // static const Bitmap& GetGrayAnchorBitmap(); 637 638 static bool HasStarCalcFunctionList(); 639 static ScFunctionList* GetStarCalcFunctionList(); 640 static ScFunctionMgr* GetStarCalcFunctionMgr(); 641 static void ResetFunctionList(); 642 643 static String GetErrorString(sal_uInt16 nErrNumber); 644 static String GetLongErrorString(sal_uInt16 nErrNumber); 645 static sal_Bool EETextObjEqual( const EditTextObject* pObj1, 646 const EditTextObject* pObj2 ); 647 static sal_Bool CheckWidthInvalidate( sal_Bool& bNumFormatChanged, 648 const SfxItemSet& rNewAttrs, 649 const SfxItemSet& rOldAttrs ); 650 static sal_Bool HasAttrChanged( const SfxItemSet& rNewAttrs, 651 const SfxItemSet& rOldAttrs, 652 const sal_uInt16 nWhich ); 653 654 static ScUnitConverter* GetUnitConverter(); 655 656 /// strchr() functionality on unicode, as long as we need it for ScToken etc. 657 static const sal_Unicode* UnicodeStrChr( const sal_Unicode* pStr, sal_Unicode c ); 658 659 static inline sal_Unicode ToUpperAlpha( sal_Unicode c ) 660 { return ( c >= 'a' && c <= 'z' ) ? ( c-'a'+'A' ) : c; } 661 662 /** Adds the string rToken to rTokenList, using a list separator character. 663 @param rTokenList The string list where the token will be appended to. 664 @param rToken The token string to append to the token list. 665 @param cSep The character to separate the tokens. 666 @param nSepCount Specifies how often cSep is inserted between two tokens. 667 @param bForceSep true = Always insert separator; false = Only, if not at begin or end. */ 668 SC_DLLPUBLIC static void AddToken( 669 String& rTokenList, const String& rToken, 670 sal_Unicode cSep, xub_StrLen nSepCount = 1, 671 bool bForceSep = false ); 672 673 /** Returns true, if the first and last character of the string is cQuote. */ 674 SC_DLLPUBLIC static bool IsQuoted( const String& rString, sal_Unicode cQuote = '\'' ); 675 676 /** Inserts the character cQuote at beginning and end of rString. 677 @param bEscapeEmbedded If <TRUE/>, embedded quote characters are 678 escaped by doubling them. 679 */ 680 SC_DLLPUBLIC static void AddQuotes( String& rString, sal_Unicode cQuote = '\'', bool bEscapeEmbedded = true ); 681 682 /** Erases the character cQuote from rString, if it exists at beginning AND end. 683 @param bUnescapeEmbedded If <TRUE/>, embedded doubled quote characters 684 are unescaped by replacing them with a 685 single instance. 686 */ 687 SC_DLLPUBLIC static void EraseQuotes( String& rString, sal_Unicode cQuote = '\'', bool bUnescapeEmbedded = true ); 688 689 /** Finds an unquoted instance of cChar in rString, starting at 690 offset nStart. Unquoted instances may occur when concatenating two 691 quoted strings with a separator, for example, 's1':'s2'. Embedded 692 quotes have to be escaped by being doubled. Caller must ensure that 693 nStart points into an unquoted range or the opening quote. Specialty: 694 if cChar==cQuote the first cQuote character from nStart on is found. 695 @returns offset if found, else STRING_NOTFOUND 696 */ 697 SC_DLLPUBLIC static xub_StrLen FindUnquoted( const String& rString, sal_Unicode cChar, xub_StrLen nStart = 0, sal_Unicode cQuote = '\'' ); 698 699 /** Finds an unquoted instance of cChar in null-terminated pString. Same 700 semantics as FindUnquoted( const String&, ...) 701 @returns: pointer to cChar if found, else NULL 702 */ 703 SC_DLLPUBLIC static const sal_Unicode* FindUnquoted( const sal_Unicode* pString, sal_Unicode cChar, sal_Unicode cQuote = '\'' ); 704 705 706 static CharSet GetCharsetValue( const String& rCharSet ); 707 static String GetCharsetString( CharSet eVal ); 708 709 /// a "ReadOnly" formatter for UNO/XML export 710 static SvNumberFormatter* GetEnglishFormatter(); 711 712 static sal_Bool IsSystemRTL(); // depending on system language 713 static LanguageType GetEditDefaultLanguage(); // for EditEngine::SetDefaultLanguage 714 SC_DLLPUBLIC static sal_uInt8 GetDefaultScriptType(); // for all WEAK characters 715 /** Map ATTR_((CJK|CTL)_)?FONT_... to proper WhichIDs. 716 If more than one SCRIPTTYPE_... values are or'ed together, prefers 717 first COMPLEX, then ASIAN */ 718 SC_DLLPUBLIC static sal_uInt16 GetScriptedWhichID( sal_uInt8 nScriptType, sal_uInt16 nWhich ); 719 720 /** Adds a language item to the item set, if the number format item contains 721 a language that differs from its parent's language. */ 722 SC_DLLPUBLIC static void AddLanguage( SfxItemSet& rSet, SvNumberFormatter& rFormatter ); 723 724 /** Obtain the ordinal suffix for a number according to the system locale */ 725 static String GetOrdinalSuffix( sal_Int32 nNumber); 726 }; 727 #endif 728 729 //================================================================== 730 // evtl. in dbdata.hxx auslagern (?): 731 732 enum ScQueryOp 733 { 734 SC_EQUAL, 735 SC_LESS, 736 SC_GREATER, 737 SC_LESS_EQUAL, 738 SC_GREATER_EQUAL, 739 SC_NOT_EQUAL, 740 SC_TOPVAL, 741 SC_BOTVAL, 742 SC_TOPPERC, 743 SC_BOTPERC, 744 SC_CONTAINS, 745 SC_DOES_NOT_CONTAIN, 746 SC_BEGINS_WITH, 747 SC_DOES_NOT_BEGIN_WITH, 748 SC_ENDS_WITH, 749 SC_DOES_NOT_END_WITH 750 }; 751 752 // ----------------------------------------------------------------------- 753 754 enum ScQueryConnect 755 { 756 SC_AND, 757 SC_OR 758 }; 759 760 // ----------------------------------------------------------------------- 761 762 enum ScSubTotalFunc 763 { 764 SUBTOTAL_FUNC_NONE = 0, 765 SUBTOTAL_FUNC_AVE = 1, 766 SUBTOTAL_FUNC_CNT = 2, 767 SUBTOTAL_FUNC_CNT2 = 3, 768 SUBTOTAL_FUNC_MAX = 4, 769 SUBTOTAL_FUNC_MIN = 5, 770 SUBTOTAL_FUNC_PROD = 6, 771 SUBTOTAL_FUNC_STD = 7, 772 SUBTOTAL_FUNC_STDP = 8, 773 SUBTOTAL_FUNC_SUM = 9, 774 SUBTOTAL_FUNC_VAR = 10, 775 SUBTOTAL_FUNC_VARP = 11 776 }; 777 778 779 // ----------------------------------------------------------------------- 780 781 /* 782 * Dialog liefert die ausgezeichneten Feldwerte "leer"/"nicht leer" 783 * als Konstanten SC_EMPTYFIELDS bzw. SC_NONEMPTYFIELDS in nVal in 784 * Verbindung mit dem Schalter bQueryByString auf FALSE. 785 */ 786 787 #define SC_EMPTYFIELDS ((double)0x0042) 788 #define SC_NONEMPTYFIELDS ((double)0x0043) 789 790 namespace utl 791 { 792 class SearchParam; 793 class TextSearch; 794 } 795 796 struct ScQueryEntry 797 { 798 sal_Bool bDoQuery; 799 sal_Bool bQueryByString; 800 bool bQueryByDate; 801 SCCOLROW nField; 802 ScQueryOp eOp; 803 ScQueryConnect eConnect; 804 String* pStr; 805 double nVal; 806 utl::SearchParam* pSearchParam; // falls RegExp, nicht gespeichert 807 utl::TextSearch* pSearchText; // falls RegExp, nicht gespeichert 808 809 ScQueryEntry(); 810 ScQueryEntry(const ScQueryEntry& r); 811 ~ScQueryEntry(); 812 813 // legt ggbf. pSearchParam und pSearchText an, immer RegExp! 814 utl::TextSearch* GetSearchTextPtr( sal_Bool bCaseSens ); 815 816 void Clear(); 817 ScQueryEntry& operator=( const ScQueryEntry& r ); 818 sal_Bool operator==( const ScQueryEntry& r ) const; 819 }; 820 821 // ----------------------------------------------------------------------- 822 823 struct SC_DLLPUBLIC ScSubTotalParam 824 { 825 SCCOL nCol1; // Selektierter Bereich 826 SCROW nRow1; 827 SCCOL nCol2; 828 SCROW nRow2; 829 sal_Bool bRemoveOnly; 830 sal_Bool bReplace; // vorhandene Ergebnisse ersetzen 831 sal_Bool bPagebreak; // Seitenumbruch bei Gruppenwechsel 832 sal_Bool bCaseSens; // Gross-/Kleinschreibung 833 sal_Bool bDoSort; // vorher sortieren 834 sal_Bool bAscending; // aufsteigend sortieren 835 sal_Bool bUserDef; // Benutzer-def. Sort.Reihenfolge 836 sal_uInt16 nUserIndex; // Index auf Liste 837 sal_Bool bIncludePattern; // Formate mit sortieren 838 sal_Bool bGroupActive[MAXSUBTOTAL]; // aktive Gruppen 839 SCCOL nField[MAXSUBTOTAL]; // zugehoeriges Feld 840 SCCOL nSubTotals[MAXSUBTOTAL]; // Anzahl der SubTotals 841 SCCOL* pSubTotals[MAXSUBTOTAL]; // Array der zu berechnenden Spalten 842 ScSubTotalFunc* pFunctions[MAXSUBTOTAL]; // Array der zugehoerige Funktionen 843 844 ScSubTotalParam(); 845 ScSubTotalParam( const ScSubTotalParam& r ); 846 847 ScSubTotalParam& operator= ( const ScSubTotalParam& r ); 848 sal_Bool operator== ( const ScSubTotalParam& r ) const; 849 void Clear (); 850 void SetSubTotals ( sal_uInt16 nGroup, 851 const SCCOL* ptrSubTotals, 852 const ScSubTotalFunc* ptrFuncions, 853 sal_uInt16 nCount ); 854 }; 855 856 // ----------------------------------------------------------------------- 857 class ScArea; 858 859 struct ScConsolidateParam 860 { 861 SCCOL nCol; // Cursor Position / 862 SCROW nRow; // bzw. Anfang des Zielbereiches 863 SCTAB nTab; 864 ScSubTotalFunc eFunction; // Berechnungsvorschrift 865 sal_uInt16 nDataAreaCount; // Anzahl der Datenbereiche 866 ScArea** ppDataAreas; // Zeiger-Array auf Datenbereiche 867 sal_Bool bByCol; // nach Spalten 868 sal_Bool bByRow; // nach Zeilen 869 sal_Bool bReferenceData; // Quelldaten referenzieren 870 871 ScConsolidateParam(); 872 ScConsolidateParam( const ScConsolidateParam& r ); 873 ~ScConsolidateParam(); 874 875 ScConsolidateParam& operator= ( const ScConsolidateParam& r ); 876 sal_Bool operator== ( const ScConsolidateParam& r ) const; 877 void Clear (); // = ClearDataAreas()+Members 878 void ClearDataAreas (); 879 void SetAreas ( ScArea* const* ppAreas, sal_uInt16 nCount ); 880 }; 881 882 // ----------------------------------------------------------------------- 883 extern ::utl::TransliterationWrapper* GetScGlobalpTransliteration();//CHINA001 884 extern const LocaleDataWrapper* GetScGlobalpLocaleData(); 885 886 #endif 887