1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*************************************************************************
4 * The Contents of this file are made available subject to the terms of
5 * either of the following licenses
7 * - GNU Lesser General Public License Version 2.1
8 * - Sun Industry Standards Source License Version 1.1
10 * Sun Microsystems Inc., October, 2000
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
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.
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.
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,
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.
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.
46 * The Initial Developer of the Original Code is: IBM Corporation
48 * Copyright: 2008 by IBM Corporation
50 * All Rights Reserved.
52 * Contributor(s): _______________________________________
55 ************************************************************************/
56 /*************************************************************************
58 * For LWP filter architecture prototype
59 ************************************************************************/
60 /*************************************************************************
63 Feb 2005 Process gemotry, margins
64 ************************************************************************/
66 #include "lwplayout.hxx"
67 #include "lwpusewhen.hxx"
68 #include "lwptools.hxx"
69 #include "xfilter/xfcolumns.hxx"
70 #include "lwpstory.hxx"
71 #include "lwpparastyle.hxx"
72 #include "lwpholder.hxx"
74 #include "lwppagehint.hxx"
75 #include "lwpdivinfo.hxx"
76 #include "lwpgrfobj.hxx"
77 #include <osl/thread.h>
79 LwpVirtualLayout::LwpVirtualLayout(LwpObjectHeader
&objHdr
, LwpSvStream
* pStrm
)
80 : LwpDLNFPVList(objHdr
, pStrm
)
84 void LwpVirtualLayout::Read()
86 LwpDLNFPVList::Read();
88 LwpObjectStream
* pStrm
= m_pObjStrm
;
89 m_nAttributes
= pStrm
->QuickReaduInt32();
90 m_nAttributes2
= pStrm
->QuickReaduInt32();
91 m_nAttributes3
= pStrm
->QuickReaduInt32();
92 m_nOverrideFlag
= pStrm
->QuickReaduInt32();
93 m_nDirection
= pStrm
->QuickReaduInt16();
95 //Note that two bytes is read into m_nEditorID instead of one byte.
96 m_nEditorID
= pStrm
->QuickReaduInt16();
98 m_NextEnumerated
.ReadIndexed(pStrm
);
99 m_PreviousEnumerated
.ReadIndexed(pStrm
);
104 sal_Bool
LwpVirtualLayout::MarginsSameAsParent()
106 return m_nAttributes2
& STYLE2_MARGINSSAMEASPARENT
? sal_True
: sal_False
;
110 * @descr: Get column width
113 double LwpVirtualLayout::GetColWidth(sal_uInt16
/*nIndex*/)
115 //return GetContentWidth(); //not support now
116 //return LwpTools::ConvertToMetric(5); //test
121 * @descr: Get the gap between columns
124 double LwpVirtualLayout::GetColGap(sal_uInt16
/*nIndex*/)
126 //return DEFAULTGAPSIZE;
127 //return LwpTools::ConvertToMetric(0.17);//DEFAULTGAPSIZE=0.17
128 return LwpTools::ConvertToMetric(0.17);
132 * @descr: Whether it is honoring protection
135 sal_Bool
LwpVirtualLayout::HonorProtection()
137 if(!(m_nAttributes2
& STYLE2_HONORPROTECTION
))
140 LwpVirtualLayout
* pParent
= dynamic_cast<LwpVirtualLayout
*> (GetParent()->obj());
141 if(pParent
&& !pParent
->IsHeader())
143 return pParent
->HonorProtection();
146 if(m_pFoundry
)//is null now
148 LwpDocument
* pDoc
= m_pFoundry
->GetDocument();
151 return pDoc->HonorProtection();
153 if(pDoc
&& pDoc
->GetRootDocument())
154 return pDoc
->GetRootDocument()->HonorProtection();
161 * @descr: Whether it is protected
164 sal_Bool
LwpVirtualLayout::IsProtected()
166 sal_Bool bProtected
= (m_nAttributes
& STYLE_PROTECTED
)!=0;
168 LwpVirtualLayout
* pParent
= dynamic_cast<LwpVirtualLayout
*> (GetParent()->obj());
169 if(pParent
&& !pParent
->IsHeader())
171 if(pParent
->HonorProtection()&&(pParent
->HasProtection()||bProtected
))
176 else if(m_pFoundry
)//is null now
178 LwpDocument
* pDoc
= m_pFoundry
->GetDocument();
181 if (pDoc
->HonorProtection() && bProtected
)
192 * @descr: Whether it has protection
195 sal_Bool
LwpVirtualLayout::HasProtection()
197 if(m_nAttributes
& STYLE_PROTECTED
)
200 LwpVirtualLayout
* pParent
= dynamic_cast<LwpVirtualLayout
*> (GetParent()->obj());
201 if(pParent
&& !pParent
->IsHeader())
203 return pParent
->HasProtection();
210 * @descr: Whether it is a mirror layout
213 sal_Bool
LwpVirtualLayout::IsComplex()
215 return m_nAttributes
& STYLE_COMPLEX
? sal_True
: sal_False
;
219 * @descr: Get usewhen pointer
222 LwpUseWhen
* LwpVirtualLayout::GetUseWhen()
225 If we have a parent, and I'm not a page layout,
226 use my parents information.
228 if(GetLayoutType()!=LWP_PAGE_LAYOUT
)
231 LwpVirtualLayout
* pParent
= dynamic_cast<LwpVirtualLayout
*> (GetParent()->obj());
232 if(pParent
&& !pParent
->IsHeader()&& (pParent
->GetLayoutType()!=LWP_PAGE_LAYOUT
))
233 return pParent
->GetUseWhen();
237 return VirtualGetUseWhen();
240 * @descr: Whether this layout is page layout or not
244 sal_Bool
LwpVirtualLayout::IsPage()
246 return (GetLayoutType() == LWP_PAGE_LAYOUT
);
249 * @descr: Whether this layout is heaer layout or not
253 sal_Bool
LwpVirtualLayout::IsHeader()
255 return (GetLayoutType() == LWP_HEADER_LAYOUT
);
258 * @descr: Whether this layout is footer layout or not
262 sal_Bool
LwpVirtualLayout::IsFooter()
264 return (GetLayoutType() == LWP_FOOTER_LAYOUT
);
267 * @descr: Whether this layout is frame layout or not
271 sal_Bool
LwpVirtualLayout::IsFrame()
273 return (GetLayoutType() == LWP_FRAME_LAYOUT
);
277 * @descr: Whether this layout is cell layout or not
281 sal_Bool
LwpVirtualLayout::IsCell()
283 return (GetLayoutType() == LWP_CELL_LAYOUT
284 || GetLayoutType() == LWP_CONNECTED_CELL_LAYOUT
285 || GetLayoutType() == LWP_HIDDEN_CELL_LAYOUT
);
288 * @descr: Whether this layout is supertable layout or not
292 sal_Bool
LwpVirtualLayout::IsSuperTable()
294 return (GetLayoutType() == LWP_SUPERTABLE_LAYOUT
);
297 * @descr: Whether this layout is group layout or not
301 sal_Bool
LwpVirtualLayout::IsGroupHead()
303 return (GetLayoutType() == LWP_GROUP_LAYOUT
);
306 * @descr: get the relative type
310 sal_uInt8
LwpVirtualLayout::GetRelativeType()
312 return LwpLayoutRelativityGuts::LAY_PARENT_RELATIVE
;
315 * @descr: whether it is relative anchored layout
319 sal_Bool
LwpVirtualLayout::IsRelativeAnchored()
323 nType
= GetRelativeType();
324 return (nType
== LwpLayoutRelativityGuts::LAY_PARA_RELATIVE
) || (nType
== LwpLayoutRelativityGuts::LAY_INLINE
)
325 || (nType
== LwpLayoutRelativityGuts::LAY_INLINE_NEWLINE
) || (nType
== LwpLayoutRelativityGuts::LAY_INLINE_VERTICAL
);
328 * @descr: whether it is MinimumHeight layout
332 sal_Bool
LwpVirtualLayout::IsMinimumHeight()
334 return ((m_nAttributes3
& STYLE3_MINHEIGHTVALID
) != 0);
338 * @descr: Get parent layout
341 LwpVirtualLayout
* LwpVirtualLayout::GetParentLayout()
343 return dynamic_cast<LwpVirtualLayout
*> (GetParent()->obj());
347 * @descr: Register child layout style
350 void LwpVirtualLayout::RegisterChildStyle()
352 //Register all children styles
353 LwpVirtualLayout
* pLayout
= dynamic_cast<LwpVirtualLayout
*>(GetChildHead()->obj());
356 pLayout
->SetFoundry(m_pFoundry
);
357 pLayout
->RegisterStyle();
358 pLayout
= dynamic_cast<LwpVirtualLayout
*>(pLayout
->GetNext()->obj());
362 sal_Bool
LwpVirtualLayout::NoContentReference()
364 return (m_nAttributes2
& STYLE2_NOCONTENTREFERENCE
) != 0;
367 sal_Bool
LwpVirtualLayout::IsStyleLayout()
369 if (m_nAttributes3
& STYLE3_STYLELAYOUT
)
372 LwpVirtualLayout
* pParent
= dynamic_cast<LwpVirtualLayout
*>(GetParent()->obj());
374 return pParent
->IsStyleLayout();
379 * @descr: Find child layout by layout type
382 LwpVirtualLayout
* LwpVirtualLayout::FindChildByType(LWP_LAYOUT_TYPE eType
)
384 LwpObjectID
*pID
= GetChildHead();
386 while(pID
&& !pID
->IsNull())
388 LwpVirtualLayout
* pLayout
= dynamic_cast<LwpVirtualLayout
*>(pID
->obj());
394 if (pLayout
&& pLayout
->GetLayoutType() == eType
)
398 pID
= pLayout
->GetNext();
405 * @descr: Whether the size of layout is fit the graphic
408 sal_Bool
LwpVirtualLayout::IsFitGraphic()
410 return IsAutoGrowRight() && !IsAutoGrowLeft() && IsAutoGrowDown();
414 * @descr: Whether the width of layout is auto grow
417 sal_Bool
LwpVirtualLayout::IsAutoGrowWidth()
419 return IsAutoGrowLeft() || IsAutoGrowRight();
423 * @descr: Determine whether the layout width is to margin
426 sal_Bool
LwpVirtualLayout::IsInlineToMargin()
428 return (m_nAttributes3
& STYLE3_INLINETOMARGIN
) != 0;
431 void LwpAssociatedLayouts::Read(LwpObjectStream
* pStrm
)
433 m_OnlyLayout
.ReadIndexed(pStrm
);
434 m_Layouts
.Read(pStrm
);
439 * @descr: Looking for the layout which follows the pStartLayout
440 * @param: pStartLayout - the layout which is used for looking for its following layout
442 LwpVirtualLayout
* LwpAssociatedLayouts::GetLayout(LwpVirtualLayout
*pStartLayout
)
444 LwpVirtualLayout
* pLayout
= NULL
;
446 if (!pStartLayout
&& !m_OnlyLayout
.IsNull())
447 /* Looking for the first layout and there's only one layout in the list.*/
448 return dynamic_cast<LwpVirtualLayout
*>(m_OnlyLayout
.obj());
450 LwpObjectHolder
* pObjHolder
= dynamic_cast<LwpObjectHolder
*>(m_Layouts
.GetHead()->obj());
453 pLayout
= dynamic_cast<LwpVirtualLayout
*>(pObjHolder
->GetObject()->obj());
457 while(pObjHolder
&& pStartLayout
!= pLayout
)
459 pObjHolder
= dynamic_cast<LwpObjectHolder
*>(pObjHolder
->GetNext()->obj());
462 pLayout
= dynamic_cast<LwpVirtualLayout
*>(pObjHolder
->GetObject()->obj());
468 pObjHolder
= dynamic_cast<LwpObjectHolder
*>(pObjHolder
->GetNext()->obj());
471 pLayout
= dynamic_cast<LwpVirtualLayout
*>(pObjHolder
->GetObject()->obj());
482 LwpHeadLayout::LwpHeadLayout(LwpObjectHeader
&objHdr
, LwpSvStream
* pStrm
)
483 : LwpVirtualLayout(objHdr
, pStrm
)
486 void LwpHeadLayout::Read()
488 LwpVirtualLayout::Read();
489 //For PermissiveLayout
490 m_pObjStrm
->SkipExtra();
492 m_pObjStrm
->SkipExtra();
495 void LwpHeadLayout::RegisterStyle()
497 //Register all children styles
498 LwpVirtualLayout
* pLayout
= dynamic_cast<LwpVirtualLayout
*>(GetChildHead()->obj());
501 pLayout
->SetFoundry(m_pFoundry
);
502 //if the layout is relative to para, the layout will be registered in para
503 if(!pLayout
->IsRelativeAnchored())
507 OSL_FAIL("Layout points to itself");
510 pLayout
->RegisterStyle();
512 LwpVirtualLayout
*pNext
= dynamic_cast<LwpVirtualLayout
*>(pLayout
->GetNext()->obj());
513 if (pNext
== pLayout
)
515 OSL_FAIL("Layout points to itself");
523 * @descr find endnote supertable layout from the child layout list. Suppose that there is only one endnote supertablelayout in one division
524 * @return pointer to endnote supertable layout
526 LwpVirtualLayout
* LwpHeadLayout::FindEnSuperTableLayout()
528 LwpVirtualLayout
* pLayout
= dynamic_cast<LwpVirtualLayout
*>(GetChildHead()->obj());
531 if(pLayout
->GetLayoutType() == LWP_ENDNOTE_SUPERTABLE_LAYOUT
)
535 pLayout
= dynamic_cast<LwpVirtualLayout
*>(pLayout
->GetNext()->obj());
540 LwpLayoutStyle::LwpLayoutStyle()
541 : m_nStyleDefinition(0)
542 , m_pDescription(new LwpAtomHolder
)
547 LwpLayoutStyle::~LwpLayoutStyle()
549 delete m_pDescription
;
552 void LwpLayoutStyle::Read(LwpObjectStream
* pStrm
)
554 m_nStyleDefinition
= pStrm
->QuickReaduInt32();
555 m_pDescription
->Read(pStrm
);
556 if (pStrm
->CheckExtra())
558 m_nKey
= pStrm
->QuickReaduInt16();
563 LwpLayoutMisc::LwpLayoutMisc() :
564 m_nGridDistance(0), m_nGridType(0),
565 m_pContentStyle(new LwpAtomHolder
)
569 LwpLayoutMisc::~LwpLayoutMisc()
573 delete m_pContentStyle
;
577 void LwpLayoutMisc::Read(LwpObjectStream
* pStrm
)
579 m_nGridType
= pStrm
->QuickReaduInt16();
580 m_nGridDistance
= pStrm
->QuickReadInt32();
581 m_pContentStyle
->Read(pStrm
);
585 LwpMiddleLayout::LwpMiddleLayout( LwpObjectHeader
&objHdr
, LwpSvStream
* pStrm
)
586 : LwpVirtualLayout(objHdr
, pStrm
),
587 m_pStyleStuff(new LwpLayoutStyle
), m_pMiscStuff(new LwpLayoutMisc
)
590 LwpMiddleLayout::~LwpMiddleLayout()
594 delete m_pStyleStuff
;
601 void LwpMiddleLayout::Read()
603 LwpObjectStream
* pStrm
= m_pObjStrm
;
605 LwpVirtualLayout::Read();
607 //skip CLiteLayout data;
608 LwpAtomHolder ContentClass
;
609 ContentClass
.Read(pStrm
);
612 // before layout hierarchy rework
613 if(LwpFileHeader::m_nFileRevision
< 0x000B)
616 m_Content
.ReadIndexed(pStrm
);
619 m_BasedOnStyle
.ReadIndexed(pStrm
);
620 m_TabPiece
.ReadIndexed(pStrm
);
622 sal_uInt8 nWhatsItGot
= pStrm
->QuickReaduInt8();
624 if (nWhatsItGot
& DISK_GOT_STYLE_STUFF
)
626 m_pStyleStuff
->Read(pStrm
);
628 if (nWhatsItGot
& DISK_GOT_MISC_STUFF
)
630 m_pMiscStuff
->Read(pStrm
);
633 m_LayGeometry
.ReadIndexed(pStrm
);
634 m_LayScale
.ReadIndexed(pStrm
);
635 m_LayMargins
.ReadIndexed(pStrm
);
636 m_LayBorderStuff
.ReadIndexed(pStrm
);
637 m_LayBackgroundStuff
.ReadIndexed(pStrm
);
639 if (pStrm
->CheckExtra())
641 m_LayExtBorderStuff
.ReadIndexed(pStrm
);
647 #include "lwplaypiece.hxx"
650 * @descr: Get the geometry of current layout
653 LwpLayoutGeometry
* LwpMiddleLayout::GetGeometry()
655 if( !m_LayGeometry
.IsNull() )
657 return ( dynamic_cast<LwpLayoutGeometry
*> (m_LayGeometry
.obj()) );
659 else if( !m_BasedOnStyle
.IsNull() )
661 LwpMiddleLayout
* pLay
= dynamic_cast<LwpMiddleLayout
*> ( m_BasedOnStyle
.obj() );
662 return pLay
? pLay
->GetGeometry() : NULL
;
668 * @descr: Get layout height, measured by "cm"
671 double LwpMiddleLayout::GetGeometryHeight()
673 LwpLayoutGeometry
* pGeo
= GetGeometry();
676 return ( LwpTools::ConvertFromUnitsToMetric( pGeo
->GetHeight() ) );
683 * @descr: Get layout width, measured by "cm"
686 double LwpMiddleLayout::GetGeometryWidth()
688 LwpLayoutGeometry
* pGeo
= GetGeometry();
691 return ( LwpTools::ConvertFromUnitsToMetric( pGeo
->GetWidth() ) );
698 * @descr: Whether the margins is same as parent layout
701 sal_Bool
LwpMiddleLayout::MarginsSameAsParent()
703 if(m_nOverrideFlag
& OVER_MARGINS
)
705 return LwpVirtualLayout::MarginsSameAsParent();
707 if(!m_BasedOnStyle
.IsNull())
709 LwpVirtualLayout
* pLay
= dynamic_cast<LwpVirtualLayout
*> (m_BasedOnStyle
.obj());
711 pLay
->MarginsSameAsParent();
713 return LwpVirtualLayout::MarginsSameAsParent();
719 * @param: nWhichSide - 0: left, 1: right, 2:top, 3: bottom
721 double LwpMiddleLayout::GetMarginsValue(const sal_uInt8
&nWhichSide
)
724 if((nWhichSide
==MARGIN_LEFT
)||(nWhichSide
==MARGIN_RIGHT
))
726 if ( MarginsSameAsParent() )
728 LwpVirtualLayout
* pParent
= dynamic_cast<LwpVirtualLayout
*> (GetParent()->obj());
729 if(pParent
&& !pParent
->IsHeader())
731 fValue
= pParent
->GetMarginsValue(nWhichSide
);
737 if(m_nOverrideFlag
& OVER_MARGINS
)
739 LwpLayoutMargins
* pMar1
= dynamic_cast<LwpLayoutMargins
*> (m_LayMargins
.obj());
742 fValue
= pMar1
->GetMargins()->GetMarginsValue(nWhichSide
);
746 LwpVirtualLayout
* pStyle
= dynamic_cast<LwpVirtualLayout
*> (m_BasedOnStyle
.obj());
749 fValue
= pStyle
->GetMarginsValue(nWhichSide
);
752 return LwpVirtualLayout::GetMarginsValue(nWhichSide
);
755 * @descr: Get extmargin value
756 * @param: nWhichSide - 0: left, 1: right, 2:top, 3: bottom
760 double LwpMiddleLayout::GetExtMarginsValue(const sal_uInt8
&nWhichSide
)
763 if(m_nOverrideFlag
& OVER_MARGINS
)
765 LwpLayoutMargins
* pMar1
= dynamic_cast<LwpLayoutMargins
*> (m_LayMargins
.obj());
768 fValue
= pMar1
->GetExtMargins()->GetMarginsValue(nWhichSide
);
772 LwpVirtualLayout
* pStyle
= dynamic_cast<LwpVirtualLayout
*> (m_BasedOnStyle
.obj());
775 fValue
= pStyle
->GetExtMarginsValue(nWhichSide
);
778 return LwpVirtualLayout::GetExtMarginsValue(nWhichSide
);
781 * @descr: Get the LwpBorderStuff object according to m_LayBorderStuff id.
786 LwpBorderStuff
* LwpMiddleLayout::GetBorderStuff()
788 if(m_nOverrideFlag
& OVER_BORDERS
)
790 LwpLayoutBorder
* pLayoutBorder
= dynamic_cast<LwpLayoutBorder
*>(m_LayBorderStuff
.obj());
791 return pLayoutBorder
? pLayoutBorder
->GetBorderStuff() : NULL
;
793 else if( !m_BasedOnStyle
.IsNull() )
795 LwpMiddleLayout
* pLay
= dynamic_cast<LwpMiddleLayout
*> ( m_BasedOnStyle
.obj() );
796 return pLay
? pLay
->GetBorderStuff() : NULL
;
802 * @descr: Get LwpBackgroundStuff object according to m_LayBackgroundStuff id;
807 LwpBackgroundStuff
* LwpMiddleLayout::GetBackgroundStuff()
809 if(m_nOverrideFlag
& OVER_BACKGROUND
)
811 LwpLayoutBackground
* pLayoutBackground
= dynamic_cast<LwpLayoutBackground
*>(m_LayBackgroundStuff
.obj());
812 return pLayoutBackground
? pLayoutBackground
->GetBackgoudStuff() : NULL
;
814 else if( !m_BasedOnStyle
.IsNull() )
816 LwpMiddleLayout
* pLay
= dynamic_cast<LwpMiddleLayout
*> ( m_BasedOnStyle
.obj() );
817 return pLay
? pLay
->GetBackgroundStuff() : NULL
;
822 * @descr: create xfborder.
827 XFBorders
* LwpMiddleLayout::GetXFBorders()
829 LwpBorderStuff
* pBorderStuff
= GetBorderStuff();
830 if(pBorderStuff
&&pBorderStuff
->GetSide() != 0)
832 //copy from lwpparastyle.
833 XFBorders
*pXFBorders
= new XFBorders();
834 // apply 4 borders respectively
835 LwpBorderStuff::BorderType pType
[] = { LwpBorderStuff::LEFT
, LwpBorderStuff::RIGHT
,
836 LwpBorderStuff::TOP
, LwpBorderStuff::BOTTOM
};
838 for (sal_uInt8 nC
= 0; nC
< 4; nC
++)
840 if (pBorderStuff
->HasSide(pType
[nC
]))
842 LwpParaStyle::ApplySubBorder(pBorderStuff
, pType
[nC
], pXFBorders
);
851 * @descr: Get text direction settings.
856 enumXFTextDir
LwpMiddleLayout::GetTextDirection()
858 enumXFTextDir eTextDir
= enumXFTextDirNone
;
859 sal_uInt8 nDirection
= GetContentOrientation();
862 case TEXT_ORIENT_LRTB
:
864 eTextDir
= enumXFTextDirLR_TB
;
867 case TEXT_ORIENT_TBRL
:
869 eTextDir
= enumXFTextDirTB_RL
;
872 case TEXT_ORIENT_RLBT
: // not supported now
874 eTextDir
= enumXFTextDirNone
;
877 case TEXT_ORIENT_BTLR
: // not supported now
879 eTextDir
= enumXFTextDirNone
;
888 * @descr: Get back ground color.
893 LwpColor
* LwpMiddleLayout::GetBackColor()
895 LwpBackgroundStuff
* pBackgroundStuff
= GetBackgroundStuff();
896 if(pBackgroundStuff
&& !pBackgroundStuff
->IsTransparent())
898 LwpColor
* pColor
= pBackgroundStuff
->GetFillColor();
899 if(pColor
->IsValidColor())
908 * @descr: Add back color settings into xfpagemaster.
913 LwpTabOverride
* LwpMiddleLayout::GetTabOverride()
915 if(m_nAttributes
& OVER_TABS
)
917 if(!m_TabPiece
.IsNull())
918 return (LwpTabOverride
*) dynamic_cast<LwpTabPiece
*>(m_TabPiece
.obj())->GetOverride();
921 else if( !m_BasedOnStyle
.IsNull() )
923 LwpMiddleLayout
* pLay
= dynamic_cast<LwpMiddleLayout
*> ( m_BasedOnStyle
.obj() );
924 return pLay
? pLay
->GetTabOverride() : NULL
;
930 * @descr: Layscale for graphic & watermark
935 sal_uInt16
LwpMiddleLayout::GetScaleMode(void)
937 if ((m_nOverrideFlag
& OVER_SCALING
) && m_LayScale
.obj())
938 return GetLayoutScale()->GetScaleMode();
939 else if (m_BasedOnStyle
.obj())
940 return dynamic_cast<LwpMiddleLayout
*>(m_BasedOnStyle
.obj())->GetScaleMode();
942 return (LwpLayoutScale::FIT_IN_FRAME
| LwpLayoutScale::MAINTAIN_ASPECT_RATIO
);
945 sal_uInt16
LwpMiddleLayout::GetScaleTile(void)
947 if ((m_nOverrideFlag
& OVER_SCALING
) && m_LayScale
.obj())
948 return (GetLayoutScale()->GetPlacement() & LwpLayoutScale::TILED
)
950 else if (m_BasedOnStyle
.obj())
951 return dynamic_cast<LwpMiddleLayout
*>(m_BasedOnStyle
.obj())->GetScaleTile();
956 sal_uInt16
LwpMiddleLayout::GetScaleCenter(void)
958 if ((m_nOverrideFlag
& OVER_SCALING
) && m_LayScale
.obj())
959 return (GetLayoutScale()->GetPlacement() & LwpLayoutScale::CENTERED
)
961 else if (m_BasedOnStyle
.obj())
962 return dynamic_cast<LwpMiddleLayout
*>(m_BasedOnStyle
.obj())->GetScaleCenter();
967 sal_uInt32
LwpMiddleLayout::GetScalePercentage(void)
969 if ((m_nOverrideFlag
& OVER_SCALING
) && m_LayScale
.obj())
970 return GetLayoutScale()->GetScalePercentage()/10;//m_nScalePercentage 1000 = 100%
971 else if (m_BasedOnStyle
.obj())
972 return dynamic_cast<LwpMiddleLayout
*>(m_BasedOnStyle
.obj())->GetScalePercentage();
977 double LwpMiddleLayout::GetScaleWidth(void)
979 if ((m_nOverrideFlag
& OVER_SCALING
) && m_LayScale
.obj())
980 return LwpTools::ConvertFromUnits(GetLayoutScale()->GetScaleWidth());
981 else if (m_BasedOnStyle
.obj())
982 return dynamic_cast<LwpMiddleLayout
*>(m_BasedOnStyle
.obj())->GetScaleWidth();
987 double LwpMiddleLayout::GetScaleHeight(void)
989 if ((m_nOverrideFlag
& OVER_SCALING
) && m_LayScale
.obj())
990 return LwpTools::ConvertFromUnits(GetLayoutScale()->GetScaleHeight());
991 else if (m_BasedOnStyle
.obj())
992 return dynamic_cast<LwpMiddleLayout
*>(m_BasedOnStyle
.obj())->GetScaleHeight();
996 sal_Bool
LwpMiddleLayout::CanSizeRight(void)
998 sal_uInt8 RelType
= GetRelativeType();
1000 if (RelType
== LwpLayoutRelativityGuts::LAY_INLINE
|| RelType
== LwpLayoutRelativityGuts::LAY_PARA_RELATIVE
1001 || RelType
== LwpLayoutRelativityGuts::LAY_INLINE_VERTICAL
)
1007 sal_Int32
LwpMiddleLayout::GetMinimumWidth()
1009 if (((m_nAttributes3
& STYLE3_WIDTHVALID
) != 0) && GetGeometry())
1011 return GetGeometry()->GetWidth();
1013 else if (m_nOverrideFlag
& OVER_SIZE
)
1015 return DetermineWidth();
1019 sal_Int32
LwpMiddleLayout::DetermineWidth()
1021 if (IsSizeRightToContent())
1025 else if (IsSizeRightToContainer())
1031 m_nAttributes3
|= STYLE3_WIDTHVALID
;
1032 return GetGeometry()->GetWidth();
1036 sal_Bool
LwpMiddleLayout::IsSizeRightToContainer(void)
1038 if (!CanSizeRight())
1041 if (m_nOverrideFlag
& OVER_SIZE
)
1043 return (m_nDirection
& ((LAY_USEDIRECTION
|LAY_AUTOSIZE
|LAY_TOCONTAINER
)
1045 == ((LAY_USEDIRECTION
| LAY_TOCONTAINER
| LAY_AUTOSIZE
) << SHIFT_RIGHT
);
1047 else if (m_BasedOnStyle
.obj())
1049 LwpMiddleLayout
* pLayout
= dynamic_cast<LwpMiddleLayout
*>(m_BasedOnStyle
.obj());
1050 return pLayout
? pLayout
->IsSizeRightToContainer() : sal_False
;
1055 sal_Bool
LwpMiddleLayout::IsSizeRightToContent(void)
1057 if (!CanSizeRight())
1060 if (m_nOverrideFlag
& OVER_SIZE
)
1062 return (m_nDirection
& ((LAY_USEDIRECTION
|LAY_AUTOSIZE
|LAY_TOCONTAINER
)
1064 == ((LAY_USEDIRECTION
| LAY_AUTOSIZE
) << SHIFT_RIGHT
);
1066 else if (m_BasedOnStyle
.obj())
1068 LwpMiddleLayout
* pLayout
= dynamic_cast<LwpMiddleLayout
*>(m_BasedOnStyle
.obj());
1069 return pLayout
? pLayout
->IsSizeRightToContent() : sal_False
;
1076 * @descr: Get layout height
1079 double LwpMiddleLayout::GetHeight()
1081 return GetGeometryHeight();
1085 * @descr: Get layout height
1088 double LwpMiddleLayout::GetWidth()
1090 return GetGeometryWidth();
1093 * @descr: Get layout orgin point
1096 LwpPoint
LwpMiddleLayout::GetOrigin()
1098 LwpLayoutGeometry
* pGeo
= GetGeometry();
1101 sal_uInt8 nType
= GetRelativeType();
1102 if(nType
== LwpLayoutRelativityGuts::LAY_INLINE
1103 || nType
== LwpLayoutRelativityGuts::LAY_INLINE_NEWLINE
)
1105 return pGeo
->GetAbsoluteOrigin();
1108 return pGeo
->GetOrigin();
1116 * @descr: Whether the fill is pattern fill or not
1117 * @return: True if yes, false if not.
1119 sal_Bool
LwpMiddleLayout::IsPatternFill()
1121 LwpBackgroundStuff
* pBackgroundStuff
= GetBackgroundStuff();
1122 if (pBackgroundStuff
)
1124 return pBackgroundStuff
->IsPatternFill();
1131 * @descr: Get the fill pattern style. Data are saved in a XFBGImage object
1132 * @return: the fill pattern style.
1134 XFBGImage
* LwpMiddleLayout::GetFillPattern()
1136 LwpBackgroundStuff
* pBackgroundStuff
= GetBackgroundStuff();
1137 if (pBackgroundStuff
)
1139 return pBackgroundStuff
->GetFillPattern();
1147 * @descr: Whether the height and width of layout is auto grow
1150 sal_Bool
LwpMiddleLayout::IsAutoGrow()
1152 if(m_nOverrideFlag
& OVER_SIZE
)
1154 return m_nDirection
&
1155 ((LAY_AUTOGROW
<< SHIFT_UP
) | (LAY_AUTOGROW
<< SHIFT_DOWN
) |
1156 (LAY_AUTOGROW
<< SHIFT_RIGHT
) | (LAY_AUTOGROW
<< SHIFT_LEFT
))
1157 ? sal_True
: sal_False
;
1159 else if( !m_BasedOnStyle
.IsNull() )
1161 LwpMiddleLayout
* pLay
= dynamic_cast<LwpMiddleLayout
*> ( m_BasedOnStyle
.obj() );
1162 return pLay
? pLay
->IsAutoGrow() : sal_False
;
1164 return LwpVirtualLayout::IsAutoGrow();
1168 * @descr: Whether the height of layout is auto grow down
1171 sal_Bool
LwpMiddleLayout::IsAutoGrowDown()
1173 if(m_nOverrideFlag
& OVER_SIZE
)
1175 return m_nDirection
& (LAY_AUTOGROW
<< SHIFT_DOWN
) ? sal_True
: sal_False
;
1177 else if( !m_BasedOnStyle
.IsNull() )
1179 LwpMiddleLayout
* pLay
= dynamic_cast<LwpMiddleLayout
*> ( m_BasedOnStyle
.obj() );
1180 return pLay
? pLay
->IsAutoGrowDown() : sal_False
;
1182 return LwpVirtualLayout::IsAutoGrowDown();
1186 * @descr: Whether the height of layout is auto grow up
1189 sal_Bool
LwpMiddleLayout::IsAutoGrowUp()
1191 if(m_nOverrideFlag
& OVER_SIZE
)
1193 return m_nDirection
& (LAY_AUTOGROW
<< SHIFT_UP
) ? sal_True
: sal_False
;
1195 else if( !m_BasedOnStyle
.IsNull() )
1197 LwpMiddleLayout
* pLay
= dynamic_cast<LwpMiddleLayout
*> ( m_BasedOnStyle
.obj() );
1198 return pLay
? pLay
->IsAutoGrowUp() : sal_False
;
1200 return LwpVirtualLayout::IsAutoGrowUp();
1204 * @descr: Whether the height of layout is auto grow down
1207 sal_Bool
LwpMiddleLayout::IsAutoGrowLeft()
1209 if(m_nOverrideFlag
& OVER_SIZE
)
1211 return m_nDirection
& (LAY_AUTOGROW
<< SHIFT_LEFT
) ? sal_True
: sal_False
;
1213 else if( !m_BasedOnStyle
.IsNull() )
1215 LwpMiddleLayout
* pLay
= dynamic_cast<LwpMiddleLayout
*> ( m_BasedOnStyle
.obj() );
1217 return pLay
->IsAutoGrowLeft();
1219 return LwpVirtualLayout::IsAutoGrowLeft();
1223 * @descr: Whether the height of layout is auto grow down
1226 sal_Bool
LwpMiddleLayout::IsAutoGrowRight()
1228 if(m_nOverrideFlag
& OVER_SIZE
)
1230 return m_nDirection
& (LAY_AUTOGROW
<< SHIFT_RIGHT
) ? sal_True
: sal_False
;
1232 else if( !m_BasedOnStyle
.IsNull() )
1234 LwpMiddleLayout
* pLay
= dynamic_cast<LwpMiddleLayout
*> ( m_BasedOnStyle
.obj() );
1235 return pLay
? pLay
->IsAutoGrowRight() : sal_False
;
1237 return LwpVirtualLayout::IsAutoGrowRight();
1242 * @descr: Get contents orientation
1245 sal_uInt8
LwpMiddleLayout::GetContentOrientation()
1247 //content orientation in Graphic objects and OLE objects not supported now
1248 if((m_nOverrideFlag
& OVER_ROTATION
)&& !m_LayGeometry
.IsNull())
1250 LwpLayoutGeometry
* pLayGeometry
= dynamic_cast<LwpLayoutGeometry
*> (m_LayGeometry
.obj());
1252 return pLayGeometry
->GetContentOrientation();
1254 else if( !m_BasedOnStyle
.IsNull() )
1256 LwpMiddleLayout
* pLay
= dynamic_cast<LwpMiddleLayout
*> ( m_BasedOnStyle
.obj() );
1258 return pLay
->GetContentOrientation();
1260 return LwpVirtualLayout::GetContentOrientation();
1264 * @descr: Whether it is honoring protection
1267 sal_Bool
LwpMiddleLayout::HonorProtection()
1269 if(m_nOverrideFlag
& OVER_MISC
)
1271 if(!(m_nAttributes2
& STYLE2_HONORPROTECTION
))
1274 LwpVirtualLayout
* pParent
= dynamic_cast<LwpVirtualLayout
*> (GetParent()->obj());
1275 if(pParent
&& !pParent
->IsHeader())
1277 return pParent
->HonorProtection();
1280 if(m_pFoundry
)//is null now
1282 LwpDocument
* pDoc
= m_pFoundry
->GetDocument();
1285 return pDoc
->HonorProtection();
1289 else if( !m_BasedOnStyle
.IsNull() )
1291 LwpMiddleLayout
* pLay
= dynamic_cast<LwpMiddleLayout
*> ( m_BasedOnStyle
.obj() );
1293 return pLay
->HonorProtection();
1296 return LwpVirtualLayout::HonorProtection();
1300 * @descr: Whether it is pretected
1303 sal_Bool
LwpMiddleLayout::IsProtected()
1305 sal_Bool bProtected
= sal_False
;
1306 if(m_nOverrideFlag
& OVER_MISC
)
1308 bProtected
= (m_nAttributes
& STYLE_PROTECTED
)!=0;
1310 else if( !m_BasedOnStyle
.IsNull() )
1312 LwpMiddleLayout
* pLay
= dynamic_cast<LwpMiddleLayout
*> ( m_BasedOnStyle
.obj() );
1313 bProtected
= pLay
? pLay
->IsProtected() : sal_False
;
1316 bProtected
= LwpVirtualLayout::IsProtected();
1318 LwpVirtualLayout
* pParent
= dynamic_cast<LwpVirtualLayout
*> (GetParent()->obj());
1319 if(pParent
&& !pParent
->IsHeader())
1321 /* If a parent's protected then none of its children can be accessed. */
1322 if(pParent
->IsProtected())
1325 if(pParent
->HonorProtection())
1328 /* If our parent isn't honoring protection then we aren't protected. */
1332 if(m_pFoundry
)//is null now
1334 LwpDocument
* pDoc
= m_pFoundry
->GetDocument();
1337 if (pDoc
->HonorProtection())
1340 /* If the document isn't honoring protection then we aren't protected.*/
1349 * @descr: Get watermark layout
1352 LwpVirtualLayout
* LwpMiddleLayout::GetWaterMarkLayout()
1354 LwpVirtualLayout
* pLay
= dynamic_cast<LwpVirtualLayout
*>(GetChildHead()->obj());
1357 if( pLay
->IsForWaterMark())
1361 pLay
= dynamic_cast<LwpVirtualLayout
*> (pLay
->GetNext()->obj());
1367 * @descr: Create and reture xfbgimage object for watermark
1370 XFBGImage
* LwpMiddleLayout::GetXFBGImage()
1372 LwpMiddleLayout
* pLay
= static_cast<LwpMiddleLayout
*>(GetWaterMarkLayout());
1376 LwpGraphicObject
* pGrfObj
= dynamic_cast<LwpGraphicObject
*>(pLay
->GetContent()->obj());
1379 XFBGImage
* pXFBGImage
= new XFBGImage();
1381 if(pGrfObj
->IsLinked())
1384 OUString linkedfilepath
= pGrfObj
->GetLinkedFilePath();
1385 OUString fileURL
= LwpTools::convertToFileUrl(OUStringToOString(linkedfilepath
, osl_getThreadTextEncoding()));
1386 pXFBGImage
->SetFileLink(fileURL
);
1390 sal_uInt8
* pGrafData
= NULL
;
1391 sal_uInt32 nDataLen
= pGrfObj
->GetRawGrafData(pGrafData
);
1392 pXFBGImage
->SetImageData(pGrafData
, nDataLen
);
1401 //automatic, top left
1402 pXFBGImage
->SetPosition(enumXFAlignStart
,enumXFAlignTop
);
1403 if(pLay
->GetScaleCenter())
1406 pXFBGImage
->SetPosition(enumXFAlignCenter
,enumXFAlignCenter
);
1408 else if(pLay
->GetScaleTile())
1411 pXFBGImage
->SetRepeate();
1413 //fit type, area type
1414 if((pLay
->GetScaleMode()& LwpLayoutScale::FIT_IN_FRAME
)!=0)
1416 if((pLay
->GetScaleMode()& LwpLayoutScale::MAINTAIN_ASPECT_RATIO
)==0)
1418 pXFBGImage
->SetStretch();
1428 * @descr: Whether the page uses the printer setting
1431 sal_Bool
LwpMiddleLayout::GetUsePrinterSettings()
1433 if(m_nOverrideFlag
& OVER_SIZE
)
1435 return (m_nAttributes3
& STYLE3_USEPRINTERSETTINGS
) != 0;
1437 else if( !m_BasedOnStyle
.IsNull() )
1439 LwpMiddleLayout
* pLay
= dynamic_cast<LwpMiddleLayout
*> ( m_BasedOnStyle
.obj() );
1440 return pLay
? pLay
->GetUsePrinterSettings() : sal_False
;
1446 //Check whether there are contents in the layout
1447 sal_Bool
LwpMiddleLayout::HasContent()
1449 LwpObject
* content
= m_Content
.obj();
1456 LwpLayout::LwpLayout( LwpObjectHeader
&objHdr
, LwpSvStream
* pStrm
) :
1457 LwpMiddleLayout(objHdr
, pStrm
), m_pUseWhen(new LwpUseWhen
)
1460 LwpLayout::~LwpLayout()
1468 void LwpLayout::Read()
1470 LwpObjectStream
* pStrm
= m_pObjStrm
;
1472 LwpMiddleLayout::Read();
1473 if (LwpFileHeader::m_nFileRevision
< 0x000B)
1475 // read PreRevBLayout...
1479 sal_uInt16 nSimple
= pStrm
->QuickReaduInt16();
1483 m_pUseWhen
->Read(pStrm
);
1485 sal_uInt8 nFlag
= pStrm
->QuickReaduInt8();
1487 m_Positon
.ReadIndexed(pStrm
);
1490 m_LayColumns
.ReadIndexed(pStrm
);
1491 m_LayGutterStuff
.ReadIndexed(pStrm
);
1492 m_LayJoinStuff
.ReadIndexed(pStrm
);
1493 m_LayShadow
.ReadIndexed(pStrm
);
1495 if (pStrm
->CheckExtra())
1497 m_LayExtJoinStuff
.ReadIndexed(pStrm
);
1504 * @descr: Get columns number
1507 sal_uInt16
LwpLayout::GetNumCols()
1509 if(m_nOverrideFlag
& OVER_COLUMNS
)
1511 LwpLayoutColumns
* pLayColumns
= dynamic_cast<LwpLayoutColumns
*>(m_LayColumns
.obj());
1514 return pLayColumns
->GetNumCols();
1518 LwpVirtualLayout
* pStyle
= dynamic_cast<LwpVirtualLayout
*> (m_BasedOnStyle
.obj());
1521 return pStyle
->GetNumCols();
1524 return LwpVirtualLayout::GetNumCols();
1529 * @descr: Get column width
1530 * @param: the order of column
1532 double LwpLayout::GetColWidth(sal_uInt16 nIndex
)
1534 if((m_nOverrideFlag
& OVER_COLUMNS
)||(m_nAttributes2
& STYLE2_LOCALCOLUMNINFO
))
1536 LwpLayoutColumns
* pLayColumns
= dynamic_cast<LwpLayoutColumns
*>(m_LayColumns
.obj());
1539 return pLayColumns
->GetColWidth(nIndex
);
1543 LwpVirtualLayout
* pStyle
= dynamic_cast<LwpVirtualLayout
*> (m_BasedOnStyle
.obj());
1546 return pStyle
->GetColWidth(nIndex
);
1549 return LwpVirtualLayout::GetColWidth(nIndex
);
1554 * @descr: Get gap between columns
1555 * @param: the order of column
1557 double LwpLayout::GetColGap(sal_uInt16 nIndex
)
1559 if((m_nOverrideFlag
& OVER_COLUMNS
)||(m_nAttributes2
& STYLE2_LOCALCOLUMNINFO
))
1561 LwpLayoutColumns
* pLayColumns
= dynamic_cast<LwpLayoutColumns
*>(m_LayColumns
.obj());
1564 return pLayColumns
->GetColGap(nIndex
);
1568 LwpVirtualLayout
* pStyle
= dynamic_cast<LwpVirtualLayout
*> (m_BasedOnStyle
.obj());
1571 return pStyle
->GetColGap(nIndex
);
1574 return LwpVirtualLayout::GetColGap(nIndex
);
1578 * @descr: Create and return XFColumns object
1581 XFColumns
* LwpLayout::GetXFColumns()
1583 //if there is only one column, do not need insert columns
1584 sal_uInt16 nCols
= GetNumCols();
1590 XFColumns
* pColumns
= new XFColumns();
1592 boost::scoped_ptr
<XFColumnSep
> pColumnSep(GetColumnSep());
1595 pColumns
->SetSeparator(*pColumnSep
);
1598 //set column count and column gap
1599 pColumns
->SetCount(nCols
);
1600 double fGap
= GetColGap(0);
1601 pColumns
->SetGap(fGap
);
1604 for(sal_uInt16 nIndex
= 0; nIndex
<nCols
; nIndex
++)
1607 sal_Int32 nWidth
= static_cast<sal_Int32
>(GetColWidth(nIndex
));
1608 nWidth
=8305/nCols
; //relative width
1609 aColumn
.SetRelWidth(nWidth
);
1611 //the left and right margins is 0;
1612 double nGap
= GetColGap(nIndex
)/2;
1614 aColumn
.SetMargins(nGap
,nGap
);
1617 aColumn
.SetMargins(0,nGap
);
1619 if(nIndex
==(nCols
-1))
1621 aColumn
.SetMargins(nGap
,0);
1623 pColumns
->AddColumn(aColumn
);
1630 * @descr: Create and return XFColumnSep object
1633 XFColumnSep
* LwpLayout::GetColumnSep()
1636 //Get LwpLayoutGutters
1637 LwpLayoutGutters
* pLayoutGutters
= dynamic_cast<LwpLayoutGutters
*>(m_LayGutterStuff
.obj());
1643 LwpBorderStuff
* pBorderStuff
= pLayoutGutters
->GetBorderStuff();
1647 LwpBorderStuff::BorderType eType
= LwpBorderStuff::LEFT
;
1648 LwpColor aColor
= pBorderStuff
->GetSideColor(eType
);
1649 double fWidth
= pBorderStuff
->GetSideWidth(eType
);
1650 //sal_uInt16 nType = pBorderStuff->GetSideType(eType);
1652 XFColumnSep
* pColumnSep
= new XFColumnSep();
1653 XFColor
aXFColor(aColor
.To24Color());
1654 pColumnSep
->SetColor(aXFColor
);
1655 pColumnSep
->SetWidth(fWidth
);
1656 pColumnSep
->SetRelHeight(100);
1657 pColumnSep
->SetVerticalAlign(enumXFAlignTop
);
1666 * @descr: Get use when type
1669 LwpLayout::UseWhenType
LwpLayout::GetUseWhenType()
1671 UseWhenType eType
= StartWithinPage
;
1672 LwpUseWhen
* pUseWhen
= GetUseWhen();
1675 if(pUseWhen
->IsStartOnThisHF())
1677 eType
= StartWithinColume
;
1679 else if(pUseWhen
->IsStartOnThisPage())
1681 eType
= StartWithinPage
;
1683 else if(pUseWhen
->IsStartOnNextPage())
1685 eType
= StartOnNextPage
;
1687 else if(pUseWhen
->IsStartOnNextOddPage())
1689 eType
= StartOnOddPage
;
1691 else if(pUseWhen
->IsStartOnNextEvenPage())
1693 eType
= StartOnEvenPage
;
1699 eType
= StartOnNextPage
;
1705 * @descr: Get use page
1708 sal_uInt16
LwpLayout::GetUsePage()
1710 if(m_nOverrideFlag
& OVER_PLACEMENT
)
1712 LwpUseWhen
* pUseWhen
= GetUseWhen();
1714 return pUseWhen
->GetUsePage();
1718 else if( !m_BasedOnStyle
.IsNull() )
1720 LwpLayout
* pLay
= dynamic_cast<LwpLayout
*> ( m_BasedOnStyle
.obj() );
1721 return pLay
? pLay
->GetUsePage() : 0;
1727 * @descr: Get usewhen pointer
1730 LwpUseWhen
* LwpLayout::VirtualGetUseWhen()
1732 if(m_nOverrideFlag
& OVER_PLACEMENT
)
1736 else if( !m_BasedOnStyle
.IsNull() )
1738 LwpLayout
* pLay
= dynamic_cast<LwpLayout
*> ( m_BasedOnStyle
.obj() );
1739 return pLay
? pLay
->VirtualGetUseWhen() : NULL
;
1741 return LwpVirtualLayout::VirtualGetUseWhen();
1745 * @descr: Whether it is use on all pages
1748 sal_Bool
LwpLayout::IsUseOnAllPages()
1750 if(m_nOverrideFlag
& OVER_PLACEMENT
)
1752 LwpUseWhen
* pUseWhen
= GetUseWhen();
1754 return pUseWhen
->IsUseOnAllPages();
1758 else if( !m_BasedOnStyle
.IsNull() )
1760 LwpLayout
* pLay
= dynamic_cast<LwpLayout
*> ( m_BasedOnStyle
.obj() );
1762 return pLay
->IsUseOnAllPages();
1764 return LwpVirtualLayout::IsUseOnAllPages();
1768 * @descr: Whether it is use on all even pages
1771 sal_Bool
LwpLayout::IsUseOnAllEvenPages()
1773 if(m_nOverrideFlag
& OVER_PLACEMENT
)
1775 LwpUseWhen
* pUseWhen
= GetUseWhen();
1777 return pUseWhen
->IsUseOnAllEvenPages();
1781 else if( !m_BasedOnStyle
.IsNull() )
1783 LwpLayout
* pLay
= dynamic_cast<LwpLayout
*> ( m_BasedOnStyle
.obj() );
1785 return pLay
->IsUseOnAllEvenPages();
1787 return LwpVirtualLayout::IsUseOnAllEvenPages();
1791 * @descr: Whether it is use on all odd pages
1794 sal_Bool
LwpLayout::IsUseOnAllOddPages()
1796 if(m_nOverrideFlag
& OVER_PLACEMENT
)
1798 LwpUseWhen
* pUseWhen
= GetUseWhen();
1800 return pUseWhen
->IsUseOnAllOddPages();
1804 else if( !m_BasedOnStyle
.IsNull() )
1806 LwpLayout
* pLay
= dynamic_cast<LwpLayout
*> ( m_BasedOnStyle
.obj() );
1808 return pLay
->IsUseOnAllOddPages();
1810 return LwpVirtualLayout::IsUseOnAllOddPages();
1814 * @descr: Whether it is use on current page
1817 sal_Bool
LwpLayout::IsUseOnPage()
1819 if(m_nOverrideFlag
& OVER_PLACEMENT
)
1821 LwpUseWhen
* pUseWhen
= GetUseWhen();
1823 return pUseWhen
->IsUseOnPage();
1827 else if( !m_BasedOnStyle
.IsNull() )
1829 LwpLayout
* pLay
= dynamic_cast<LwpLayout
*> ( m_BasedOnStyle
.obj() );
1831 return pLay
->IsUseOnPage();
1833 return LwpVirtualLayout::IsUseOnPage();
1837 * @descr: Get the LwpShadow object according to m_LayShadow id.
1842 LwpShadow
* LwpLayout::GetShadow()
1844 if(m_nOverrideFlag
& OVER_SHADOW
)
1846 LwpLayoutShadow
* pLayoutShadow
= dynamic_cast<LwpLayoutShadow
*>(m_LayShadow
.obj());
1847 return pLayoutShadow
? pLayoutShadow
->GetShadow() : NULL
;
1849 else if( !m_BasedOnStyle
.IsNull() )
1851 LwpLayout
* pLay
= dynamic_cast<LwpLayout
*> ( m_BasedOnStyle
.obj() );
1852 return pLay
? pLay
->GetShadow() : NULL
;
1858 * @descr: create xfshadow
1863 XFShadow
* LwpLayout::GetXFShadow()
1865 LwpShadow
* pShadow
= GetShadow();
1868 LwpColor color
= pShadow
->GetColor();
1869 double offsetX
= pShadow
->GetOffsetX();
1870 double offsetY
= pShadow
->GetOffsetY();
1872 if( offsetX
&& offsetY
&& color
.IsValidColor() )
1874 XFShadow
* pXFShadow
= new XFShadow();
1875 enumXFShadowPos eXFShadowPos
= enumXFShadowLeftTop
;
1878 sal_Bool left
= sal_False
;
1879 sal_Bool top
= sal_False
;
1888 eXFShadowPos
= enumXFShadowLeftTop
;
1890 eXFShadowPos
= enumXFShadowLeftBottom
;
1896 eXFShadowPos
= enumXFShadowRightTop
;
1898 eXFShadowPos
= enumXFShadowRightBottom
;
1901 pXFShadow
->SetPosition(eXFShadowPos
);
1902 pXFShadow
->SetOffset(fOffset
);
1903 pXFShadow
->SetColor(XFColor(color
.To24Color()));
1912 * @descr get the layout that containers the current frame layout
1915 LwpVirtualLayout
* LwpLayout::GetContainerLayout()
1917 if(IsRelativeAnchored())
1920 LwpPara
* pPara
= dynamic_cast<LwpPara
*>(GetPosition()->obj());
1923 LwpStory
* pStory
= pPara
->GetStory();
1924 return pStory
? pStory
->GetTabLayout() : NULL
;
1927 return GetParentLayout();
1930 LwpPlacableLayout::LwpPlacableLayout( LwpObjectHeader
&objHdr
, LwpSvStream
* pStrm
)
1931 : LwpLayout(objHdr
, pStrm
),m_pFont(NULL
)
1934 LwpPlacableLayout::~LwpPlacableLayout()
1937 void LwpPlacableLayout::Read()
1939 LwpObjectStream
* pStrm
= m_pObjStrm
;
1941 if(LwpFileHeader::m_nFileRevision
< 0x000B)
1947 sal_uInt16 simple
= pStrm
->QuickReaduInt16();
1950 m_nWrapType
= pStrm
->QuickReaduInt8();
1951 m_nBuoyancy
= pStrm
->QuickReaduInt8();
1952 m_nBaseLineOffset
= pStrm
->QuickReadInt32();
1953 m_Script
.Read( pStrm
);
1957 m_nWrapType
= LAY_WRAP_AROUND
;
1958 m_nBuoyancy
= LAY_BUOYNEUTRAL
;
1959 m_nBaseLineOffset
= 0;
1961 m_LayRelativity
.ReadIndexed( pStrm
);
1962 if(pStrm
->CheckExtra())
1964 sal_uInt16 count
= pStrm
->QuickReaduInt16();
1967 // temporily added by to avoid assertion
1981 * @descr: get wrap type
1986 sal_uInt8
LwpPlacableLayout::GetWrapType()
1988 if(m_nOverrideFlag
& OVER_PLACEMENT
)
1992 else if( !m_BasedOnStyle
.IsNull() )
1994 LwpPlacableLayout
* pLay
= dynamic_cast<LwpPlacableLayout
*> ( m_BasedOnStyle
.obj() );
1996 return pLay
->GetWrapType();
1998 return LAY_WRAP_AROUND
;
2001 * @descr: get LayoutRelativity
2006 LwpLayoutRelativity
* LwpPlacableLayout::GetRelativityPiece()
2008 if(!m_LayRelativity
.IsNull())
2010 if(m_nOverrideFlag
& OVER_PLACEMENT
)
2012 return dynamic_cast<LwpLayoutRelativity
*>(m_LayRelativity
.obj());
2015 else if( !m_BasedOnStyle
.IsNull() )
2017 LwpPlacableLayout
* pLay
= dynamic_cast<LwpPlacableLayout
*> ( m_BasedOnStyle
.obj() );
2018 return pLay
? pLay
->GetRelativityPiece() : NULL
;
2023 * @descr: Get relative type
2026 sal_uInt8
LwpPlacableLayout::GetRelativeType()
2028 LwpLayoutRelativity
* pLayRel
= GetRelativityPiece();
2031 return pLayRel
->GetRelGuts()->GetRelativeType();
2033 return LwpVirtualLayout::GetRelativeType();
2036 * @descr: Get offset from the baseline
2039 sal_Int32
LwpPlacableLayout::GetBaseLineOffset()
2041 /* The baseline is only valid if this is flow-with-text */
2042 if(GetRelativeType()!=LwpLayoutRelativityGuts::LAY_INLINE
)
2047 // First, ask our content if it has a baseline, ignore now
2049 if (Content && Content->GetBaseLineOffset(&Baseline))
2053 if(m_nOverrideFlag
& OVER_PLACEMENT
)
2055 return m_nBaseLineOffset
;
2057 else if( !m_BasedOnStyle
.IsNull() )
2059 LwpPlacableLayout
* pLay
= dynamic_cast<LwpPlacableLayout
*> ( m_BasedOnStyle
.obj() );
2060 return pLay
? pLay
->GetBaseLineOffset() : 0;
2067 * @descr: whether the parent layout is page layout
2070 sal_Bool
LwpPlacableLayout::IsAnchorPage()
2072 if(IsRelativeAnchored())
2075 LwpVirtualLayout
* pLayout
= GetParentLayout();
2076 if(pLayout
&& (pLayout
->IsPage() || pLayout
->IsHeader() || pLayout
->IsFooter()))
2077 //if(pLayout && pLayout->IsPage())
2084 * @descr: whether the parent layout is frame layout
2087 sal_Bool
LwpPlacableLayout::IsAnchorFrame()
2089 if(IsRelativeAnchored())
2092 LwpVirtualLayout
* pLayout
= GetParentLayout();
2093 if(pLayout
&& (pLayout
->IsFrame()||pLayout
->IsGroupHead()))
2100 * @descr: whether the parent layout is cell layout
2103 sal_Bool
LwpPlacableLayout::IsAnchorCell()
2105 if(IsRelativeAnchored())
2108 LwpVirtualLayout
* pLayout
= GetParentLayout();
2109 if(pLayout
&& pLayout
->IsCell())
2117 * @descr: Get font style for setting position of frame
2120 XFFont
* LwpPlacableLayout::GetFont()
2125 * @descr: Set font style for setting position of frame
2128 void LwpPlacableLayout::SetFont(XFFont
* pFont
)
2133 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */