diff options
author | Muthu Subramanian <sumuthu@suse.com> | 2013-03-08 17:30:40 +0530 |
---|---|---|
committer | Petr Mladek <pmladek@suse.cz> | 2013-05-09 09:41:45 +0200 |
commit | a4ca67596c3896db2dbcfafc20f9b845b852636d (patch) | |
tree | 2f78f7e84e29778fd1c528949a51fb5ab9bed483 /filter | |
parent | 33d37468d07ae9f298c97797712a088562e686cd (diff) |
n#699334: Legacy diagram import (PPTX).
Minimalistic implementation.
Had to rework on some parts because of the rebasing.
Conflicts:
filter/inc/filter/msfilter/msdffimp.hxx
filter/source/msfilter/msdffimp.cxx
Change-Id: Ic5710e523bde782ecbd8222ec53d99c7f6d2d432
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 020655ee82e5..60a6cc70891d 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 String& rText, SdrObject* pObj ) const; + static void ReadObjText( const String& 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 381311259b2a..c2b67c568a4d 100644 --- a/filter/source/msfilter/msdffimp.cxx +++ b/filter/source/msfilter/msdffimp.cxx @@ -3456,10 +3456,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 String& rText, SdrObject* pObj ) const +void SvxMSDffManager::ReadObjText( const String& rText, SdrObject* pObj ) { SdrTextObj* pText = PTR_CAST( SdrTextObj, pObj ); if ( pText ) |