[PATCH] fix fdo#47018 Impress pasting destroy bullet

Cao Cuong Ngo (via Code Review) gerrit at gerrit.libreoffice.org
Fri Apr 19 03:31:39 PDT 2013


Hi,

I have submitted a patch for review:

    https://gerrit.libreoffice.org/3479

To pull it, you can do:

    git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/79/3479/1

fix fdo#47018 Impress pasting destroy bullet

Implements the attributes loading from SvStream in pasting.

This is a modification of commit a95cce27295f9cd255fa72eaded00972e3efb69b
which has been reverted in commit 98d594abd42c5aa33d6981f4dd19582c2d345705
due to unnecessary change in editeng/source/items/frmitems.cxx

Change-Id: I11ba65f8a4972ab1a6d4f30337a0a779f22cdd35
---
M editeng/inc/editeng/numitem.hxx
M editeng/source/items/numitem.cxx
2 files changed, 106 insertions(+), 28 deletions(-)



diff --git a/editeng/inc/editeng/numitem.hxx b/editeng/inc/editeng/numitem.hxx
index 86f4aef..546f82d 100644
--- a/editeng/inc/editeng/numitem.hxx
+++ b/editeng/inc/editeng/numitem.hxx
@@ -157,10 +157,12 @@
     explicit SvxNumberFormat( sal_Int16 nNumberingType,
                      SvxNumPositionAndSpaceMode ePositionAndSpaceMode = LABEL_WIDTH_AND_POSITION );
     SvxNumberFormat(const SvxNumberFormat& rFormat);
+    SvxNumberFormat( SvStream & rStream );
 
     virtual ~SvxNumberFormat();
 
-    SvStream&       Store(SvStream &rStream, FontToSubsFontConverter pConverter);
+    SvStream&       Store(SvStream &rStream);
+    SvxNumberFormat* Create(SvStream& rStream );
 
     SvxNumberFormat& operator=( const SvxNumberFormat&  );
     sal_Bool            operator==( const SvxNumberFormat&  ) const;
@@ -252,6 +254,7 @@
                         eDefaultNumberFormatPositionAndSpaceMode
                                 = SvxNumberFormat::LABEL_WIDTH_AND_POSITION );
     SvxNumRule(const SvxNumRule& rCopy);
+    SvxNumRule(SvStream &rStream);
     virtual ~SvxNumRule();
 
     int                     operator==( const SvxNumRule& ) const;
@@ -260,7 +263,7 @@
     SvxNumRule&             operator=( const SvxNumRule&  );
 
     SvStream&               Store(SvStream &rStream);
-
+    SvxNumRule*             Create(SvStream &rStream);
     const SvxNumberFormat*  Get(sal_uInt16 nLevel)const;
     const SvxNumberFormat&  GetLevel(sal_uInt16 nLevel)const;
     void                    SetLevel(sal_uInt16 nLevel, const SvxNumberFormat& rFmt, sal_Bool bIsValid = sal_True);
@@ -294,9 +297,9 @@
     virtual ~SvxNumBulletItem();
 
     virtual SfxPoolItem*     Clone( SfxItemPool *pPool = 0 ) const;
-    virtual SfxPoolItem*     Create(SvStream &, sal_uInt16) const;
+    virtual SfxPoolItem*     Create(SvStream &rStream, sal_uInt16 nItemVersion) const;
     sal_uInt16  GetVersion( sal_uInt16 nFileVersion ) const;
-    virtual SvStream&        Store(SvStream &, sal_uInt16 nItemVersion ) const;
+    virtual SvStream&        Store(SvStream &rStream, sal_uInt16 nItemVersion ) const;
     virtual int              operator==( const SfxPoolItem& ) const;
 
     SvxNumRule*             GetNumRule() const {return pNumRule;}
diff --git a/editeng/source/items/numitem.cxx b/editeng/source/items/numitem.cxx
index 7c3ec9c..32b0d96 100644
--- a/editeng/source/items/numitem.cxx
+++ b/editeng/source/items/numitem.cxx
@@ -28,6 +28,7 @@
 #include <editeng/editids.hrc>
 #include <editeng/editrids.hrc>
 #include <editeng/numdef.hxx>
+#include <editeng/eeitem.hxx>
 #include <vcl/graph.hxx>
 #include <vcl/window.hxx>
 #include <vcl/svapp.hxx>
@@ -177,21 +178,67 @@
     *this = rFormat;
 }
 
+SvxNumberFormat::SvxNumberFormat( SvStream &rStream )
+{
+    sal_uInt16 nTmp16;
+    sal_Int32  nTmp32;
+    rStream >> nTmp16; // Version number
+
+    rStream >> nTmp16; SetNumberingType( nTmp16 );
+    rStream >> nTmp16; eNumAdjust = ( SvxAdjust )nTmp16;
+    rStream >> nTmp16; nInclUpperLevels = nTmp16;
+    rStream >> nStart;
+    rStream >> nTmp16; cBullet = (sal_Unicode)nTmp16;
+
+    rStream >> nFirstLineOffset;
+    rStream >> nAbsLSpace;
+    rStream >> nLSpace;
+
+    rStream >> nCharTextDistance;
+
+    sPrefix = rStream.ReadUniOrByteString( rStream.GetStreamCharSet() );
+    sSuffix = rStream.ReadUniOrByteString( rStream.GetStreamCharSet() );
+    sCharStyleName = rStream.ReadUniOrByteString( rStream.GetStreamCharSet() );
+
+    sal_uInt16 hasGraphicBrush = 0;
+    rStream >> hasGraphicBrush;
+    if ( hasGraphicBrush )
+    {
+        pGraphicBrush = new SvxBrushItem( SID_ATTR_BRUSH );
+        pGraphicBrush = (SvxBrushItem*)(pGraphicBrush->Create( rStream, BRUSH_GRAPHIC_VERSION ));
+    }
+    else pGraphicBrush = 0;
+    rStream >> nTmp16; eVertOrient = nTmp16;
+
+    sal_uInt16 hasBulletFont = 0;
+    rStream >> hasBulletFont;
+    if ( hasBulletFont )
+    {
+        pBulletFont = new Font( );
+        rStream >> *pBulletFont;
+    }
+    else pBulletFont = NULL;
+    rStream >> aGraphicSize;
+
+    rStream >> nBulletColor;
+    rStream >> nBulletRelSize;
+    rStream >> nTmp16; SetShowSymbol( nTmp16 );
+
+    rStream >> nTmp16; mePositionAndSpaceMode = ( SvxNumPositionAndSpaceMode )nTmp16;
+    rStream >> nTmp16; meLabelFollowedBy = ( LabelFollowedBy )nTmp16;
+    rStream >> nTmp32; mnListtabPos = nTmp32;
+    rStream >> nTmp32; mnFirstLineIndent = nTmp32;
+    rStream >> nTmp32; mnIndentAt = nTmp32;
+
+}
 SvxNumberFormat::~SvxNumberFormat()
 {
     delete pGraphicBrush;
     delete pBulletFont;
 }
 
-SvStream&   SvxNumberFormat::Store(SvStream &rStream, FontToSubsFontConverter pConverter)
+SvStream&   SvxNumberFormat::Store(SvStream &rStream)
 {
-    if(pConverter && pBulletFont)
-    {
-        cBullet = ConvertFontToSubsFontChar(pConverter, cBullet);
-        String sFontName = GetFontToSubsFontName(pConverter);
-        pBulletFont->SetName(sFontName);
-    }
-
     rStream << (sal_uInt16)NUMITEM_VERSION_04;
 
     rStream << (sal_uInt16)GetNumberingType();
@@ -251,6 +298,11 @@
     rStream << ( sal_Int32 ) mnIndentAt;
 
     return rStream;
+}
+
+SvxNumberFormat* SvxNumberFormat::Create( SvStream &rStream )
+{
+    return new SvxNumberFormat( rStream );
 }
 
 SvxNumberFormat& SvxNumberFormat::operator=( const SvxNumberFormat& rFormat )
