diff options
author | Muthu Subramanian <sumuthu@suse.com> | 2013-03-08 17:30:40 +0530 |
---|---|---|
committer | Muthu Subramanian <sumuthu@suse.com> | 2013-03-08 17:32:21 +0530 |
commit | 2f3e1c77b2e2304f9a718d35f6b12daef261e2c1 (patch) | |
tree | f564ba1c66b2f63d39c3d66441b631b64b69e0d3 /filter | |
parent | 2e00860260815c075ce32de052dc7fa98021c95d (diff) |
n#699334: Legacy diagram import (PPTX).
Minimalistic implementation.
Had to rework on some parts because of the rebasing.
Diffstat (limited to 'filter')
-rw-r--r-- | filter/inc/filter/msfilter/msdffimp.hxx | 4 | ||||
-rw-r--r-- | filter/source/msfilter/msdffimp.cxx | 31 |
2 files changed, 33 insertions, 2 deletions
diff --git a/filter/inc/filter/msfilter/msdffimp.hxx b/filter/inc/filter/msfilter/msdffimp.hxx index 8e625d474ecd..6359277f49f4 100644 --- a/filter/inc/filter/msfilter/msdffimp.hxx +++ b/filter/inc/filter/msfilter/msdffimp.hxx @@ -67,6 +67,7 @@ struct SvxMSDffShapeOrder; class SvxMSDffManager; class SfxItemSet; class SdrObject; +class SdrTextObj; struct DffObjData; class MSFILTER_DLLPUBLIC DffPropertyReader : public DffPropSet @@ -503,7 +504,7 @@ protected : // Fontwork objects use a new implementation of ReadObjText because the old // one does not properly import multiple paragraphs. - void ReadObjText( const OUString& rText, SdrObject* pObj ) const; + static void ReadObjText( const OUString& rText, SdrObject* pObj ); // the following method needs to be overridden for the import of OLE objects virtual sal_Bool GetOLEStorageName( long nOLEId, @@ -600,6 +601,7 @@ public: void SetSvxMSDffSettings( sal_uInt32 nSettings ) { nSvxMSDffSettings = nSettings; }; static sal_Bool MakeContentStream( SotStorage * pStor, const GDIMetaFile & ); + static void ReadObjText( SvStream& rStream, SdrObject* pObj ); static sal_Bool ConvertToOle2( SvStream& rStm, sal_uInt32 nLen, const GDIMetaFile*, diff --git a/filter/source/msfilter/msdffimp.cxx b/filter/source/msfilter/msdffimp.cxx index 41fe692fb620..6ead1ee08558 100644 --- a/filter/source/msfilter/msdffimp.cxx +++ b/filter/source/msfilter/msdffimp.cxx @@ -3444,10 +3444,39 @@ Color SvxMSDffManager::MSO_CLR_ToColor( sal_uInt32 nColorCode, sal_uInt16 nConte return aColor; } +void SvxMSDffManager::ReadObjText( SvStream& rStream, SdrObject* pObj ) +{ + DffRecordHeader aRecHd; + rStream >> aRecHd; + if( aRecHd.nRecType == DFF_msofbtClientTextbox || aRecHd.nRecType == 0x1022 ) + { + while( rStream.GetError() == 0 && rStream.Tell() < aRecHd.GetRecEndFilePos() ) + { + DffRecordHeader aHd; + rStream >> aHd; + switch( aHd.nRecType ) + { + case DFF_PST_TextBytesAtom: + case DFF_PST_TextCharsAtom: + { + bool bUniCode = ( aHd.nRecType == DFF_PST_TextCharsAtom ); + sal_uInt32 nBytes = aHd.nRecLen; + String aStr = MSDFFReadZString( rStream, nBytes, bUniCode ); + ReadObjText( aStr, pObj ); + } + break; + default: + break; + } + aHd.SeekToEndOfRecord( rStream ); + } + } +} + // sj: I just want to set a string for a text object that may contain multiple // paragraphs. If I now take a look at the follwing code I get the impression that // our outliner is too complicate to be used properly, -void SvxMSDffManager::ReadObjText( const OUString& rText, SdrObject* pObj ) const +void SvxMSDffManager::ReadObjText( const OUString& rText, SdrObject* pObj ) { SdrTextObj* pText = PTR_CAST( SdrTextObj, pObj ); if ( pText ) |