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_SCATTR_HXX 29 #define SC_SCATTR_HXX 30 31 #include <svl/poolitem.hxx> 32 #include <svl/intitem.hxx> 33 #include <svl/eitem.hxx> 34 #include "scdllapi.h" 35 #include "global.hxx" 36 #include "address.hxx" 37 38 //------------------------------------------------------------------------ 39 40 // Flags fuer durch Merge verdeckte Zellen 41 // und Control fuer Auto-Filter 42 #define SC_MF_HOR 0x0001 43 #define SC_MF_VER 0x0002 44 #define SC_MF_AUTO 0x0004 /// autofilter arrow 45 #define SC_MF_BUTTON 0x0008 /// field button for datapilot 46 #define SC_MF_SCENARIO 0x0010 47 #define SC_MF_BUTTON_POPUP 0x0020 /// dp button with popup arrow 48 #define SC_MF_HIDDEN_MEMBER 0x0040 /// dp field button with presence of hidden member 49 #define SC_MF_DP_TABLE 0x0080 /// dp table output 50 51 #define SC_MF_ALL 0x00FF 52 53 54 class EditTextObject; 55 class SvxBorderLine; 56 57 sal_Bool SC_DLLPUBLIC ScHasPriority( const SvxBorderLine* pThis, const SvxBorderLine* pOther ); 58 59 //------------------------------------------------------------------------ 60 61 class SC_DLLPUBLIC ScMergeAttr: public SfxPoolItem 62 { 63 SCsCOL nColMerge; 64 SCsROW nRowMerge; 65 public: 66 TYPEINFO(); 67 ScMergeAttr(); 68 ScMergeAttr( SCsCOL nCol, SCsROW nRow = 0); 69 ScMergeAttr( const ScMergeAttr& ); 70 ~ScMergeAttr(); 71 72 virtual String GetValueText() const; 73 74 virtual int operator==( const SfxPoolItem& ) const; 75 virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; 76 virtual SfxPoolItem* Create( SvStream& rStream, sal_uInt16 nVer ) const; 77 78 SCsCOL GetColMerge() const {return nColMerge; } 79 SCsROW GetRowMerge() const {return nRowMerge; } 80 81 sal_Bool IsMerged() const { return nColMerge>1 || nRowMerge>1; } 82 83 inline ScMergeAttr& operator=(const ScMergeAttr& rMerge) 84 { 85 nColMerge = rMerge.nColMerge; 86 nRowMerge = rMerge.nRowMerge; 87 return *this; 88 } 89 }; 90 91 //------------------------------------------------------------------------ 92 93 class SC_DLLPUBLIC ScMergeFlagAttr: public SfxInt16Item 94 { 95 public: 96 ScMergeFlagAttr(); 97 ScMergeFlagAttr(sal_Int16 nFlags); 98 ~ScMergeFlagAttr(); 99 100 sal_Bool IsHorOverlapped() const { return ( GetValue() & SC_MF_HOR ) != 0; } 101 sal_Bool IsVerOverlapped() const { return ( GetValue() & SC_MF_VER ) != 0; } 102 sal_Bool IsOverlapped() const { return ( GetValue() & ( SC_MF_HOR | SC_MF_VER ) ) != 0; } 103 104 sal_Bool HasAutoFilter() const { return ( GetValue() & SC_MF_AUTO ) != 0; } 105 sal_Bool HasButton() const { return ( GetValue() & SC_MF_BUTTON ) != 0; } 106 bool HasDPTable() const { return ( GetValue() & SC_MF_DP_TABLE ) != 0; } 107 108 sal_Bool IsScenario() const { return ( GetValue() & SC_MF_SCENARIO ) != 0; } 109 }; 110 111 //------------------------------------------------------------------------ 112 class SC_DLLPUBLIC ScProtectionAttr: public SfxPoolItem 113 { 114 sal_Bool bProtection; // Zelle schuetzen 115 sal_Bool bHideFormula; // Formel nicht Anzeigen 116 sal_Bool bHideCell; // Zelle nicht Anzeigen 117 sal_Bool bHidePrint; // Zelle nicht Ausdrucken 118 public: 119 TYPEINFO(); 120 ScProtectionAttr(); 121 ScProtectionAttr( sal_Bool bProtect, 122 sal_Bool bHFormula = sal_False, 123 sal_Bool bHCell = sal_False, 124 sal_Bool bHPrint = sal_False); 125 ScProtectionAttr( const ScProtectionAttr& ); 126 ~ScProtectionAttr(); 127 128 virtual String GetValueText() const; 129 virtual SfxItemPresentation GetPresentation( 130 SfxItemPresentation ePres, 131 SfxMapUnit eCoreMetric, 132 SfxMapUnit ePresMetric, 133 String& rText, 134 const IntlWrapper* pIntl = 0 ) const; 135 136 virtual int operator==( const SfxPoolItem& ) const; 137 virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; 138 virtual SfxPoolItem* Create( SvStream& rStream, sal_uInt16 nVer ) const; 139 140 virtual sal_Bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ) const; 141 virtual sal_Bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ); 142 143 sal_Bool GetProtection() const { return bProtection; } 144 sal_Bool SetProtection( sal_Bool bProtect); 145 sal_Bool GetHideFormula() const { return bHideFormula; } 146 sal_Bool SetHideFormula( sal_Bool bHFormula); 147 sal_Bool GetHideCell() const { return bHideCell; } 148 sal_Bool SetHideCell( sal_Bool bHCell); 149 sal_Bool GetHidePrint() const { return bHidePrint; } 150 sal_Bool SetHidePrint( sal_Bool bHPrint); 151 inline ScProtectionAttr& operator=(const ScProtectionAttr& rProtection) 152 { 153 bProtection = rProtection.bProtection; 154 bHideFormula = rProtection.bHideFormula; 155 bHideCell = rProtection.bHideCell; 156 bHidePrint = rProtection.bHidePrint; 157 return *this; 158 } 159 }; 160 161 162 //---------------------------------------------------------------------------- 163 // ScRangeItem: verwaltet einen Tabellenbereich 164 165 #define SCR_INVALID 0x01 166 #define SCR_ALLTABS 0x02 167 #define SCR_TONEWTAB 0x04 168 169 class ScRangeItem : public SfxPoolItem 170 { 171 public: 172 TYPEINFO(); 173 174 inline ScRangeItem( const sal_uInt16 nWhich ); 175 inline ScRangeItem( const sal_uInt16 nWhich, 176 const ScRange& rRange, 177 const sal_uInt16 nNewFlags = 0 ); 178 inline ScRangeItem( const ScRangeItem& rCpy ); 179 180 inline ScRangeItem& operator=( const ScRangeItem &rCpy ); 181 182 // "pure virtual Methoden" vom SfxPoolItem 183 virtual int operator==( const SfxPoolItem& ) const; 184 virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, 185 SfxMapUnit eCoreMetric, 186 SfxMapUnit ePresMetric, 187 String &rText, 188 const IntlWrapper* pIntl = 0 ) const; 189 virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; 190 191 const ScRange& GetRange() const { return aRange; } 192 void SetRange( const ScRange& rNew ) { aRange = rNew; } 193 194 sal_uInt16 GetFlags() const { return nFlags; } 195 void SetFlags( sal_uInt16 nNew ) { nFlags = nNew; } 196 197 private: 198 ScRange aRange; 199 sal_uInt16 nFlags; 200 }; 201 202 inline ScRangeItem::ScRangeItem( const sal_uInt16 nWhichP ) 203 : SfxPoolItem( nWhichP ), nFlags( SCR_INVALID ) // == ungueltige Area 204 { 205 } 206 207 inline ScRangeItem::ScRangeItem( const sal_uInt16 nWhichP, 208 const ScRange& rRange, 209 const sal_uInt16 nNew ) 210 : SfxPoolItem( nWhichP ), aRange( rRange ), nFlags( nNew ) 211 { 212 } 213 214 inline ScRangeItem::ScRangeItem( const ScRangeItem& rCpy ) 215 : SfxPoolItem( rCpy.Which() ), aRange( rCpy.aRange ), nFlags( rCpy.nFlags ) 216 {} 217 218 inline ScRangeItem& ScRangeItem::operator=( const ScRangeItem &rCpy ) 219 { 220 aRange = rCpy.aRange; 221 return *this; 222 } 223 224 //---------------------------------------------------------------------------- 225 // ScTableListItem: verwaltet eine Liste von Tabellen 226 //---------------------------------------------------------------------------- 227 class ScTableListItem : public SfxPoolItem 228 { 229 public: 230 TYPEINFO(); 231 232 inline ScTableListItem( const sal_uInt16 nWhich ); 233 ScTableListItem( const ScTableListItem& rCpy ); 234 //UNUSED2008-05 ScTableListItem( const sal_uInt16 nWhich, const List& rList ); 235 ~ScTableListItem(); 236 237 ScTableListItem& operator=( const ScTableListItem &rCpy ); 238 239 // "pure virtual Methoden" vom SfxPoolItem 240 virtual int operator==( const SfxPoolItem& ) const; 241 virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, 242 SfxMapUnit eCoreMetric, 243 SfxMapUnit ePresMetric, 244 String &rText, 245 const IntlWrapper* pIntl = 0 ) const; 246 virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; 247 248 //UNUSED2009-05 sal_Bool GetTableList( List& aList ) const; 249 //UNUSED2009-05 void SetTableList( const List& aList ); 250 251 public: 252 sal_uInt16 nCount; 253 SCTAB* pTabArr; 254 }; 255 256 inline ScTableListItem::ScTableListItem( const sal_uInt16 nWhichP ) 257 : SfxPoolItem(nWhichP), nCount(0), pTabArr(NULL) 258 {} 259 260 //---------------------------------------------------------------------------- 261 // Seitenformat-Item: Kopf-/Fusszeileninhalte 262 263 #define SC_HF_LEFTAREA 1 264 #define SC_HF_CENTERAREA 2 265 #define SC_HF_RIGHTAREA 3 266 267 class SC_DLLPUBLIC ScPageHFItem : public SfxPoolItem 268 { 269 EditTextObject* pLeftArea; 270 EditTextObject* pCenterArea; 271 EditTextObject* pRightArea; 272 273 public: 274 TYPEINFO(); 275 ScPageHFItem( sal_uInt16 nWhich ); 276 ScPageHFItem( const ScPageHFItem& rItem ); 277 ~ScPageHFItem(); 278 279 virtual String GetValueText() const; 280 virtual int operator==( const SfxPoolItem& ) const; 281 virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; 282 283 virtual SfxPoolItem* Create( SvStream& rStream, sal_uInt16 nVer ) const; 284 285 virtual sal_Bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ) const; 286 virtual sal_Bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ); 287 288 const EditTextObject* GetLeftArea() const { return pLeftArea; } 289 const EditTextObject* GetCenterArea() const { return pCenterArea; } 290 const EditTextObject* GetRightArea() const { return pRightArea; } 291 292 void SetLeftArea( const EditTextObject& rNew ); 293 void SetCenterArea( const EditTextObject& rNew ); 294 void SetRightArea( const EditTextObject& rNew ); 295 296 //Set mit Uebereignung der Pointer, nArea siehe defines oben 297 void SetArea( EditTextObject *pNew, int nArea ); 298 }; 299 300 301 //---------------------------------------------------------------------------- 302 // Seitenformat-Item: Kopf-/Fusszeileninhalte 303 304 class SC_DLLPUBLIC ScViewObjectModeItem: public SfxEnumItem 305 { 306 public: 307 TYPEINFO(); 308 309 ScViewObjectModeItem( sal_uInt16 nWhich ); 310 ScViewObjectModeItem( sal_uInt16 nWhich, ScVObjMode eMode ); 311 ~ScViewObjectModeItem(); 312 313 virtual sal_uInt16 GetValueCount() const; 314 virtual String GetValueText( sal_uInt16 nVal ) const; 315 virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; 316 virtual SfxPoolItem* Create(SvStream &, sal_uInt16) const; 317 virtual sal_uInt16 GetVersion( sal_uInt16 nFileVersion ) const; 318 virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, 319 SfxMapUnit eCoreMetric, 320 SfxMapUnit ePresMetric, 321 String& rText, 322 const IntlWrapper* pIntl = 0 ) const; 323 }; 324 325 //---------------------------------------------------------------------------- 326 // 327 328 class ScDoubleItem : public SfxPoolItem 329 { 330 public: 331 TYPEINFO(); 332 ScDoubleItem( sal_uInt16 nWhich, double nVal=0 ); 333 ScDoubleItem( const ScDoubleItem& rItem ); 334 ~ScDoubleItem(); 335 336 virtual String GetValueText() const; 337 virtual int operator==( const SfxPoolItem& ) const; 338 virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; 339 340 virtual SfxPoolItem* Create( SvStream& rStream, sal_uInt16 nVer ) const; 341 342 double GetValue() const { return nValue; } 343 344 void SetValue( const double nVal ) { nValue = nVal;} 345 346 private: 347 double nValue; 348 }; 349 350 351 // ============================================================================ 352 353 /** Member ID for "page scale to width" value in QueryValue() and PutValue(). */ 354 const sal_uInt8 SC_MID_PAGE_SCALETO_WIDTH = 1; 355 /** Member ID for "page scale to height" value in QueryValue() and PutValue(). */ 356 const sal_uInt8 SC_MID_PAGE_SCALETO_HEIGHT = 2; 357 358 359 /** Contains the "scale to width/height" attribute in page styles. */ 360 class SC_DLLPUBLIC ScPageScaleToItem : public SfxPoolItem 361 { 362 public: 363 TYPEINFO(); 364 365 /** Default c'tor sets the width and height to 0. */ 366 explicit ScPageScaleToItem(); 367 explicit ScPageScaleToItem( sal_uInt16 nWidth, sal_uInt16 nHeight ); 368 369 virtual ~ScPageScaleToItem(); 370 371 virtual ScPageScaleToItem* Clone( SfxItemPool* = 0 ) const; 372 373 virtual int operator==( const SfxPoolItem& rCmp ) const; 374 375 inline sal_uInt16 GetWidth() const { return mnWidth; } 376 inline sal_uInt16 GetHeight() const { return mnHeight; } 377 inline bool IsValid() const { return mnWidth || mnHeight; } 378 379 inline void SetWidth( sal_uInt16 nWidth ) { mnWidth = nWidth; } 380 inline void SetHeight( sal_uInt16 nHeight ) { mnHeight = nHeight; } 381 inline void Set( sal_uInt16 nWidth, sal_uInt16 nHeight ) 382 { mnWidth = nWidth; mnHeight = nHeight; } 383 inline void SetInvalid() { mnWidth = mnHeight = 0; } 384 385 virtual SfxItemPresentation GetPresentation( 386 SfxItemPresentation ePresentation, 387 SfxMapUnit, SfxMapUnit, 388 XubString& rText, 389 const IntlWrapper* = 0 ) const; 390 391 virtual sal_Bool QueryValue( ::com::sun::star::uno::Any& rAny, sal_uInt8 nMemberId = 0 ) const; 392 virtual sal_Bool PutValue( const ::com::sun::star::uno::Any& rAny, sal_uInt8 nMemberId = 0 ); 393 394 private: 395 sal_uInt16 mnWidth; 396 sal_uInt16 mnHeight; 397 }; 398 399 // ============================================================================ 400 401 #endif 402 403