@@ -621,7 +673,41 @@
     }
 }
 
-SvStream&   SvxNumRule::Store(SvStream &rStream)
+SvxNumRule::SvxNumRule( SvStream &rStream )
+{
+    sal_uInt16 nTmp16;
+    rStream >> nTmp16; // NUM_ITEM_VERSION
+    rStream >> nLevelCount;
+
+    // first nFeatureFlags of old Versions
+    rStream >> nTmp16; nFeatureFlags = nTmp16;
+    rStream >> nTmp16; bContinuousNumbering = nTmp16;
+    rStream >> nTmp16; eNumberingType = ( SvxNumRuleType )nTmp16;
+
+    for (sal_uInt16 i = 0; i < SVX_MAX_NUM; i++)
+    {
+        rStream >> nTmp16;
+        sal_Bool hasNumberingFormat = nTmp16;
+        if ( hasNumberingFormat ){
+            aFmts[i] = new SvxNumberFormat( rStream );
+            aFmtsSet[i] = sal_True;
+        }
+        else
+        {
+            aFmts[i] = 0;
+            aFmtsSet[i] = sal_False;
+        }
+    }
+    //second nFeatureFlags for new versions
+    rStream >> nTmp16; nFeatureFlags = nTmp16;
+}
+
+SvxNumRule* SvxNumRule::Create( SvStream & rStream )
+{
+    return new SvxNumRule( rStream );
+}
+
+SvStream& SvxNumRule::Store( SvStream &rStream )
 {
     rStream<<(sal_uInt16)NUMITEM_VERSION_03;
     rStream<<nLevelCount;
@@ -630,33 +716,21 @@
     rStream<<(sal_uInt16)bContinuousNumbering;
     rStream<<(sal_uInt16)eNumberingType;
 
-    FontToSubsFontConverter pConverter = 0;
-    sal_Bool bConvertBulletFont = rStream.GetVersion() <= SOFFICE_FILEFORMAT_50;
     for(sal_uInt16 i = 0; i < SVX_MAX_NUM; i++)
     {
         if(aFmts[i])
         {
             rStream << sal_uInt16(1);
-            if(bConvertBulletFont && aFmts[i]->GetBulletFont())
-            {
-                if(!pConverter)
-                    pConverter =
-                        CreateFontToSubsFontConverter(aFmts[i]->GetBulletFont()->GetName(),
-                                    FONTTOSUBSFONT_EXPORT|FONTTOSUBSFONT_ONLYOLDSOSYMBOLFONTS);
-            }
-            aFmts[i]->Store(rStream, pConverter);
+            aFmts[i]->Store(rStream);
         }
         else
             rStream << sal_uInt16(0);
     }
     //second save of nFeatureFlags for new versions
     rStream<<(sal_uInt16)nFeatureFlags;
-    if(pConverter)
-        DestroyFontToSubsFontConverter(pConverter);
 
     return rStream;
 }
-
 SvxNumRule::~SvxNumRule()
 {
     for(sal_uInt16 i = 0; i < SVX_MAX_NUM; i++)
@@ -843,9 +917,10 @@
 {
 }
 
-SfxPoolItem* SvxNumBulletItem::Create(SvStream &s, sal_uInt16 n) const
+SfxPoolItem* SvxNumBulletItem::Create(SvStream &rStream, sal_uInt16 /*nItemVersion*/ ) const
 {
-    return SfxPoolItem::Create(s, n );
+    SvxNumRule aNumRule( rStream );
+    return new SvxNumBulletItem( aNumRule, EE_PARA_NUMBULLET );
 }
 
 SvxNumBulletItem::SvxNumBulletItem(const SvxNumBulletItem& rCopy) :

-- 
To view, visit https://gerrit.libreoffice.org/3479
To unsubscribe, visit https://gerrit.libreoffice.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I11ba65f8a4972ab1a6d4f30337a0a779f22cdd35
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: master
Gerrit-Owner: Cao Cuong Ngo <cao.cuong.ngo at gmail.com>



More information about the LibreOffice mailing list