LCOV - code coverage report
Current view: top level - lotuswordpro/source/filter - lwpparastyle.cxx (source / functions) Hit Total Coverage
Test: commit e02a6cb2c3e2b23b203b422e4e0680877f232636 Lines: 0 382 0.0 %
Date: 2014-04-14 Functions: 0 21 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*************************************************************************
       3             :  *
       4             :  *  The Contents of this file are made available subject to the terms of
       5             :  *  either of the following licenses
       6             :  *
       7             :  *         - GNU Lesser General Public License Version 2.1
       8             :  *         - Sun Industry Standards Source License Version 1.1
       9             :  *
      10             :  *  Sun Microsystems Inc., October, 2000
      11             :  *
      12             :  *  GNU Lesser General Public License Version 2.1
      13             :  *  =============================================
      14             :  *  Copyright 2000 by Sun Microsystems, Inc.
      15             :  *  901 San Antonio Road, Palo Alto, CA 94303, USA
      16             :  *
      17             :  *  This library is free software; you can redistribute it and/or
      18             :  *  modify it under the terms of the GNU Lesser General Public
      19             :  *  License version 2.1, as published by the Free Software Foundation.
      20             :  *
      21             :  *  This library is distributed in the hope that it will be useful,
      22             :  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
      23             :  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      24             :  *  Lesser General Public License for more details.
      25             :  *
      26             :  *  You should have received a copy of the GNU Lesser General Public
      27             :  *  License along with this library; if not, write to the Free Software
      28             :  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
      29             :  *  MA  02111-1307  USA
      30             :  *
      31             :  *
      32             :  *  Sun Industry Standards Source License Version 1.1
      33             :  *  =================================================
      34             :  *  The contents of this file are subject to the Sun Industry Standards
      35             :  *  Source License Version 1.1 (the "License"); You may not use this file
      36             :  *  except in compliance with the License. You may obtain a copy of the
      37             :  *  License at http://www.openoffice.org/license.html.
      38             :  *
      39             :  *  Software provided under this License is provided on an "AS IS" basis,
      40             :  *  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
      41             :  *  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
      42             :  *  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
      43             :  *  See the License for the specific provisions governing your rights and
      44             :  *  obligations concerning the Software.
      45             :  *
      46             :  *  The Initial Developer of the Original Code is: IBM Corporation
      47             :  *
      48             :  *  Copyright: 2008 by IBM Corporation
      49             :  *
      50             :  *  All Rights Reserved.
      51             :  *
      52             :  *  Contributor(s): _______________________________________
      53             :  *
      54             :  *
      55             :  ************************************************************************/
      56             : /*************************************************************************
      57             :  * @file
      58             :  *  For LWP filter architecture prototype
      59             :  ************************************************************************/
      60             : /*************************************************************************
      61             :  * Change History
      62             :  Jan 2005           Created
      63             :  ************************************************************************/
      64             : 
      65             : #include <boost/scoped_ptr.hpp>
      66             : 
      67             : #include "lwpparastyle.hxx"
      68             : #include "lwpfilehdr.hxx"
      69             : #include "lwpoverride.hxx"
      70             : #include "lwpparaborderoverride.hxx"
      71             : #include "lwpbreaksoverride.hxx"
      72             : #include "lwpnumberingoverride.hxx"
      73             : #include "lwptaboverride.hxx"
      74             : #include "lwpbackgroundoverride.hxx"
      75             : #include "xfilter/xfdefs.hxx"
      76             : #include "xfilter/xfparastyle.hxx"
      77             : #include "xfilter/xfborders.hxx"
      78             : #include "lwpfont.hxx"
      79             : #include "lwpfoundry.hxx"
      80             : #include "lwppiece.hxx"
      81             : #include "lwpshadow.hxx"
      82             : #include "lwpborderstuff.hxx"
      83             : #include "lwpmargins.hxx"
      84             : #include "lwptabrack.hxx"
      85             : 
      86             : #include "lwpsilverbullet.hxx"
      87             : 
      88           0 : LwpParaStyle::LwpParaStyle(LwpObjectHeader& objHdr, LwpSvStream* pStrm) :
      89           0 : LwpTextStyle(objHdr, pStrm), m_pKinsokuOptsOverride(new LwpKinsokuOptsOverride),
      90           0 : m_pBulletOverride(new LwpBulletOverride)
      91             : {
      92           0 : }
      93             : 
      94           0 : LwpParaStyle::~LwpParaStyle()
      95             : {
      96           0 :     if (m_pKinsokuOptsOverride)
      97             :     {
      98           0 :         delete m_pKinsokuOptsOverride;
      99             :     }
     100             : 
     101           0 :     if (m_pBulletOverride)
     102             :     {
     103           0 :         delete m_pBulletOverride;
     104             :     }
     105           0 : }
     106             : 
     107           0 : void LwpParaStyle::Read()
     108             : {
     109           0 :     LwpTextStyle::Read();
     110             : 
     111           0 :     if (LwpFileHeader::m_nFileRevision < 0x000B)
     112             :     {
     113             :         // read many overrides
     114           0 :         LwpAlignmentOverride    aAlignOverride;
     115           0 :         aAlignOverride.Read(m_pObjStrm);
     116             : 
     117           0 :         LwpSpacingOverride  aSpacingOverride;
     118           0 :         aSpacingOverride.Read(m_pObjStrm);
     119             : 
     120           0 :         LwpIndentOverride       aIndentOverride;
     121           0 :         aIndentOverride.Read(m_pObjStrm);
     122             : 
     123           0 :         LwpParaBorderOverride   aPBOverride;
     124           0 :         aPBOverride.Read(m_pObjStrm);
     125             : 
     126           0 :         LwpBreaksOverride   aBreaksOverride;
     127           0 :         aBreaksOverride.Read(m_pObjStrm);
     128             : 
     129           0 :         LwpNumberingOverride    aNumberingOverride;
     130           0 :         aNumberingOverride.Read(m_pObjStrm);
     131             : 
     132           0 :         LwpTabOverride      aTabOverride;
     133           0 :         aTabOverride.Read(m_pObjStrm);
     134             : 
     135             :     }
     136             :     else
     137             :     {
     138           0 :         m_AlignmentStyle.ReadIndexed(m_pObjStrm);
     139           0 :         m_SpacingStyle.ReadIndexed(m_pObjStrm);
     140           0 :         m_IndentStyle.ReadIndexed(m_pObjStrm);
     141           0 :         m_BorderStyle.ReadIndexed(m_pObjStrm);
     142           0 :         m_BreaksStyle.ReadIndexed(m_pObjStrm);
     143           0 :         m_NumberingStyle.ReadIndexed(m_pObjStrm);
     144           0 :         m_TabStyle.ReadIndexed(m_pObjStrm);
     145             : 
     146           0 :         m_pKinsokuOptsOverride->Read(m_pObjStrm);
     147           0 :         m_pBulletOverride->Read(m_pObjStrm);
     148             : 
     149           0 :         if (m_pObjStrm->CheckExtra())
     150             :         {
     151           0 :             m_BackgroundStyle.ReadIndexed(m_pObjStrm);
     152           0 :             m_pObjStrm->SkipExtra();
     153             :         }
     154             : 
     155             :     }
     156           0 : }
     157             : 
     158           0 : void LwpParaStyle::Apply(XFParaStyle *pParaStyle)
     159             : {
     160             :     assert(pParaStyle);
     161           0 :     if (!pParaStyle)
     162           0 :         return;
     163             : 
     164           0 :     LwpVirtualPiece *pPiece = NULL;
     165             :     //alignment:
     166           0 :     pPiece = dynamic_cast<LwpVirtualPiece*>(m_AlignmentStyle.obj());
     167           0 :     if( pPiece )
     168             :     {
     169           0 :         LwpAlignmentOverride *pAlign = dynamic_cast<LwpAlignmentOverride*>(pPiece->GetOverride());
     170           0 :         if( pAlign )
     171           0 :                 ApplyAlignment(pParaStyle,pAlign);
     172             :     }
     173             : 
     174             :     //don't known top and bottom indent now.
     175           0 :     pPiece = dynamic_cast<LwpVirtualPiece*>(m_IndentStyle.obj());
     176           0 :     if( pPiece )
     177             :     {
     178           0 :         LwpIndentOverride   *pIndent = dynamic_cast<LwpIndentOverride*>(pPiece->GetOverride());
     179           0 :         if( pIndent )
     180             :         {
     181           0 :             if (!m_pBulletOverride->IsInValid())//Add by ,for remove bullet indent in named bullet style
     182             :             {
     183           0 :                 boost::scoped_ptr<LwpIndentOverride> pNewIndent(pIndent->clone());
     184           0 :                 pNewIndent->SetMFirst(0);
     185           0 :                 pNewIndent->SetMRest(0);
     186           0 :                 ApplyIndent(NULL, pParaStyle, pNewIndent.get());
     187             :             }
     188             :             else
     189           0 :                 ApplyIndent(NULL,pParaStyle,pIndent);
     190             :         }
     191             :     }
     192             :     //shadow & borders.
     193           0 :     pPiece = dynamic_cast<LwpVirtualPiece*>(m_BorderStyle.obj());
     194           0 :     if( pPiece )
     195             :     {
     196           0 :         LwpParaBorderOverride *pBorder = dynamic_cast<LwpParaBorderOverride*>(pPiece->GetOverride());
     197           0 :         if( pBorder )
     198             :         {
     199           0 :             this->ApplyParaBorder(pParaStyle, pBorder);
     200             :         }
     201             :     }
     202             : 
     203           0 :     pPiece = dynamic_cast<LwpVirtualPiece*>(m_SpacingStyle.obj());
     204           0 :     if (pPiece)
     205             :     {
     206           0 :         LwpSpacingOverride *pSpacing = dynamic_cast<LwpSpacingOverride*>(pPiece->GetOverride());
     207           0 :         if( pSpacing)
     208           0 :             ApplySpacing(NULL,pParaStyle,pSpacing);
     209             :     }
     210             : 
     211             :     //paragraph background.
     212           0 :     pPiece = dynamic_cast<LwpVirtualPiece*>(m_BackgroundStyle.obj());
     213           0 :     if( pPiece )
     214             :     {
     215           0 :         LwpBackgroundOverride *pBack = dynamic_cast<LwpBackgroundOverride*>(pPiece->GetOverride());
     216           0 :         if( pBack )
     217             :         {
     218           0 :             LwpColor color = pBack->GetBackColor();
     219           0 :             XFColor aXFColor( color.To24Color() );
     220           0 :             pParaStyle->SetBackColor( aXFColor );
     221             :         }
     222             :     }
     223             : 
     224             :     //add tab style
     225           0 :     pPiece = dynamic_cast<LwpVirtualPiece*>(m_TabStyle.obj());
     226           0 :     if( pPiece  )
     227             :     {
     228           0 :         LwpTabOverride *pTab = dynamic_cast<LwpTabOverride*>(pPiece->GetOverride());
     229           0 :         if(pTab)
     230             :         {
     231           0 :             ApplyTab(pParaStyle,pTab);
     232             :         }
     233             :     }
     234           0 :     pPiece = dynamic_cast<LwpVirtualPiece*>(m_BreaksStyle.obj());
     235           0 :     if( pPiece  )
     236             :     {
     237           0 :         LwpBreaksOverride *pBreak = dynamic_cast<LwpBreaksOverride*>(pPiece->GetOverride());
     238           0 :         if(pBreak)
     239             :         {
     240           0 :             ApplyBreaks(pParaStyle,pBreak);
     241             :         }
     242             :     }
     243             : 
     244             : }
     245             : 
     246           0 : void LwpParaStyle::ApplySubBorder(LwpBorderStuff* pBorderStuff, LwpBorderStuff::BorderType eType, XFBorders* pXFBorders)
     247             : {
     248           0 :     enumXFBorder eXFBorderSide = enumXFBorderNone;
     249           0 :     switch (eType)
     250             :     {
     251             :     case LwpBorderStuff::LEFT:
     252           0 :         eXFBorderSide = enumXFBorderLeft;
     253           0 :         break;
     254             :     case LwpBorderStuff::RIGHT:
     255           0 :         eXFBorderSide = enumXFBorderRight;
     256           0 :         break;
     257             :     case LwpBorderStuff::TOP:
     258           0 :         eXFBorderSide = enumXFBorderTop;
     259           0 :         break;
     260             :     case LwpBorderStuff::BOTTOM:
     261           0 :         eXFBorderSide = enumXFBorderBottom;
     262           0 :         break;
     263             :     default:
     264           0 :         break;
     265             :     }
     266             : 
     267           0 :     LwpColor    aColor = pBorderStuff->GetSideColor(eType);
     268           0 :     float       fWidth = pBorderStuff->GetSideWidth(eType);
     269           0 :     sal_uInt16  nType = pBorderStuff->GetSideType(eType);
     270             : 
     271           0 :     switch (nType)
     272             :     {
     273             :     default://fall through!
     274             :     case 0x14: //single fall through!
     275             :     case 0x17: //treble
     276           0 :         pXFBorders->SetWidth(eXFBorderSide, fWidth);
     277           0 :         break;
     278             :     case 0x15: //double , fall through!
     279             :     case 0x16: //thick double
     280           0 :         pXFBorders->SetDoubleLine(eXFBorderSide, sal_True, sal_False);
     281           0 :         pXFBorders->SetWidthOuter(eXFBorderSide, static_cast<float>(fWidth*0.333));
     282           0 :         pXFBorders->SetWidthSpace(eXFBorderSide, static_cast<float>(fWidth*0.334));
     283           0 :         pXFBorders->SetWidthInner(eXFBorderSide, static_cast<float>(fWidth*0.333));
     284             : //      pXFBorders->SetWidth(eXFBorderSide, fWidth);
     285           0 :         break;
     286             :     case 0x18: //thick-thin
     287           0 :         pXFBorders->SetDoubleLine(eXFBorderSide, sal_True, sal_False);
     288           0 :         pXFBorders->SetWidthOuter(eXFBorderSide, static_cast<float>(fWidth*0.5));
     289           0 :         pXFBorders->SetWidthInner(eXFBorderSide, static_cast<float>(fWidth*0.25));
     290           0 :         pXFBorders->SetWidthSpace(eXFBorderSide, static_cast<float>(fWidth*0.25));
     291           0 :         break;
     292             :     case 0x19: //thin-thick
     293           0 :         pXFBorders->SetDoubleLine(eXFBorderSide, sal_True, sal_False);
     294           0 :         pXFBorders->SetWidthInner(eXFBorderSide, static_cast<float>(fWidth*0.7));
     295           0 :         pXFBorders->SetWidthOuter(eXFBorderSide, static_cast<float>(fWidth*0.15));
     296           0 :         pXFBorders->SetWidthSpace(eXFBorderSide, static_cast<float>(fWidth*0.15));
     297           0 :         break;
     298             :     }
     299             : 
     300           0 :     if (aColor.IsValidColor())
     301             :     {
     302           0 :         XFColor aXFColor(aColor.To24Color());
     303           0 :         pXFBorders->SetColor(eXFBorderSide, aXFColor );
     304           0 :     }
     305           0 : }
     306             : 
     307           0 : void LwpParaStyle::ApplyParaBorder(XFParaStyle* pParaStyle, LwpParaBorderOverride* pBorder)
     308             : {
     309             :     //convert LwpShadow:
     310           0 :     LwpShadow *pShadow = pBorder->GetShadow();
     311           0 :     if( pShadow )
     312             :     {
     313           0 :         LwpColor color = pShadow->GetColor();
     314           0 :         float   offsetX = pShadow->GetOffsetX();
     315           0 :         float   offsetY = pShadow->GetOffsetY();
     316             : 
     317           0 :         if( offsetX && offsetY && color.IsValidColor() )
     318             :         {
     319           0 :             XFColor aXFColor(color.To24Color());
     320           0 :             sal_Bool left = sal_False;
     321           0 :             sal_Bool top = sal_False;
     322           0 :             if( offsetX < 0 )
     323           0 :                 left = sal_True;
     324           0 :             if( offsetY < 0 )
     325           0 :                 top = sal_True;
     326           0 :             if( left )
     327             :             {
     328           0 :                 if( top )
     329           0 :                     pParaStyle->SetShadow(enumXFShadowLeftTop,-offsetX,aXFColor);
     330             :                 else
     331           0 :                     pParaStyle->SetShadow(enumXFShadowLeftBottom,-offsetX,aXFColor);
     332             :             }
     333             :             else
     334             :             {
     335           0 :                 if( top )
     336           0 :                     pParaStyle->SetShadow(enumXFShadowRightTop,offsetX,aXFColor);
     337             :                 else
     338           0 :                     pParaStyle->SetShadow(enumXFShadowRightBottom,offsetX,aXFColor);
     339             :             }
     340           0 :         }
     341             :     }
     342             : 
     343             :     //convert to XFBorders object:
     344           0 :     LwpBorderStuff  *pBorderStuff = pBorder->GetBorderStuff();
     345           0 :     if( pBorderStuff && pBorderStuff->GetSide() != 0 )
     346             :     {
     347           0 :         XFBorders   *pXFBorders = new XFBorders();
     348           0 :         pParaStyle->SetBorders(pXFBorders);
     349             : 
     350           0 :         LwpMargins* pMargins = pBorder->GetMargins();
     351             : 
     352             :         // apply 4 borders respectively
     353             :         LwpBorderStuff::BorderType pType[] = { LwpBorderStuff::LEFT, LwpBorderStuff::RIGHT,
     354           0 :             LwpBorderStuff::TOP, LwpBorderStuff::BOTTOM };
     355             :         float pMarginValue[4];
     356             : 
     357           0 :         for (sal_uInt8 nC = 0; nC < 4; nC++)
     358             :         {
     359           0 :             if (pBorderStuff->HasSide(pType[nC]))
     360             :             {
     361           0 :                 this->ApplySubBorder(pBorderStuff, pType[nC], pXFBorders);
     362             : 
     363             :                 //get border spacing to text content
     364           0 :                 if (pMargins)
     365             :                 {
     366           0 :                     pMarginValue[nC] = static_cast<float>(pMargins->GetMarginsValue(nC));
     367             :                 }
     368             :             }
     369             : 
     370             :         }
     371             : 
     372             :         //apply border spacing to text content
     373           0 :         pParaStyle->SetPadding(pMarginValue[0], pMarginValue[1], pMarginValue[2], pMarginValue[3]);
     374             : 
     375             :     }
     376           0 : }
     377             : 
     378           0 : void LwpParaStyle::ApplyBreaks(XFParaStyle* pParaStyle, LwpBreaksOverride* pBreaks)
     379             : {
     380           0 :     if (pBreaks->IsKeepWithNext())
     381             :     {
     382           0 :         pParaStyle->SetBreaks(enumXFBreakKeepWithNext);
     383             :     }
     384           0 :     if (pBreaks->IsPageBreakBefore())
     385             :     {
     386           0 :         pParaStyle->SetBreaks(enumXFBreakBefPage);
     387             :     }
     388           0 :     if (pBreaks->IsPageBreakAfter())
     389             :     {
     390           0 :         pParaStyle->SetBreaks(enumXFBreakAftPage);
     391             :     }
     392           0 :     if (pBreaks->IsColumnBreakBefore())
     393             :     {
     394           0 :         pParaStyle->SetBreaks(enumXFBreakBefColumn);
     395             :     }
     396           0 :     if (pBreaks->IsColumnBreakAfter())
     397             :     {
     398           0 :         pParaStyle->SetBreaks(enumXFBreakAftColumn);
     399             :     }
     400           0 : }
     401             : 
     402           0 : void LwpParaStyle::ApplyAlignment(XFParaStyle* pParaStyle, LwpAlignmentOverride* pAlign)
     403             : {
     404           0 :     enumXFAlignType alignType = enumXFAlignStart;
     405             :     LwpAlignmentOverride::AlignType type;
     406             : 
     407           0 :     type = pAlign->GetAlignType();
     408           0 :     pParaStyle->SetNumberRight(sal_False);//to identify its align attribute
     409           0 :     switch(type)
     410             :     {
     411             :     case LwpAlignmentOverride::ALIGN_LEFT:
     412           0 :         alignType = enumXFAlignStart;
     413           0 :         break;
     414             :     case LwpAlignmentOverride::ALIGN_RIGHT:
     415           0 :         alignType = enumXFAlignEnd;
     416           0 :         break;
     417             :     case LwpAlignmentOverride::ALIGN_CENTER:
     418           0 :         alignType = enumXFAlignCenter;
     419           0 :         break;
     420             :     case LwpAlignmentOverride::ALIGN_NUMERICLEFT://if non-number in table,ALIGN_NUMERICLEFT/RIGHT are useless
     421           0 :         alignType = enumXFAlignStart;            //note by  1/28
     422           0 :         break;
     423             :     case LwpAlignmentOverride::ALIGN_JUSTIFY:
     424             :     case LwpAlignmentOverride::ALIGN_JUSTIFYALL:
     425           0 :         alignType = enumXFAlignJustify;
     426           0 :         break;
     427             :     case LwpAlignmentOverride::ALIGN_NUMERICRIGHT:
     428           0 :         pParaStyle->SetNumberRight(sal_True);//to identify its align attribute
     429           0 :         alignType = enumXFAlignEnd;
     430           0 :         break;
     431             :     default:
     432           0 :         break;
     433             :     }
     434           0 :     pParaStyle->SetAlignType(alignType);
     435           0 : }
     436             : 
     437           0 : void LwpParaStyle::ApplyIndent(LwpPara* pPara, XFParaStyle* pParaStyle, LwpIndentOverride* pIndent)
     438             : {
     439             :     LwpPara* pParentPara;
     440           0 :     if (pPara)
     441           0 :         pParentPara = pPara->GetParent();
     442             :     else
     443           0 :         pParentPara = NULL;
     444             : 
     445             :     SAL_WNODEPRECATED_DECLARATIONS_PUSH
     446           0 :     std::auto_ptr<LwpIndentOverride> pTotalIndent(new LwpIndentOverride);
     447             :     SAL_WNODEPRECATED_DECLARATIONS_POP
     448           0 :     if (pIndent->IsUseRelative() && pParentPara)
     449             :     {
     450           0 :         LwpIndentOverride* pParentIndent = pParentPara->GetIndent();
     451           0 :         if (!pParentIndent)
     452           0 :             return;
     453           0 :         pTotalIndent.reset(pIndent->clone());
     454             : 
     455             :         //add by ,for bullet only
     456           0 :         if (pPara)
     457             :         {
     458           0 :             if (pPara->GetBulletFlag())
     459             :             {
     460           0 :                 pTotalIndent->SetMAll(pParentIndent->GetMAll() + pTotalIndent->GetMAll());
     461           0 :                 pTotalIndent->SetMRight(pParentIndent->GetMRight()+ pTotalIndent->GetMRight());
     462             :                 pParaStyle->SetMargins(LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(
     463           0 :                     pTotalIndent->GetMAll())), pTotalIndent->GetRight());
     464           0 :                 pPara->SetIndent(pTotalIndent.release());
     465           0 :                 return;
     466             :             }
     467             :         }
     468             :         //end add
     469           0 :         sal_uInt16 relative = pParentIndent->GetRelative();
     470             : 
     471           0 :         sal_Int32 Amount = pParentIndent->GetMAll();
     472             : 
     473           0 :         if (relative == LwpIndentOverride::RELATIVE_FIRST)
     474           0 :             Amount += pParentIndent->GetMFirst();
     475           0 :         else if (relative == LwpIndentOverride::RELATIVE_REST)
     476           0 :             Amount += pParentIndent->GetMRest();
     477           0 :         pTotalIndent->SetMAll(Amount + pTotalIndent->GetMAll());
     478           0 :         pTotalIndent->SetMRight(pParentIndent->GetMRight()+ pTotalIndent->GetMRight());
     479             : 
     480           0 :         pParaStyle->SetIndent(pTotalIndent->GetFirst());
     481           0 :         pParaStyle->SetMargins(pTotalIndent->GetLeft(), pTotalIndent->GetRight());
     482           0 :         pPara->SetIndent(pTotalIndent.release());
     483             : 
     484             :     }
     485             :     else
     486             :     {
     487           0 :         pTotalIndent.reset(pIndent->clone());
     488             :         //add by
     489           0 :         if (pPara)
     490             :         {
     491           0 :             if (pPara->GetBulletFlag())
     492             :             {
     493             : //              pParaStyle->SetIndent(LwpTools::ConvertFromUnits(pIndent->GetMAll()));
     494             :                 pParaStyle->SetMargins(LwpTools::ConvertToMetric(
     495           0 :                     LwpTools::ConvertFromUnits(pIndent->GetMAll())), pIndent->GetRight());
     496           0 :                 pPara->SetIndent(pTotalIndent.release());
     497           0 :                 return;
     498             :             }
     499             :         }
     500             :         //end add
     501             : 
     502           0 :         pParaStyle->SetIndent(pIndent->GetFirst());
     503           0 :         pParaStyle->SetMargins(pIndent->GetLeft(), pIndent->GetRight());
     504           0 :         if (pPara)
     505             :         {
     506           0 :             pPara->SetIndent(pTotalIndent.release());
     507             :         }
     508           0 :     }
     509             : }
     510             : 
     511           0 : void LwpParaStyle::ApplySpacing(LwpPara* pPara, XFParaStyle* pParaStyle, LwpSpacingOverride* pSpacing)
     512             : {
     513           0 :     LwpSpacingCommonOverride* spacing = pSpacing->GetSpacing();
     514           0 :     LwpSpacingCommonOverride* abovepara = pSpacing->GetAboveSpacing();
     515           0 :     LwpSpacingCommonOverride* belowpara = pSpacing->GetBelowSpacing();
     516             : 
     517           0 :     LwpSpacingCommonOverride::SpacingType type = spacing->GetType();
     518           0 :     sal_Int32 amount = spacing->GetAmount();
     519           0 :     sal_Int32 multiple = spacing->GetMultiple();
     520             :     enumLHType xftype;
     521             :     double height;
     522             : 
     523           0 :     switch(type)
     524             :     {
     525             :     case LwpSpacingCommonOverride::SPACING_DYNAMIC:
     526             :     {
     527           0 :     xftype = enumLHPercent;
     528           0 :     height = double(multiple)/65536L*100;
     529           0 :     pParaStyle->SetLineHeight(xftype,height);
     530             :     }
     531           0 :         break;
     532             :     case LwpSpacingCommonOverride::SPACING_LEADING:
     533             :     {
     534           0 :     xftype = enumLHSpace;
     535           0 :     height = LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(amount));
     536           0 :     pParaStyle->SetLineHeight(xftype,height);
     537             :     }
     538           0 :         break;
     539             :     case LwpSpacingCommonOverride::SPACING_CUSTOM:
     540             :     {
     541           0 :     xftype = enumLHHeight;
     542           0 :     height =  LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(sal_Int32(float(multiple)/65536L*amount)));
     543           0 :         pParaStyle->SetLineHeight(xftype,height);
     544             :     }
     545           0 :         break;
     546             :     case LwpSpacingCommonOverride::SPACING_NONE:
     547           0 :         break;
     548             :     }
     549             : 
     550             : //TO DO: Above Line need to be processed!!!!!!! what it means??????  1-26
     551             : 
     552           0 :     type = abovepara->GetType();
     553           0 :     amount = abovepara->GetAmount();
     554           0 :     multiple = abovepara->GetMultiple();
     555           0 :     double above_val =-1;
     556           0 :     switch(type)
     557             :     {
     558             :     case LwpSpacingCommonOverride::SPACING_DYNAMIC:
     559             : //        above_val = LINE_HEIGHT*float(multiple)/65536L*100; //TO DO:  1-26
     560           0 :         break;
     561             :     case LwpSpacingCommonOverride::SPACING_LEADING:
     562           0 :         break;
     563             :     case LwpSpacingCommonOverride::SPACING_CUSTOM:
     564           0 :         above_val =  LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(sal_Int32(float(multiple)/65536L*amount)));
     565           0 :         break;
     566             :     case LwpSpacingCommonOverride::SPACING_NONE:
     567           0 :         break;
     568             :     }
     569             : 
     570           0 :     type = belowpara->GetType();
     571           0 :     amount = belowpara->GetAmount();
     572           0 :     multiple = belowpara->GetMultiple();
     573           0 :     double below_val=-1;
     574           0 :     switch(type)
     575             :     {
     576             :     case LwpSpacingCommonOverride::SPACING_DYNAMIC:
     577             : //        below_val = LINE_HEIGHT*float(multiple)/65536L*100;//TO DO:  1-26
     578           0 :         break;
     579             :     case LwpSpacingCommonOverride::SPACING_LEADING:
     580           0 :         break;
     581             :     case LwpSpacingCommonOverride::SPACING_CUSTOM:
     582           0 :         below_val =  LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(sal_Int32(float(multiple)/65536L*amount)));
     583           0 :         break;
     584             :     case LwpSpacingCommonOverride::SPACING_NONE:
     585           0 :         break;
     586             :     }
     587             : 
     588           0 :     if (pPara)
     589             :     {
     590           0 :         if (below_val != -1)
     591           0 :             pPara->SetBelowSpacing(below_val);
     592           0 :         LwpPara* pPrePara = dynamic_cast<LwpPara*>(pPara->GetPrevious()->obj());
     593           0 :         if (pPrePara && above_val != -1)
     594             :         {
     595           0 :             above_val += pPrePara->GetBelowSpacing();
     596             : 
     597             :         }
     598             : 
     599             :     }
     600           0 :     pParaStyle->SetMargins(-1,-1,above_val,below_val);
     601           0 : }
     602             : /**************************************************************************
     603             :  * @short:
     604             :  * @descr:
     605             :  * @param:
     606             :  * @param:
     607             :  * @return:
     608             : **************************************************************************/
     609           0 : void LwpParaStyle::ApplyTab(XFParaStyle *pParaStyle, LwpTabOverride *pTabOverRide)
     610             : {
     611           0 :     LwpObjectID* pTabRackID = pTabOverRide->GetTabRackID();
     612           0 :     if(pTabRackID->IsNull())
     613             :     {
     614             :         //assert(false);
     615           0 :         return;
     616             :     }
     617             : 
     618           0 :     LwpTabRack* pTabRack = dynamic_cast<LwpTabRack*>(pTabRackID->obj());
     619           0 :     if(!pTabRack)
     620             :     {
     621             :         //assert(false);
     622           0 :         return;
     623             :     }
     624             : 
     625           0 :     pParaStyle->ClearTabStyles();
     626             :     //Get margin left value
     627           0 :     double dMarginLeft = pParaStyle->GetMargins().GetLeft();
     628             : 
     629           0 :     sal_uInt16 nNumTabs = pTabRack->GetNumTabs();
     630           0 :     for(sal_uInt16 nIndex=0; nIndex<nNumTabs; nIndex++)
     631             :     {
     632             :         //get tab type
     633           0 :         LwpTab* pTab = pTabRack->Lookup(nIndex);
     634           0 :         if(!pTab)
     635           0 :             return;
     636             : 
     637           0 :         enumXFTab eType = enumXFTabNone;
     638           0 :         LwpTab::TabType type = pTab->GetTabType();
     639           0 :         switch(type)
     640             :         {
     641             :         case LwpTab::TT_LEFT:
     642           0 :             eType = enumXFTabLeft;
     643           0 :             break;
     644             :         case LwpTab::TT_CENTER:
     645           0 :             eType = enumXFTabCenter;
     646           0 :             break;
     647             :         case LwpTab::TT_RIGHT:
     648           0 :             eType = enumXFTabRight;
     649           0 :             break;
     650             :         case LwpTab::TT_NUMERIC:
     651           0 :             eType = enumXFTabChar;
     652           0 :             break;
     653             :         }
     654             : 
     655             :         //get position
     656           0 :         sal_uInt32 nPos = pTab->GetPosition();
     657             :         //different feature between SODC and lwp, the tab length must minus the margin left of para.
     658           0 :         double fLen = LwpTools::ConvertFromUnitsToMetric(nPos) - dMarginLeft;
     659             : 
     660             :         //get leader type
     661           0 :         sal_Unicode cLeader = 0x00;
     662           0 :         LwpTab::LeaderType leader= pTab->GetLeaderType();
     663           0 :         switch(leader)
     664             :         {
     665             :         case LwpTab::TL_NONE:
     666           0 :             cLeader = 0x20;     //space
     667           0 :             break;
     668             :         case LwpTab::TL_HYPHEN: //'-'
     669           0 :             cLeader = 0xAD;
     670           0 :             break;
     671             :         case LwpTab::TL_DOT:    //'.'
     672           0 :             cLeader = 0x2E;
     673           0 :             break;
     674             :         case LwpTab::TL_LINE:   //'_'
     675           0 :             cLeader = 0x5F;
     676           0 :             break;
     677             :         }
     678             : 
     679           0 :         sal_Unicode cAlignChar = static_cast<sal_Unicode>(pTab->GetAlignChar());
     680             : 
     681           0 :         pParaStyle->AddTabStyle(eType,fLen,cLeader,cAlignChar);
     682             :     }
     683             : 
     684             : }
     685             : 
     686           0 : void LwpParaStyle::RegisterStyle()
     687             : {
     688           0 :     XFParaStyle* pStyle = new XFParaStyle();
     689             : 
     690             :     //Set name
     691           0 :     OUString styleName = GetName()->str();
     692           0 :     pStyle->SetStyleName(styleName);
     693             : 
     694             :     //Create font
     695           0 :     LwpFontManager* pFontMgr = m_pFoundry->GetFontManger();
     696           0 :     XFFont* pFont = pFontMgr->CreateFont(m_nFinalFontID);
     697           0 :     pStyle->SetFont(pFont);
     698             : 
     699             :     //Set other paragraph properties...
     700             : 
     701           0 :     Apply(pStyle);
     702             :     //Add style
     703           0 :     LwpStyleManager* pStyleMgr = m_pFoundry->GetStyleManager();
     704           0 :     pStyleMgr->AddStyle(*GetObjectID(), pStyle);
     705           0 : }
     706             : 
     707           0 : LwpAlignmentOverride* LwpParaStyle::GetAlignment()
     708             : {
     709           0 :     if (m_AlignmentStyle.obj() == NULL)
     710           0 :         return NULL;
     711             : 
     712           0 :     LwpAlignmentPiece *pPiece = dynamic_cast<LwpAlignmentPiece*>(m_AlignmentStyle.obj());
     713           0 :     if (pPiece)
     714           0 :         return dynamic_cast<LwpAlignmentOverride*>(pPiece->GetOverride());
     715           0 :     return NULL;
     716             : }
     717             : 
     718           0 : LwpIndentOverride* LwpParaStyle::GetIndent()
     719             : {
     720           0 :     if (m_IndentStyle.obj() == NULL)
     721           0 :         return NULL;
     722             : 
     723           0 :     LwpIndentPiece *pPiece = dynamic_cast<LwpIndentPiece*>(m_IndentStyle.obj());
     724           0 :     if (pPiece)
     725           0 :         return dynamic_cast<LwpIndentOverride*>(pPiece->GetOverride());
     726           0 :     return NULL;
     727             : }
     728             : 
     729           0 : LwpSpacingOverride* LwpParaStyle::GetSpacing()
     730             : {
     731           0 :     if (m_SpacingStyle.obj() == NULL)
     732           0 :         return NULL;
     733             : 
     734           0 :     LwpSpacingPiece *pPiece = dynamic_cast<LwpSpacingPiece*>(m_SpacingStyle.obj());
     735           0 :     if (pPiece)
     736           0 :         return dynamic_cast<LwpSpacingOverride*>(pPiece->GetOverride());
     737           0 :     return NULL;
     738             : }
     739             : 
     740           0 : LwpParaBorderOverride* LwpParaStyle::GetParaBorder() const
     741             : {
     742           0 :     if(m_BorderStyle.IsNull())
     743           0 :         return NULL;
     744             : 
     745           0 :     LwpParaBorderPiece *pPiece = dynamic_cast<LwpParaBorderPiece*>(m_BorderStyle.obj(VO_PARABORDERPIECE));
     746           0 :     if (pPiece)
     747           0 :         return dynamic_cast<LwpParaBorderOverride*>(pPiece->GetOverride());
     748           0 :     return NULL;
     749             : }
     750             : 
     751           0 : LwpBreaksOverride* LwpParaStyle::GetBreaks() const
     752             : {
     753           0 :     if(m_BreaksStyle.IsNull())
     754           0 :         return NULL;
     755             : 
     756           0 :     LwpBreaksPiece *pPiece = dynamic_cast<LwpBreaksPiece*>(m_BreaksStyle.obj(VO_BREAKSPIECE));
     757           0 :     if (pPiece)
     758           0 :         return dynamic_cast<LwpBreaksOverride*>(pPiece->GetOverride());
     759           0 :     return NULL;
     760             : }
     761             : 
     762           0 : LwpBulletOverride* LwpParaStyle::GetBulletOverride() const
     763             : {
     764           0 :     return m_pBulletOverride;
     765             : }
     766             : 
     767           0 : LwpNumberingOverride* LwpParaStyle::GetNumberingOverride() const
     768             : {
     769           0 :     if(m_NumberingStyle.IsNull())
     770           0 :         return NULL;
     771             : 
     772           0 :     LwpNumberingPiece *pPiece = dynamic_cast<LwpNumberingPiece*>(m_NumberingStyle.obj(VO_NUMBERINGPIECE));
     773           0 :     if (pPiece)
     774           0 :         return dynamic_cast<LwpNumberingOverride*>(pPiece->GetOverride());
     775           0 :     return NULL;
     776             : }
     777             : 
     778             : /**************************************************************************
     779             :  * @short:
     780             :  * @descr:
     781             :  * @param:
     782             :  * @param:
     783             :  * @return:
     784             : **************************************************************************/
     785           0 : LwpTabOverride* LwpParaStyle::GetTabOverride() const
     786             : {
     787           0 :     if(m_TabStyle.obj() == NULL)
     788           0 :         return NULL;
     789           0 :     LwpTabPiece *pPiece = dynamic_cast<LwpTabPiece*>(m_TabStyle.obj());
     790           0 :     if (pPiece)
     791           0 :         return dynamic_cast<LwpTabOverride*>(pPiece->GetOverride());
     792           0 :     return NULL;
     793             : }
     794             : 
     795             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10