summaryrefslogtreecommitdiff
path: root/filter
diff options
context:
space:
mode:
authorMuthu Subramanian <sumuthu@suse.com>2013-03-08 17:30:40 +0530
committerPetr Mladek <pmladek@suse.cz>2013-05-09 09:41:45 +0200
commita4ca67596c3896db2dbcfafc20f9b845b852636d (patch)
tree2f78f7e84e29778fd1c528949a51fb5ab9bed483 /filter
parent33d37468d07ae9f298c97797712a088562e686cd (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.hxx4
-rw-r--r--filter/source/msfilter/msdffimp.cxx31
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 )