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 OOX_XLS_DRAWINGMANAGER_HXX 25 #define OOX_XLS_DRAWINGMANAGER_HXX 26 27 #include "oox/xls/drawingbase.hxx" 28 29 namespace com { namespace sun { namespace star { 30 namespace drawing { class XDrawPage; } 31 namespace drawing { class XShape; } 32 namespace drawing { class XShapes; } 33 } } } 34 35 namespace oox { namespace drawingml { class ShapePropertyMap; } } 36 37 namespace oox { 38 namespace xls { 39 40 // ============================================================================ 41 42 const sal_uInt16 BIFF_OBJ_INVALID_ID = 0; 43 44 // ============================================================================ 45 // Model structures for BIFF OBJ record data 46 // ============================================================================ 47 48 /** This structure contains line formatting attributes from an OBJ record. */ 49 struct BiffObjLineModel 50 { 51 sal_uInt8 mnColorIdx; /// Index into color palette. 52 sal_uInt8 mnStyle; /// Line dash style. 53 sal_uInt8 mnWidth; /// Line width. 54 bool mbAuto; /// True = automatic line format. 55 56 explicit BiffObjLineModel(); 57 58 /** Returns true, if the line formatting is visible (automatic or explicit). */ 59 bool isVisible() const; 60 }; 61 62 // ============================================================================ 63 64 /** This structure contains fill formatting attributes from an OBJ record. */ 65 struct BiffObjFillModel 66 { 67 sal_uInt8 mnBackColorIdx; /// Index to color palette for background color. 68 sal_uInt8 mnPattColorIdx; /// Index to color palette for pattern foreground color. 69 sal_uInt8 mnPattern; /// Fill pattern. 70 bool mbAuto; /// True = automatic fill format. 71 72 explicit BiffObjFillModel(); 73 74 /** Returns true, if the fill formatting is visible (automatic or explicit). */ 75 bool isFilled() const; 76 }; 77 78 // ============================================================================ 79 80 /** This structure contains text formatting attributes from an OBJ record. */ 81 struct BiffObjTextModel 82 { 83 sal_uInt16 mnTextLen; /// Length of the text (characters). 84 sal_uInt16 mnFormatSize; /// Size of the formatting array (bytes). 85 sal_uInt16 mnLinkSize; /// Size of the linked text formula (bytes). 86 sal_uInt16 mnDefFontId; /// Font index for default font formatting. 87 sal_uInt16 mnFlags; /// Additional flags. 88 sal_uInt16 mnOrientation; /// Text orientation. 89 sal_uInt16 mnButtonFlags; /// Additional flags for push buttons. 90 sal_uInt16 mnShortcut; /// Shortcut character. 91 sal_uInt16 mnShortcutEA; /// East-asian shortcut character. 92 93 explicit BiffObjTextModel(); 94 95 /** Reads text data from a BIFF3/BIFF4 OBJ record. */ 96 void readObj3( BiffInputStream& rStrm ); 97 /** Reads text data from a BIFF5 OBJ record. */ 98 void readObj5( BiffInputStream& rStrm ); 99 /** Reads text data from a BIFF8 TXO record. */ 100 void readTxo8( BiffInputStream& rStrm ); 101 102 /** Returns the horizontal alignment of the text. */ 103 sal_uInt8 getHorAlign() const; 104 /** Returns the vertical alignment of the text. */ 105 sal_uInt8 getVerAlign() const; 106 }; 107 108 // ============================================================================ 109 // BIFF drawing objects 110 // ============================================================================ 111 112 class BiffDrawingBase; 113 class BiffDrawingObjectBase; 114 typedef ::boost::shared_ptr< BiffDrawingObjectBase > BiffDrawingObjectRef; 115 116 // ---------------------------------------------------------------------------- 117 118 class BiffDrawingObjectContainer 119 { 120 public: 121 explicit BiffDrawingObjectContainer(); 122 123 /** Returns true, if the object list is empty. */ empty() const124 inline bool empty() const { return maObjects.empty(); } 125 126 /** Appends the passed object to the list of objects. */ 127 void append( const BiffDrawingObjectRef& rxDrawingObj ); 128 /** Tries to insert the passed object into the last group or appends it. */ 129 void insertGrouped( const BiffDrawingObjectRef& rxDrawingObj ); 130 131 /** Creates and inserts all UNO shapes into the passed shape container. */ 132 void convertAndInsert( BiffDrawingBase& rDrawing, 133 const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >& rxShapes, 134 const ::com::sun::star::awt::Rectangle* pParentRect = 0 ) const; 135 136 private: 137 typedef RefVector< BiffDrawingObjectBase > BiffDrawingObjectVector; 138 BiffDrawingObjectVector maObjects; 139 }; 140 141 // ============================================================================ 142 143 /** Base class for all BIFF drawing objects (OBJ records). */ 144 class BiffDrawingObjectBase : public WorksheetHelper 145 { 146 public: 147 explicit BiffDrawingObjectBase( const WorksheetHelper& rHelper ); 148 virtual ~BiffDrawingObjectBase(); 149 150 /** Reads the BIFF3 OBJ record, returns a new drawing object. */ 151 static BiffDrawingObjectRef importObjBiff3( const WorksheetHelper& rHelper, BiffInputStream& rStrm ); 152 /** Reads the BIFF4 OBJ record, returns a new drawing object. */ 153 static BiffDrawingObjectRef importObjBiff4( const WorksheetHelper& rHelper, BiffInputStream& rStrm ); 154 /** Reads the BIFF5 OBJ record, returns a new drawing object. */ 155 static BiffDrawingObjectRef importObjBiff5( const WorksheetHelper& rHelper, BiffInputStream& rStrm ); 156 /** Reads the BIFF8 OBJ record, returns a new drawing object. */ 157 static BiffDrawingObjectRef importObjBiff8( const WorksheetHelper& rHelper, BiffInputStream& rStrm ); 158 159 /** Sets whether this is an area object (then its width and height must be greater than 0). */ setAreaObj(bool bAreaObj)160 inline void setAreaObj( bool bAreaObj ) { mbAreaObj = bAreaObj; } 161 /** If set to true, the object supports a simple on-click macro and/or hyperlink. */ setSimpleMacro(bool bMacro)162 inline void setSimpleMacro( bool bMacro ) { mbSimpleMacro = bMacro; } 163 164 /** If set to false, the UNO shape will not be created, processed, or inserted into the draw page. */ setProcessShape(bool bProcess)165 inline void setProcessShape( bool bProcess ) { mbProcessShape = bProcess; } 166 /** If set to false, the UNO shape will be created or processed, but not be inserted into the draw page. */ setInsertShape(bool bInsert)167 inline void setInsertShape( bool bInsert ) { mbInsertShape = bInsert; } 168 /** If set to true, a new custom UNO shape will be created while in DFF import (BIFF8 only). */ setCustomDffObj(bool bCustom)169 inline void setCustomDffObj( bool bCustom ) { mbCustomDff = bCustom; } 170 171 /** Returns the object identifier from the OBJ record. */ getObjId() const172 inline sal_uInt16 getObjId() const { return mnObjId; } 173 /** Returns the object type from the OBJ record. */ getObjType() const174 inline sal_uInt16 getObjType() const { return mnObjType; } 175 176 /** Returns true, if the object is hidden. */ isHidden() const177 inline bool isHidden() const { return mbHidden; } 178 /** Returns true, if the object is visible. */ isVisible() const179 inline bool isVisible() const { return mbVisible; } 180 /** Returns true, if the object is printable. */ isPrintable() const181 inline bool isPrintable() const { return mbPrintable; } 182 183 /** Creates the UNO shape and inserts it into the passed shape container. */ 184 ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > 185 convertAndInsert( BiffDrawingBase& rDrawing, 186 const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >& rxShapes, 187 const ::com::sun::star::awt::Rectangle* pParentRect = 0 ) const; 188 189 protected: 190 /** Reads the object name in a BIFF5 OBJ record. */ 191 void readNameBiff5( BiffInputStream& rStrm, sal_uInt16 nNameLen ); 192 /** Reads the macro link in a BIFF3 OBJ record. */ 193 void readMacroBiff3( BiffInputStream& rStrm, sal_uInt16 nMacroSize ); 194 /** Reads the macro link in a BIFF4 OBJ record. */ 195 void readMacroBiff4( BiffInputStream& rStrm, sal_uInt16 nMacroSize ); 196 /** Reads the macro link in a BIFF5 OBJ record. */ 197 void readMacroBiff5( BiffInputStream& rStrm, sal_uInt16 nMacroSize ); 198 /** Reads the contents of the ftMacro sub structure in an OBJ record. */ 199 void readMacroBiff8( BiffInputStream& rStrm ); 200 201 /** Converts the passed line formatting to the passed property map. */ 202 void convertLineProperties( ::oox::drawingml::ShapePropertyMap& rPropMap, const BiffObjLineModel& rLineModel, sal_uInt16 nArrows = 0 ) const; 203 /** Converts the passed fill formatting to the passed property map. */ 204 void convertFillProperties( ::oox::drawingml::ShapePropertyMap& rPropMap, const BiffObjFillModel& rFillModel ) const; 205 /** Converts the passed frame flags to the passed property map. */ 206 void convertFrameProperties( ::oox::drawingml::ShapePropertyMap& rPropMap, sal_uInt16 nFrameFlags ) const; 207 208 /** Derived classes read the contents of the a BIFF3 OBJ record from the passed stream. */ 209 virtual void implReadObjBiff3( BiffInputStream& rStrm, sal_uInt16 nMacroSize ); 210 /** Derived classes read the contents of the a BIFF4 OBJ record from the passed stream. */ 211 virtual void implReadObjBiff4( BiffInputStream& rStrm, sal_uInt16 nMacroSize ); 212 /** Derived classes read the contents of the a BIFF5 OBJ record from the passed stream. */ 213 virtual void implReadObjBiff5( BiffInputStream& rStrm, sal_uInt16 nNameLen, sal_uInt16 nMacroSize ); 214 /** Derived classes read the contents of the specified subrecord of a BIFF8 OBJ record from stream. */ 215 virtual void implReadObjBiff8SubRec( BiffInputStream& rStrm, sal_uInt16 nSubRecId, sal_uInt16 nSubRecSize ); 216 217 /** Derived classes create the corresponding XShape and insert it into the passed container. */ 218 virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > 219 implConvertAndInsert( BiffDrawingBase& rDrawing, 220 const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >& rxShapes, 221 const ::com::sun::star::awt::Rectangle& rShapeRect ) const = 0; 222 223 private: 224 /** Reads the contents of a BIFF3 OBJ record. */ 225 void importObjBiff3( BiffInputStream& rStrm ); 226 /** Reads the contents of a BIFF4 OBJ record. */ 227 void importObjBiff4( BiffInputStream& rStrm ); 228 /** Reads the contents of a BIFF5 OBJ record. */ 229 void importObjBiff5( BiffInputStream& rStrm ); 230 /** Reads the contents of a BIFF8 OBJ record. */ 231 void importObjBiff8( BiffInputStream& rStrm ); 232 233 private: 234 ShapeAnchor maAnchor; /// Position of the drawing object. 235 ::rtl::OUString maObjName; /// Name of the object. 236 ::rtl::OUString maMacroName; /// Name of an attached macro. 237 ::rtl::OUString maHyperlink; /// On-click hyperlink URL. 238 sal_uInt32 mnDffShapeId; /// Shape identifier from DFF stream (BIFF8 only). 239 sal_uInt32 mnDffFlags; /// Shape flags from DFF stream. 240 sal_uInt16 mnObjId; /// The object identifier (unique per drawing). 241 sal_uInt16 mnObjType; /// The object type from OBJ record. 242 bool mbHasAnchor; /// True = anchor has been initialized. 243 bool mbHidden; /// True = object is hidden. 244 bool mbVisible; /// True = object is visible (form controls). 245 bool mbPrintable; /// True = object is printable. 246 bool mbAreaObj; /// True = width and height must be greater than 0. 247 bool mbAutoMargin; /// True = set automatic text margin. 248 bool mbSimpleMacro; /// True = create simple macro link and hyperlink. 249 bool mbProcessShape; /// True = object is valid, do processing and insertion. 250 bool mbInsertShape; /// True = insert the UNO shape into the draw page. 251 bool mbCustomDff; /// True = recreate UNO shape in DFF import (BIFF8 only). 252 }; 253 254 // ============================================================================ 255 256 /** A placeholder object for unknown/unsupported object types. */ 257 class BiffPlaceholderObject : public BiffDrawingObjectBase 258 { 259 public: 260 explicit BiffPlaceholderObject( const WorksheetHelper& rHelper ); 261 262 protected: 263 /** Creates the corresponding XShape and insert it into the passed container. */ 264 virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > 265 implConvertAndInsert( BiffDrawingBase& rDrawing, 266 const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >& rxShapes, 267 const ::com::sun::star::awt::Rectangle& rShapeRect ) const; 268 }; 269 270 // ============================================================================ 271 272 /** A group object that is able to contain other child objects. */ 273 class BiffGroupObject : public BiffDrawingObjectBase 274 { 275 public: 276 explicit BiffGroupObject( const WorksheetHelper& rHelper ); 277 278 /** Tries to insert the passed drawing object into this or a nested group. */ 279 bool tryInsert( const BiffDrawingObjectRef& rxDrawingObj ); 280 281 protected: 282 /** Reads the contents of the a BIFF3 OBJ record from the passed stream. */ 283 virtual void implReadObjBiff3( BiffInputStream& rStrm, sal_uInt16 nMacroSize ); 284 /** Reads the contents of the a BIFF4 OBJ record from the passed stream. */ 285 virtual void implReadObjBiff4( BiffInputStream& rStrm, sal_uInt16 nMacroSize ); 286 /** Reads the contents of the a BIFF5 OBJ record from the passed stream. */ 287 virtual void implReadObjBiff5( BiffInputStream& rStrm, sal_uInt16 nNameLen, sal_uInt16 nMacroSize ); 288 289 /** Creates the corresponding XShape and insert it into the passed container. */ 290 virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > 291 implConvertAndInsert( BiffDrawingBase& rDrawing, 292 const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >& rxShapes, 293 const ::com::sun::star::awt::Rectangle& rShapeRect ) const; 294 295 protected: 296 BiffDrawingObjectContainer maChildren; /// All child objects contained in this group object. 297 sal_uInt16 mnFirstUngrouped; /// Object identfier of first object not grouped into this group. 298 }; 299 300 // ============================================================================ 301 302 /** A simple line object. */ 303 class BiffLineObject : public BiffDrawingObjectBase 304 { 305 public: 306 explicit BiffLineObject( const WorksheetHelper& rHelper ); 307 308 protected: 309 /** Reads the contents of the a BIFF3 OBJ record from the passed stream. */ 310 virtual void implReadObjBiff3( BiffInputStream& rStrm, sal_uInt16 nMacroSize ); 311 /** Reads the contents of the a BIFF4 OBJ record from the passed stream. */ 312 virtual void implReadObjBiff4( BiffInputStream& rStrm, sal_uInt16 nMacroSize ); 313 /** Reads the contents of the a BIFF5 OBJ record from the passed stream. */ 314 virtual void implReadObjBiff5( BiffInputStream& rStrm, sal_uInt16 nNameLen, sal_uInt16 nMacroSize ); 315 316 /** Creates the corresponding XShape and insert it into the passed container. */ 317 virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > 318 implConvertAndInsert( BiffDrawingBase& rDrawing, 319 const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >& rxShapes, 320 const ::com::sun::star::awt::Rectangle& rShapeRect ) const; 321 322 protected: 323 BiffObjLineModel maLineModel; /// Line formatting. 324 sal_uInt16 mnArrows; /// Line arrows. 325 sal_uInt8 mnStartPoint; /// Starting point. 326 }; 327 328 // ============================================================================ 329 330 /** A simple rectangle object (used as base class for oval objects). */ 331 class BiffRectObject : public BiffDrawingObjectBase 332 { 333 public: 334 explicit BiffRectObject( const WorksheetHelper& rHelper ); 335 336 protected: 337 /** Reads the fill model, the line model, and frame flags. */ 338 void readFrameData( BiffInputStream& rStrm ); 339 340 /** Converts fill formatting, line formatting, and frame style. */ 341 void convertRectProperties( ::oox::drawingml::ShapePropertyMap& rPropMap ) const; 342 343 /** Reads the contents of the a BIFF3 OBJ record from the passed stream. */ 344 virtual void implReadObjBiff3( BiffInputStream& rStrm, sal_uInt16 nMacroSize ); 345 /** Reads the contents of the a BIFF4 OBJ record from the passed stream. */ 346 virtual void implReadObjBiff4( BiffInputStream& rStrm, sal_uInt16 nMacroSize ); 347 /** Reads the contents of the a BIFF5 OBJ record from the passed stream. */ 348 virtual void implReadObjBiff5( BiffInputStream& rStrm, sal_uInt16 nNameLen, sal_uInt16 nMacroSize ); 349 350 /** Creates the corresponding XShape and insert it into the passed container. */ 351 virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > 352 implConvertAndInsert( BiffDrawingBase& rDrawing, 353 const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >& rxShapes, 354 const ::com::sun::star::awt::Rectangle& rShapeRect ) const; 355 356 protected: 357 BiffObjFillModel maFillModel; /// Fill formatting. 358 BiffObjLineModel maLineModel; /// Line formatting. 359 sal_uInt16 mnFrameFlags; /// Additional flags. 360 }; 361 362 // ============================================================================ 363 364 /** A simple oval object. */ 365 class BiffOvalObject : public BiffRectObject 366 { 367 public: 368 explicit BiffOvalObject( const WorksheetHelper& rHelper ); 369 370 protected: 371 /** Creates the corresponding XShape and insert it into the passed container. */ 372 virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > 373 implConvertAndInsert( BiffDrawingBase& rDrawing, 374 const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >& rxShapes, 375 const ::com::sun::star::awt::Rectangle& rShapeRect ) const; 376 }; 377 378 // ============================================================================ 379 380 /** A simple arc object. */ 381 class BiffArcObject : public BiffDrawingObjectBase 382 { 383 public: 384 explicit BiffArcObject( const WorksheetHelper& rHelper ); 385 386 protected: 387 /** Reads the contents of the a BIFF3 OBJ record from the passed stream. */ 388 virtual void implReadObjBiff3( BiffInputStream& rStrm, sal_uInt16 nMacroSize ); 389 /** Reads the contents of the a BIFF4 OBJ record from the passed stream. */ 390 virtual void implReadObjBiff4( BiffInputStream& rStrm, sal_uInt16 nMacroSize ); 391 /** Reads the contents of the a BIFF5 OBJ record from the passed stream. */ 392 virtual void implReadObjBiff5( BiffInputStream& rStrm, sal_uInt16 nNameLen, sal_uInt16 nMacroSize ); 393 394 /** Creates the corresponding XShape and insert it into the passed container. */ 395 virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > 396 implConvertAndInsert( BiffDrawingBase& rDrawing, 397 const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >& rxShapes, 398 const ::com::sun::star::awt::Rectangle& rShapeRect ) const; 399 400 protected: 401 BiffObjFillModel maFillModel; /// Fill formatting. 402 BiffObjLineModel maLineModel; /// Line formatting. 403 sal_uInt8 mnQuadrant; /// Visible quadrant of the circle. 404 }; 405 406 // ============================================================================ 407 408 /** A simple polygon object. */ 409 class BiffPolygonObject : public BiffRectObject 410 { 411 public: 412 explicit BiffPolygonObject( const WorksheetHelper& rHelper ); 413 414 protected: 415 /** Reads the contents of the a BIFF4 OBJ record from the passed stream. */ 416 virtual void implReadObjBiff4( BiffInputStream& rStrm, sal_uInt16 nMacroSize ); 417 /** Reads the contents of the a BIFF5 OBJ record from the passed stream. */ 418 virtual void implReadObjBiff5( BiffInputStream& rStrm, sal_uInt16 nNameLen, sal_uInt16 nMacroSize ); 419 420 /** Creates the corresponding XShape and insert it into the passed container. */ 421 virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > 422 implConvertAndInsert( BiffDrawingBase& rDrawing, 423 const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >& rxShapes, 424 const ::com::sun::star::awt::Rectangle& rShapeRect ) const; 425 426 private: 427 /** Reads the COORDLIST record following the OBJ record. */ 428 void importCoordList( BiffInputStream& rStrm ); 429 430 protected: 431 typedef ::std::vector< ::com::sun::star::awt::Point > PointVector; 432 PointVector maCoords; /// Coordinates relative to bounding rectangle. 433 sal_uInt16 mnPolyFlags; /// Additional flags. 434 sal_uInt16 mnPointCount; /// Polygon point count. 435 }; 436 437 // ============================================================================ 438 // BIFF drawing page 439 // ============================================================================ 440 441 /** Base class for a container for all objects on a drawing page (in a 442 spreadsheet or in an embedded chart object). 443 444 For BIFF import, it is needed to load all drawing objects before converting 445 them to UNO shapes. There might be some dummy drawing objects (e.g. the 446 dropdown buttons of autofilters) which have to be skipped. The information, 447 that a drawing object is a dummy object, may be located after the drawing 448 objects themselves. 449 450 The BIFF8 format stores drawing objects in the DFF stream (stored 451 fragmented in MSODRAWING records), and in the OBJ records. The DFF stream 452 fragments are collected in a single stream, and the complete stream will be 453 processed afterwards. 454 */ 455 class BiffDrawingBase : public WorksheetHelper 456 { 457 public: 458 explicit BiffDrawingBase( const WorksheetHelper& rHelper, 459 const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage >& rxDrawPage ); 460 461 /** Imports a plain OBJ record (without leading DFF data). */ 462 void importObj( BiffInputStream& rStrm ); 463 /** Sets the object with the passed identifier to be skipped on import. */ 464 void setSkipObj( sal_uInt16 nObjId ); 465 466 /** Final processing after import of the all drawing objects. */ 467 void finalizeImport(); 468 469 /** Creates a new UNO shape object, inserts it into the passed UNO shape 470 container, and sets the shape position and size. */ 471 ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > 472 createAndInsertXShape( 473 const ::rtl::OUString& rService, 474 const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >& rxShapes, 475 const ::com::sun::star::awt::Rectangle& rShapeRect ) const; 476 477 /** Derived classes may want to know that a shape has been inserted. Will 478 be called from the convertAndInsert() implementation. */ 479 virtual void notifyShapeInserted( 480 const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& rxShape, 481 const ::com::sun::star::awt::Rectangle& rShapeRect ) = 0; 482 483 protected: 484 /** Appends a new drawing object to the list of raw objects (without DFF data). */ 485 void appendRawObject( const BiffDrawingObjectRef& rxDrawingObj ); 486 487 private: 488 typedef RefMap< sal_uInt16, BiffDrawingObjectBase > BiffDrawingObjectMapById; 489 typedef ::std::vector< sal_uInt16 > BiffObjIdVector; 490 491 ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage > 492 mxDrawPage; /// UNO draw page used to insert the shapes. 493 BiffDrawingObjectContainer maRawObjs; /// Drawing objects without DFF data. 494 BiffDrawingObjectMapById maObjMapId; /// Maps drawing objects by their object identifiers. 495 BiffObjIdVector maSkipObjs; /// Identifiers of all objects to be skipped. 496 }; 497 498 // ---------------------------------------------------------------------------- 499 500 /** Drawing manager of a single sheet. */ 501 class BiffSheetDrawing : public BiffDrawingBase 502 { 503 public: 504 explicit BiffSheetDrawing( const WorksheetHelper& rHelper ); 505 506 /** Called when a new UNO shape has been inserted into the draw page. */ 507 virtual void notifyShapeInserted( 508 const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& rxShape, 509 const ::com::sun::star::awt::Rectangle& rShapeRect ); 510 }; 511 512 // ============================================================================ 513 514 } // namespace xls 515 } // namespace oox 516 517 #endif 518