xref: /aoo4110/main/sw/source/core/layout/atrfrm.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_sw.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski 
28*b1cdbd2cSJim Jagielski #include <hintids.hxx>
29*b1cdbd2cSJim Jagielski #include <com/sun/star/text/RelOrientation.hpp>
30*b1cdbd2cSJim Jagielski #include <com/sun/star/text/VertOrientation.hpp>
31*b1cdbd2cSJim Jagielski #include <com/sun/star/text/HorizontalAdjust.hpp>
32*b1cdbd2cSJim Jagielski #include <com/sun/star/text/DocumentStatistic.hpp>
33*b1cdbd2cSJim Jagielski #include <com/sun/star/text/HoriOrientation.hpp>
34*b1cdbd2cSJim Jagielski #include <com/sun/star/text/HoriOrientationFormat.hpp>
35*b1cdbd2cSJim Jagielski #include <com/sun/star/text/NotePrintMode.hpp>
36*b1cdbd2cSJim Jagielski #include <com/sun/star/text/SizeType.hpp>
37*b1cdbd2cSJim Jagielski #include <com/sun/star/text/VertOrientationFormat.hpp>
38*b1cdbd2cSJim Jagielski #include <com/sun/star/text/WrapTextMode.hpp>
39*b1cdbd2cSJim Jagielski #include <com/sun/star/text/XTextFrame.hpp>
40*b1cdbd2cSJim Jagielski #include <com/sun/star/text/TextContentAnchorType.hpp>
41*b1cdbd2cSJim Jagielski #include <com/sun/star/text/InvalidTextContentException.hpp>
42*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XIndexContainer.hpp>
43*b1cdbd2cSJim Jagielski #include <com/sun/star/text/TextGridMode.hpp>
44*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/Size.hpp>
45*b1cdbd2cSJim Jagielski #include <svtools/unoimap.hxx>
46*b1cdbd2cSJim Jagielski #include <svtools/unoevent.hxx>
47*b1cdbd2cSJim Jagielski #include <basic/sbxvar.hxx>
48*b1cdbd2cSJim Jagielski #include <svtools/imap.hxx>
49*b1cdbd2cSJim Jagielski #include <svtools/imapobj.hxx>
50*b1cdbd2cSJim Jagielski #include <editeng/ulspitem.hxx>
51*b1cdbd2cSJim Jagielski #include <editeng/lrspitem.hxx>
52*b1cdbd2cSJim Jagielski #include <svx/svdmodel.hxx>
53*b1cdbd2cSJim Jagielski #include <svx/svdpage.hxx>
54*b1cdbd2cSJim Jagielski #include <unosett.hxx>
55*b1cdbd2cSJim Jagielski #include <unostyle.hxx>
56*b1cdbd2cSJim Jagielski #include <fmtclds.hxx>
57*b1cdbd2cSJim Jagielski #include <fmtornt.hxx>
58*b1cdbd2cSJim Jagielski #include <fmthdft.hxx>
59*b1cdbd2cSJim Jagielski #include <fmtpdsc.hxx>
60*b1cdbd2cSJim Jagielski #include <fmtcntnt.hxx>
61*b1cdbd2cSJim Jagielski #include <fmtfsize.hxx>
62*b1cdbd2cSJim Jagielski #include <fmtfordr.hxx>
63*b1cdbd2cSJim Jagielski #include <fmtsrnd.hxx>
64*b1cdbd2cSJim Jagielski #include <fmtanchr.hxx>
65*b1cdbd2cSJim Jagielski #include <fmtlsplt.hxx>
66*b1cdbd2cSJim Jagielski #include <fmtrowsplt.hxx>
67*b1cdbd2cSJim Jagielski #include <fmtftntx.hxx>
68*b1cdbd2cSJim Jagielski #include <fmteiro.hxx>
69*b1cdbd2cSJim Jagielski #include <fmturl.hxx>
70*b1cdbd2cSJim Jagielski #include <fmtcnct.hxx>
71*b1cdbd2cSJim Jagielski #include <node.hxx>
72*b1cdbd2cSJim Jagielski #include <section.hxx>
73*b1cdbd2cSJim Jagielski #include <fmtline.hxx>
74*b1cdbd2cSJim Jagielski #include <tgrditem.hxx>
75*b1cdbd2cSJim Jagielski #include <hfspacingitem.hxx>
76*b1cdbd2cSJim Jagielski #include <doc.hxx>
77*b1cdbd2cSJim Jagielski #include <IDocumentUndoRedo.hxx>
78*b1cdbd2cSJim Jagielski #include <pagefrm.hxx>
79*b1cdbd2cSJim Jagielski #include <rootfrm.hxx>
80*b1cdbd2cSJim Jagielski #include <cntfrm.hxx>
81*b1cdbd2cSJim Jagielski #include <crsrsh.hxx>
82*b1cdbd2cSJim Jagielski #include <pam.hxx>
83*b1cdbd2cSJim Jagielski #include <dflyobj.hxx>
84*b1cdbd2cSJim Jagielski #include <dcontact.hxx>
85*b1cdbd2cSJim Jagielski #include <flyfrm.hxx>
86*b1cdbd2cSJim Jagielski #include <frmtool.hxx>
87*b1cdbd2cSJim Jagielski #include <flyfrms.hxx>
88*b1cdbd2cSJim Jagielski #include <pagedesc.hxx>
89*b1cdbd2cSJim Jagielski #include <grfatr.hxx>
90*b1cdbd2cSJim Jagielski #include <ndnotxt.hxx>
91*b1cdbd2cSJim Jagielski #include <docary.hxx>
92*b1cdbd2cSJim Jagielski #include <node2lay.hxx>
93*b1cdbd2cSJim Jagielski #include <fmtclbl.hxx>
94*b1cdbd2cSJim Jagielski #include <swunohelper.hxx>
95*b1cdbd2cSJim Jagielski #include <unoframe.hxx>
96*b1cdbd2cSJim Jagielski #include <unotextbodyhf.hxx>
97*b1cdbd2cSJim Jagielski #include <SwStyleNameMapper.hxx>
98*b1cdbd2cSJim Jagielski #include <editeng/brshitem.hxx>
99*b1cdbd2cSJim Jagielski #include <svtools/grfmgr.hxx>
100*b1cdbd2cSJim Jagielski #include <cmdid.h>
101*b1cdbd2cSJim Jagielski #include <unomid.h>
102*b1cdbd2cSJim Jagielski #include <comcore.hrc>
103*b1cdbd2cSJim Jagielski #include <svx/svdundo.hxx> // #111827#
104*b1cdbd2cSJim Jagielski #include <sortedobjs.hxx>
105*b1cdbd2cSJim Jagielski #include <HandleAnchorNodeChg.hxx>
106*b1cdbd2cSJim Jagielski #include <svl/cjkoptions.hxx>
107*b1cdbd2cSJim Jagielski #include <switerator.hxx>
108*b1cdbd2cSJim Jagielski #include <pagedeschint.hxx>
109*b1cdbd2cSJim Jagielski 
110*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
111*b1cdbd2cSJim Jagielski using ::rtl::OUString;
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski SV_IMPL_PTRARR(SwColumns,SwColumn*)
114*b1cdbd2cSJim Jagielski 
115*b1cdbd2cSJim Jagielski TYPEINIT1(SwFmtVertOrient, SfxPoolItem);
116*b1cdbd2cSJim Jagielski TYPEINIT1(SwFmtHoriOrient, SfxPoolItem);
117*b1cdbd2cSJim Jagielski TYPEINIT2(SwFmtHeader,  SfxPoolItem, SwClient );
118*b1cdbd2cSJim Jagielski TYPEINIT2(SwFmtFooter,  SfxPoolItem, SwClient );
119*b1cdbd2cSJim Jagielski TYPEINIT2(SwFmtPageDesc,  SfxPoolItem, SwClient );
120*b1cdbd2cSJim Jagielski TYPEINIT1_AUTOFACTORY(SwFmtLineNumber, SfxPoolItem);
121*b1cdbd2cSJim Jagielski 
122*b1cdbd2cSJim Jagielski /* -----------------19.05.98 09:26-------------------
123*b1cdbd2cSJim Jagielski  * 	Umwandlung fuer QueryValue
124*b1cdbd2cSJim Jagielski  * --------------------------------------------------*/
lcl_RelToINT(sal_Int16 eRelation)125*b1cdbd2cSJim Jagielski sal_Int16 lcl_RelToINT(sal_Int16 eRelation)
126*b1cdbd2cSJim Jagielski {
127*b1cdbd2cSJim Jagielski     sal_Int16 nRet = text::RelOrientation::FRAME;
128*b1cdbd2cSJim Jagielski 	switch(eRelation)
129*b1cdbd2cSJim Jagielski 	{
130*b1cdbd2cSJim Jagielski     case  text::RelOrientation::PRINT_AREA:           nRet = text::RelOrientation::PRINT_AREA; break;
131*b1cdbd2cSJim Jagielski     case  text::RelOrientation::CHAR:         nRet = text::RelOrientation::CHAR; break;
132*b1cdbd2cSJim Jagielski     case  text::RelOrientation::PAGE_LEFT:        nRet = text::RelOrientation::PAGE_LEFT; break;
133*b1cdbd2cSJim Jagielski     case  text::RelOrientation::PAGE_RIGHT:       nRet = text::RelOrientation::PAGE_RIGHT; break;
134*b1cdbd2cSJim Jagielski     case  text::RelOrientation::FRAME_LEFT:       nRet = text::RelOrientation::FRAME_LEFT; break;
135*b1cdbd2cSJim Jagielski     case  text::RelOrientation::FRAME_RIGHT:  nRet = text::RelOrientation::FRAME_RIGHT; break;
136*b1cdbd2cSJim Jagielski     case  text::RelOrientation::PAGE_FRAME:       nRet = text::RelOrientation::PAGE_FRAME; break;
137*b1cdbd2cSJim Jagielski     case  text::RelOrientation::PAGE_PRINT_AREA:  nRet = text::RelOrientation::PAGE_PRINT_AREA; break;
138*b1cdbd2cSJim Jagielski     // OD 13.11.2003 #i22341#
139*b1cdbd2cSJim Jagielski     case  text::RelOrientation::TEXT_LINE:    nRet = text::RelOrientation::TEXT_LINE; break;
140*b1cdbd2cSJim Jagielski     default: break;
141*b1cdbd2cSJim Jagielski 	}
142*b1cdbd2cSJim Jagielski 	return nRet;
143*b1cdbd2cSJim Jagielski }
144*b1cdbd2cSJim Jagielski 
lcl_IntToRelation(const uno::Any & rVal)145*b1cdbd2cSJim Jagielski sal_Int16 lcl_IntToRelation(const uno::Any& rVal)
146*b1cdbd2cSJim Jagielski {
147*b1cdbd2cSJim Jagielski     sal_Int16 eRet = text::RelOrientation::FRAME;
148*b1cdbd2cSJim Jagielski     sal_Int16 nVal = 0;
149*b1cdbd2cSJim Jagielski     rVal >>= nVal;
150*b1cdbd2cSJim Jagielski     switch(nVal)
151*b1cdbd2cSJim Jagielski 	{
152*b1cdbd2cSJim Jagielski         case  text::RelOrientation::PRINT_AREA:         eRet =   text::RelOrientation::PRINT_AREA           ; break;
153*b1cdbd2cSJim Jagielski         case  text::RelOrientation::CHAR:               eRet =   text::RelOrientation::CHAR          ; break;
154*b1cdbd2cSJim Jagielski         case  text::RelOrientation::PAGE_LEFT:          eRet =   text::RelOrientation::PAGE_LEFT       ; break;
155*b1cdbd2cSJim Jagielski         case  text::RelOrientation::PAGE_RIGHT:         eRet =   text::RelOrientation::PAGE_RIGHT      ; break;
156*b1cdbd2cSJim Jagielski         case  text::RelOrientation::FRAME_LEFT:         eRet =   text::RelOrientation::FRAME_LEFT      ; break;
157*b1cdbd2cSJim Jagielski         case  text::RelOrientation::FRAME_RIGHT:        eRet =   text::RelOrientation::FRAME_RIGHT     ; break;
158*b1cdbd2cSJim Jagielski         case  text::RelOrientation::PAGE_FRAME:         eRet =   text::RelOrientation::PAGE_FRAME      ; break;
159*b1cdbd2cSJim Jagielski         case  text::RelOrientation::PAGE_PRINT_AREA:    eRet =   text::RelOrientation::PAGE_PRINT_AREA    ; break;
160*b1cdbd2cSJim Jagielski         // OD 13.11.2003 #i22341#
161*b1cdbd2cSJim Jagielski         case  text::RelOrientation::TEXT_LINE: eRet = text::RelOrientation::TEXT_LINE; break;
162*b1cdbd2cSJim Jagielski     }
163*b1cdbd2cSJim Jagielski 	return eRet;
164*b1cdbd2cSJim Jagielski }
165*b1cdbd2cSJim Jagielski 
DelHFFormat(SwClient * pToRemove,SwFrmFmt * pFmt)166*b1cdbd2cSJim Jagielski void DelHFFormat( SwClient *pToRemove, SwFrmFmt *pFmt )
167*b1cdbd2cSJim Jagielski {
168*b1cdbd2cSJim Jagielski 	//Wenn der Client der letzte ist der das Format benutzt, so muss dieses
169*b1cdbd2cSJim Jagielski 	//vernichtet werden. Zuvor muss jedoch ggf. die Inhaltssection vernichtet
170*b1cdbd2cSJim Jagielski 	//werden.
171*b1cdbd2cSJim Jagielski 	SwDoc* pDoc = pFmt->GetDoc();
172*b1cdbd2cSJim Jagielski 	pFmt->Remove( pToRemove );
173*b1cdbd2cSJim Jagielski 	if( pDoc->IsInDtor() )
174*b1cdbd2cSJim Jagielski 	{
175*b1cdbd2cSJim Jagielski 		delete pFmt;
176*b1cdbd2cSJim Jagielski 		return;
177*b1cdbd2cSJim Jagielski 	}
178*b1cdbd2cSJim Jagielski 
179*b1cdbd2cSJim Jagielski 	//Nur noch Frms angemeldet?
180*b1cdbd2cSJim Jagielski 	sal_Bool bDel = sal_True;
181*b1cdbd2cSJim Jagielski 	{
182*b1cdbd2cSJim Jagielski 		// Klammer, weil im DTOR SwClientIter das Flag bTreeChg zurueck
183*b1cdbd2cSJim Jagielski 		// gesetzt wird. Unguenstig, wenn das Format vorher zerstoert wird.
184*b1cdbd2cSJim Jagielski 		SwClientIter aIter( *pFmt );        // TODO
185*b1cdbd2cSJim Jagielski 		SwClient *pLast = aIter.GoStart();
186*b1cdbd2cSJim Jagielski 		if( pLast )
187*b1cdbd2cSJim Jagielski 			do {
188*b1cdbd2cSJim Jagielski                 bDel = pLast->IsA( TYPE(SwFrm) )
189*b1cdbd2cSJim Jagielski                     || SwXHeadFootText::IsXHeadFootText(pLast);
190*b1cdbd2cSJim Jagielski 			} while( bDel && 0 != ( pLast = ++aIter ));
191*b1cdbd2cSJim Jagielski 	}
192*b1cdbd2cSJim Jagielski 
193*b1cdbd2cSJim Jagielski 	if ( bDel )
194*b1cdbd2cSJim Jagielski 	{
195*b1cdbd2cSJim Jagielski 		//Wenn in einem der Nodes noch ein Crsr angemeldet ist, muss das
196*b1cdbd2cSJim Jagielski 		//ParkCrsr einer (beliebigen) Shell gerufen werden.
197*b1cdbd2cSJim Jagielski 		SwFmtCntnt& rCnt = (SwFmtCntnt&)pFmt->GetCntnt();
198*b1cdbd2cSJim Jagielski 		if ( rCnt.GetCntntIdx() )
199*b1cdbd2cSJim Jagielski 		{
200*b1cdbd2cSJim Jagielski 			SwNode *pNode = 0;
201*b1cdbd2cSJim Jagielski 			{
202*b1cdbd2cSJim Jagielski                 // --> OD 2008-10-07 #i92993#
203*b1cdbd2cSJim Jagielski                 // Begin with start node of page header/footer to assure that
204*b1cdbd2cSJim Jagielski                 // complete content is checked for cursors and the complete content
205*b1cdbd2cSJim Jagielski                 // is deleted on below made method call <pDoc->DeleteSection(pNode)>
206*b1cdbd2cSJim Jagielski //                SwNodeIndex aIdx( *rCnt.GetCntntIdx(), 1 );
207*b1cdbd2cSJim Jagielski                 SwNodeIndex aIdx( *rCnt.GetCntntIdx(), 0 );
208*b1cdbd2cSJim Jagielski                 // <--
209*b1cdbd2cSJim Jagielski 				//Wenn in einem der Nodes noch ein Crsr angemeldet ist, muss das
210*b1cdbd2cSJim Jagielski 				//ParkCrsr einer (beliebigen) Shell gerufen werden.
211*b1cdbd2cSJim Jagielski                 pNode = & aIdx.GetNode();
212*b1cdbd2cSJim Jagielski 				sal_uInt32 nEnd = pNode->EndOfSectionIndex();
213*b1cdbd2cSJim Jagielski 				while ( aIdx < nEnd )
214*b1cdbd2cSJim Jagielski 				{
215*b1cdbd2cSJim Jagielski 					if ( pNode->IsCntntNode() &&
216*b1cdbd2cSJim Jagielski 						 ((SwCntntNode*)pNode)->GetDepends() )
217*b1cdbd2cSJim Jagielski 					{
218*b1cdbd2cSJim Jagielski 						SwCrsrShell *pShell = SwIterator<SwCrsrShell,SwCntntNode>::FirstElement( *(SwCntntNode*)pNode );
219*b1cdbd2cSJim Jagielski 						if( pShell )
220*b1cdbd2cSJim Jagielski 						{
221*b1cdbd2cSJim Jagielski 							pShell->ParkCrsr( aIdx );
222*b1cdbd2cSJim Jagielski 								aIdx = nEnd-1;
223*b1cdbd2cSJim Jagielski 						}
224*b1cdbd2cSJim Jagielski 					}
225*b1cdbd2cSJim Jagielski 					aIdx++;
226*b1cdbd2cSJim Jagielski                     pNode = & aIdx.GetNode();
227*b1cdbd2cSJim Jagielski                 }
228*b1cdbd2cSJim Jagielski             }
229*b1cdbd2cSJim Jagielski             rCnt.SetNewCntntIdx( (const SwNodeIndex*)0 );
230*b1cdbd2cSJim Jagielski 
231*b1cdbd2cSJim Jagielski 			// beim Loeschen von Header/Footer-Formaten IMMER das Undo
232*b1cdbd2cSJim Jagielski 			// abschalten! (Bug 31069)
233*b1cdbd2cSJim Jagielski             ::sw::UndoGuard const undoGuard(pDoc->GetIDocumentUndoRedo());
234*b1cdbd2cSJim Jagielski 
235*b1cdbd2cSJim Jagielski 			ASSERT( pNode, "Ein grosses Problem." );
236*b1cdbd2cSJim Jagielski 			pDoc->DeleteSection( pNode );
237*b1cdbd2cSJim Jagielski 		}
238*b1cdbd2cSJim Jagielski 		delete pFmt;
239*b1cdbd2cSJim Jagielski 	}
240*b1cdbd2cSJim Jagielski }
241*b1cdbd2cSJim Jagielski 
242*b1cdbd2cSJim Jagielski //	class SwFmtFrmSize
243*b1cdbd2cSJim Jagielski //	Implementierung teilweise inline im hxx
244*b1cdbd2cSJim Jagielski 
SwFmtFrmSize(SwFrmSize eSize,SwTwips nWidth,SwTwips nHeight)245*b1cdbd2cSJim Jagielski SwFmtFrmSize::SwFmtFrmSize( SwFrmSize eSize, SwTwips nWidth, SwTwips nHeight )
246*b1cdbd2cSJim Jagielski 	: SfxPoolItem( RES_FRM_SIZE ),
247*b1cdbd2cSJim Jagielski 	aSize( nWidth, nHeight ),
248*b1cdbd2cSJim Jagielski     eFrmHeightType( eSize ),
249*b1cdbd2cSJim Jagielski     eFrmWidthType( ATT_FIX_SIZE )
250*b1cdbd2cSJim Jagielski {
251*b1cdbd2cSJim Jagielski 	nWidthPercent = nHeightPercent = 0;
252*b1cdbd2cSJim Jagielski }
253*b1cdbd2cSJim Jagielski 
operator =(const SwFmtFrmSize & rCpy)254*b1cdbd2cSJim Jagielski SwFmtFrmSize& SwFmtFrmSize::operator=( const SwFmtFrmSize& rCpy )
255*b1cdbd2cSJim Jagielski {
256*b1cdbd2cSJim Jagielski 	aSize = rCpy.GetSize();
257*b1cdbd2cSJim Jagielski     eFrmHeightType = rCpy.GetHeightSizeType();
258*b1cdbd2cSJim Jagielski     eFrmWidthType = rCpy.GetWidthSizeType();
259*b1cdbd2cSJim Jagielski 	nHeightPercent = rCpy.GetHeightPercent();
260*b1cdbd2cSJim Jagielski 	nWidthPercent  = rCpy.GetWidthPercent();
261*b1cdbd2cSJim Jagielski 	return *this;
262*b1cdbd2cSJim Jagielski }
263*b1cdbd2cSJim Jagielski 
operator ==(const SfxPoolItem & rAttr) const264*b1cdbd2cSJim Jagielski int  SwFmtFrmSize::operator==( const SfxPoolItem& rAttr ) const
265*b1cdbd2cSJim Jagielski {
266*b1cdbd2cSJim Jagielski 	ASSERT( SfxPoolItem::operator==( rAttr ), "keine gleichen Attribute" );
267*b1cdbd2cSJim Jagielski     return( eFrmHeightType  == ((SwFmtFrmSize&)rAttr).eFrmHeightType &&
268*b1cdbd2cSJim Jagielski             eFrmWidthType  == ((SwFmtFrmSize&)rAttr).eFrmWidthType &&
269*b1cdbd2cSJim Jagielski 			aSize    		== ((SwFmtFrmSize&)rAttr).GetSize()&&
270*b1cdbd2cSJim Jagielski 			nWidthPercent	== ((SwFmtFrmSize&)rAttr).GetWidthPercent() &&
271*b1cdbd2cSJim Jagielski 			nHeightPercent	== ((SwFmtFrmSize&)rAttr).GetHeightPercent() );
272*b1cdbd2cSJim Jagielski }
273*b1cdbd2cSJim Jagielski 
Clone(SfxItemPool *) const274*b1cdbd2cSJim Jagielski SfxPoolItem*  SwFmtFrmSize::Clone( SfxItemPool* ) const
275*b1cdbd2cSJim Jagielski {
276*b1cdbd2cSJim Jagielski 	return new SwFmtFrmSize( *this );
277*b1cdbd2cSJim Jagielski }
278*b1cdbd2cSJim Jagielski 
279*b1cdbd2cSJim Jagielski 
280*b1cdbd2cSJim Jagielski /* -----------------24.04.98 11:36-------------------
281*b1cdbd2cSJim Jagielski  *
282*b1cdbd2cSJim Jagielski  * --------------------------------------------------*/
QueryValue(uno::Any & rVal,sal_uInt8 nMemberId) const283*b1cdbd2cSJim Jagielski sal_Bool SwFmtFrmSize::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
284*b1cdbd2cSJim Jagielski {
285*b1cdbd2cSJim Jagielski 	// hier wird immer konvertiert!
286*b1cdbd2cSJim Jagielski 	nMemberId &= ~CONVERT_TWIPS;
287*b1cdbd2cSJim Jagielski 	switch ( nMemberId )
288*b1cdbd2cSJim Jagielski 	{
289*b1cdbd2cSJim Jagielski 		case MID_FRMSIZE_SIZE:
290*b1cdbd2cSJim Jagielski 		{
291*b1cdbd2cSJim Jagielski 			awt::Size aTmp;
292*b1cdbd2cSJim Jagielski 			aTmp.Height = TWIP_TO_MM100(aSize.Height());
293*b1cdbd2cSJim Jagielski 			aTmp.Width = TWIP_TO_MM100(aSize.Width());
294*b1cdbd2cSJim Jagielski 			rVal.setValue(&aTmp, ::getCppuType((const awt::Size*)0));
295*b1cdbd2cSJim Jagielski 		}
296*b1cdbd2cSJim Jagielski 		break;
297*b1cdbd2cSJim Jagielski 		case MID_FRMSIZE_REL_HEIGHT:
298*b1cdbd2cSJim Jagielski 			rVal <<= (sal_Int16)(GetHeightPercent() != 0xFF ? GetHeightPercent() : 0);
299*b1cdbd2cSJim Jagielski 		break;
300*b1cdbd2cSJim Jagielski 		case MID_FRMSIZE_REL_WIDTH:
301*b1cdbd2cSJim Jagielski 			rVal <<= (sal_Int16)(GetWidthPercent() != 0xFF ? GetWidthPercent() : 0);
302*b1cdbd2cSJim Jagielski 		break;
303*b1cdbd2cSJim Jagielski         case MID_FRMSIZE_IS_SYNC_HEIGHT_TO_WIDTH:
304*b1cdbd2cSJim Jagielski 		{
305*b1cdbd2cSJim Jagielski 			sal_Bool bTmp = 0xFF == GetHeightPercent();
306*b1cdbd2cSJim Jagielski 			rVal.setValue(&bTmp, ::getBooleanCppuType());
307*b1cdbd2cSJim Jagielski 		}
308*b1cdbd2cSJim Jagielski 		break;
309*b1cdbd2cSJim Jagielski 		case MID_FRMSIZE_IS_SYNC_WIDTH_TO_HEIGHT:
310*b1cdbd2cSJim Jagielski 		{
311*b1cdbd2cSJim Jagielski 			sal_Bool bTmp = 0xFF == GetWidthPercent();
312*b1cdbd2cSJim Jagielski 			rVal.setValue(&bTmp, ::getBooleanCppuType());
313*b1cdbd2cSJim Jagielski 		}
314*b1cdbd2cSJim Jagielski 		break;
315*b1cdbd2cSJim Jagielski 		case MID_FRMSIZE_WIDTH :
316*b1cdbd2cSJim Jagielski 			rVal <<= (sal_Int32)TWIP_TO_MM100(aSize.Width());
317*b1cdbd2cSJim Jagielski 		break;
318*b1cdbd2cSJim Jagielski         case MID_FRMSIZE_HEIGHT:
319*b1cdbd2cSJim Jagielski             // #95848# returned size should never be zero.
320*b1cdbd2cSJim Jagielski             // (there was a bug that allowed for setting height to 0.
321*b1cdbd2cSJim Jagielski             // Thus there some documents existing with that not allowed
322*b1cdbd2cSJim Jagielski             // attribut value which may cause problems on import.)
323*b1cdbd2cSJim Jagielski             rVal <<= (sal_Int32)TWIP_TO_MM100(aSize.Height() < MINLAY ? MINLAY : aSize.Height() );
324*b1cdbd2cSJim Jagielski         break;
325*b1cdbd2cSJim Jagielski         case MID_FRMSIZE_SIZE_TYPE:
326*b1cdbd2cSJim Jagielski             rVal <<= (sal_Int16)GetHeightSizeType();
327*b1cdbd2cSJim Jagielski 		break;
328*b1cdbd2cSJim Jagielski 		case MID_FRMSIZE_IS_AUTO_HEIGHT:
329*b1cdbd2cSJim Jagielski 		{
330*b1cdbd2cSJim Jagielski             sal_Bool bTmp = ATT_FIX_SIZE != GetHeightSizeType();
331*b1cdbd2cSJim Jagielski 			rVal.setValue(&bTmp, ::getBooleanCppuType());
332*b1cdbd2cSJim Jagielski 		}
333*b1cdbd2cSJim Jagielski 		break;
334*b1cdbd2cSJim Jagielski         case MID_FRMSIZE_WIDTH_TYPE:
335*b1cdbd2cSJim Jagielski             rVal <<= (sal_Int16)GetWidthSizeType();
336*b1cdbd2cSJim Jagielski         break;
337*b1cdbd2cSJim Jagielski 	}
338*b1cdbd2cSJim Jagielski 	return sal_True;
339*b1cdbd2cSJim Jagielski }
340*b1cdbd2cSJim Jagielski 
341*b1cdbd2cSJim Jagielski /* -----------------24.04.98 11:36-------------------
342*b1cdbd2cSJim Jagielski  *
343*b1cdbd2cSJim Jagielski  * --------------------------------------------------*/
PutValue(const uno::Any & rVal,sal_uInt8 nMemberId)344*b1cdbd2cSJim Jagielski sal_Bool SwFmtFrmSize::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
345*b1cdbd2cSJim Jagielski {
346*b1cdbd2cSJim Jagielski 	sal_Bool bConvert = 0 != (nMemberId&CONVERT_TWIPS);
347*b1cdbd2cSJim Jagielski 	nMemberId &= ~CONVERT_TWIPS;
348*b1cdbd2cSJim Jagielski 	sal_Bool bRet = sal_True;
349*b1cdbd2cSJim Jagielski 	switch ( nMemberId )
350*b1cdbd2cSJim Jagielski 	{
351*b1cdbd2cSJim Jagielski 		case MID_FRMSIZE_SIZE:
352*b1cdbd2cSJim Jagielski 		{
353*b1cdbd2cSJim Jagielski             awt::Size aVal;
354*b1cdbd2cSJim Jagielski             if(!(rVal >>= aVal))
355*b1cdbd2cSJim Jagielski                 bRet = sal_False;
356*b1cdbd2cSJim Jagielski             else
357*b1cdbd2cSJim Jagielski             {
358*b1cdbd2cSJim Jagielski                 Size aTmp(aVal.Width, aVal.Height);
359*b1cdbd2cSJim Jagielski                 if(bConvert)
360*b1cdbd2cSJim Jagielski                 {
361*b1cdbd2cSJim Jagielski                     aTmp.Height() = MM100_TO_TWIP(aTmp.Height());
362*b1cdbd2cSJim Jagielski                     aTmp.Width() = MM100_TO_TWIP(aTmp.Width());
363*b1cdbd2cSJim Jagielski                 }
364*b1cdbd2cSJim Jagielski                 if(aTmp.Height() && aTmp.Width())
365*b1cdbd2cSJim Jagielski                     aSize = aTmp;
366*b1cdbd2cSJim Jagielski                 else
367*b1cdbd2cSJim Jagielski                     bRet = sal_False;
368*b1cdbd2cSJim Jagielski             }
369*b1cdbd2cSJim Jagielski 		}
370*b1cdbd2cSJim Jagielski 		break;
371*b1cdbd2cSJim Jagielski 		case MID_FRMSIZE_REL_HEIGHT:
372*b1cdbd2cSJim Jagielski 		{
373*b1cdbd2cSJim Jagielski 			sal_Int16 nSet = 0;
374*b1cdbd2cSJim Jagielski 			rVal >>= nSet;
375*b1cdbd2cSJim Jagielski             if(nSet >= 0 && nSet <= 0xfe)
376*b1cdbd2cSJim Jagielski 				SetHeightPercent((sal_uInt8)nSet);
377*b1cdbd2cSJim Jagielski 			else
378*b1cdbd2cSJim Jagielski 				bRet = sal_False;
379*b1cdbd2cSJim Jagielski 		}
380*b1cdbd2cSJim Jagielski 		break;
381*b1cdbd2cSJim Jagielski 		case MID_FRMSIZE_REL_WIDTH:
382*b1cdbd2cSJim Jagielski 		{
383*b1cdbd2cSJim Jagielski 			sal_Int16 nSet = 0;
384*b1cdbd2cSJim Jagielski 			rVal >>= nSet;
385*b1cdbd2cSJim Jagielski             if(nSet >= 0 && nSet <= 0xfe)
386*b1cdbd2cSJim Jagielski 				SetWidthPercent((sal_uInt8)nSet);
387*b1cdbd2cSJim Jagielski 			else
388*b1cdbd2cSJim Jagielski 				bRet = sal_False;
389*b1cdbd2cSJim Jagielski 		}
390*b1cdbd2cSJim Jagielski 		break;
391*b1cdbd2cSJim Jagielski 		case MID_FRMSIZE_IS_SYNC_HEIGHT_TO_WIDTH:
392*b1cdbd2cSJim Jagielski 		{
393*b1cdbd2cSJim Jagielski 			sal_Bool bSet = *(sal_Bool*)rVal.getValue();
394*b1cdbd2cSJim Jagielski 			if(bSet)
395*b1cdbd2cSJim Jagielski 				SetHeightPercent(0xff);
396*b1cdbd2cSJim Jagielski 			else if( 0xff == GetHeightPercent() )
397*b1cdbd2cSJim Jagielski 				SetHeightPercent( 0 );
398*b1cdbd2cSJim Jagielski 		}
399*b1cdbd2cSJim Jagielski 		break;
400*b1cdbd2cSJim Jagielski 		case MID_FRMSIZE_IS_SYNC_WIDTH_TO_HEIGHT:
401*b1cdbd2cSJim Jagielski 		{
402*b1cdbd2cSJim Jagielski 			sal_Bool bSet = *(sal_Bool*)rVal.getValue();
403*b1cdbd2cSJim Jagielski 			if(bSet)
404*b1cdbd2cSJim Jagielski 				SetWidthPercent(0xff);
405*b1cdbd2cSJim Jagielski 			else if( 0xff == GetWidthPercent() )
406*b1cdbd2cSJim Jagielski 				SetWidthPercent(0);
407*b1cdbd2cSJim Jagielski 		}
408*b1cdbd2cSJim Jagielski 		break;
409*b1cdbd2cSJim Jagielski 		case MID_FRMSIZE_WIDTH :
410*b1cdbd2cSJim Jagielski 		{
411*b1cdbd2cSJim Jagielski             sal_Int32 nWd = 0;
412*b1cdbd2cSJim Jagielski             if(rVal >>= nWd)
413*b1cdbd2cSJim Jagielski             {
414*b1cdbd2cSJim Jagielski                 if(bConvert)
415*b1cdbd2cSJim Jagielski                     nWd = MM100_TO_TWIP(nWd);
416*b1cdbd2cSJim Jagielski                 if(nWd < MINLAY)
417*b1cdbd2cSJim Jagielski                    nWd = MINLAY;
418*b1cdbd2cSJim Jagielski                 aSize.Width() = nWd;
419*b1cdbd2cSJim Jagielski             }
420*b1cdbd2cSJim Jagielski             else
421*b1cdbd2cSJim Jagielski                 bRet = sal_False;
422*b1cdbd2cSJim Jagielski         }
423*b1cdbd2cSJim Jagielski 		break;
424*b1cdbd2cSJim Jagielski 		case MID_FRMSIZE_HEIGHT:
425*b1cdbd2cSJim Jagielski 		{
426*b1cdbd2cSJim Jagielski             sal_Int32 nHg = 0;
427*b1cdbd2cSJim Jagielski             if(rVal >>= nHg)
428*b1cdbd2cSJim Jagielski             {
429*b1cdbd2cSJim Jagielski                 if(bConvert)
430*b1cdbd2cSJim Jagielski                     nHg = MM100_TO_TWIP(nHg);
431*b1cdbd2cSJim Jagielski                 if(nHg < MINLAY)
432*b1cdbd2cSJim Jagielski                     nHg = MINLAY;
433*b1cdbd2cSJim Jagielski                 aSize.Height() = nHg;
434*b1cdbd2cSJim Jagielski             }
435*b1cdbd2cSJim Jagielski             else
436*b1cdbd2cSJim Jagielski                 bRet = sal_False;
437*b1cdbd2cSJim Jagielski         }
438*b1cdbd2cSJim Jagielski 		break;
439*b1cdbd2cSJim Jagielski 		case MID_FRMSIZE_SIZE_TYPE:
440*b1cdbd2cSJim Jagielski 		{
441*b1cdbd2cSJim Jagielski             sal_Int16 nType = 0;
442*b1cdbd2cSJim Jagielski             if((rVal >>= nType) && nType >= 0 && nType <= ATT_MIN_SIZE )
443*b1cdbd2cSJim Jagielski 			{
444*b1cdbd2cSJim Jagielski                 SetHeightSizeType((SwFrmSize)nType);
445*b1cdbd2cSJim Jagielski 			}
446*b1cdbd2cSJim Jagielski             else
447*b1cdbd2cSJim Jagielski                 bRet = sal_False;
448*b1cdbd2cSJim Jagielski         }
449*b1cdbd2cSJim Jagielski 		break;
450*b1cdbd2cSJim Jagielski 		case MID_FRMSIZE_IS_AUTO_HEIGHT:
451*b1cdbd2cSJim Jagielski 		{
452*b1cdbd2cSJim Jagielski 			sal_Bool bSet = *(sal_Bool*)rVal.getValue();
453*b1cdbd2cSJim Jagielski             SetHeightSizeType(bSet ? ATT_VAR_SIZE : ATT_FIX_SIZE);
454*b1cdbd2cSJim Jagielski 		}
455*b1cdbd2cSJim Jagielski 		break;
456*b1cdbd2cSJim Jagielski         case MID_FRMSIZE_WIDTH_TYPE:
457*b1cdbd2cSJim Jagielski         {
458*b1cdbd2cSJim Jagielski             sal_Int16 nType = 0;
459*b1cdbd2cSJim Jagielski             if((rVal >>= nType) && nType >= 0 && nType <= ATT_MIN_SIZE )
460*b1cdbd2cSJim Jagielski 			{
461*b1cdbd2cSJim Jagielski                 SetWidthSizeType((SwFrmSize)nType);
462*b1cdbd2cSJim Jagielski 			}
463*b1cdbd2cSJim Jagielski             else
464*b1cdbd2cSJim Jagielski                 bRet = sal_False;
465*b1cdbd2cSJim Jagielski         }
466*b1cdbd2cSJim Jagielski         break;
467*b1cdbd2cSJim Jagielski 		default:
468*b1cdbd2cSJim Jagielski 			bRet = sal_False;
469*b1cdbd2cSJim Jagielski 	}
470*b1cdbd2cSJim Jagielski 	return bRet;
471*b1cdbd2cSJim Jagielski }
472*b1cdbd2cSJim Jagielski 
473*b1cdbd2cSJim Jagielski //	class SwFmtFillOrder
474*b1cdbd2cSJim Jagielski //	Implementierung teilweise inline im hxx
475*b1cdbd2cSJim Jagielski 
SwFmtFillOrder(SwFillOrder nFO)476*b1cdbd2cSJim Jagielski SwFmtFillOrder::SwFmtFillOrder( SwFillOrder nFO )
477*b1cdbd2cSJim Jagielski 	: SfxEnumItem( RES_FILL_ORDER, sal_uInt16(nFO) )
478*b1cdbd2cSJim Jagielski {}
479*b1cdbd2cSJim Jagielski 
Clone(SfxItemPool *) const480*b1cdbd2cSJim Jagielski SfxPoolItem*  SwFmtFillOrder::Clone( SfxItemPool* ) const
481*b1cdbd2cSJim Jagielski {
482*b1cdbd2cSJim Jagielski 	return new SwFmtFillOrder( GetFillOrder() );
483*b1cdbd2cSJim Jagielski }
484*b1cdbd2cSJim Jagielski 
GetValueCount() const485*b1cdbd2cSJim Jagielski sal_uInt16  SwFmtFillOrder::GetValueCount() const
486*b1cdbd2cSJim Jagielski {
487*b1cdbd2cSJim Jagielski 	return SW_FILL_ORDER_END - SW_FILL_ORDER_BEGIN;
488*b1cdbd2cSJim Jagielski }
489*b1cdbd2cSJim Jagielski 
490*b1cdbd2cSJim Jagielski //	class SwFmtHeader
491*b1cdbd2cSJim Jagielski //	Implementierung teilweise inline im hxx
492*b1cdbd2cSJim Jagielski 
SwFmtHeader(SwFrmFmt * pHeaderFmt)493*b1cdbd2cSJim Jagielski SwFmtHeader::SwFmtHeader( SwFrmFmt *pHeaderFmt )
494*b1cdbd2cSJim Jagielski 	: SfxPoolItem( RES_HEADER ),
495*b1cdbd2cSJim Jagielski 	SwClient( pHeaderFmt ),
496*b1cdbd2cSJim Jagielski 	bActive( pHeaderFmt ? sal_True : sal_False )
497*b1cdbd2cSJim Jagielski {
498*b1cdbd2cSJim Jagielski }
499*b1cdbd2cSJim Jagielski 
SwFmtHeader(const SwFmtHeader & rCpy)500*b1cdbd2cSJim Jagielski SwFmtHeader::SwFmtHeader( const SwFmtHeader &rCpy )
501*b1cdbd2cSJim Jagielski 	: SfxPoolItem( RES_HEADER ),
502*b1cdbd2cSJim Jagielski 	SwClient( (SwModify*)rCpy.GetRegisteredIn() ),
503*b1cdbd2cSJim Jagielski 	bActive( rCpy.IsActive() )
504*b1cdbd2cSJim Jagielski {
505*b1cdbd2cSJim Jagielski }
506*b1cdbd2cSJim Jagielski 
SwFmtHeader(sal_Bool bOn)507*b1cdbd2cSJim Jagielski SwFmtHeader::SwFmtHeader( sal_Bool bOn )
508*b1cdbd2cSJim Jagielski 	: SfxPoolItem( RES_HEADER ),
509*b1cdbd2cSJim Jagielski 	SwClient( 0 ),
510*b1cdbd2cSJim Jagielski 	bActive( bOn )
511*b1cdbd2cSJim Jagielski {
512*b1cdbd2cSJim Jagielski }
513*b1cdbd2cSJim Jagielski 
~SwFmtHeader()514*b1cdbd2cSJim Jagielski  SwFmtHeader::~SwFmtHeader()
515*b1cdbd2cSJim Jagielski {
516*b1cdbd2cSJim Jagielski 	if ( GetHeaderFmt() )
517*b1cdbd2cSJim Jagielski 		DelHFFormat( this, GetHeaderFmt() );
518*b1cdbd2cSJim Jagielski }
519*b1cdbd2cSJim Jagielski 
operator ==(const SfxPoolItem & rAttr) const520*b1cdbd2cSJim Jagielski int  SwFmtHeader::operator==( const SfxPoolItem& rAttr ) const
521*b1cdbd2cSJim Jagielski {
522*b1cdbd2cSJim Jagielski 	ASSERT( SfxPoolItem::operator==( rAttr ), "keine gleichen Attribute" );
523*b1cdbd2cSJim Jagielski 	return ( GetRegisteredIn() == ((SwFmtHeader&)rAttr).GetRegisteredIn() &&
524*b1cdbd2cSJim Jagielski 			 bActive == ((SwFmtHeader&)rAttr).IsActive() );
525*b1cdbd2cSJim Jagielski }
526*b1cdbd2cSJim Jagielski 
Clone(SfxItemPool *) const527*b1cdbd2cSJim Jagielski SfxPoolItem*  SwFmtHeader::Clone( SfxItemPool* ) const
528*b1cdbd2cSJim Jagielski {
529*b1cdbd2cSJim Jagielski 	return new SwFmtHeader( *this );
530*b1cdbd2cSJim Jagielski }
531*b1cdbd2cSJim Jagielski 
RegisterToFormat(SwFmt & rFmt)532*b1cdbd2cSJim Jagielski void SwFmtHeader::RegisterToFormat( SwFmt& rFmt )
533*b1cdbd2cSJim Jagielski {
534*b1cdbd2cSJim Jagielski     rFmt.Add(this);
535*b1cdbd2cSJim Jagielski }
536*b1cdbd2cSJim Jagielski 
537*b1cdbd2cSJim Jagielski //	class SwFmtFooter
538*b1cdbd2cSJim Jagielski //	Implementierung teilweise inline im hxx
539*b1cdbd2cSJim Jagielski 
SwFmtFooter(SwFrmFmt * pFooterFmt)540*b1cdbd2cSJim Jagielski SwFmtFooter::SwFmtFooter( SwFrmFmt *pFooterFmt )
541*b1cdbd2cSJim Jagielski 	: SfxPoolItem( RES_FOOTER ),
542*b1cdbd2cSJim Jagielski 	SwClient( pFooterFmt ),
543*b1cdbd2cSJim Jagielski 	bActive( pFooterFmt ? sal_True : sal_False )
544*b1cdbd2cSJim Jagielski {
545*b1cdbd2cSJim Jagielski }
546*b1cdbd2cSJim Jagielski 
SwFmtFooter(const SwFmtFooter & rCpy)547*b1cdbd2cSJim Jagielski SwFmtFooter::SwFmtFooter( const SwFmtFooter &rCpy )
548*b1cdbd2cSJim Jagielski 	: SfxPoolItem( RES_FOOTER ),
549*b1cdbd2cSJim Jagielski 	SwClient( (SwModify*)rCpy.GetRegisteredIn() ),
550*b1cdbd2cSJim Jagielski 	bActive( rCpy.IsActive() )
551*b1cdbd2cSJim Jagielski {
552*b1cdbd2cSJim Jagielski }
553*b1cdbd2cSJim Jagielski 
SwFmtFooter(sal_Bool bOn)554*b1cdbd2cSJim Jagielski SwFmtFooter::SwFmtFooter( sal_Bool bOn )
555*b1cdbd2cSJim Jagielski 	: SfxPoolItem( RES_FOOTER ),
556*b1cdbd2cSJim Jagielski 	SwClient( 0 ),
557*b1cdbd2cSJim Jagielski 	bActive( bOn )
558*b1cdbd2cSJim Jagielski {
559*b1cdbd2cSJim Jagielski }
560*b1cdbd2cSJim Jagielski 
~SwFmtFooter()561*b1cdbd2cSJim Jagielski  SwFmtFooter::~SwFmtFooter()
562*b1cdbd2cSJim Jagielski {
563*b1cdbd2cSJim Jagielski 	if ( GetFooterFmt() )
564*b1cdbd2cSJim Jagielski 		DelHFFormat( this, GetFooterFmt() );
565*b1cdbd2cSJim Jagielski }
566*b1cdbd2cSJim Jagielski 
RegisterToFormat(SwFmt & rFmt)567*b1cdbd2cSJim Jagielski void SwFmtFooter::RegisterToFormat( SwFmt& rFmt )
568*b1cdbd2cSJim Jagielski {
569*b1cdbd2cSJim Jagielski     rFmt.Add(this);
570*b1cdbd2cSJim Jagielski }
571*b1cdbd2cSJim Jagielski 
operator ==(const SfxPoolItem & rAttr) const572*b1cdbd2cSJim Jagielski int  SwFmtFooter::operator==( const SfxPoolItem& rAttr ) const
573*b1cdbd2cSJim Jagielski {
574*b1cdbd2cSJim Jagielski 	ASSERT( SfxPoolItem::operator==( rAttr ), "keine gleichen Attribute" );
575*b1cdbd2cSJim Jagielski 	return ( GetRegisteredIn() == ((SwFmtFooter&)rAttr).GetRegisteredIn() &&
576*b1cdbd2cSJim Jagielski 			 bActive == ((SwFmtFooter&)rAttr).IsActive() );
577*b1cdbd2cSJim Jagielski }
578*b1cdbd2cSJim Jagielski 
Clone(SfxItemPool *) const579*b1cdbd2cSJim Jagielski SfxPoolItem*  SwFmtFooter::Clone( SfxItemPool* ) const
580*b1cdbd2cSJim Jagielski {
581*b1cdbd2cSJim Jagielski 	return new SwFmtFooter( *this );
582*b1cdbd2cSJim Jagielski }
583*b1cdbd2cSJim Jagielski 
584*b1cdbd2cSJim Jagielski //	class SwFmtCntnt
585*b1cdbd2cSJim Jagielski //	Implementierung teilweise inline im hxx
586*b1cdbd2cSJim Jagielski 
SwFmtCntnt(const SwFmtCntnt & rCpy)587*b1cdbd2cSJim Jagielski SwFmtCntnt::SwFmtCntnt( const SwFmtCntnt &rCpy )
588*b1cdbd2cSJim Jagielski 	: SfxPoolItem( RES_CNTNT )
589*b1cdbd2cSJim Jagielski {
590*b1cdbd2cSJim Jagielski 	pStartNode = rCpy.GetCntntIdx() ?
591*b1cdbd2cSJim Jagielski 					new SwNodeIndex( *rCpy.GetCntntIdx() ) : 0;
592*b1cdbd2cSJim Jagielski }
593*b1cdbd2cSJim Jagielski 
SwFmtCntnt(const SwStartNode * pStartNd)594*b1cdbd2cSJim Jagielski SwFmtCntnt::SwFmtCntnt( const SwStartNode *pStartNd )
595*b1cdbd2cSJim Jagielski 	: SfxPoolItem( RES_CNTNT )
596*b1cdbd2cSJim Jagielski {
597*b1cdbd2cSJim Jagielski 	pStartNode = pStartNd ? new SwNodeIndex( *pStartNd ) : 0;
598*b1cdbd2cSJim Jagielski }
599*b1cdbd2cSJim Jagielski 
~SwFmtCntnt()600*b1cdbd2cSJim Jagielski  SwFmtCntnt::~SwFmtCntnt()
601*b1cdbd2cSJim Jagielski {
602*b1cdbd2cSJim Jagielski 	delete pStartNode;
603*b1cdbd2cSJim Jagielski }
604*b1cdbd2cSJim Jagielski 
SetNewCntntIdx(const SwNodeIndex * pIdx)605*b1cdbd2cSJim Jagielski void SwFmtCntnt::SetNewCntntIdx( const SwNodeIndex *pIdx )
606*b1cdbd2cSJim Jagielski {
607*b1cdbd2cSJim Jagielski 	delete pStartNode;
608*b1cdbd2cSJim Jagielski 	pStartNode = pIdx ? new SwNodeIndex( *pIdx ) : 0;
609*b1cdbd2cSJim Jagielski }
610*b1cdbd2cSJim Jagielski 
operator ==(const SfxPoolItem & rAttr) const611*b1cdbd2cSJim Jagielski int  SwFmtCntnt::operator==( const SfxPoolItem& rAttr ) const
612*b1cdbd2cSJim Jagielski {
613*b1cdbd2cSJim Jagielski 	ASSERT( SfxPoolItem::operator==( rAttr ), "keine gleichen Attribute" );
614*b1cdbd2cSJim Jagielski 	if( (long)pStartNode ^ (long)((SwFmtCntnt&)rAttr).pStartNode )
615*b1cdbd2cSJim Jagielski 		return 0;
616*b1cdbd2cSJim Jagielski 	if( pStartNode )
617*b1cdbd2cSJim Jagielski 		return ( *pStartNode == *((SwFmtCntnt&)rAttr).GetCntntIdx() );
618*b1cdbd2cSJim Jagielski 	return 1;
619*b1cdbd2cSJim Jagielski }
620*b1cdbd2cSJim Jagielski 
Clone(SfxItemPool *) const621*b1cdbd2cSJim Jagielski SfxPoolItem*  SwFmtCntnt::Clone( SfxItemPool* ) const
622*b1cdbd2cSJim Jagielski {
623*b1cdbd2cSJim Jagielski 	return new SwFmtCntnt( *this );
624*b1cdbd2cSJim Jagielski }
625*b1cdbd2cSJim Jagielski 
626*b1cdbd2cSJim Jagielski //	class SwFmtPageDesc
627*b1cdbd2cSJim Jagielski //	Implementierung teilweise inline im hxx
628*b1cdbd2cSJim Jagielski 
SwFmtPageDesc(const SwFmtPageDesc & rCpy)629*b1cdbd2cSJim Jagielski SwFmtPageDesc::SwFmtPageDesc( const SwFmtPageDesc &rCpy )
630*b1cdbd2cSJim Jagielski 	: SfxPoolItem( RES_PAGEDESC ),
631*b1cdbd2cSJim Jagielski 	SwClient( (SwPageDesc*)rCpy.GetPageDesc() ),
632*b1cdbd2cSJim Jagielski     nNumOffset( rCpy.nNumOffset ),
633*b1cdbd2cSJim Jagielski     nDescNameIdx( rCpy.nDescNameIdx ),
634*b1cdbd2cSJim Jagielski     pDefinedIn( 0 )
635*b1cdbd2cSJim Jagielski {
636*b1cdbd2cSJim Jagielski }
637*b1cdbd2cSJim Jagielski 
SwFmtPageDesc(const SwPageDesc * pDesc)638*b1cdbd2cSJim Jagielski SwFmtPageDesc::SwFmtPageDesc( const SwPageDesc *pDesc )
639*b1cdbd2cSJim Jagielski 	: SfxPoolItem( RES_PAGEDESC ),
640*b1cdbd2cSJim Jagielski 	SwClient( (SwPageDesc*)pDesc ),
641*b1cdbd2cSJim Jagielski     nNumOffset( 0 ),
642*b1cdbd2cSJim Jagielski     nDescNameIdx( 0xFFFF ), // IDX_NO_VALUE
643*b1cdbd2cSJim Jagielski     pDefinedIn( 0 )
644*b1cdbd2cSJim Jagielski {
645*b1cdbd2cSJim Jagielski }
646*b1cdbd2cSJim Jagielski 
~SwFmtPageDesc()647*b1cdbd2cSJim Jagielski  SwFmtPageDesc::~SwFmtPageDesc() {}
648*b1cdbd2cSJim Jagielski 
KnowsPageDesc() const649*b1cdbd2cSJim Jagielski bool SwFmtPageDesc::KnowsPageDesc() const
650*b1cdbd2cSJim Jagielski {
651*b1cdbd2cSJim Jagielski     return (GetRegisteredIn() != 0);
652*b1cdbd2cSJim Jagielski }
653*b1cdbd2cSJim Jagielski 
operator ==(const SfxPoolItem & rAttr) const654*b1cdbd2cSJim Jagielski int  SwFmtPageDesc::operator==( const SfxPoolItem& rAttr ) const
655*b1cdbd2cSJim Jagielski {
656*b1cdbd2cSJim Jagielski 	ASSERT( SfxPoolItem::operator==( rAttr ), "keine gleichen Attribute" );
657*b1cdbd2cSJim Jagielski 	return	( pDefinedIn == ((SwFmtPageDesc&)rAttr).pDefinedIn ) &&
658*b1cdbd2cSJim Jagielski 			( nNumOffset == ((SwFmtPageDesc&)rAttr).nNumOffset ) &&
659*b1cdbd2cSJim Jagielski 			( GetPageDesc() == ((SwFmtPageDesc&)rAttr).GetPageDesc() );
660*b1cdbd2cSJim Jagielski }
661*b1cdbd2cSJim Jagielski 
Clone(SfxItemPool *) const662*b1cdbd2cSJim Jagielski SfxPoolItem*  SwFmtPageDesc::Clone( SfxItemPool* ) const
663*b1cdbd2cSJim Jagielski {
664*b1cdbd2cSJim Jagielski 	return new SwFmtPageDesc( *this );
665*b1cdbd2cSJim Jagielski }
666*b1cdbd2cSJim Jagielski 
SwClientNotify(const SwModify &,const SfxHint & rHint)667*b1cdbd2cSJim Jagielski void SwFmtPageDesc::SwClientNotify( const SwModify&, const SfxHint& rHint )
668*b1cdbd2cSJim Jagielski {
669*b1cdbd2cSJim Jagielski     const SwPageDescHint* pHint = dynamic_cast<const SwPageDescHint*>(&rHint);
670*b1cdbd2cSJim Jagielski     if ( pHint )
671*b1cdbd2cSJim Jagielski     {
672*b1cdbd2cSJim Jagielski         // mba: shouldn't that be broadcasted also?
673*b1cdbd2cSJim Jagielski         SwFmtPageDesc aDfltDesc( pHint->GetPageDesc() );
674*b1cdbd2cSJim Jagielski         SwPageDesc* pDesc = pHint->GetPageDesc();
675*b1cdbd2cSJim Jagielski         const SwModify* pMod = GetDefinedIn();
676*b1cdbd2cSJim Jagielski         if ( pMod )
677*b1cdbd2cSJim Jagielski         {
678*b1cdbd2cSJim Jagielski             if( pMod->ISA( SwCntntNode ) )
679*b1cdbd2cSJim Jagielski                 ((SwCntntNode*)pMod)->SetAttr( aDfltDesc );
680*b1cdbd2cSJim Jagielski             else if( pMod->ISA( SwFmt ))
681*b1cdbd2cSJim Jagielski                 ((SwFmt*)pMod)->SetFmtAttr( aDfltDesc );
682*b1cdbd2cSJim Jagielski             else
683*b1cdbd2cSJim Jagielski             {
684*b1cdbd2cSJim Jagielski                 DBG_ERROR( "What kind of SwModify is this?" );
685*b1cdbd2cSJim Jagielski                 RegisterToPageDesc( *pDesc );
686*b1cdbd2cSJim Jagielski             }
687*b1cdbd2cSJim Jagielski         }
688*b1cdbd2cSJim Jagielski         else
689*b1cdbd2cSJim Jagielski             // there could be an Undo-copy
690*b1cdbd2cSJim Jagielski             RegisterToPageDesc( *pDesc );
691*b1cdbd2cSJim Jagielski     }
692*b1cdbd2cSJim Jagielski }
693*b1cdbd2cSJim Jagielski 
RegisterToPageDesc(SwPageDesc & rDesc)694*b1cdbd2cSJim Jagielski void SwFmtPageDesc::RegisterToPageDesc( SwPageDesc& rDesc )
695*b1cdbd2cSJim Jagielski {
696*b1cdbd2cSJim Jagielski     rDesc.Add( this );
697*b1cdbd2cSJim Jagielski }
698*b1cdbd2cSJim Jagielski 
Modify(const SfxPoolItem * pOld,const SfxPoolItem * pNew)699*b1cdbd2cSJim Jagielski void SwFmtPageDesc::Modify( const SfxPoolItem* pOld, const SfxPoolItem* pNew )
700*b1cdbd2cSJim Jagielski {
701*b1cdbd2cSJim Jagielski 	if( !pDefinedIn )
702*b1cdbd2cSJim Jagielski 		return;
703*b1cdbd2cSJim Jagielski 
704*b1cdbd2cSJim Jagielski     const sal_uInt16 nWhichId = pOld ? pOld->Which() : pNew ? pNew->Which() : 0;
705*b1cdbd2cSJim Jagielski     switch( nWhichId )
706*b1cdbd2cSJim Jagielski 	{
707*b1cdbd2cSJim Jagielski 		case RES_OBJECTDYING:
708*b1cdbd2cSJim Jagielski 				//Der Pagedesc, bei dem ich angemeldet bin stirbt, ich trage
709*b1cdbd2cSJim Jagielski 				//mich also bei meinem Format aus.
710*b1cdbd2cSJim Jagielski 				//Dabei werden ich Deletet!!!
711*b1cdbd2cSJim Jagielski 			if( IS_TYPE( SwFmt, pDefinedIn ))
712*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
713*b1cdbd2cSJim Jagielski 			{
714*b1cdbd2cSJim Jagielski                 sal_Bool bDel = ((SwFmt*)pDefinedIn)->ResetFmtAttr( RES_PAGEDESC );
715*b1cdbd2cSJim Jagielski 				ASSERT( bDel, ";-) FmtPageDesc nicht zerstoert." );
716*b1cdbd2cSJim Jagielski 			}
717*b1cdbd2cSJim Jagielski #else
718*b1cdbd2cSJim Jagielski                 ((SwFmt*)pDefinedIn)->ResetFmtAttr( RES_PAGEDESC );
719*b1cdbd2cSJim Jagielski #endif
720*b1cdbd2cSJim Jagielski 			else if( IS_TYPE( SwCntntNode, pDefinedIn ))
721*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
722*b1cdbd2cSJim Jagielski 			{
723*b1cdbd2cSJim Jagielski 				sal_Bool bDel = ((SwCntntNode*)pDefinedIn)->ResetAttr( RES_PAGEDESC );
724*b1cdbd2cSJim Jagielski 				ASSERT( bDel, ";-) FmtPageDesc nicht zerstoert." );
725*b1cdbd2cSJim Jagielski 			}
726*b1cdbd2cSJim Jagielski #else
727*b1cdbd2cSJim Jagielski 				((SwCntntNode*)pDefinedIn)->ResetAttr( RES_PAGEDESC );
728*b1cdbd2cSJim Jagielski #endif
729*b1cdbd2cSJim Jagielski 			break;
730*b1cdbd2cSJim Jagielski 
731*b1cdbd2cSJim Jagielski 		default:
732*b1cdbd2cSJim Jagielski 			/* do nothing */;
733*b1cdbd2cSJim Jagielski 	}
734*b1cdbd2cSJim Jagielski }
735*b1cdbd2cSJim Jagielski 
QueryValue(uno::Any & rVal,sal_uInt8 nMemberId) const736*b1cdbd2cSJim Jagielski sal_Bool SwFmtPageDesc::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
737*b1cdbd2cSJim Jagielski {
738*b1cdbd2cSJim Jagielski 	// hier wird immer konvertiert!
739*b1cdbd2cSJim Jagielski 	nMemberId &= ~CONVERT_TWIPS;
740*b1cdbd2cSJim Jagielski 	sal_Bool	bRet = sal_True;
741*b1cdbd2cSJim Jagielski 	switch ( nMemberId )
742*b1cdbd2cSJim Jagielski 	{
743*b1cdbd2cSJim Jagielski 		case MID_PAGEDESC_PAGENUMOFFSET:
744*b1cdbd2cSJim Jagielski 			rVal <<= (sal_Int16)GetNumOffset();
745*b1cdbd2cSJim Jagielski 			break;
746*b1cdbd2cSJim Jagielski 
747*b1cdbd2cSJim Jagielski 		case MID_PAGEDESC_PAGEDESCNAME:
748*b1cdbd2cSJim Jagielski 			{
749*b1cdbd2cSJim Jagielski 				const SwPageDesc* pDesc = GetPageDesc();
750*b1cdbd2cSJim Jagielski 				if( pDesc )
751*b1cdbd2cSJim Jagielski 				{
752*b1cdbd2cSJim Jagielski 					String aString;
753*b1cdbd2cSJim Jagielski 					SwStyleNameMapper::FillProgName(pDesc->GetName(), aString, nsSwGetPoolIdFromName::GET_POOLID_PAGEDESC, sal_True );
754*b1cdbd2cSJim Jagielski 					rVal <<= OUString( aString );
755*b1cdbd2cSJim Jagielski 				}
756*b1cdbd2cSJim Jagielski 				else
757*b1cdbd2cSJim Jagielski 					rVal.clear();
758*b1cdbd2cSJim Jagielski 			}
759*b1cdbd2cSJim Jagielski 			break;
760*b1cdbd2cSJim Jagielski 		default:
761*b1cdbd2cSJim Jagielski 			ASSERT( !this, "unknown MemberId" );
762*b1cdbd2cSJim Jagielski 			bRet = sal_False;
763*b1cdbd2cSJim Jagielski 	}
764*b1cdbd2cSJim Jagielski 	return bRet;
765*b1cdbd2cSJim Jagielski }
766*b1cdbd2cSJim Jagielski 
PutValue(const uno::Any & rVal,sal_uInt8 nMemberId)767*b1cdbd2cSJim Jagielski sal_Bool SwFmtPageDesc::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
768*b1cdbd2cSJim Jagielski {
769*b1cdbd2cSJim Jagielski 	// hier wird immer konvertiert!
770*b1cdbd2cSJim Jagielski 	nMemberId &= ~CONVERT_TWIPS;
771*b1cdbd2cSJim Jagielski 	sal_Bool bRet = sal_True;
772*b1cdbd2cSJim Jagielski 	switch ( nMemberId )
773*b1cdbd2cSJim Jagielski 	{
774*b1cdbd2cSJim Jagielski 		case MID_PAGEDESC_PAGENUMOFFSET:
775*b1cdbd2cSJim Jagielski         {
776*b1cdbd2cSJim Jagielski             sal_Int16 nOffset = 0;
777*b1cdbd2cSJim Jagielski             if(rVal >>= nOffset)
778*b1cdbd2cSJim Jagielski                 SetNumOffset( nOffset );
779*b1cdbd2cSJim Jagielski             else
780*b1cdbd2cSJim Jagielski                 bRet = sal_False;
781*b1cdbd2cSJim Jagielski         }
782*b1cdbd2cSJim Jagielski         break;
783*b1cdbd2cSJim Jagielski 
784*b1cdbd2cSJim Jagielski 		case MID_PAGEDESC_PAGEDESCNAME:
785*b1cdbd2cSJim Jagielski 			/* geht nicht, weil das Attribut eigentlich nicht den Namen
786*b1cdbd2cSJim Jagielski 			 * sondern einen Pointer auf den PageDesc braucht (ist Client davon).
787*b1cdbd2cSJim Jagielski 			 * Der Pointer waere aber ueber den Namen nur vom Dokument zu erfragen.
788*b1cdbd2cSJim Jagielski 			 */
789*b1cdbd2cSJim Jagielski 		default:
790*b1cdbd2cSJim Jagielski 			ASSERT( !this, "unknown MemberId" );
791*b1cdbd2cSJim Jagielski 			bRet = sal_False;
792*b1cdbd2cSJim Jagielski 	}
793*b1cdbd2cSJim Jagielski 	return bRet;
794*b1cdbd2cSJim Jagielski }
795*b1cdbd2cSJim Jagielski 
796*b1cdbd2cSJim Jagielski 
797*b1cdbd2cSJim Jagielski //	class SwFmtCol
798*b1cdbd2cSJim Jagielski //	Implementierung teilweise inline im hxx
799*b1cdbd2cSJim Jagielski 
SwColumn()800*b1cdbd2cSJim Jagielski SwColumn::SwColumn() :
801*b1cdbd2cSJim Jagielski     nWish ( 0 ),
802*b1cdbd2cSJim Jagielski     nUpper( 0 ),
803*b1cdbd2cSJim Jagielski 	nLower( 0 ),
804*b1cdbd2cSJim Jagielski 	nLeft ( 0 ),
805*b1cdbd2cSJim Jagielski     nRight( 0 )
806*b1cdbd2cSJim Jagielski {
807*b1cdbd2cSJim Jagielski }
808*b1cdbd2cSJim Jagielski 
operator ==(const SwColumn & rCmp)809*b1cdbd2cSJim Jagielski sal_Bool SwColumn::operator==( const SwColumn &rCmp )
810*b1cdbd2cSJim Jagielski {
811*b1cdbd2cSJim Jagielski 	return (nWish    == rCmp.GetWishWidth() &&
812*b1cdbd2cSJim Jagielski 			GetLeft()  == rCmp.GetLeft() &&
813*b1cdbd2cSJim Jagielski 			GetRight() == rCmp.GetRight() &&
814*b1cdbd2cSJim Jagielski 			GetUpper() == rCmp.GetUpper() &&
815*b1cdbd2cSJim Jagielski 			GetLower() == rCmp.GetLower()) ? sal_True : sal_False;
816*b1cdbd2cSJim Jagielski }
817*b1cdbd2cSJim Jagielski 
SwFmtCol(const SwFmtCol & rCpy)818*b1cdbd2cSJim Jagielski SwFmtCol::SwFmtCol( const SwFmtCol& rCpy )
819*b1cdbd2cSJim Jagielski 	: SfxPoolItem( RES_COL ),
820*b1cdbd2cSJim Jagielski 	nLineWidth( rCpy.nLineWidth),
821*b1cdbd2cSJim Jagielski 	aLineColor( rCpy.aLineColor),
822*b1cdbd2cSJim Jagielski 	nLineHeight( rCpy.GetLineHeight() ),
823*b1cdbd2cSJim Jagielski 	eAdj( rCpy.GetLineAdj() ),
824*b1cdbd2cSJim Jagielski     aColumns( (sal_Int8)rCpy.GetNumCols(), 1 ),
825*b1cdbd2cSJim Jagielski     nWidth( rCpy.GetWishWidth() ),
826*b1cdbd2cSJim Jagielski     aWidthAdjustValue( rCpy.aWidthAdjustValue ),
827*b1cdbd2cSJim Jagielski     bOrtho( rCpy.IsOrtho() )
828*b1cdbd2cSJim Jagielski {
829*b1cdbd2cSJim Jagielski 	for ( sal_uInt16 i = 0; i < rCpy.GetNumCols(); ++i )
830*b1cdbd2cSJim Jagielski 	{
831*b1cdbd2cSJim Jagielski 		SwColumn *pCol = new SwColumn( *rCpy.GetColumns()[i] );
832*b1cdbd2cSJim Jagielski 		aColumns.Insert( pCol, aColumns.Count() );
833*b1cdbd2cSJim Jagielski 	}
834*b1cdbd2cSJim Jagielski }
835*b1cdbd2cSJim Jagielski 
~SwFmtCol()836*b1cdbd2cSJim Jagielski SwFmtCol::~SwFmtCol() {}
837*b1cdbd2cSJim Jagielski 
operator =(const SwFmtCol & rCpy)838*b1cdbd2cSJim Jagielski SwFmtCol& SwFmtCol::operator=( const SwFmtCol& rCpy )
839*b1cdbd2cSJim Jagielski {
840*b1cdbd2cSJim Jagielski 	nLineWidth  = rCpy.nLineWidth;
841*b1cdbd2cSJim Jagielski 	aLineColor  = rCpy.aLineColor;
842*b1cdbd2cSJim Jagielski 	nLineHeight	= rCpy.GetLineHeight();
843*b1cdbd2cSJim Jagielski 	eAdj		= rCpy.GetLineAdj();
844*b1cdbd2cSJim Jagielski 	nWidth		= rCpy.GetWishWidth();
845*b1cdbd2cSJim Jagielski 	bOrtho		= rCpy.IsOrtho();
846*b1cdbd2cSJim Jagielski 	aWidthAdjustValue = rCpy.aWidthAdjustValue;
847*b1cdbd2cSJim Jagielski 
848*b1cdbd2cSJim Jagielski 	if ( aColumns.Count() )
849*b1cdbd2cSJim Jagielski 		aColumns.DeleteAndDestroy( 0, aColumns.Count() );
850*b1cdbd2cSJim Jagielski 	for ( sal_uInt16 i = 0; i < rCpy.GetNumCols(); ++i )
851*b1cdbd2cSJim Jagielski 	{
852*b1cdbd2cSJim Jagielski 		SwColumn *pCol = new SwColumn( *rCpy.GetColumns()[i] );
853*b1cdbd2cSJim Jagielski 		aColumns.Insert( pCol, aColumns.Count() );
854*b1cdbd2cSJim Jagielski 	}
855*b1cdbd2cSJim Jagielski 	return *this;
856*b1cdbd2cSJim Jagielski }
857*b1cdbd2cSJim Jagielski 
SwFmtCol()858*b1cdbd2cSJim Jagielski SwFmtCol::SwFmtCol()
859*b1cdbd2cSJim Jagielski 	: SfxPoolItem( RES_COL ),
860*b1cdbd2cSJim Jagielski     nLineWidth(0),
861*b1cdbd2cSJim Jagielski     nLineHeight( 100 ),
862*b1cdbd2cSJim Jagielski 	eAdj( COLADJ_NONE ),
863*b1cdbd2cSJim Jagielski 	nWidth( USHRT_MAX ),
864*b1cdbd2cSJim Jagielski 	aWidthAdjustValue( 0 ),
865*b1cdbd2cSJim Jagielski 	bOrtho( sal_True )
866*b1cdbd2cSJim Jagielski {
867*b1cdbd2cSJim Jagielski }
868*b1cdbd2cSJim Jagielski 
operator ==(const SfxPoolItem & rAttr) const869*b1cdbd2cSJim Jagielski int SwFmtCol::operator==( const SfxPoolItem& rAttr ) const
870*b1cdbd2cSJim Jagielski {
871*b1cdbd2cSJim Jagielski 	ASSERT( SfxPoolItem::operator==( rAttr ), "keine gleichen Attribute" );
872*b1cdbd2cSJim Jagielski 	const SwFmtCol &rCmp = (const SwFmtCol&)rAttr;
873*b1cdbd2cSJim Jagielski 	if( !(nLineWidth		== rCmp.nLineWidth  &&
874*b1cdbd2cSJim Jagielski 		  aLineColor        == rCmp.aLineColor	&&
875*b1cdbd2cSJim Jagielski 		  nLineHeight  		 == rCmp.GetLineHeight() &&
876*b1cdbd2cSJim Jagielski 		  eAdj		 		 == rCmp.GetLineAdj() &&
877*b1cdbd2cSJim Jagielski 		  nWidth  	 		 == rCmp.GetWishWidth() &&
878*b1cdbd2cSJim Jagielski 		  bOrtho  			 == rCmp.IsOrtho() &&
879*b1cdbd2cSJim Jagielski 		  aColumns.Count() == rCmp.GetNumCols() &&
880*b1cdbd2cSJim Jagielski 		  aWidthAdjustValue == rCmp.GetAdjustValue()
881*b1cdbd2cSJim Jagielski          ) )
882*b1cdbd2cSJim Jagielski 		return 0;
883*b1cdbd2cSJim Jagielski 
884*b1cdbd2cSJim Jagielski 	for ( sal_uInt16 i = 0; i < aColumns.Count(); ++i )
885*b1cdbd2cSJim Jagielski 		if ( !(*aColumns[i] == *rCmp.GetColumns()[i]) )
886*b1cdbd2cSJim Jagielski 			return 0;
887*b1cdbd2cSJim Jagielski 
888*b1cdbd2cSJim Jagielski 	return 1;
889*b1cdbd2cSJim Jagielski }
890*b1cdbd2cSJim Jagielski 
Clone(SfxItemPool *) const891*b1cdbd2cSJim Jagielski SfxPoolItem*  SwFmtCol::Clone( SfxItemPool* ) const
892*b1cdbd2cSJim Jagielski {
893*b1cdbd2cSJim Jagielski 	return new SwFmtCol( *this );
894*b1cdbd2cSJim Jagielski }
895*b1cdbd2cSJim Jagielski 
GetGutterWidth(sal_Bool bMin) const896*b1cdbd2cSJim Jagielski sal_uInt16 SwFmtCol::GetGutterWidth( sal_Bool bMin ) const
897*b1cdbd2cSJim Jagielski {
898*b1cdbd2cSJim Jagielski 	sal_uInt16 nRet = 0;
899*b1cdbd2cSJim Jagielski 	if ( aColumns.Count() == 2 )
900*b1cdbd2cSJim Jagielski 		nRet = aColumns[0]->GetRight() + aColumns[1]->GetLeft();
901*b1cdbd2cSJim Jagielski 	else if ( aColumns.Count() > 2 )
902*b1cdbd2cSJim Jagielski 	{
903*b1cdbd2cSJim Jagielski 		sal_Bool bSet = sal_False;
904*b1cdbd2cSJim Jagielski 		for ( sal_uInt16 i = 1; i < aColumns.Count()-1; ++i )
905*b1cdbd2cSJim Jagielski 		{
906*b1cdbd2cSJim Jagielski 			const sal_uInt16 nTmp = aColumns[i]->GetRight() + aColumns[i+1]->GetLeft();
907*b1cdbd2cSJim Jagielski 			if ( bSet )
908*b1cdbd2cSJim Jagielski 			{
909*b1cdbd2cSJim Jagielski 				if ( nTmp != nRet )
910*b1cdbd2cSJim Jagielski 				{
911*b1cdbd2cSJim Jagielski 					if ( !bMin )
912*b1cdbd2cSJim Jagielski 						return USHRT_MAX;
913*b1cdbd2cSJim Jagielski 					if ( nRet > nTmp )
914*b1cdbd2cSJim Jagielski 						nRet = nTmp;
915*b1cdbd2cSJim Jagielski 				}
916*b1cdbd2cSJim Jagielski 			}
917*b1cdbd2cSJim Jagielski 			else
918*b1cdbd2cSJim Jagielski 			{	bSet = sal_True;
919*b1cdbd2cSJim Jagielski 				nRet = nTmp;
920*b1cdbd2cSJim Jagielski 			}
921*b1cdbd2cSJim Jagielski 		}
922*b1cdbd2cSJim Jagielski 	}
923*b1cdbd2cSJim Jagielski 	return nRet;
924*b1cdbd2cSJim Jagielski }
925*b1cdbd2cSJim Jagielski 
SetGutterWidth(sal_uInt16 nNew,sal_uInt16 nAct)926*b1cdbd2cSJim Jagielski void SwFmtCol::SetGutterWidth( sal_uInt16 nNew, sal_uInt16 nAct )
927*b1cdbd2cSJim Jagielski {
928*b1cdbd2cSJim Jagielski 	if ( bOrtho )
929*b1cdbd2cSJim Jagielski 		Calc( nNew, nAct );
930*b1cdbd2cSJim Jagielski 	else
931*b1cdbd2cSJim Jagielski 	{
932*b1cdbd2cSJim Jagielski 		sal_uInt16 nHalf = nNew / 2;
933*b1cdbd2cSJim Jagielski 		for ( sal_uInt16 i = 0; i < aColumns.Count(); ++i )
934*b1cdbd2cSJim Jagielski 		{	SwColumn *pCol = aColumns[i];
935*b1cdbd2cSJim Jagielski 			pCol->SetLeft ( nHalf );
936*b1cdbd2cSJim Jagielski 			pCol->SetRight( nHalf );
937*b1cdbd2cSJim Jagielski 			if ( i == 0 )
938*b1cdbd2cSJim Jagielski 				pCol->SetLeft( 0 );
939*b1cdbd2cSJim Jagielski 			else if ( i == (aColumns.Count() - 1) )
940*b1cdbd2cSJim Jagielski 				pCol->SetRight( 0 );
941*b1cdbd2cSJim Jagielski 		}
942*b1cdbd2cSJim Jagielski 	}
943*b1cdbd2cSJim Jagielski }
944*b1cdbd2cSJim Jagielski 
Init(sal_uInt16 nNumCols,sal_uInt16 nGutterWidth,sal_uInt16 nAct)945*b1cdbd2cSJim Jagielski void SwFmtCol::Init( sal_uInt16 nNumCols, sal_uInt16 nGutterWidth, sal_uInt16 nAct )
946*b1cdbd2cSJim Jagielski {
947*b1cdbd2cSJim Jagielski 	//Loeschen scheint hier auf den erste Blick vielleicht etwas zu heftig;
948*b1cdbd2cSJim Jagielski 	//anderfalls muessten allerdings alle Werte der verbleibenden SwColumn's
949*b1cdbd2cSJim Jagielski 	//initialisiert werden.
950*b1cdbd2cSJim Jagielski 	if ( aColumns.Count() )
951*b1cdbd2cSJim Jagielski 		aColumns.DeleteAndDestroy( 0, aColumns.Count() );
952*b1cdbd2cSJim Jagielski 	for ( sal_uInt16 i = 0; i < nNumCols; ++i )
953*b1cdbd2cSJim Jagielski 	{	SwColumn *pCol = new SwColumn;
954*b1cdbd2cSJim Jagielski 		aColumns.Insert( pCol, i );
955*b1cdbd2cSJim Jagielski 	}
956*b1cdbd2cSJim Jagielski 	bOrtho = sal_True;
957*b1cdbd2cSJim Jagielski 	nWidth = USHRT_MAX;
958*b1cdbd2cSJim Jagielski 	if( nNumCols )
959*b1cdbd2cSJim Jagielski 		Calc( nGutterWidth, nAct );
960*b1cdbd2cSJim Jagielski }
961*b1cdbd2cSJim Jagielski 
SetOrtho(sal_Bool bNew,sal_uInt16 nGutterWidth,sal_uInt16 nAct)962*b1cdbd2cSJim Jagielski void SwFmtCol::SetOrtho( sal_Bool bNew, sal_uInt16 nGutterWidth, sal_uInt16 nAct )
963*b1cdbd2cSJim Jagielski {
964*b1cdbd2cSJim Jagielski 	bOrtho = bNew;
965*b1cdbd2cSJim Jagielski 	if ( bNew && aColumns.Count() )
966*b1cdbd2cSJim Jagielski 		Calc( nGutterWidth, nAct );
967*b1cdbd2cSJim Jagielski }
968*b1cdbd2cSJim Jagielski 
CalcColWidth(sal_uInt16 nCol,sal_uInt16 nAct) const969*b1cdbd2cSJim Jagielski sal_uInt16 SwFmtCol::CalcColWidth( sal_uInt16 nCol, sal_uInt16 nAct ) const
970*b1cdbd2cSJim Jagielski {
971*b1cdbd2cSJim Jagielski 	ASSERT( nCol < aColumns.Count(), ":-( ColumnsArr ueberindiziert." );
972*b1cdbd2cSJim Jagielski 	if ( nWidth != nAct )
973*b1cdbd2cSJim Jagielski 	{
974*b1cdbd2cSJim Jagielski 		long nW = aColumns[nCol]->GetWishWidth();
975*b1cdbd2cSJim Jagielski 		nW *= nAct;
976*b1cdbd2cSJim Jagielski 		nW /= nWidth;
977*b1cdbd2cSJim Jagielski 		return sal_uInt16(nW);
978*b1cdbd2cSJim Jagielski 	}
979*b1cdbd2cSJim Jagielski 	else
980*b1cdbd2cSJim Jagielski 		return aColumns[nCol]->GetWishWidth();
981*b1cdbd2cSJim Jagielski }
982*b1cdbd2cSJim Jagielski 
CalcPrtColWidth(sal_uInt16 nCol,sal_uInt16 nAct) const983*b1cdbd2cSJim Jagielski sal_uInt16 SwFmtCol::CalcPrtColWidth( sal_uInt16 nCol, sal_uInt16 nAct ) const
984*b1cdbd2cSJim Jagielski {
985*b1cdbd2cSJim Jagielski 	ASSERT( nCol < aColumns.Count(), ":-( ColumnsArr ueberindiziert." );
986*b1cdbd2cSJim Jagielski 	sal_uInt16 nRet = CalcColWidth( nCol, nAct );
987*b1cdbd2cSJim Jagielski 	SwColumn *pCol = aColumns[nCol];
988*b1cdbd2cSJim Jagielski 	nRet = nRet - pCol->GetLeft();
989*b1cdbd2cSJim Jagielski 	nRet = nRet - pCol->GetRight();
990*b1cdbd2cSJim Jagielski 	return nRet;
991*b1cdbd2cSJim Jagielski }
992*b1cdbd2cSJim Jagielski 
Calc(sal_uInt16 nGutterWidth,sal_uInt16 nAct)993*b1cdbd2cSJim Jagielski void SwFmtCol::Calc( sal_uInt16 nGutterWidth, sal_uInt16 nAct )
994*b1cdbd2cSJim Jagielski {
995*b1cdbd2cSJim Jagielski 	if(!GetNumCols())
996*b1cdbd2cSJim Jagielski         return;
997*b1cdbd2cSJim Jagielski     //Erstmal die Spalten mit der Aktuellen Breite einstellen, dann die
998*b1cdbd2cSJim Jagielski 	//Wunschbreite der Spalten anhand der Gesamtwunschbreite hochrechnen.
999*b1cdbd2cSJim Jagielski 
1000*b1cdbd2cSJim Jagielski 	const sal_uInt16 nGutterHalf = nGutterWidth ? nGutterWidth / 2 : 0;
1001*b1cdbd2cSJim Jagielski 
1002*b1cdbd2cSJim Jagielski 	//Breite der PrtAreas ist Gesamtbreite - Zwischenraeume / Anzahl
1003*b1cdbd2cSJim Jagielski 	const sal_uInt16 nPrtWidth =
1004*b1cdbd2cSJim Jagielski 				(nAct - ((GetNumCols()-1) * nGutterWidth)) / GetNumCols();
1005*b1cdbd2cSJim Jagielski 	sal_uInt16 nAvail = nAct;
1006*b1cdbd2cSJim Jagielski 
1007*b1cdbd2cSJim Jagielski 	//Die erste Spalte ist PrtBreite + (Zwischenraumbreite/2)
1008*b1cdbd2cSJim Jagielski 	const sal_uInt16 nLeftWidth = nPrtWidth + nGutterHalf;
1009*b1cdbd2cSJim Jagielski 	SwColumn *pCol = aColumns[0];
1010*b1cdbd2cSJim Jagielski 	pCol->SetWishWidth( nLeftWidth );
1011*b1cdbd2cSJim Jagielski 	pCol->SetRight( nGutterHalf );
1012*b1cdbd2cSJim Jagielski 	pCol->SetLeft ( 0 );
1013*b1cdbd2cSJim Jagielski 	nAvail = nAvail - nLeftWidth;
1014*b1cdbd2cSJim Jagielski 
1015*b1cdbd2cSJim Jagielski 	//Spalte 2 bis n-1 ist PrtBreite + Zwischenraumbreite
1016*b1cdbd2cSJim Jagielski 	const sal_uInt16 nMidWidth = nPrtWidth + nGutterWidth;
1017*b1cdbd2cSJim Jagielski 	sal_uInt16 i;
1018*b1cdbd2cSJim Jagielski 
1019*b1cdbd2cSJim Jagielski 	for ( i = 1; i < GetNumCols()-1; ++i )
1020*b1cdbd2cSJim Jagielski 	{
1021*b1cdbd2cSJim Jagielski 		pCol = aColumns[i];
1022*b1cdbd2cSJim Jagielski 		pCol->SetWishWidth( nMidWidth );
1023*b1cdbd2cSJim Jagielski 		pCol->SetLeft ( nGutterHalf );
1024*b1cdbd2cSJim Jagielski 		pCol->SetRight( nGutterHalf );
1025*b1cdbd2cSJim Jagielski 		nAvail = nAvail - nMidWidth;
1026*b1cdbd2cSJim Jagielski 	}
1027*b1cdbd2cSJim Jagielski 
1028*b1cdbd2cSJim Jagielski 	//Die Letzte Spalte entspricht wieder der ersten, um Rundungsfehler
1029*b1cdbd2cSJim Jagielski 	//auszugleichen wird der letzten Spalte alles zugeschlagen was die
1030*b1cdbd2cSJim Jagielski 	//anderen nicht verbraucht haben.
1031*b1cdbd2cSJim Jagielski 	pCol = aColumns[aColumns.Count()-1];
1032*b1cdbd2cSJim Jagielski 	pCol->SetWishWidth( nAvail );
1033*b1cdbd2cSJim Jagielski 	pCol->SetLeft ( nGutterHalf );
1034*b1cdbd2cSJim Jagielski 	pCol->SetRight( 0 );
1035*b1cdbd2cSJim Jagielski 
1036*b1cdbd2cSJim Jagielski 	//Umrechnen der aktuellen Breiten in Wunschbreiten.
1037*b1cdbd2cSJim Jagielski 	for ( i = 0; i < aColumns.Count(); ++i )
1038*b1cdbd2cSJim Jagielski 	{
1039*b1cdbd2cSJim Jagielski 		pCol = aColumns[i];
1040*b1cdbd2cSJim Jagielski 		long nTmp = pCol->GetWishWidth();
1041*b1cdbd2cSJim Jagielski 		nTmp *= GetWishWidth();
1042*b1cdbd2cSJim Jagielski 		nTmp /= nAct;
1043*b1cdbd2cSJim Jagielski 		pCol->SetWishWidth( sal_uInt16(nTmp) );
1044*b1cdbd2cSJim Jagielski 	}
1045*b1cdbd2cSJim Jagielski }
1046*b1cdbd2cSJim Jagielski 
QueryValue(uno::Any & rVal,sal_uInt8 nMemberId) const1047*b1cdbd2cSJim Jagielski sal_Bool SwFmtCol::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
1048*b1cdbd2cSJim Jagielski {
1049*b1cdbd2cSJim Jagielski 	// hier wird immer konvertiert!
1050*b1cdbd2cSJim Jagielski 	nMemberId &= ~CONVERT_TWIPS;
1051*b1cdbd2cSJim Jagielski 	if(MID_COLUMN_SEPARATOR_LINE == nMemberId)
1052*b1cdbd2cSJim Jagielski 	{
1053*b1cdbd2cSJim Jagielski 		DBG_ERROR("not implemented");
1054*b1cdbd2cSJim Jagielski 	}
1055*b1cdbd2cSJim Jagielski 	else
1056*b1cdbd2cSJim Jagielski 	{
1057*b1cdbd2cSJim Jagielski 		uno::Reference< text::XTextColumns >  xCols = new SwXTextColumns(*this);
1058*b1cdbd2cSJim Jagielski 		rVal.setValue(&xCols, ::getCppuType((uno::Reference< text::XTextColumns>*)0));
1059*b1cdbd2cSJim Jagielski 	}
1060*b1cdbd2cSJim Jagielski 	return sal_True;
1061*b1cdbd2cSJim Jagielski }
1062*b1cdbd2cSJim Jagielski 
PutValue(const uno::Any & rVal,sal_uInt8 nMemberId)1063*b1cdbd2cSJim Jagielski sal_Bool SwFmtCol::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
1064*b1cdbd2cSJim Jagielski {
1065*b1cdbd2cSJim Jagielski 	// hier wird immer konvertiert!
1066*b1cdbd2cSJim Jagielski 	nMemberId &= ~CONVERT_TWIPS;
1067*b1cdbd2cSJim Jagielski 	sal_Bool bRet = sal_False;
1068*b1cdbd2cSJim Jagielski 	if(MID_COLUMN_SEPARATOR_LINE == nMemberId)
1069*b1cdbd2cSJim Jagielski 	{
1070*b1cdbd2cSJim Jagielski 		DBG_ERROR("not implemented");
1071*b1cdbd2cSJim Jagielski 	}
1072*b1cdbd2cSJim Jagielski 	else
1073*b1cdbd2cSJim Jagielski 	{
1074*b1cdbd2cSJim Jagielski         uno::Reference< text::XTextColumns > xCols;
1075*b1cdbd2cSJim Jagielski         rVal >>= xCols;
1076*b1cdbd2cSJim Jagielski         if(xCols.is())
1077*b1cdbd2cSJim Jagielski 		{
1078*b1cdbd2cSJim Jagielski             uno::Sequence<text::TextColumn> aSetColumns = xCols->getColumns();
1079*b1cdbd2cSJim Jagielski 			const text::TextColumn* pArray = aSetColumns.getConstArray();
1080*b1cdbd2cSJim Jagielski 			aColumns.DeleteAndDestroy(0, aColumns.Count());
1081*b1cdbd2cSJim Jagielski 			//max. Count ist hier 64K - das kann das Array aber nicht
1082*b1cdbd2cSJim Jagielski 			sal_uInt16 nCount = Min( (sal_uInt16)aSetColumns.getLength(),
1083*b1cdbd2cSJim Jagielski 									 (sal_uInt16) 0x3fff );
1084*b1cdbd2cSJim Jagielski 			sal_uInt16 nWidthSum = 0;
1085*b1cdbd2cSJim Jagielski             // #101224# one column is no column
1086*b1cdbd2cSJim Jagielski             //
1087*b1cdbd2cSJim Jagielski             if(nCount > 1)
1088*b1cdbd2cSJim Jagielski                 for(sal_uInt16 i = 0; i < nCount; i++)
1089*b1cdbd2cSJim Jagielski                 {
1090*b1cdbd2cSJim Jagielski                     SwColumn* pCol = new SwColumn;
1091*b1cdbd2cSJim Jagielski                     pCol->SetWishWidth( static_cast<sal_uInt16>(pArray[i].Width) );
1092*b1cdbd2cSJim Jagielski                     nWidthSum = static_cast<sal_uInt16>(nWidthSum + pArray[i].Width);
1093*b1cdbd2cSJim Jagielski                     pCol->SetLeft ( static_cast<sal_uInt16>(MM100_TO_TWIP(pArray[i].LeftMargin)) );
1094*b1cdbd2cSJim Jagielski                     pCol->SetRight( static_cast<sal_uInt16>(MM100_TO_TWIP(pArray[i].RightMargin)) );
1095*b1cdbd2cSJim Jagielski                     aColumns.Insert(pCol, i);
1096*b1cdbd2cSJim Jagielski                 }
1097*b1cdbd2cSJim Jagielski 			bRet = sal_True;
1098*b1cdbd2cSJim Jagielski 			nWidth = nWidthSum;
1099*b1cdbd2cSJim Jagielski             bOrtho = sal_False;
1100*b1cdbd2cSJim Jagielski 
1101*b1cdbd2cSJim Jagielski             uno::Reference<lang::XUnoTunnel> xNumTunnel(xCols, uno::UNO_QUERY);
1102*b1cdbd2cSJim Jagielski 			SwXTextColumns* pSwColums = 0;
1103*b1cdbd2cSJim Jagielski 			if(xNumTunnel.is())
1104*b1cdbd2cSJim Jagielski 			{
1105*b1cdbd2cSJim Jagielski                 pSwColums = reinterpret_cast< SwXTextColumns * >(
1106*b1cdbd2cSJim Jagielski                     sal::static_int_cast< sal_IntPtr >(
1107*b1cdbd2cSJim Jagielski                     xNumTunnel->getSomething( SwXTextColumns::getUnoTunnelId() )));
1108*b1cdbd2cSJim Jagielski 			}
1109*b1cdbd2cSJim Jagielski 			if(pSwColums)
1110*b1cdbd2cSJim Jagielski 			{
1111*b1cdbd2cSJim Jagielski                 bOrtho = pSwColums->IsAutomaticWidth();
1112*b1cdbd2cSJim Jagielski                 nLineWidth = pSwColums->GetSepLineWidth();
1113*b1cdbd2cSJim Jagielski 				aLineColor.SetColor(pSwColums->GetSepLineColor());
1114*b1cdbd2cSJim Jagielski 				nLineHeight = pSwColums->GetSepLineHeightRelative();
1115*b1cdbd2cSJim Jagielski 				if(!pSwColums->GetSepLineIsOn())
1116*b1cdbd2cSJim Jagielski 					eAdj = COLADJ_NONE;
1117*b1cdbd2cSJim Jagielski 				else switch(pSwColums->GetSepLineVertAlign())
1118*b1cdbd2cSJim Jagielski 				{
1119*b1cdbd2cSJim Jagielski 					case 0: eAdj = COLADJ_TOP;	break;	//VerticalAlignment_TOP
1120*b1cdbd2cSJim Jagielski 					case 1: eAdj = COLADJ_CENTER;break; //VerticalAlignment_MIDDLE
1121*b1cdbd2cSJim Jagielski 					case 2: eAdj = COLADJ_BOTTOM;break;	//VerticalAlignment_BOTTOM
1122*b1cdbd2cSJim Jagielski                     default: ASSERT( !this, "unknown alignment" ); break;
1123*b1cdbd2cSJim Jagielski 				}
1124*b1cdbd2cSJim Jagielski 			}
1125*b1cdbd2cSJim Jagielski 		}
1126*b1cdbd2cSJim Jagielski 	}
1127*b1cdbd2cSJim Jagielski 	return bRet;
1128*b1cdbd2cSJim Jagielski }
1129*b1cdbd2cSJim Jagielski 
1130*b1cdbd2cSJim Jagielski 
1131*b1cdbd2cSJim Jagielski //	class SwFmtSurround
1132*b1cdbd2cSJim Jagielski //	Implementierung teilweise inline im hxx
1133*b1cdbd2cSJim Jagielski 
SwFmtSurround(SwSurround eFly)1134*b1cdbd2cSJim Jagielski SwFmtSurround::SwFmtSurround( SwSurround eFly ) :
1135*b1cdbd2cSJim Jagielski 	SfxEnumItem( RES_SURROUND, sal_uInt16( eFly ) )
1136*b1cdbd2cSJim Jagielski {
1137*b1cdbd2cSJim Jagielski 	bAnchorOnly = bContour = bOutside = sal_False;
1138*b1cdbd2cSJim Jagielski }
1139*b1cdbd2cSJim Jagielski 
SwFmtSurround(const SwFmtSurround & rCpy)1140*b1cdbd2cSJim Jagielski SwFmtSurround::SwFmtSurround( const SwFmtSurround &rCpy ) :
1141*b1cdbd2cSJim Jagielski 	SfxEnumItem( RES_SURROUND, rCpy.GetValue() )
1142*b1cdbd2cSJim Jagielski {
1143*b1cdbd2cSJim Jagielski 	bAnchorOnly = rCpy.bAnchorOnly;
1144*b1cdbd2cSJim Jagielski 	bContour = rCpy.bContour;
1145*b1cdbd2cSJim Jagielski 	bOutside = rCpy.bOutside;
1146*b1cdbd2cSJim Jagielski }
1147*b1cdbd2cSJim Jagielski 
operator ==(const SfxPoolItem & rAttr) const1148*b1cdbd2cSJim Jagielski int  SwFmtSurround::operator==( const SfxPoolItem& rAttr ) const
1149*b1cdbd2cSJim Jagielski {
1150*b1cdbd2cSJim Jagielski 	ASSERT( SfxPoolItem::operator==( rAttr ), "keine gleichen Attribute" );
1151*b1cdbd2cSJim Jagielski 	return ( GetValue() == ((SwFmtSurround&)rAttr).GetValue() &&
1152*b1cdbd2cSJim Jagielski 			 bAnchorOnly== ((SwFmtSurround&)rAttr).bAnchorOnly &&
1153*b1cdbd2cSJim Jagielski 			 bContour== ((SwFmtSurround&)rAttr).bContour &&
1154*b1cdbd2cSJim Jagielski 			 bOutside== ((SwFmtSurround&)rAttr).bOutside );
1155*b1cdbd2cSJim Jagielski }
1156*b1cdbd2cSJim Jagielski 
Clone(SfxItemPool *) const1157*b1cdbd2cSJim Jagielski SfxPoolItem*  SwFmtSurround::Clone( SfxItemPool* ) const
1158*b1cdbd2cSJim Jagielski {
1159*b1cdbd2cSJim Jagielski 	return new SwFmtSurround( *this );
1160*b1cdbd2cSJim Jagielski }
1161*b1cdbd2cSJim Jagielski 
GetValueCount() const1162*b1cdbd2cSJim Jagielski sal_uInt16  SwFmtSurround::GetValueCount() const
1163*b1cdbd2cSJim Jagielski {
1164*b1cdbd2cSJim Jagielski 	return SURROUND_END - SURROUND_BEGIN;
1165*b1cdbd2cSJim Jagielski }
1166*b1cdbd2cSJim Jagielski 
1167*b1cdbd2cSJim Jagielski 
QueryValue(uno::Any & rVal,sal_uInt8 nMemberId) const1168*b1cdbd2cSJim Jagielski sal_Bool SwFmtSurround::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
1169*b1cdbd2cSJim Jagielski {
1170*b1cdbd2cSJim Jagielski 	// hier wird immer konvertiert!
1171*b1cdbd2cSJim Jagielski 	nMemberId &= ~CONVERT_TWIPS;
1172*b1cdbd2cSJim Jagielski 	sal_Bool bRet = sal_True;
1173*b1cdbd2cSJim Jagielski 	switch ( nMemberId )
1174*b1cdbd2cSJim Jagielski 	{
1175*b1cdbd2cSJim Jagielski 		case MID_SURROUND_SURROUNDTYPE:
1176*b1cdbd2cSJim Jagielski 				rVal <<= (text::WrapTextMode)GetSurround();
1177*b1cdbd2cSJim Jagielski 		break;
1178*b1cdbd2cSJim Jagielski 		case MID_SURROUND_ANCHORONLY:
1179*b1cdbd2cSJim Jagielski 		{
1180*b1cdbd2cSJim Jagielski 			sal_Bool bTmp = IsAnchorOnly();
1181*b1cdbd2cSJim Jagielski 			rVal.setValue(&bTmp, ::getBooleanCppuType());
1182*b1cdbd2cSJim Jagielski 		}
1183*b1cdbd2cSJim Jagielski 				break;
1184*b1cdbd2cSJim Jagielski 		case MID_SURROUND_CONTOUR:
1185*b1cdbd2cSJim Jagielski 		{
1186*b1cdbd2cSJim Jagielski 			sal_Bool bTmp = IsContour();
1187*b1cdbd2cSJim Jagielski 			rVal.setValue(&bTmp, ::getBooleanCppuType());
1188*b1cdbd2cSJim Jagielski 		}
1189*b1cdbd2cSJim Jagielski 				break;
1190*b1cdbd2cSJim Jagielski 		case MID_SURROUND_CONTOUROUTSIDE:
1191*b1cdbd2cSJim Jagielski 		{
1192*b1cdbd2cSJim Jagielski 			sal_Bool bTmp = IsOutside();
1193*b1cdbd2cSJim Jagielski 			rVal.setValue(&bTmp, ::getBooleanCppuType());
1194*b1cdbd2cSJim Jagielski 		}
1195*b1cdbd2cSJim Jagielski 				break;
1196*b1cdbd2cSJim Jagielski 		default:
1197*b1cdbd2cSJim Jagielski 			ASSERT( !this, "unknown MemberId" );
1198*b1cdbd2cSJim Jagielski 			bRet = sal_False;
1199*b1cdbd2cSJim Jagielski 	}
1200*b1cdbd2cSJim Jagielski 	return bRet;
1201*b1cdbd2cSJim Jagielski }
1202*b1cdbd2cSJim Jagielski 
PutValue(const uno::Any & rVal,sal_uInt8 nMemberId)1203*b1cdbd2cSJim Jagielski sal_Bool SwFmtSurround::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
1204*b1cdbd2cSJim Jagielski {
1205*b1cdbd2cSJim Jagielski 	// hier wird immer konvertiert!
1206*b1cdbd2cSJim Jagielski 	nMemberId &= ~CONVERT_TWIPS;
1207*b1cdbd2cSJim Jagielski 	sal_Bool bRet = sal_True;
1208*b1cdbd2cSJim Jagielski 	switch ( nMemberId )
1209*b1cdbd2cSJim Jagielski 	{
1210*b1cdbd2cSJim Jagielski 		case MID_SURROUND_SURROUNDTYPE:
1211*b1cdbd2cSJim Jagielski 		{
1212*b1cdbd2cSJim Jagielski 			sal_Int32 eVal = SWUnoHelper::GetEnumAsInt32( rVal );
1213*b1cdbd2cSJim Jagielski 			if( eVal >= 0 && eVal < (sal_Int16)SURROUND_END )
1214*b1cdbd2cSJim Jagielski 				SetValue( static_cast<sal_uInt16>(eVal) );
1215*b1cdbd2cSJim Jagielski 			else {
1216*b1cdbd2cSJim Jagielski 				//exception
1217*b1cdbd2cSJim Jagielski 				;
1218*b1cdbd2cSJim Jagielski             }
1219*b1cdbd2cSJim Jagielski 		}
1220*b1cdbd2cSJim Jagielski 		break;
1221*b1cdbd2cSJim Jagielski 
1222*b1cdbd2cSJim Jagielski 		case MID_SURROUND_ANCHORONLY:
1223*b1cdbd2cSJim Jagielski 			SetAnchorOnly( *(sal_Bool*)rVal.getValue() );
1224*b1cdbd2cSJim Jagielski 			break;
1225*b1cdbd2cSJim Jagielski 		case MID_SURROUND_CONTOUR:
1226*b1cdbd2cSJim Jagielski 			SetContour( *(sal_Bool*)rVal.getValue() );
1227*b1cdbd2cSJim Jagielski 			break;
1228*b1cdbd2cSJim Jagielski 		case MID_SURROUND_CONTOUROUTSIDE:
1229*b1cdbd2cSJim Jagielski 			SetOutside( *(sal_Bool*)rVal.getValue() );
1230*b1cdbd2cSJim Jagielski 			break;
1231*b1cdbd2cSJim Jagielski 		default:
1232*b1cdbd2cSJim Jagielski 			ASSERT( !this, "unknown MemberId" );
1233*b1cdbd2cSJim Jagielski 			bRet = sal_False;
1234*b1cdbd2cSJim Jagielski 	}
1235*b1cdbd2cSJim Jagielski 	return bRet;
1236*b1cdbd2cSJim Jagielski }
1237*b1cdbd2cSJim Jagielski 
1238*b1cdbd2cSJim Jagielski //	class SwFmtVertOrient
1239*b1cdbd2cSJim Jagielski //	Implementierung teilweise inline im hxx
1240*b1cdbd2cSJim Jagielski 
SwFmtVertOrient(SwTwips nY,sal_Int16 eVert,sal_Int16 eRel)1241*b1cdbd2cSJim Jagielski SwFmtVertOrient::SwFmtVertOrient( SwTwips nY, sal_Int16 eVert,
1242*b1cdbd2cSJim Jagielski                                   sal_Int16 eRel )
1243*b1cdbd2cSJim Jagielski 	: SfxPoolItem( RES_VERT_ORIENT ),
1244*b1cdbd2cSJim Jagielski 	nYPos( nY ),
1245*b1cdbd2cSJim Jagielski 	eOrient( eVert ),
1246*b1cdbd2cSJim Jagielski 	eRelation( eRel )
1247*b1cdbd2cSJim Jagielski {}
1248*b1cdbd2cSJim Jagielski 
operator ==(const SfxPoolItem & rAttr) const1249*b1cdbd2cSJim Jagielski int  SwFmtVertOrient::operator==( const SfxPoolItem& rAttr ) const
1250*b1cdbd2cSJim Jagielski {
1251*b1cdbd2cSJim Jagielski 	ASSERT( SfxPoolItem::operator==( rAttr ), "keine gleichen Attribute" );
1252*b1cdbd2cSJim Jagielski 	return ( nYPos     == ((SwFmtVertOrient&)rAttr).nYPos &&
1253*b1cdbd2cSJim Jagielski 			 eOrient   == ((SwFmtVertOrient&)rAttr).eOrient &&
1254*b1cdbd2cSJim Jagielski 			 eRelation == ((SwFmtVertOrient&)rAttr).eRelation );
1255*b1cdbd2cSJim Jagielski }
1256*b1cdbd2cSJim Jagielski 
Clone(SfxItemPool *) const1257*b1cdbd2cSJim Jagielski SfxPoolItem*  SwFmtVertOrient::Clone( SfxItemPool* ) const
1258*b1cdbd2cSJim Jagielski {
1259*b1cdbd2cSJim Jagielski 	return new SwFmtVertOrient( nYPos, eOrient, eRelation );
1260*b1cdbd2cSJim Jagielski }
1261*b1cdbd2cSJim Jagielski 
QueryValue(uno::Any & rVal,sal_uInt8 nMemberId) const1262*b1cdbd2cSJim Jagielski sal_Bool SwFmtVertOrient::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
1263*b1cdbd2cSJim Jagielski {
1264*b1cdbd2cSJim Jagielski 	// hier wird immer konvertiert!
1265*b1cdbd2cSJim Jagielski 	nMemberId &= ~CONVERT_TWIPS;
1266*b1cdbd2cSJim Jagielski 	sal_Bool bRet = sal_True;
1267*b1cdbd2cSJim Jagielski 	switch ( nMemberId )
1268*b1cdbd2cSJim Jagielski 	{
1269*b1cdbd2cSJim Jagielski 		case MID_VERTORIENT_ORIENT:
1270*b1cdbd2cSJim Jagielski 		{
1271*b1cdbd2cSJim Jagielski             sal_Int16 nRet = text::VertOrientation::NONE;
1272*b1cdbd2cSJim Jagielski 			switch( eOrient )
1273*b1cdbd2cSJim Jagielski 			{
1274*b1cdbd2cSJim Jagielski                 case text::VertOrientation::TOP        :  nRet = text::VertOrientation::TOP        ;break;
1275*b1cdbd2cSJim Jagielski                 case text::VertOrientation::CENTER     :  nRet = text::VertOrientation::CENTER     ;break;
1276*b1cdbd2cSJim Jagielski                 case text::VertOrientation::BOTTOM     :  nRet = text::VertOrientation::BOTTOM     ;break;
1277*b1cdbd2cSJim Jagielski                 case text::VertOrientation::CHAR_TOP   :  nRet = text::VertOrientation::CHAR_TOP   ;break;
1278*b1cdbd2cSJim Jagielski                 case text::VertOrientation::CHAR_CENTER:  nRet = text::VertOrientation::CHAR_CENTER;break;
1279*b1cdbd2cSJim Jagielski                 case text::VertOrientation::CHAR_BOTTOM:  nRet = text::VertOrientation::CHAR_BOTTOM;break;
1280*b1cdbd2cSJim Jagielski                 case text::VertOrientation::LINE_TOP   :  nRet = text::VertOrientation::LINE_TOP   ;break;
1281*b1cdbd2cSJim Jagielski                 case text::VertOrientation::LINE_CENTER:  nRet = text::VertOrientation::LINE_CENTER;break;
1282*b1cdbd2cSJim Jagielski                 case text::VertOrientation::LINE_BOTTOM:  nRet = text::VertOrientation::LINE_BOTTOM;break;
1283*b1cdbd2cSJim Jagielski                 default: break;
1284*b1cdbd2cSJim Jagielski 			}
1285*b1cdbd2cSJim Jagielski 			rVal <<= nRet;
1286*b1cdbd2cSJim Jagielski 		}
1287*b1cdbd2cSJim Jagielski 		break;
1288*b1cdbd2cSJim Jagielski 		case MID_VERTORIENT_RELATION:
1289*b1cdbd2cSJim Jagielski 				rVal <<= lcl_RelToINT(eRelation);
1290*b1cdbd2cSJim Jagielski 		break;
1291*b1cdbd2cSJim Jagielski 		case MID_VERTORIENT_POSITION:
1292*b1cdbd2cSJim Jagielski 				rVal <<= (sal_Int32)TWIP_TO_MM100(GetPos());
1293*b1cdbd2cSJim Jagielski 				break;
1294*b1cdbd2cSJim Jagielski 		default:
1295*b1cdbd2cSJim Jagielski 			ASSERT( !this, "unknown MemberId" );
1296*b1cdbd2cSJim Jagielski 			bRet = sal_False;
1297*b1cdbd2cSJim Jagielski 	}
1298*b1cdbd2cSJim Jagielski 	return bRet;
1299*b1cdbd2cSJim Jagielski }
1300*b1cdbd2cSJim Jagielski 
PutValue(const uno::Any & rVal,sal_uInt8 nMemberId)1301*b1cdbd2cSJim Jagielski sal_Bool SwFmtVertOrient::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
1302*b1cdbd2cSJim Jagielski {
1303*b1cdbd2cSJim Jagielski 	sal_Bool bConvert = 0 != (nMemberId&CONVERT_TWIPS);
1304*b1cdbd2cSJim Jagielski 	nMemberId &= ~CONVERT_TWIPS;
1305*b1cdbd2cSJim Jagielski 	sal_Bool bRet = sal_True;
1306*b1cdbd2cSJim Jagielski 	switch ( nMemberId )
1307*b1cdbd2cSJim Jagielski 	{
1308*b1cdbd2cSJim Jagielski 		case MID_VERTORIENT_ORIENT:
1309*b1cdbd2cSJim Jagielski 		{
1310*b1cdbd2cSJim Jagielski 			sal_uInt16 nVal = 0;
1311*b1cdbd2cSJim Jagielski 			rVal >>= nVal;
1312*b1cdbd2cSJim Jagielski 			switch( nVal )
1313*b1cdbd2cSJim Jagielski 			{
1314*b1cdbd2cSJim Jagielski                 case text::VertOrientation::NONE:           eOrient = text::VertOrientation::NONE;    break;
1315*b1cdbd2cSJim Jagielski                 case text::VertOrientation::TOP        :    eOrient = text::VertOrientation::TOP;     break;
1316*b1cdbd2cSJim Jagielski                 case text::VertOrientation::CENTER     :    eOrient = text::VertOrientation::CENTER;     break;
1317*b1cdbd2cSJim Jagielski                 case text::VertOrientation::BOTTOM     :    eOrient = text::VertOrientation::BOTTOM;     break;
1318*b1cdbd2cSJim Jagielski                 case text::VertOrientation::CHAR_TOP   :    eOrient = text::VertOrientation::CHAR_TOP;   break;
1319*b1cdbd2cSJim Jagielski                 case text::VertOrientation::CHAR_CENTER:    eOrient = text::VertOrientation::CHAR_CENTER;break;
1320*b1cdbd2cSJim Jagielski                 case text::VertOrientation::CHAR_BOTTOM:    eOrient = text::VertOrientation::CHAR_BOTTOM;break;
1321*b1cdbd2cSJim Jagielski                 case text::VertOrientation::LINE_TOP   :    eOrient = text::VertOrientation::LINE_TOP;    break;
1322*b1cdbd2cSJim Jagielski                 case text::VertOrientation::LINE_CENTER:    eOrient = text::VertOrientation::LINE_CENTER;break;
1323*b1cdbd2cSJim Jagielski                 case text::VertOrientation::LINE_BOTTOM:    eOrient = text::VertOrientation::LINE_BOTTOM;break;
1324*b1cdbd2cSJim Jagielski 			}
1325*b1cdbd2cSJim Jagielski 		}
1326*b1cdbd2cSJim Jagielski 		break;
1327*b1cdbd2cSJim Jagielski 		case MID_VERTORIENT_RELATION:
1328*b1cdbd2cSJim Jagielski 		{
1329*b1cdbd2cSJim Jagielski 			eRelation = lcl_IntToRelation(rVal);
1330*b1cdbd2cSJim Jagielski 		}
1331*b1cdbd2cSJim Jagielski 		break;
1332*b1cdbd2cSJim Jagielski 		case MID_VERTORIENT_POSITION:
1333*b1cdbd2cSJim Jagielski 		{
1334*b1cdbd2cSJim Jagielski 			sal_Int32 nVal = 0;
1335*b1cdbd2cSJim Jagielski 			rVal >>= nVal;
1336*b1cdbd2cSJim Jagielski 			if(bConvert)
1337*b1cdbd2cSJim Jagielski 				nVal = MM100_TO_TWIP(nVal);
1338*b1cdbd2cSJim Jagielski 			SetPos( nVal );
1339*b1cdbd2cSJim Jagielski 		}
1340*b1cdbd2cSJim Jagielski 		break;
1341*b1cdbd2cSJim Jagielski 		default:
1342*b1cdbd2cSJim Jagielski 			ASSERT( !this, "unknown MemberId" );
1343*b1cdbd2cSJim Jagielski 			bRet = sal_False;
1344*b1cdbd2cSJim Jagielski 	}
1345*b1cdbd2cSJim Jagielski 	return bRet;
1346*b1cdbd2cSJim Jagielski }
1347*b1cdbd2cSJim Jagielski 
1348*b1cdbd2cSJim Jagielski 
1349*b1cdbd2cSJim Jagielski 
1350*b1cdbd2cSJim Jagielski //	class SwFmtHoriOrient
1351*b1cdbd2cSJim Jagielski //	Implementierung teilweise inline im hxx
1352*b1cdbd2cSJim Jagielski 
SwFmtHoriOrient(SwTwips nX,sal_Int16 eHori,sal_Int16 eRel,sal_Bool bPos)1353*b1cdbd2cSJim Jagielski SwFmtHoriOrient::SwFmtHoriOrient( SwTwips nX, sal_Int16 eHori,
1354*b1cdbd2cSJim Jagielski                               sal_Int16 eRel, sal_Bool bPos )
1355*b1cdbd2cSJim Jagielski 	: SfxPoolItem( RES_HORI_ORIENT ),
1356*b1cdbd2cSJim Jagielski 	nXPos( nX ),
1357*b1cdbd2cSJim Jagielski 	eOrient( eHori ),
1358*b1cdbd2cSJim Jagielski 	eRelation( eRel ),
1359*b1cdbd2cSJim Jagielski 	bPosToggle( bPos )
1360*b1cdbd2cSJim Jagielski {}
1361*b1cdbd2cSJim Jagielski 
operator ==(const SfxPoolItem & rAttr) const1362*b1cdbd2cSJim Jagielski int  SwFmtHoriOrient::operator==( const SfxPoolItem& rAttr ) const
1363*b1cdbd2cSJim Jagielski {
1364*b1cdbd2cSJim Jagielski 	ASSERT( SfxPoolItem::operator==( rAttr ), "keine gleichen Attribute" );
1365*b1cdbd2cSJim Jagielski 	return ( nXPos == ((SwFmtHoriOrient&)rAttr).nXPos &&
1366*b1cdbd2cSJim Jagielski 			 eOrient == ((SwFmtHoriOrient&)rAttr).eOrient &&
1367*b1cdbd2cSJim Jagielski 			 eRelation == ((SwFmtHoriOrient&)rAttr).eRelation &&
1368*b1cdbd2cSJim Jagielski 			 bPosToggle == ((SwFmtHoriOrient&)rAttr).bPosToggle );
1369*b1cdbd2cSJim Jagielski }
1370*b1cdbd2cSJim Jagielski 
Clone(SfxItemPool *) const1371*b1cdbd2cSJim Jagielski SfxPoolItem*  SwFmtHoriOrient::Clone( SfxItemPool* ) const
1372*b1cdbd2cSJim Jagielski {
1373*b1cdbd2cSJim Jagielski 	return new SwFmtHoriOrient( nXPos, eOrient, eRelation, bPosToggle );
1374*b1cdbd2cSJim Jagielski }
1375*b1cdbd2cSJim Jagielski 
QueryValue(uno::Any & rVal,sal_uInt8 nMemberId) const1376*b1cdbd2cSJim Jagielski sal_Bool SwFmtHoriOrient::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
1377*b1cdbd2cSJim Jagielski {
1378*b1cdbd2cSJim Jagielski 	// hier wird immer konvertiert!
1379*b1cdbd2cSJim Jagielski 	nMemberId &= ~CONVERT_TWIPS;
1380*b1cdbd2cSJim Jagielski 	sal_Bool bRet = sal_True;
1381*b1cdbd2cSJim Jagielski 	switch ( nMemberId )
1382*b1cdbd2cSJim Jagielski 	{
1383*b1cdbd2cSJim Jagielski 		case MID_HORIORIENT_ORIENT:
1384*b1cdbd2cSJim Jagielski 		{
1385*b1cdbd2cSJim Jagielski             sal_Int16 nRet = text::HoriOrientation::NONE;
1386*b1cdbd2cSJim Jagielski 			switch( eOrient )
1387*b1cdbd2cSJim Jagielski 			{
1388*b1cdbd2cSJim Jagielski                 case text::HoriOrientation::RIGHT:    nRet = text::HoriOrientation::RIGHT; break;
1389*b1cdbd2cSJim Jagielski                 case text::HoriOrientation::CENTER :  nRet = text::HoriOrientation::CENTER; break;
1390*b1cdbd2cSJim Jagielski                 case text::HoriOrientation::LEFT   :  nRet = text::HoriOrientation::LEFT; break;
1391*b1cdbd2cSJim Jagielski                 case text::HoriOrientation::INSIDE :  nRet = text::HoriOrientation::INSIDE; break;
1392*b1cdbd2cSJim Jagielski                 case text::HoriOrientation::OUTSIDE:  nRet = text::HoriOrientation::OUTSIDE; break;
1393*b1cdbd2cSJim Jagielski                 case text::HoriOrientation::FULL:     nRet = text::HoriOrientation::FULL; break;
1394*b1cdbd2cSJim Jagielski                 case text::HoriOrientation::LEFT_AND_WIDTH :
1395*b1cdbd2cSJim Jagielski                     nRet = text::HoriOrientation::LEFT_AND_WIDTH;
1396*b1cdbd2cSJim Jagielski                     break;
1397*b1cdbd2cSJim Jagielski                 default:
1398*b1cdbd2cSJim Jagielski                     break;
1399*b1cdbd2cSJim Jagielski 
1400*b1cdbd2cSJim Jagielski 			}
1401*b1cdbd2cSJim Jagielski 			rVal <<= nRet;
1402*b1cdbd2cSJim Jagielski 		}
1403*b1cdbd2cSJim Jagielski 		break;
1404*b1cdbd2cSJim Jagielski 		case MID_HORIORIENT_RELATION:
1405*b1cdbd2cSJim Jagielski 			rVal <<= lcl_RelToINT(eRelation);
1406*b1cdbd2cSJim Jagielski 		break;
1407*b1cdbd2cSJim Jagielski 		case MID_HORIORIENT_POSITION:
1408*b1cdbd2cSJim Jagielski 				rVal <<= (sal_Int32)TWIP_TO_MM100(GetPos());
1409*b1cdbd2cSJim Jagielski 				break;
1410*b1cdbd2cSJim Jagielski 		case MID_HORIORIENT_PAGETOGGLE:
1411*b1cdbd2cSJim Jagielski 		{
1412*b1cdbd2cSJim Jagielski 			sal_Bool bTmp = IsPosToggle();
1413*b1cdbd2cSJim Jagielski 			rVal.setValue(&bTmp, ::getBooleanCppuType());
1414*b1cdbd2cSJim Jagielski 		}
1415*b1cdbd2cSJim Jagielski 				break;
1416*b1cdbd2cSJim Jagielski 		default:
1417*b1cdbd2cSJim Jagielski 			ASSERT( !this, "unknown MemberId" );
1418*b1cdbd2cSJim Jagielski 			bRet = sal_False;
1419*b1cdbd2cSJim Jagielski 	}
1420*b1cdbd2cSJim Jagielski 	return bRet;
1421*b1cdbd2cSJim Jagielski }
1422*b1cdbd2cSJim Jagielski 
PutValue(const uno::Any & rVal,sal_uInt8 nMemberId)1423*b1cdbd2cSJim Jagielski sal_Bool SwFmtHoriOrient::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
1424*b1cdbd2cSJim Jagielski {
1425*b1cdbd2cSJim Jagielski 	sal_Bool bConvert = 0 != (nMemberId&CONVERT_TWIPS);
1426*b1cdbd2cSJim Jagielski 	nMemberId &= ~CONVERT_TWIPS;
1427*b1cdbd2cSJim Jagielski 	sal_Bool bRet = sal_True;
1428*b1cdbd2cSJim Jagielski 	switch ( nMemberId )
1429*b1cdbd2cSJim Jagielski 	{
1430*b1cdbd2cSJim Jagielski 		case MID_HORIORIENT_ORIENT:
1431*b1cdbd2cSJim Jagielski 		{
1432*b1cdbd2cSJim Jagielski             sal_Int16 nVal = 0;
1433*b1cdbd2cSJim Jagielski             rVal >>= nVal;
1434*b1cdbd2cSJim Jagielski             switch( nVal )
1435*b1cdbd2cSJim Jagielski 			{
1436*b1cdbd2cSJim Jagielski                 case text::HoriOrientation::NONE:       eOrient = text::HoriOrientation::NONE ;   break;
1437*b1cdbd2cSJim Jagielski                 case text::HoriOrientation::RIGHT:  eOrient = text::HoriOrientation::RIGHT;   break;
1438*b1cdbd2cSJim Jagielski                 case text::HoriOrientation::CENTER :    eOrient = text::HoriOrientation::CENTER;  break;
1439*b1cdbd2cSJim Jagielski                 case text::HoriOrientation::LEFT   :    eOrient = text::HoriOrientation::LEFT;    break;
1440*b1cdbd2cSJim Jagielski                 case text::HoriOrientation::INSIDE :    eOrient = text::HoriOrientation::INSIDE;  break;
1441*b1cdbd2cSJim Jagielski                 case text::HoriOrientation::OUTSIDE:    eOrient = text::HoriOrientation::OUTSIDE; break;
1442*b1cdbd2cSJim Jagielski                 case text::HoriOrientation::FULL:      eOrient = text::HoriOrientation::FULL;     break;
1443*b1cdbd2cSJim Jagielski                 case text::HoriOrientation::LEFT_AND_WIDTH:
1444*b1cdbd2cSJim Jagielski                     eOrient = text::HoriOrientation::LEFT_AND_WIDTH;
1445*b1cdbd2cSJim Jagielski 				break;
1446*b1cdbd2cSJim Jagielski 			}
1447*b1cdbd2cSJim Jagielski 		}
1448*b1cdbd2cSJim Jagielski 		break;
1449*b1cdbd2cSJim Jagielski 		case MID_HORIORIENT_RELATION:
1450*b1cdbd2cSJim Jagielski 		{
1451*b1cdbd2cSJim Jagielski 			eRelation = lcl_IntToRelation(rVal);
1452*b1cdbd2cSJim Jagielski 		}
1453*b1cdbd2cSJim Jagielski 		break;
1454*b1cdbd2cSJim Jagielski 		case MID_HORIORIENT_POSITION:
1455*b1cdbd2cSJim Jagielski 		{
1456*b1cdbd2cSJim Jagielski             sal_Int32 nVal = 0;
1457*b1cdbd2cSJim Jagielski             if(!(rVal >>= nVal))
1458*b1cdbd2cSJim Jagielski                 bRet = sal_False;
1459*b1cdbd2cSJim Jagielski 			if(bConvert)
1460*b1cdbd2cSJim Jagielski 				nVal = MM100_TO_TWIP(nVal);
1461*b1cdbd2cSJim Jagielski 			SetPos( nVal );
1462*b1cdbd2cSJim Jagielski 		}
1463*b1cdbd2cSJim Jagielski 		break;
1464*b1cdbd2cSJim Jagielski 		case MID_HORIORIENT_PAGETOGGLE:
1465*b1cdbd2cSJim Jagielski 				SetPosToggle( *(sal_Bool*)rVal.getValue());
1466*b1cdbd2cSJim Jagielski 			break;
1467*b1cdbd2cSJim Jagielski 		default:
1468*b1cdbd2cSJim Jagielski 			ASSERT( !this, "unknown MemberId" );
1469*b1cdbd2cSJim Jagielski 			bRet = sal_False;
1470*b1cdbd2cSJim Jagielski 	}
1471*b1cdbd2cSJim Jagielski 	return bRet;
1472*b1cdbd2cSJim Jagielski }
1473*b1cdbd2cSJim Jagielski 
1474*b1cdbd2cSJim Jagielski 
1475*b1cdbd2cSJim Jagielski 
1476*b1cdbd2cSJim Jagielski //	class SwFmtAnchor
1477*b1cdbd2cSJim Jagielski //	Implementierung teilweise inline im hxx
1478*b1cdbd2cSJim Jagielski 
SwFmtAnchor(RndStdIds nRnd,sal_uInt16 nPage)1479*b1cdbd2cSJim Jagielski SwFmtAnchor::SwFmtAnchor( RndStdIds nRnd, sal_uInt16 nPage )
1480*b1cdbd2cSJim Jagielski 	: SfxPoolItem( RES_ANCHOR ),
1481*b1cdbd2cSJim Jagielski 	pCntntAnchor( 0 ),
1482*b1cdbd2cSJim Jagielski 	nAnchorId( nRnd ),
1483*b1cdbd2cSJim Jagielski     nPageNum( nPage ),
1484*b1cdbd2cSJim Jagielski     // OD 2004-05-05 #i28701# - get always new increased order number
1485*b1cdbd2cSJim Jagielski     mnOrder( ++mnOrderCounter )
1486*b1cdbd2cSJim Jagielski {}
1487*b1cdbd2cSJim Jagielski 
SwFmtAnchor(const SwFmtAnchor & rCpy)1488*b1cdbd2cSJim Jagielski SwFmtAnchor::SwFmtAnchor( const SwFmtAnchor &rCpy )
1489*b1cdbd2cSJim Jagielski 	: SfxPoolItem( RES_ANCHOR ),
1490*b1cdbd2cSJim Jagielski 	nAnchorId( rCpy.GetAnchorId() ),
1491*b1cdbd2cSJim Jagielski     nPageNum( rCpy.GetPageNum() ),
1492*b1cdbd2cSJim Jagielski     // OD 2004-05-05 #i28701# - get always new increased order number
1493*b1cdbd2cSJim Jagielski     mnOrder( ++mnOrderCounter )
1494*b1cdbd2cSJim Jagielski {
1495*b1cdbd2cSJim Jagielski 	pCntntAnchor = rCpy.GetCntntAnchor() ?
1496*b1cdbd2cSJim Jagielski 						new SwPosition( *rCpy.GetCntntAnchor() ) : 0;
1497*b1cdbd2cSJim Jagielski }
1498*b1cdbd2cSJim Jagielski 
~SwFmtAnchor()1499*b1cdbd2cSJim Jagielski  SwFmtAnchor::~SwFmtAnchor()
1500*b1cdbd2cSJim Jagielski {
1501*b1cdbd2cSJim Jagielski 	delete pCntntAnchor;
1502*b1cdbd2cSJim Jagielski }
1503*b1cdbd2cSJim Jagielski 
SetAnchor(const SwPosition * pPos)1504*b1cdbd2cSJim Jagielski void SwFmtAnchor::SetAnchor( const SwPosition *pPos )
1505*b1cdbd2cSJim Jagielski {
1506*b1cdbd2cSJim Jagielski 	if ( pCntntAnchor )
1507*b1cdbd2cSJim Jagielski 		delete pCntntAnchor;
1508*b1cdbd2cSJim Jagielski 	pCntntAnchor = pPos ? new SwPosition( *pPos ) : 0;
1509*b1cdbd2cSJim Jagielski 		//AM Absatz gebundene Flys sollten nie in den Absatz hineinzeigen.
1510*b1cdbd2cSJim Jagielski     if (pCntntAnchor &&
1511*b1cdbd2cSJim Jagielski         ((FLY_AT_PARA == nAnchorId) || (FLY_AT_FLY == nAnchorId)))
1512*b1cdbd2cSJim Jagielski     {
1513*b1cdbd2cSJim Jagielski 		pCntntAnchor->nContent.Assign( 0, 0 );
1514*b1cdbd2cSJim Jagielski     }
1515*b1cdbd2cSJim Jagielski }
1516*b1cdbd2cSJim Jagielski 
operator =(const SwFmtAnchor & rAnchor)1517*b1cdbd2cSJim Jagielski SwFmtAnchor& SwFmtAnchor::operator=(const SwFmtAnchor& rAnchor)
1518*b1cdbd2cSJim Jagielski {
1519*b1cdbd2cSJim Jagielski 	nAnchorId  = rAnchor.GetAnchorId();
1520*b1cdbd2cSJim Jagielski 	nPageNum   = rAnchor.GetPageNum();
1521*b1cdbd2cSJim Jagielski     // OD 2004-05-05 #i28701# - get always new increased order number
1522*b1cdbd2cSJim Jagielski     mnOrder = ++mnOrderCounter;
1523*b1cdbd2cSJim Jagielski 
1524*b1cdbd2cSJim Jagielski 	delete pCntntAnchor;
1525*b1cdbd2cSJim Jagielski 	pCntntAnchor = rAnchor.pCntntAnchor ?
1526*b1cdbd2cSJim Jagielski 									new SwPosition(*(rAnchor.pCntntAnchor)) : 0;
1527*b1cdbd2cSJim Jagielski 	return *this;
1528*b1cdbd2cSJim Jagielski }
1529*b1cdbd2cSJim Jagielski 
operator ==(const SfxPoolItem & rAttr) const1530*b1cdbd2cSJim Jagielski int  SwFmtAnchor::operator==( const SfxPoolItem& rAttr ) const
1531*b1cdbd2cSJim Jagielski {
1532*b1cdbd2cSJim Jagielski 	ASSERT( SfxPoolItem::operator==( rAttr ), "keine gleichen Attribute" );
1533*b1cdbd2cSJim Jagielski     // OD 2004-05-05 #i28701# - Note: <mnOrder> hasn't to be considered.
1534*b1cdbd2cSJim Jagielski 	return ( nAnchorId == ((SwFmtAnchor&)rAttr).GetAnchorId() &&
1535*b1cdbd2cSJim Jagielski 			 nPageNum == ((SwFmtAnchor&)rAttr).GetPageNum()   &&
1536*b1cdbd2cSJim Jagielski 					//Anker vergleichen. Entweder zeigen beide auf das gleiche
1537*b1cdbd2cSJim Jagielski 					//Attribut bzw. sind 0 oder die SwPosition* sind beide
1538*b1cdbd2cSJim Jagielski 					//gueltig und die SwPositions sind gleich.
1539*b1cdbd2cSJim Jagielski 			 (pCntntAnchor == ((SwFmtAnchor&)rAttr).GetCntntAnchor() ||
1540*b1cdbd2cSJim Jagielski 			  (pCntntAnchor && ((SwFmtAnchor&)rAttr).GetCntntAnchor() &&
1541*b1cdbd2cSJim Jagielski 			   *pCntntAnchor == *((SwFmtAnchor&)rAttr).GetCntntAnchor())));
1542*b1cdbd2cSJim Jagielski }
1543*b1cdbd2cSJim Jagielski 
Clone(SfxItemPool *) const1544*b1cdbd2cSJim Jagielski SfxPoolItem*  SwFmtAnchor::Clone( SfxItemPool* ) const
1545*b1cdbd2cSJim Jagielski {
1546*b1cdbd2cSJim Jagielski 	return new SwFmtAnchor( *this );
1547*b1cdbd2cSJim Jagielski }
1548*b1cdbd2cSJim Jagielski 
1549*b1cdbd2cSJim Jagielski // OD 2004-05-05 #i28701#
1550*b1cdbd2cSJim Jagielski sal_uInt32 SwFmtAnchor::mnOrderCounter = 0;
1551*b1cdbd2cSJim Jagielski 
1552*b1cdbd2cSJim Jagielski // OD 2004-05-05 #i28701#
GetOrder() const1553*b1cdbd2cSJim Jagielski sal_uInt32 SwFmtAnchor::GetOrder() const
1554*b1cdbd2cSJim Jagielski {
1555*b1cdbd2cSJim Jagielski     return mnOrder;
1556*b1cdbd2cSJim Jagielski }
1557*b1cdbd2cSJim Jagielski 
1558*b1cdbd2cSJim Jagielski /*-----------------16.02.98 15:21-------------------
1559*b1cdbd2cSJim Jagielski 
1560*b1cdbd2cSJim Jagielski --------------------------------------------------*/
QueryValue(uno::Any & rVal,sal_uInt8 nMemberId) const1561*b1cdbd2cSJim Jagielski sal_Bool SwFmtAnchor::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
1562*b1cdbd2cSJim Jagielski {
1563*b1cdbd2cSJim Jagielski 	// hier wird immer konvertiert!
1564*b1cdbd2cSJim Jagielski 	nMemberId &= ~CONVERT_TWIPS;
1565*b1cdbd2cSJim Jagielski 	sal_Bool bRet = sal_True;
1566*b1cdbd2cSJim Jagielski 	switch ( nMemberId )
1567*b1cdbd2cSJim Jagielski 	{
1568*b1cdbd2cSJim Jagielski 		case MID_ANCHOR_ANCHORTYPE:
1569*b1cdbd2cSJim Jagielski 
1570*b1cdbd2cSJim Jagielski 			text::TextContentAnchorType eRet;
1571*b1cdbd2cSJim Jagielski             switch (GetAnchorId())
1572*b1cdbd2cSJim Jagielski             {
1573*b1cdbd2cSJim Jagielski                 case  FLY_AT_CHAR:
1574*b1cdbd2cSJim Jagielski                     eRet = text::TextContentAnchorType_AT_CHARACTER;
1575*b1cdbd2cSJim Jagielski                     break;
1576*b1cdbd2cSJim Jagielski                 case  FLY_AT_PAGE:
1577*b1cdbd2cSJim Jagielski                     eRet = text::TextContentAnchorType_AT_PAGE;
1578*b1cdbd2cSJim Jagielski                     break;
1579*b1cdbd2cSJim Jagielski                 case  FLY_AT_FLY:
1580*b1cdbd2cSJim Jagielski                     eRet = text::TextContentAnchorType_AT_FRAME;
1581*b1cdbd2cSJim Jagielski                     break;
1582*b1cdbd2cSJim Jagielski                 case  FLY_AS_CHAR:
1583*b1cdbd2cSJim Jagielski                     eRet = text::TextContentAnchorType_AS_CHARACTER;
1584*b1cdbd2cSJim Jagielski                     break;
1585*b1cdbd2cSJim Jagielski                 //case  FLY_AT_PARA:
1586*b1cdbd2cSJim Jagielski                 default:
1587*b1cdbd2cSJim Jagielski                     eRet = text::TextContentAnchorType_AT_PARAGRAPH;
1588*b1cdbd2cSJim Jagielski             }
1589*b1cdbd2cSJim Jagielski 			rVal <<= eRet;
1590*b1cdbd2cSJim Jagielski 		break;
1591*b1cdbd2cSJim Jagielski 		case MID_ANCHOR_PAGENUM:
1592*b1cdbd2cSJim Jagielski 			rVal <<= (sal_Int16)GetPageNum();
1593*b1cdbd2cSJim Jagielski         break;
1594*b1cdbd2cSJim Jagielski         case MID_ANCHOR_ANCHORFRAME:
1595*b1cdbd2cSJim Jagielski         {
1596*b1cdbd2cSJim Jagielski             if(pCntntAnchor && FLY_AT_FLY == nAnchorId)
1597*b1cdbd2cSJim Jagielski             {
1598*b1cdbd2cSJim Jagielski                 SwFrmFmt* pFmt = pCntntAnchor->nNode.GetNode().GetFlyFmt();
1599*b1cdbd2cSJim Jagielski                 if(pFmt)
1600*b1cdbd2cSJim Jagielski                 {
1601*b1cdbd2cSJim Jagielski                     uno::Reference<container::XNamed> xNamed = SwXFrames::GetObject( *pFmt, FLYCNTTYPE_FRM );
1602*b1cdbd2cSJim Jagielski                     uno::Reference<text::XTextFrame> xRet(xNamed, uno::UNO_QUERY);
1603*b1cdbd2cSJim Jagielski                     rVal <<= xRet;
1604*b1cdbd2cSJim Jagielski                 }
1605*b1cdbd2cSJim Jagielski             }
1606*b1cdbd2cSJim Jagielski         }
1607*b1cdbd2cSJim Jagielski         break;
1608*b1cdbd2cSJim Jagielski         default:
1609*b1cdbd2cSJim Jagielski 			ASSERT( !this, "unknown MemberId" );
1610*b1cdbd2cSJim Jagielski 			bRet = sal_False;
1611*b1cdbd2cSJim Jagielski 	}
1612*b1cdbd2cSJim Jagielski 	return bRet;
1613*b1cdbd2cSJim Jagielski }
1614*b1cdbd2cSJim Jagielski 
PutValue(const uno::Any & rVal,sal_uInt8 nMemberId)1615*b1cdbd2cSJim Jagielski sal_Bool SwFmtAnchor::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
1616*b1cdbd2cSJim Jagielski {
1617*b1cdbd2cSJim Jagielski 	// hier wird immer konvertiert!
1618*b1cdbd2cSJim Jagielski 	nMemberId &= ~CONVERT_TWIPS;
1619*b1cdbd2cSJim Jagielski 	sal_Bool bRet = sal_True;
1620*b1cdbd2cSJim Jagielski 	switch ( nMemberId )
1621*b1cdbd2cSJim Jagielski 	{
1622*b1cdbd2cSJim Jagielski 		case MID_ANCHOR_ANCHORTYPE:
1623*b1cdbd2cSJim Jagielski 		{
1624*b1cdbd2cSJim Jagielski 			RndStdIds	eAnchor;
1625*b1cdbd2cSJim Jagielski 			switch( SWUnoHelper::GetEnumAsInt32( rVal ) )
1626*b1cdbd2cSJim Jagielski 			{
1627*b1cdbd2cSJim Jagielski 				case  text::TextContentAnchorType_AS_CHARACTER:
1628*b1cdbd2cSJim Jagielski                     eAnchor = FLY_AS_CHAR;
1629*b1cdbd2cSJim Jagielski 					break;
1630*b1cdbd2cSJim Jagielski 				case  text::TextContentAnchorType_AT_PAGE:
1631*b1cdbd2cSJim Jagielski                     eAnchor = FLY_AT_PAGE;
1632*b1cdbd2cSJim Jagielski 					if( GetPageNum() > 0 && pCntntAnchor )
1633*b1cdbd2cSJim Jagielski 					{
1634*b1cdbd2cSJim Jagielski 						// If the anchor type is page and a valid page number
1635*b1cdbd2cSJim Jagielski 						// has been set, the content position isn't required
1636*b1cdbd2cSJim Jagielski 						// any longer.
1637*b1cdbd2cSJim Jagielski 						delete pCntntAnchor;
1638*b1cdbd2cSJim Jagielski 						pCntntAnchor = 0;
1639*b1cdbd2cSJim Jagielski 					}
1640*b1cdbd2cSJim Jagielski 					break;
1641*b1cdbd2cSJim Jagielski 				case  text::TextContentAnchorType_AT_FRAME:
1642*b1cdbd2cSJim Jagielski 					eAnchor = FLY_AT_FLY;
1643*b1cdbd2cSJim Jagielski 					break;
1644*b1cdbd2cSJim Jagielski 				case  text::TextContentAnchorType_AT_CHARACTER:
1645*b1cdbd2cSJim Jagielski                     eAnchor = FLY_AT_CHAR;
1646*b1cdbd2cSJim Jagielski 					break;
1647*b1cdbd2cSJim Jagielski 				//case  text::TextContentAnchorType_AT_PARAGRAPH:
1648*b1cdbd2cSJim Jagielski 				default:
1649*b1cdbd2cSJim Jagielski                     eAnchor = FLY_AT_PARA;
1650*b1cdbd2cSJim Jagielski 					break;
1651*b1cdbd2cSJim Jagielski 			}
1652*b1cdbd2cSJim Jagielski 			SetType( eAnchor );
1653*b1cdbd2cSJim Jagielski 		}
1654*b1cdbd2cSJim Jagielski 		break;
1655*b1cdbd2cSJim Jagielski 		case MID_ANCHOR_PAGENUM:
1656*b1cdbd2cSJim Jagielski 		{
1657*b1cdbd2cSJim Jagielski             sal_Int16 nVal = 0;
1658*b1cdbd2cSJim Jagielski             if((rVal >>= nVal) && nVal > 0)
1659*b1cdbd2cSJim Jagielski 			{
1660*b1cdbd2cSJim Jagielski 				SetPageNum( nVal );
1661*b1cdbd2cSJim Jagielski                 if ((FLY_AT_PAGE == GetAnchorId()) && pCntntAnchor)
1662*b1cdbd2cSJim Jagielski                 {
1663*b1cdbd2cSJim Jagielski 					// If the anchor type is page and a valid page number
1664*b1cdbd2cSJim Jagielski 					// is set, the content paoition has to be deleted to not
1665*b1cdbd2cSJim Jagielski 					// confuse the layout (frmtool.cxx). However, if the
1666*b1cdbd2cSJim Jagielski 					// anchor type is not page, any content position will
1667*b1cdbd2cSJim Jagielski 					// be kept.
1668*b1cdbd2cSJim Jagielski 					delete pCntntAnchor;
1669*b1cdbd2cSJim Jagielski 					pCntntAnchor = 0;
1670*b1cdbd2cSJim Jagielski 				}
1671*b1cdbd2cSJim Jagielski 			}
1672*b1cdbd2cSJim Jagielski 			else
1673*b1cdbd2cSJim Jagielski 				bRet = sal_False;
1674*b1cdbd2cSJim Jagielski 		}
1675*b1cdbd2cSJim Jagielski 		break;
1676*b1cdbd2cSJim Jagielski         case MID_ANCHOR_ANCHORFRAME:
1677*b1cdbd2cSJim Jagielski         //no break here!;
1678*b1cdbd2cSJim Jagielski 		default:
1679*b1cdbd2cSJim Jagielski 			ASSERT( !this, "unknown MemberId" );
1680*b1cdbd2cSJim Jagielski 			bRet = sal_False;
1681*b1cdbd2cSJim Jagielski 	}
1682*b1cdbd2cSJim Jagielski 	return bRet;
1683*b1cdbd2cSJim Jagielski }
1684*b1cdbd2cSJim Jagielski 
1685*b1cdbd2cSJim Jagielski //	class SwFmtURL
1686*b1cdbd2cSJim Jagielski //	Implementierung teilweise inline im hxx
1687*b1cdbd2cSJim Jagielski 
SwFmtURL()1688*b1cdbd2cSJim Jagielski SwFmtURL::SwFmtURL() :
1689*b1cdbd2cSJim Jagielski 	SfxPoolItem( RES_URL ),
1690*b1cdbd2cSJim Jagielski 	pMap( 0 ),
1691*b1cdbd2cSJim Jagielski 	bIsServerMap( sal_False )
1692*b1cdbd2cSJim Jagielski {
1693*b1cdbd2cSJim Jagielski }
1694*b1cdbd2cSJim Jagielski 
SwFmtURL(const SwFmtURL & rURL)1695*b1cdbd2cSJim Jagielski SwFmtURL::SwFmtURL( const SwFmtURL &rURL) :
1696*b1cdbd2cSJim Jagielski 	SfxPoolItem( RES_URL ),
1697*b1cdbd2cSJim Jagielski     sTargetFrameName( rURL.GetTargetFrameName() ),
1698*b1cdbd2cSJim Jagielski     sURL( rURL.GetURL() ),
1699*b1cdbd2cSJim Jagielski     sName( rURL.GetName() ),
1700*b1cdbd2cSJim Jagielski 	bIsServerMap( rURL.IsServerMap() )
1701*b1cdbd2cSJim Jagielski {
1702*b1cdbd2cSJim Jagielski 	pMap = rURL.GetMap() ? new ImageMap( *rURL.GetMap() ) : 0;
1703*b1cdbd2cSJim Jagielski }
1704*b1cdbd2cSJim Jagielski 
~SwFmtURL()1705*b1cdbd2cSJim Jagielski SwFmtURL::~SwFmtURL()
1706*b1cdbd2cSJim Jagielski {
1707*b1cdbd2cSJim Jagielski 	if ( pMap )
1708*b1cdbd2cSJim Jagielski 		delete pMap;
1709*b1cdbd2cSJim Jagielski }
1710*b1cdbd2cSJim Jagielski 
operator ==(const SfxPoolItem & rAttr) const1711*b1cdbd2cSJim Jagielski int SwFmtURL::operator==( const SfxPoolItem &rAttr ) const
1712*b1cdbd2cSJim Jagielski {
1713*b1cdbd2cSJim Jagielski 	ASSERT( SfxPoolItem::operator==( rAttr ), "keine gleichen Attribute" );
1714*b1cdbd2cSJim Jagielski 	const SwFmtURL &rCmp = (SwFmtURL&)rAttr;
1715*b1cdbd2cSJim Jagielski 	sal_Bool bRet = bIsServerMap  	 == rCmp.IsServerMap() &&
1716*b1cdbd2cSJim Jagielski 				sURL			 == rCmp.GetURL() &&
1717*b1cdbd2cSJim Jagielski 				sTargetFrameName == rCmp.GetTargetFrameName() &&
1718*b1cdbd2cSJim Jagielski 				sName 			 == rCmp.GetName();
1719*b1cdbd2cSJim Jagielski 	if ( bRet )
1720*b1cdbd2cSJim Jagielski 	{
1721*b1cdbd2cSJim Jagielski 		if ( pMap && rCmp.GetMap() )
1722*b1cdbd2cSJim Jagielski 			bRet = *pMap == *rCmp.GetMap();
1723*b1cdbd2cSJim Jagielski 		else
1724*b1cdbd2cSJim Jagielski 			bRet = pMap == rCmp.GetMap();
1725*b1cdbd2cSJim Jagielski 	}
1726*b1cdbd2cSJim Jagielski 	return bRet;
1727*b1cdbd2cSJim Jagielski }
1728*b1cdbd2cSJim Jagielski 
Clone(SfxItemPool *) const1729*b1cdbd2cSJim Jagielski SfxPoolItem* SwFmtURL::Clone( SfxItemPool* ) const
1730*b1cdbd2cSJim Jagielski {
1731*b1cdbd2cSJim Jagielski 	return new SwFmtURL( *this );
1732*b1cdbd2cSJim Jagielski }
1733*b1cdbd2cSJim Jagielski 
SetURL(const XubString & rURL,sal_Bool bServerMap)1734*b1cdbd2cSJim Jagielski void SwFmtURL::SetURL( const XubString &rURL, sal_Bool bServerMap )
1735*b1cdbd2cSJim Jagielski {
1736*b1cdbd2cSJim Jagielski 	sURL = rURL;
1737*b1cdbd2cSJim Jagielski 	bIsServerMap = bServerMap;
1738*b1cdbd2cSJim Jagielski }
1739*b1cdbd2cSJim Jagielski 
SetMap(const ImageMap * pM)1740*b1cdbd2cSJim Jagielski void SwFmtURL::SetMap( const ImageMap *pM )
1741*b1cdbd2cSJim Jagielski {
1742*b1cdbd2cSJim Jagielski 	if ( pMap )
1743*b1cdbd2cSJim Jagielski 		delete pMap;
1744*b1cdbd2cSJim Jagielski 	pMap = pM ? new ImageMap( *pM ) : 0;
1745*b1cdbd2cSJim Jagielski }
1746*b1cdbd2cSJim Jagielski extern const SvEventDescription* lcl_GetSupportedMacroItems();
1747*b1cdbd2cSJim Jagielski 
QueryValue(uno::Any & rVal,sal_uInt8 nMemberId) const1748*b1cdbd2cSJim Jagielski sal_Bool SwFmtURL::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
1749*b1cdbd2cSJim Jagielski {
1750*b1cdbd2cSJim Jagielski 	// hier wird immer konvertiert!
1751*b1cdbd2cSJim Jagielski 	nMemberId &= ~CONVERT_TWIPS;
1752*b1cdbd2cSJim Jagielski 	sal_Bool bRet = sal_True;
1753*b1cdbd2cSJim Jagielski 	switch ( nMemberId )
1754*b1cdbd2cSJim Jagielski 	{
1755*b1cdbd2cSJim Jagielski 		case MID_URL_URL:
1756*b1cdbd2cSJim Jagielski 		{
1757*b1cdbd2cSJim Jagielski 			OUString sRet = GetURL();
1758*b1cdbd2cSJim Jagielski 			rVal <<= sRet;
1759*b1cdbd2cSJim Jagielski 		}
1760*b1cdbd2cSJim Jagielski 		break;
1761*b1cdbd2cSJim Jagielski 		case MID_URL_TARGET:
1762*b1cdbd2cSJim Jagielski 		{
1763*b1cdbd2cSJim Jagielski 			OUString sRet = GetTargetFrameName();
1764*b1cdbd2cSJim Jagielski 			rVal <<= sRet;
1765*b1cdbd2cSJim Jagielski 		}
1766*b1cdbd2cSJim Jagielski 		break;
1767*b1cdbd2cSJim Jagielski 		case MID_URL_HYPERLINKNAME:
1768*b1cdbd2cSJim Jagielski 			rVal <<= OUString( GetName() );
1769*b1cdbd2cSJim Jagielski 			break;
1770*b1cdbd2cSJim Jagielski 		case MID_URL_CLIENTMAP:
1771*b1cdbd2cSJim Jagielski         {
1772*b1cdbd2cSJim Jagielski             uno::Reference< uno::XInterface > xInt;
1773*b1cdbd2cSJim Jagielski             if(pMap)
1774*b1cdbd2cSJim Jagielski             {
1775*b1cdbd2cSJim Jagielski                 xInt = SvUnoImageMap_createInstance( *pMap, lcl_GetSupportedMacroItems() );
1776*b1cdbd2cSJim Jagielski             }
1777*b1cdbd2cSJim Jagielski             else
1778*b1cdbd2cSJim Jagielski             {
1779*b1cdbd2cSJim Jagielski                 ImageMap aEmptyMap;
1780*b1cdbd2cSJim Jagielski                 xInt = SvUnoImageMap_createInstance( aEmptyMap, lcl_GetSupportedMacroItems() );
1781*b1cdbd2cSJim Jagielski             }
1782*b1cdbd2cSJim Jagielski             uno::Reference< container::XIndexContainer > xCont(xInt, uno::UNO_QUERY);
1783*b1cdbd2cSJim Jagielski             rVal <<= xCont;
1784*b1cdbd2cSJim Jagielski         }
1785*b1cdbd2cSJim Jagielski         break;
1786*b1cdbd2cSJim Jagielski 		case MID_URL_SERVERMAP:
1787*b1cdbd2cSJim Jagielski 		{
1788*b1cdbd2cSJim Jagielski 			sal_Bool bTmp = IsServerMap();
1789*b1cdbd2cSJim Jagielski 			rVal.setValue(&bTmp, ::getBooleanCppuType());
1790*b1cdbd2cSJim Jagielski 		}
1791*b1cdbd2cSJim Jagielski 			break;
1792*b1cdbd2cSJim Jagielski 		default:
1793*b1cdbd2cSJim Jagielski 			ASSERT( !this, "unknown MemberId" );
1794*b1cdbd2cSJim Jagielski 			bRet = sal_False;
1795*b1cdbd2cSJim Jagielski 	}
1796*b1cdbd2cSJim Jagielski 	return bRet;
1797*b1cdbd2cSJim Jagielski }
1798*b1cdbd2cSJim Jagielski 
PutValue(const uno::Any & rVal,sal_uInt8 nMemberId)1799*b1cdbd2cSJim Jagielski sal_Bool SwFmtURL::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
1800*b1cdbd2cSJim Jagielski {
1801*b1cdbd2cSJim Jagielski 	// hier wird immer konvertiert!
1802*b1cdbd2cSJim Jagielski 	nMemberId &= ~CONVERT_TWIPS;
1803*b1cdbd2cSJim Jagielski 	sal_Bool bRet = sal_True;
1804*b1cdbd2cSJim Jagielski 	switch ( nMemberId )
1805*b1cdbd2cSJim Jagielski 	{
1806*b1cdbd2cSJim Jagielski 		case MID_URL_URL:
1807*b1cdbd2cSJim Jagielski         {
1808*b1cdbd2cSJim Jagielski             OUString sTmp;
1809*b1cdbd2cSJim Jagielski             rVal >>= sTmp;
1810*b1cdbd2cSJim Jagielski             SetURL( sTmp, bIsServerMap );
1811*b1cdbd2cSJim Jagielski         }
1812*b1cdbd2cSJim Jagielski 		break;
1813*b1cdbd2cSJim Jagielski 		case MID_URL_TARGET:
1814*b1cdbd2cSJim Jagielski         {
1815*b1cdbd2cSJim Jagielski             OUString sTmp;
1816*b1cdbd2cSJim Jagielski             rVal >>= sTmp;
1817*b1cdbd2cSJim Jagielski             SetTargetFrameName( sTmp );
1818*b1cdbd2cSJim Jagielski         }
1819*b1cdbd2cSJim Jagielski 		break;
1820*b1cdbd2cSJim Jagielski 		case MID_URL_HYPERLINKNAME:
1821*b1cdbd2cSJim Jagielski         {
1822*b1cdbd2cSJim Jagielski             OUString sTmp;
1823*b1cdbd2cSJim Jagielski             rVal >>= sTmp;
1824*b1cdbd2cSJim Jagielski             SetName( sTmp );
1825*b1cdbd2cSJim Jagielski         }
1826*b1cdbd2cSJim Jagielski 		break;
1827*b1cdbd2cSJim Jagielski 		case MID_URL_CLIENTMAP:
1828*b1cdbd2cSJim Jagielski         {
1829*b1cdbd2cSJim Jagielski             uno::Reference<container::XIndexContainer> xCont;
1830*b1cdbd2cSJim Jagielski             if(!rVal.hasValue())
1831*b1cdbd2cSJim Jagielski                 DELETEZ(pMap);
1832*b1cdbd2cSJim Jagielski             else if(rVal >>= xCont)
1833*b1cdbd2cSJim Jagielski             {
1834*b1cdbd2cSJim Jagielski                 if(!pMap)
1835*b1cdbd2cSJim Jagielski                     pMap = new ImageMap;
1836*b1cdbd2cSJim Jagielski                 bRet = SvUnoImageMap_fillImageMap( xCont, *pMap );
1837*b1cdbd2cSJim Jagielski             }
1838*b1cdbd2cSJim Jagielski             else
1839*b1cdbd2cSJim Jagielski                 bRet = sal_False;
1840*b1cdbd2cSJim Jagielski         }
1841*b1cdbd2cSJim Jagielski         break;
1842*b1cdbd2cSJim Jagielski 		case MID_URL_SERVERMAP:
1843*b1cdbd2cSJim Jagielski 			bIsServerMap = *(sal_Bool*)rVal.getValue();
1844*b1cdbd2cSJim Jagielski 			break;
1845*b1cdbd2cSJim Jagielski 		default:
1846*b1cdbd2cSJim Jagielski 			ASSERT( !this, "unknown MemberId" );
1847*b1cdbd2cSJim Jagielski 			bRet = sal_False;
1848*b1cdbd2cSJim Jagielski 	}
1849*b1cdbd2cSJim Jagielski 	return bRet;
1850*b1cdbd2cSJim Jagielski }
1851*b1cdbd2cSJim Jagielski 
1852*b1cdbd2cSJim Jagielski 
1853*b1cdbd2cSJim Jagielski // class SwNoReadOnly
1854*b1cdbd2cSJim Jagielski 
Clone(SfxItemPool *) const1855*b1cdbd2cSJim Jagielski SfxPoolItem* SwFmtEditInReadonly::Clone( SfxItemPool* ) const
1856*b1cdbd2cSJim Jagielski {
1857*b1cdbd2cSJim Jagielski 	return new SwFmtEditInReadonly( Which(), GetValue() );
1858*b1cdbd2cSJim Jagielski }
1859*b1cdbd2cSJim Jagielski 
1860*b1cdbd2cSJim Jagielski // class SwFmtLayoutSplit
1861*b1cdbd2cSJim Jagielski 
Clone(SfxItemPool *) const1862*b1cdbd2cSJim Jagielski SfxPoolItem* SwFmtLayoutSplit::Clone( SfxItemPool* ) const
1863*b1cdbd2cSJim Jagielski {
1864*b1cdbd2cSJim Jagielski 	return new SwFmtLayoutSplit( GetValue() );
1865*b1cdbd2cSJim Jagielski }
1866*b1cdbd2cSJim Jagielski 
1867*b1cdbd2cSJim Jagielski // class SwFmtRowSplit
1868*b1cdbd2cSJim Jagielski 
Clone(SfxItemPool *) const1869*b1cdbd2cSJim Jagielski SfxPoolItem* SwFmtRowSplit::Clone( SfxItemPool* ) const
1870*b1cdbd2cSJim Jagielski {
1871*b1cdbd2cSJim Jagielski     return new SwFmtRowSplit( GetValue() );
1872*b1cdbd2cSJim Jagielski }
1873*b1cdbd2cSJim Jagielski 
1874*b1cdbd2cSJim Jagielski 
1875*b1cdbd2cSJim Jagielski // class SwFmtNoBalancedColumns
1876*b1cdbd2cSJim Jagielski 
Clone(SfxItemPool *) const1877*b1cdbd2cSJim Jagielski SfxPoolItem* SwFmtNoBalancedColumns::Clone( SfxItemPool* ) const
1878*b1cdbd2cSJim Jagielski {
1879*b1cdbd2cSJim Jagielski 	return new SwFmtNoBalancedColumns( GetValue() );
1880*b1cdbd2cSJim Jagielski }
1881*b1cdbd2cSJim Jagielski 
1882*b1cdbd2cSJim Jagielski // class SwFmtFtnEndAtTxtEnd
1883*b1cdbd2cSJim Jagielski 
GetValueCount() const1884*b1cdbd2cSJim Jagielski sal_uInt16 SwFmtFtnEndAtTxtEnd::GetValueCount() const
1885*b1cdbd2cSJim Jagielski {
1886*b1cdbd2cSJim Jagielski 	return sal_uInt16( FTNEND_ATTXTEND_END );
1887*b1cdbd2cSJim Jagielski }
1888*b1cdbd2cSJim Jagielski 
operator =(const SwFmtFtnEndAtTxtEnd & rAttr)1889*b1cdbd2cSJim Jagielski SwFmtFtnEndAtTxtEnd& SwFmtFtnEndAtTxtEnd::operator=(
1890*b1cdbd2cSJim Jagielski 						const SwFmtFtnEndAtTxtEnd& rAttr )
1891*b1cdbd2cSJim Jagielski {
1892*b1cdbd2cSJim Jagielski 	SfxEnumItem::SetValue( rAttr.GetValue() );
1893*b1cdbd2cSJim Jagielski 	aFmt = rAttr.aFmt;
1894*b1cdbd2cSJim Jagielski 	nOffset = rAttr.nOffset;
1895*b1cdbd2cSJim Jagielski 	sPrefix = rAttr.sPrefix;
1896*b1cdbd2cSJim Jagielski 	sSuffix = rAttr.sSuffix;
1897*b1cdbd2cSJim Jagielski 	return *this;
1898*b1cdbd2cSJim Jagielski }
1899*b1cdbd2cSJim Jagielski 
operator ==(const SfxPoolItem & rItem) const1900*b1cdbd2cSJim Jagielski int SwFmtFtnEndAtTxtEnd::operator==( const SfxPoolItem& rItem ) const
1901*b1cdbd2cSJim Jagielski {
1902*b1cdbd2cSJim Jagielski 	const SwFmtFtnEndAtTxtEnd& rAttr = (SwFmtFtnEndAtTxtEnd&)rItem;
1903*b1cdbd2cSJim Jagielski 	return SfxEnumItem::operator==( rAttr ) &&
1904*b1cdbd2cSJim Jagielski 			aFmt.GetNumberingType() == rAttr.aFmt.GetNumberingType() &&
1905*b1cdbd2cSJim Jagielski 			nOffset == rAttr.nOffset &&
1906*b1cdbd2cSJim Jagielski 			sPrefix == rAttr.sPrefix &&
1907*b1cdbd2cSJim Jagielski 			sSuffix == rAttr.sSuffix;
1908*b1cdbd2cSJim Jagielski }
1909*b1cdbd2cSJim Jagielski 
QueryValue(uno::Any & rVal,sal_uInt8 nMemberId) const1910*b1cdbd2cSJim Jagielski sal_Bool SwFmtFtnEndAtTxtEnd::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
1911*b1cdbd2cSJim Jagielski {
1912*b1cdbd2cSJim Jagielski 	nMemberId &= ~CONVERT_TWIPS;
1913*b1cdbd2cSJim Jagielski 	switch(nMemberId)
1914*b1cdbd2cSJim Jagielski 	{
1915*b1cdbd2cSJim Jagielski 		case MID_COLLECT	 :
1916*b1cdbd2cSJim Jagielski 		{
1917*b1cdbd2cSJim Jagielski 			sal_Bool bVal = GetValue() >= FTNEND_ATTXTEND;
1918*b1cdbd2cSJim Jagielski 			rVal.setValue(&bVal, ::getBooleanCppuType());
1919*b1cdbd2cSJim Jagielski 		}
1920*b1cdbd2cSJim Jagielski 		break;
1921*b1cdbd2cSJim Jagielski 		case MID_RESTART_NUM :
1922*b1cdbd2cSJim Jagielski 		{
1923*b1cdbd2cSJim Jagielski 			sal_Bool bVal = GetValue() >= FTNEND_ATTXTEND_OWNNUMSEQ;
1924*b1cdbd2cSJim Jagielski 			rVal.setValue(&bVal, ::getBooleanCppuType());
1925*b1cdbd2cSJim Jagielski 		}
1926*b1cdbd2cSJim Jagielski 		break;
1927*b1cdbd2cSJim Jagielski 		case MID_NUM_START_AT: rVal <<= (sal_Int16) nOffset; break;
1928*b1cdbd2cSJim Jagielski 		case MID_OWN_NUM     :
1929*b1cdbd2cSJim Jagielski 		{
1930*b1cdbd2cSJim Jagielski 			sal_Bool bVal = GetValue() >= FTNEND_ATTXTEND_OWNNUMANDFMT;
1931*b1cdbd2cSJim Jagielski 			rVal.setValue(&bVal, ::getBooleanCppuType());
1932*b1cdbd2cSJim Jagielski 		}
1933*b1cdbd2cSJim Jagielski 		break;
1934*b1cdbd2cSJim Jagielski 		case MID_NUM_TYPE    : rVal <<= aFmt.GetNumberingType(); break;
1935*b1cdbd2cSJim Jagielski 		case MID_PREFIX      : rVal <<= OUString(sPrefix); break;
1936*b1cdbd2cSJim Jagielski 		case MID_SUFFIX      : rVal <<= OUString(sSuffix); break;
1937*b1cdbd2cSJim Jagielski 		default: return sal_False;
1938*b1cdbd2cSJim Jagielski 	}
1939*b1cdbd2cSJim Jagielski 	return sal_True;
1940*b1cdbd2cSJim Jagielski }
1941*b1cdbd2cSJim Jagielski 
PutValue(const uno::Any & rVal,sal_uInt8 nMemberId)1942*b1cdbd2cSJim Jagielski sal_Bool SwFmtFtnEndAtTxtEnd::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
1943*b1cdbd2cSJim Jagielski {
1944*b1cdbd2cSJim Jagielski 	sal_Bool bRet = sal_True;
1945*b1cdbd2cSJim Jagielski 	nMemberId &= ~CONVERT_TWIPS;
1946*b1cdbd2cSJim Jagielski 	switch(nMemberId)
1947*b1cdbd2cSJim Jagielski 	{
1948*b1cdbd2cSJim Jagielski 		case MID_COLLECT	 :
1949*b1cdbd2cSJim Jagielski 		{
1950*b1cdbd2cSJim Jagielski 			sal_Bool bVal = *(sal_Bool*)rVal.getValue();
1951*b1cdbd2cSJim Jagielski 			if(!bVal && GetValue() >= FTNEND_ATTXTEND)
1952*b1cdbd2cSJim Jagielski 				SetValue(FTNEND_ATPGORDOCEND);
1953*b1cdbd2cSJim Jagielski 			else if(bVal && GetValue() < FTNEND_ATTXTEND)
1954*b1cdbd2cSJim Jagielski 				SetValue(FTNEND_ATTXTEND);
1955*b1cdbd2cSJim Jagielski 		}
1956*b1cdbd2cSJim Jagielski 		break;
1957*b1cdbd2cSJim Jagielski 		case MID_RESTART_NUM :
1958*b1cdbd2cSJim Jagielski 		{
1959*b1cdbd2cSJim Jagielski 			sal_Bool bVal = *(sal_Bool*)rVal.getValue();
1960*b1cdbd2cSJim Jagielski 			if(!bVal && GetValue() >= FTNEND_ATTXTEND_OWNNUMSEQ)
1961*b1cdbd2cSJim Jagielski 				SetValue(FTNEND_ATTXTEND);
1962*b1cdbd2cSJim Jagielski 			else if(bVal && GetValue() < FTNEND_ATTXTEND_OWNNUMSEQ)
1963*b1cdbd2cSJim Jagielski 				SetValue(FTNEND_ATTXTEND_OWNNUMSEQ);
1964*b1cdbd2cSJim Jagielski 		}
1965*b1cdbd2cSJim Jagielski 		break;
1966*b1cdbd2cSJim Jagielski 		case MID_NUM_START_AT:
1967*b1cdbd2cSJim Jagielski 		{
1968*b1cdbd2cSJim Jagielski 			sal_Int16 nVal = 0;
1969*b1cdbd2cSJim Jagielski 			rVal >>= nVal;
1970*b1cdbd2cSJim Jagielski 			if(nVal >= 0)
1971*b1cdbd2cSJim Jagielski 				nOffset = nVal;
1972*b1cdbd2cSJim Jagielski 			else
1973*b1cdbd2cSJim Jagielski 				bRet = sal_False;
1974*b1cdbd2cSJim Jagielski 		}
1975*b1cdbd2cSJim Jagielski 		break;
1976*b1cdbd2cSJim Jagielski 		case MID_OWN_NUM     :
1977*b1cdbd2cSJim Jagielski 		{
1978*b1cdbd2cSJim Jagielski 			sal_Bool bVal = *(sal_Bool*)rVal.getValue();
1979*b1cdbd2cSJim Jagielski 			if(!bVal && GetValue() >= FTNEND_ATTXTEND_OWNNUMANDFMT)
1980*b1cdbd2cSJim Jagielski 				SetValue(FTNEND_ATTXTEND_OWNNUMSEQ);
1981*b1cdbd2cSJim Jagielski 			else if(bVal && GetValue() < FTNEND_ATTXTEND_OWNNUMANDFMT)
1982*b1cdbd2cSJim Jagielski 				SetValue(FTNEND_ATTXTEND_OWNNUMANDFMT);
1983*b1cdbd2cSJim Jagielski 		}
1984*b1cdbd2cSJim Jagielski 		break;
1985*b1cdbd2cSJim Jagielski 		case MID_NUM_TYPE    :
1986*b1cdbd2cSJim Jagielski 		{
1987*b1cdbd2cSJim Jagielski 			sal_Int16 nVal = 0;
1988*b1cdbd2cSJim Jagielski 			rVal >>= nVal;
1989*b1cdbd2cSJim Jagielski 			if(nVal >= 0 &&
1990*b1cdbd2cSJim Jagielski 				(nVal <= SVX_NUM_ARABIC ||
1991*b1cdbd2cSJim Jagielski 					SVX_NUM_CHARS_UPPER_LETTER_N == nVal ||
1992*b1cdbd2cSJim Jagielski 						SVX_NUM_CHARS_LOWER_LETTER_N == nVal ))
1993*b1cdbd2cSJim Jagielski 				aFmt.SetNumberingType(nVal);
1994*b1cdbd2cSJim Jagielski 			else
1995*b1cdbd2cSJim Jagielski 				bRet = sal_False;
1996*b1cdbd2cSJim Jagielski 		}
1997*b1cdbd2cSJim Jagielski 		break;
1998*b1cdbd2cSJim Jagielski 		case MID_PREFIX      :
1999*b1cdbd2cSJim Jagielski 		{
2000*b1cdbd2cSJim Jagielski 			OUString sVal; rVal >>= sVal;
2001*b1cdbd2cSJim Jagielski 			sPrefix = sVal;
2002*b1cdbd2cSJim Jagielski 		}
2003*b1cdbd2cSJim Jagielski 		break;
2004*b1cdbd2cSJim Jagielski 		case MID_SUFFIX      :
2005*b1cdbd2cSJim Jagielski 		{
2006*b1cdbd2cSJim Jagielski 			OUString sVal; rVal >>= sVal;
2007*b1cdbd2cSJim Jagielski 			sSuffix = sVal;
2008*b1cdbd2cSJim Jagielski 		}
2009*b1cdbd2cSJim Jagielski 		break;
2010*b1cdbd2cSJim Jagielski 		default: bRet = sal_False;
2011*b1cdbd2cSJim Jagielski 	}
2012*b1cdbd2cSJim Jagielski 	return bRet;
2013*b1cdbd2cSJim Jagielski }
2014*b1cdbd2cSJim Jagielski 
2015*b1cdbd2cSJim Jagielski 
2016*b1cdbd2cSJim Jagielski // class SwFmtFtnAtTxtEnd
2017*b1cdbd2cSJim Jagielski 
Clone(SfxItemPool *) const2018*b1cdbd2cSJim Jagielski SfxPoolItem* SwFmtFtnAtTxtEnd::Clone( SfxItemPool* ) const
2019*b1cdbd2cSJim Jagielski {
2020*b1cdbd2cSJim Jagielski 	SwFmtFtnAtTxtEnd* pNew = new SwFmtFtnAtTxtEnd;
2021*b1cdbd2cSJim Jagielski 	*pNew = *this;
2022*b1cdbd2cSJim Jagielski 	return pNew;
2023*b1cdbd2cSJim Jagielski }
2024*b1cdbd2cSJim Jagielski 
2025*b1cdbd2cSJim Jagielski // class SwFmtEndAtTxtEnd
2026*b1cdbd2cSJim Jagielski 
Clone(SfxItemPool *) const2027*b1cdbd2cSJim Jagielski SfxPoolItem* SwFmtEndAtTxtEnd::Clone( SfxItemPool* ) const
2028*b1cdbd2cSJim Jagielski {
2029*b1cdbd2cSJim Jagielski 	SwFmtEndAtTxtEnd* pNew = new SwFmtEndAtTxtEnd;
2030*b1cdbd2cSJim Jagielski 	*pNew = *this;
2031*b1cdbd2cSJim Jagielski 	return pNew;
2032*b1cdbd2cSJim Jagielski }
2033*b1cdbd2cSJim Jagielski 
2034*b1cdbd2cSJim Jagielski //class SwFmtChain
2035*b1cdbd2cSJim Jagielski 
2036*b1cdbd2cSJim Jagielski 
operator ==(const SfxPoolItem & rAttr) const2037*b1cdbd2cSJim Jagielski int SwFmtChain::operator==( const SfxPoolItem &rAttr ) const
2038*b1cdbd2cSJim Jagielski {
2039*b1cdbd2cSJim Jagielski 	ASSERT( SfxPoolItem::operator==( rAttr ), "keine gleichen Attribute" );
2040*b1cdbd2cSJim Jagielski 
2041*b1cdbd2cSJim Jagielski 	return GetPrev() == ((SwFmtChain&)rAttr).GetPrev() &&
2042*b1cdbd2cSJim Jagielski 		   GetNext() == ((SwFmtChain&)rAttr).GetNext();
2043*b1cdbd2cSJim Jagielski }
2044*b1cdbd2cSJim Jagielski 
SwFmtChain(const SwFmtChain & rCpy)2045*b1cdbd2cSJim Jagielski SwFmtChain::SwFmtChain( const SwFmtChain &rCpy ) :
2046*b1cdbd2cSJim Jagielski 	SfxPoolItem( RES_CHAIN )
2047*b1cdbd2cSJim Jagielski {
2048*b1cdbd2cSJim Jagielski 	SetPrev( rCpy.GetPrev() );
2049*b1cdbd2cSJim Jagielski 	SetNext( rCpy.GetNext() );
2050*b1cdbd2cSJim Jagielski }
2051*b1cdbd2cSJim Jagielski 
Clone(SfxItemPool *) const2052*b1cdbd2cSJim Jagielski SfxPoolItem* SwFmtChain::Clone( SfxItemPool* ) const
2053*b1cdbd2cSJim Jagielski {
2054*b1cdbd2cSJim Jagielski 	SwFmtChain *pRet = new SwFmtChain;
2055*b1cdbd2cSJim Jagielski 	pRet->SetPrev( GetPrev() );
2056*b1cdbd2cSJim Jagielski 	pRet->SetNext( GetNext() );
2057*b1cdbd2cSJim Jagielski 	return pRet;
2058*b1cdbd2cSJim Jagielski }
2059*b1cdbd2cSJim Jagielski 
SetPrev(SwFlyFrmFmt * pFmt)2060*b1cdbd2cSJim Jagielski void SwFmtChain::SetPrev( SwFlyFrmFmt *pFmt )
2061*b1cdbd2cSJim Jagielski {
2062*b1cdbd2cSJim Jagielski 	if ( pFmt )
2063*b1cdbd2cSJim Jagielski 		pFmt->Add( &aPrev );
2064*b1cdbd2cSJim Jagielski 	else if ( aPrev.GetRegisteredIn() )
2065*b1cdbd2cSJim Jagielski 		((SwModify*)aPrev.GetRegisteredIn())->Remove( &aPrev );
2066*b1cdbd2cSJim Jagielski }
2067*b1cdbd2cSJim Jagielski 
SetNext(SwFlyFrmFmt * pFmt)2068*b1cdbd2cSJim Jagielski void SwFmtChain::SetNext( SwFlyFrmFmt *pFmt )
2069*b1cdbd2cSJim Jagielski {
2070*b1cdbd2cSJim Jagielski 	if ( pFmt )
2071*b1cdbd2cSJim Jagielski 		pFmt->Add( &aNext );
2072*b1cdbd2cSJim Jagielski 	else if ( aNext.GetRegisteredIn() )
2073*b1cdbd2cSJim Jagielski 		((SwModify*)aNext.GetRegisteredIn())->Remove( &aNext );
2074*b1cdbd2cSJim Jagielski }
2075*b1cdbd2cSJim Jagielski 
QueryValue(uno::Any & rVal,sal_uInt8 nMemberId) const2076*b1cdbd2cSJim Jagielski sal_Bool SwFmtChain::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
2077*b1cdbd2cSJim Jagielski {
2078*b1cdbd2cSJim Jagielski 	// hier wird immer konvertiert!
2079*b1cdbd2cSJim Jagielski 	nMemberId &= ~CONVERT_TWIPS;
2080*b1cdbd2cSJim Jagielski 	sal_Bool   bRet = sal_True;
2081*b1cdbd2cSJim Jagielski 	XubString aRet;
2082*b1cdbd2cSJim Jagielski 	switch ( nMemberId )
2083*b1cdbd2cSJim Jagielski 	{
2084*b1cdbd2cSJim Jagielski 		case MID_CHAIN_PREVNAME:
2085*b1cdbd2cSJim Jagielski 			if ( GetPrev() )
2086*b1cdbd2cSJim Jagielski 				aRet = GetPrev()->GetName();
2087*b1cdbd2cSJim Jagielski 			break;
2088*b1cdbd2cSJim Jagielski 		case MID_CHAIN_NEXTNAME:
2089*b1cdbd2cSJim Jagielski 			if ( GetNext() )
2090*b1cdbd2cSJim Jagielski 				aRet = GetNext()->GetName();
2091*b1cdbd2cSJim Jagielski 			break;
2092*b1cdbd2cSJim Jagielski 		default:
2093*b1cdbd2cSJim Jagielski 			ASSERT( !this, "unknown MemberId" );
2094*b1cdbd2cSJim Jagielski 			bRet = sal_False;
2095*b1cdbd2cSJim Jagielski 	}
2096*b1cdbd2cSJim Jagielski 	rVal <<= OUString(aRet);
2097*b1cdbd2cSJim Jagielski 	return bRet;
2098*b1cdbd2cSJim Jagielski }
2099*b1cdbd2cSJim Jagielski 
2100*b1cdbd2cSJim Jagielski 
2101*b1cdbd2cSJim Jagielski 
2102*b1cdbd2cSJim Jagielski 
2103*b1cdbd2cSJim Jagielski //class SwFmtLineNumber
2104*b1cdbd2cSJim Jagielski 
SwFmtLineNumber()2105*b1cdbd2cSJim Jagielski SwFmtLineNumber::SwFmtLineNumber() :
2106*b1cdbd2cSJim Jagielski 	SfxPoolItem( RES_LINENUMBER )
2107*b1cdbd2cSJim Jagielski {
2108*b1cdbd2cSJim Jagielski 	nStartValue = 0;
2109*b1cdbd2cSJim Jagielski 	bCountLines = sal_True;
2110*b1cdbd2cSJim Jagielski }
2111*b1cdbd2cSJim Jagielski 
~SwFmtLineNumber()2112*b1cdbd2cSJim Jagielski SwFmtLineNumber::~SwFmtLineNumber()
2113*b1cdbd2cSJim Jagielski {
2114*b1cdbd2cSJim Jagielski }
2115*b1cdbd2cSJim Jagielski 
operator ==(const SfxPoolItem & rAttr) const2116*b1cdbd2cSJim Jagielski int SwFmtLineNumber::operator==( const SfxPoolItem &rAttr ) const
2117*b1cdbd2cSJim Jagielski {
2118*b1cdbd2cSJim Jagielski 	ASSERT( SfxPoolItem::operator==( rAttr ), "keine gleichen Attribute" );
2119*b1cdbd2cSJim Jagielski 
2120*b1cdbd2cSJim Jagielski 	return nStartValue	== ((SwFmtLineNumber&)rAttr).GetStartValue() &&
2121*b1cdbd2cSJim Jagielski 		   bCountLines	== ((SwFmtLineNumber&)rAttr).IsCount();
2122*b1cdbd2cSJim Jagielski }
2123*b1cdbd2cSJim Jagielski 
Clone(SfxItemPool *) const2124*b1cdbd2cSJim Jagielski SfxPoolItem* SwFmtLineNumber::Clone( SfxItemPool* ) const
2125*b1cdbd2cSJim Jagielski {
2126*b1cdbd2cSJim Jagielski 	return new SwFmtLineNumber( *this );
2127*b1cdbd2cSJim Jagielski }
2128*b1cdbd2cSJim Jagielski 
QueryValue(uno::Any & rVal,sal_uInt8 nMemberId) const2129*b1cdbd2cSJim Jagielski sal_Bool SwFmtLineNumber::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
2130*b1cdbd2cSJim Jagielski {
2131*b1cdbd2cSJim Jagielski 	// hier wird immer konvertiert!
2132*b1cdbd2cSJim Jagielski 	nMemberId &= ~CONVERT_TWIPS;
2133*b1cdbd2cSJim Jagielski 	sal_Bool bRet = sal_True;
2134*b1cdbd2cSJim Jagielski 	switch ( nMemberId )
2135*b1cdbd2cSJim Jagielski 	{
2136*b1cdbd2cSJim Jagielski 		case MID_LINENUMBER_COUNT:
2137*b1cdbd2cSJim Jagielski 		{
2138*b1cdbd2cSJim Jagielski 			sal_Bool bTmp = IsCount();
2139*b1cdbd2cSJim Jagielski 			rVal.setValue(&bTmp, ::getBooleanCppuType());
2140*b1cdbd2cSJim Jagielski 		}
2141*b1cdbd2cSJim Jagielski 		break;
2142*b1cdbd2cSJim Jagielski 		case MID_LINENUMBER_STARTVALUE:
2143*b1cdbd2cSJim Jagielski 			rVal <<= (sal_Int32)GetStartValue();
2144*b1cdbd2cSJim Jagielski 			break;
2145*b1cdbd2cSJim Jagielski 		default:
2146*b1cdbd2cSJim Jagielski 			ASSERT( !this, "unknown MemberId" );
2147*b1cdbd2cSJim Jagielski 			bRet = sal_False;
2148*b1cdbd2cSJim Jagielski 	}
2149*b1cdbd2cSJim Jagielski 	return bRet;
2150*b1cdbd2cSJim Jagielski }
2151*b1cdbd2cSJim Jagielski 
PutValue(const uno::Any & rVal,sal_uInt8 nMemberId)2152*b1cdbd2cSJim Jagielski sal_Bool SwFmtLineNumber::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
2153*b1cdbd2cSJim Jagielski {
2154*b1cdbd2cSJim Jagielski 	// hier wird immer konvertiert!
2155*b1cdbd2cSJim Jagielski 	nMemberId &= ~CONVERT_TWIPS;
2156*b1cdbd2cSJim Jagielski 	sal_Bool bRet = sal_True;
2157*b1cdbd2cSJim Jagielski 	switch ( nMemberId )
2158*b1cdbd2cSJim Jagielski 	{
2159*b1cdbd2cSJim Jagielski 		case MID_LINENUMBER_COUNT:
2160*b1cdbd2cSJim Jagielski 			SetCountLines( *(sal_Bool*)rVal.getValue() );
2161*b1cdbd2cSJim Jagielski 			break;
2162*b1cdbd2cSJim Jagielski 		case MID_LINENUMBER_STARTVALUE:
2163*b1cdbd2cSJim Jagielski         {
2164*b1cdbd2cSJim Jagielski             sal_Int32 nVal = 0;
2165*b1cdbd2cSJim Jagielski             if(rVal >>= nVal)
2166*b1cdbd2cSJim Jagielski                 SetStartValue( nVal );
2167*b1cdbd2cSJim Jagielski             else
2168*b1cdbd2cSJim Jagielski                 bRet = sal_False;
2169*b1cdbd2cSJim Jagielski         }
2170*b1cdbd2cSJim Jagielski         break;
2171*b1cdbd2cSJim Jagielski 		default:
2172*b1cdbd2cSJim Jagielski 			ASSERT( !this, "unknown MemberId" );
2173*b1cdbd2cSJim Jagielski 			bRet = sal_False;
2174*b1cdbd2cSJim Jagielski 	}
2175*b1cdbd2cSJim Jagielski 	return bRet;
2176*b1cdbd2cSJim Jagielski }
2177*b1cdbd2cSJim Jagielski 
2178*b1cdbd2cSJim Jagielski /*************************************************************************
2179*b1cdbd2cSJim Jagielski  *    class SwTextGridItem
2180*b1cdbd2cSJim Jagielski  *************************************************************************/
2181*b1cdbd2cSJim Jagielski 
SwTextGridItem()2182*b1cdbd2cSJim Jagielski SwTextGridItem::SwTextGridItem()
2183*b1cdbd2cSJim Jagielski     : SfxPoolItem( RES_TEXTGRID ), aColor( COL_LIGHTGRAY ), nLines( 20 ),
2184*b1cdbd2cSJim Jagielski       nBaseHeight( 400 ), nRubyHeight( 200 ), eGridType( GRID_NONE ),
2185*b1cdbd2cSJim Jagielski       bRubyTextBelow( 0 ), bPrintGrid( 1 ), bDisplayGrid( 1 ),
2186*b1cdbd2cSJim Jagielski       nBaseWidth(400), bSnapToChars( 1 ), bSquaredMode(1)
2187*b1cdbd2cSJim Jagielski {
2188*b1cdbd2cSJim Jagielski }
2189*b1cdbd2cSJim Jagielski 
~SwTextGridItem()2190*b1cdbd2cSJim Jagielski SwTextGridItem::~SwTextGridItem()
2191*b1cdbd2cSJim Jagielski {
2192*b1cdbd2cSJim Jagielski }
2193*b1cdbd2cSJim Jagielski 
operator ==(const SfxPoolItem & rAttr) const2194*b1cdbd2cSJim Jagielski int SwTextGridItem::operator==( const SfxPoolItem& rAttr ) const
2195*b1cdbd2cSJim Jagielski {
2196*b1cdbd2cSJim Jagielski 	ASSERT( SfxPoolItem::operator==( rAttr ), "keine gleichen Attribute" );
2197*b1cdbd2cSJim Jagielski     return eGridType == ((SwTextGridItem&)rAttr).GetGridType() &&
2198*b1cdbd2cSJim Jagielski            nLines == ((SwTextGridItem&)rAttr).GetLines() &&
2199*b1cdbd2cSJim Jagielski            nBaseHeight == ((SwTextGridItem&)rAttr).GetBaseHeight() &&
2200*b1cdbd2cSJim Jagielski            nRubyHeight == ((SwTextGridItem&)rAttr).GetRubyHeight() &&
2201*b1cdbd2cSJim Jagielski            bRubyTextBelow == ((SwTextGridItem&)rAttr).GetRubyTextBelow() &&
2202*b1cdbd2cSJim Jagielski            bDisplayGrid == ((SwTextGridItem&)rAttr).GetDisplayGrid() &&
2203*b1cdbd2cSJim Jagielski            bPrintGrid == ((SwTextGridItem&)rAttr).GetPrintGrid() &&
2204*b1cdbd2cSJim Jagielski            aColor == ((SwTextGridItem&)rAttr).GetColor() &&
2205*b1cdbd2cSJim Jagielski            nBaseWidth == ((SwTextGridItem&)rAttr).GetBaseWidth() &&
2206*b1cdbd2cSJim Jagielski            bSnapToChars == ((SwTextGridItem&)rAttr).GetSnapToChars() &&
2207*b1cdbd2cSJim Jagielski            bSquaredMode == ((SwTextGridItem&)rAttr).GetSquaredMode();
2208*b1cdbd2cSJim Jagielski }
2209*b1cdbd2cSJim Jagielski 
Clone(SfxItemPool *) const2210*b1cdbd2cSJim Jagielski SfxPoolItem* SwTextGridItem::Clone( SfxItemPool* ) const
2211*b1cdbd2cSJim Jagielski {
2212*b1cdbd2cSJim Jagielski     return new SwTextGridItem( *this );
2213*b1cdbd2cSJim Jagielski }
2214*b1cdbd2cSJim Jagielski 
operator =(const SwTextGridItem & rCpy)2215*b1cdbd2cSJim Jagielski SwTextGridItem& SwTextGridItem::operator=( const SwTextGridItem& rCpy )
2216*b1cdbd2cSJim Jagielski {
2217*b1cdbd2cSJim Jagielski     aColor = rCpy.GetColor();
2218*b1cdbd2cSJim Jagielski     nLines = rCpy.GetLines();
2219*b1cdbd2cSJim Jagielski     nBaseHeight = rCpy.GetBaseHeight();
2220*b1cdbd2cSJim Jagielski     nRubyHeight = rCpy.GetRubyHeight();
2221*b1cdbd2cSJim Jagielski     eGridType = rCpy.GetGridType();
2222*b1cdbd2cSJim Jagielski     bRubyTextBelow = rCpy.GetRubyTextBelow();
2223*b1cdbd2cSJim Jagielski     bPrintGrid = rCpy.GetPrintGrid();
2224*b1cdbd2cSJim Jagielski     bDisplayGrid = rCpy.GetDisplayGrid();
2225*b1cdbd2cSJim Jagielski     nBaseWidth = rCpy.GetBaseWidth();
2226*b1cdbd2cSJim Jagielski     bSnapToChars = rCpy.GetSnapToChars();
2227*b1cdbd2cSJim Jagielski     bSquaredMode = rCpy.GetSquaredMode();
2228*b1cdbd2cSJim Jagielski 
2229*b1cdbd2cSJim Jagielski 	return *this;
2230*b1cdbd2cSJim Jagielski }
2231*b1cdbd2cSJim Jagielski 
QueryValue(uno::Any & rVal,sal_uInt8 nMemberId) const2232*b1cdbd2cSJim Jagielski sal_Bool SwTextGridItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
2233*b1cdbd2cSJim Jagielski {
2234*b1cdbd2cSJim Jagielski     sal_Bool bRet = sal_True;
2235*b1cdbd2cSJim Jagielski 
2236*b1cdbd2cSJim Jagielski     switch( nMemberId & ~CONVERT_TWIPS )
2237*b1cdbd2cSJim Jagielski     {
2238*b1cdbd2cSJim Jagielski         case MID_GRID_COLOR:
2239*b1cdbd2cSJim Jagielski             rVal <<= GetColor().GetColor();
2240*b1cdbd2cSJim Jagielski             break;
2241*b1cdbd2cSJim Jagielski         case MID_GRID_LINES:
2242*b1cdbd2cSJim Jagielski             rVal <<= GetLines();
2243*b1cdbd2cSJim Jagielski             break;
2244*b1cdbd2cSJim Jagielski         case MID_GRID_RUBY_BELOW:
2245*b1cdbd2cSJim Jagielski             rVal.setValue( &bRubyTextBelow, ::getBooleanCppuType() );
2246*b1cdbd2cSJim Jagielski             break;
2247*b1cdbd2cSJim Jagielski         case MID_GRID_PRINT:
2248*b1cdbd2cSJim Jagielski             rVal.setValue( &bPrintGrid, ::getBooleanCppuType() );
2249*b1cdbd2cSJim Jagielski             break;
2250*b1cdbd2cSJim Jagielski         case MID_GRID_DISPLAY:
2251*b1cdbd2cSJim Jagielski             rVal.setValue( &bDisplayGrid, ::getBooleanCppuType() );
2252*b1cdbd2cSJim Jagielski             break;
2253*b1cdbd2cSJim Jagielski         case MID_GRID_BASEHEIGHT:
2254*b1cdbd2cSJim Jagielski             DBG_ASSERT( (nMemberId & CONVERT_TWIPS) != 0,
2255*b1cdbd2cSJim Jagielski                         "This value needs TWIPS-MM100 conversion" );
2256*b1cdbd2cSJim Jagielski             rVal <<= (sal_Int32) TWIP_TO_MM100_UNSIGNED(nBaseHeight);
2257*b1cdbd2cSJim Jagielski             break;
2258*b1cdbd2cSJim Jagielski         case MID_GRID_BASEWIDTH:
2259*b1cdbd2cSJim Jagielski             DBG_ASSERT( (nMemberId & CONVERT_TWIPS) != 0,
2260*b1cdbd2cSJim Jagielski                         "This value needs TWIPS-MM100 conversion" );
2261*b1cdbd2cSJim Jagielski             rVal <<= (sal_Int32) TWIP_TO_MM100_UNSIGNED(nBaseWidth);
2262*b1cdbd2cSJim Jagielski             break;
2263*b1cdbd2cSJim Jagielski         case MID_GRID_RUBYHEIGHT:
2264*b1cdbd2cSJim Jagielski             DBG_ASSERT( (nMemberId & CONVERT_TWIPS) != 0,
2265*b1cdbd2cSJim Jagielski                         "This value needs TWIPS-MM100 conversion" );
2266*b1cdbd2cSJim Jagielski             rVal <<= (sal_Int32)TWIP_TO_MM100_UNSIGNED(nRubyHeight);
2267*b1cdbd2cSJim Jagielski             break;
2268*b1cdbd2cSJim Jagielski         case MID_GRID_TYPE:
2269*b1cdbd2cSJim Jagielski             switch( GetGridType() )
2270*b1cdbd2cSJim Jagielski             {
2271*b1cdbd2cSJim Jagielski                 case GRID_NONE:
2272*b1cdbd2cSJim Jagielski                     rVal <<= text::TextGridMode::NONE;
2273*b1cdbd2cSJim Jagielski                     break;
2274*b1cdbd2cSJim Jagielski                 case GRID_LINES_ONLY:
2275*b1cdbd2cSJim Jagielski                     rVal <<= text::TextGridMode::LINES;
2276*b1cdbd2cSJim Jagielski                     break;
2277*b1cdbd2cSJim Jagielski                 case GRID_LINES_CHARS:
2278*b1cdbd2cSJim Jagielski                     rVal <<= text::TextGridMode::LINES_AND_CHARS;
2279*b1cdbd2cSJim Jagielski                     break;
2280*b1cdbd2cSJim Jagielski                 default:
2281*b1cdbd2cSJim Jagielski                     DBG_ERROR("unknown SwTextGrid value");
2282*b1cdbd2cSJim Jagielski                     bRet = sal_False;
2283*b1cdbd2cSJim Jagielski                     break;
2284*b1cdbd2cSJim Jagielski             }
2285*b1cdbd2cSJim Jagielski             break;
2286*b1cdbd2cSJim Jagielski         case MID_GRID_SNAPTOCHARS:
2287*b1cdbd2cSJim Jagielski             rVal.setValue( &bSnapToChars, ::getBooleanCppuType() );
2288*b1cdbd2cSJim Jagielski             break;
2289*b1cdbd2cSJim Jagielski         case MID_GRID_STANDARD_MODE:
2290*b1cdbd2cSJim Jagielski 			{
2291*b1cdbd2cSJim Jagielski 				sal_Bool bStandardMode = !bSquaredMode;
2292*b1cdbd2cSJim Jagielski     	        rVal.setValue( &bStandardMode, ::getBooleanCppuType() );
2293*b1cdbd2cSJim Jagielski 			}
2294*b1cdbd2cSJim Jagielski             break;
2295*b1cdbd2cSJim Jagielski         default:
2296*b1cdbd2cSJim Jagielski             DBG_ERROR("Unknown SwTextGridItem member");
2297*b1cdbd2cSJim Jagielski             bRet = sal_False;
2298*b1cdbd2cSJim Jagielski             break;
2299*b1cdbd2cSJim Jagielski     }
2300*b1cdbd2cSJim Jagielski 
2301*b1cdbd2cSJim Jagielski 	return bRet;
2302*b1cdbd2cSJim Jagielski }
2303*b1cdbd2cSJim Jagielski 
PutValue(const uno::Any & rVal,sal_uInt8 nMemberId)2304*b1cdbd2cSJim Jagielski sal_Bool SwTextGridItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
2305*b1cdbd2cSJim Jagielski {
2306*b1cdbd2cSJim Jagielski 	sal_Bool bRet = sal_True;
2307*b1cdbd2cSJim Jagielski     switch( nMemberId & ~CONVERT_TWIPS )
2308*b1cdbd2cSJim Jagielski     {
2309*b1cdbd2cSJim Jagielski         case MID_GRID_COLOR:
2310*b1cdbd2cSJim Jagielski         {
2311*b1cdbd2cSJim Jagielski             sal_Int32 nTmp = 0;
2312*b1cdbd2cSJim Jagielski             bRet = (rVal >>= nTmp);
2313*b1cdbd2cSJim Jagielski             if( bRet )
2314*b1cdbd2cSJim Jagielski                 SetColor( Color(nTmp) );
2315*b1cdbd2cSJim Jagielski         }
2316*b1cdbd2cSJim Jagielski         break;
2317*b1cdbd2cSJim Jagielski         case MID_GRID_LINES:
2318*b1cdbd2cSJim Jagielski         {
2319*b1cdbd2cSJim Jagielski             sal_Int16 nTmp = 0;
2320*b1cdbd2cSJim Jagielski             bRet = (rVal >>= nTmp);
2321*b1cdbd2cSJim Jagielski             if( bRet && (nTmp >= 0) )
2322*b1cdbd2cSJim Jagielski                 SetLines( (sal_uInt16)nTmp );
2323*b1cdbd2cSJim Jagielski             else
2324*b1cdbd2cSJim Jagielski                 bRet = sal_False;
2325*b1cdbd2cSJim Jagielski         }
2326*b1cdbd2cSJim Jagielski         break;
2327*b1cdbd2cSJim Jagielski         case MID_GRID_RUBY_BELOW:
2328*b1cdbd2cSJim Jagielski             SetRubyTextBelow( *(sal_Bool*)rVal.getValue() );
2329*b1cdbd2cSJim Jagielski             break;
2330*b1cdbd2cSJim Jagielski         case MID_GRID_PRINT:
2331*b1cdbd2cSJim Jagielski             SetPrintGrid( *(sal_Bool*)rVal.getValue() );
2332*b1cdbd2cSJim Jagielski             break;
2333*b1cdbd2cSJim Jagielski         case MID_GRID_DISPLAY:
2334*b1cdbd2cSJim Jagielski             SetDisplayGrid( *(sal_Bool*)rVal.getValue() );
2335*b1cdbd2cSJim Jagielski             break;
2336*b1cdbd2cSJim Jagielski         case MID_GRID_BASEHEIGHT:
2337*b1cdbd2cSJim Jagielski         case MID_GRID_BASEWIDTH:
2338*b1cdbd2cSJim Jagielski         case MID_GRID_RUBYHEIGHT:
2339*b1cdbd2cSJim Jagielski         {
2340*b1cdbd2cSJim Jagielski             DBG_ASSERT( (nMemberId & CONVERT_TWIPS) != 0,
2341*b1cdbd2cSJim Jagielski                         "This value needs TWIPS-MM100 conversion" );
2342*b1cdbd2cSJim Jagielski             sal_Int32 nTmp = 0;
2343*b1cdbd2cSJim Jagielski             bRet = (rVal >>= nTmp);
2344*b1cdbd2cSJim Jagielski             nTmp = MM100_TO_TWIP( nTmp );
2345*b1cdbd2cSJim Jagielski             if( bRet && (nTmp >= 0) && ( nTmp <= USHRT_MAX) )
2346*b1cdbd2cSJim Jagielski                 if( (nMemberId & ~CONVERT_TWIPS) == MID_GRID_BASEHEIGHT )
2347*b1cdbd2cSJim Jagielski                     SetBaseHeight( (sal_uInt16)nTmp );
2348*b1cdbd2cSJim Jagielski                 else if( (nMemberId & ~CONVERT_TWIPS) == MID_GRID_BASEWIDTH )
2349*b1cdbd2cSJim Jagielski                     SetBaseWidth( (sal_uInt16)nTmp );
2350*b1cdbd2cSJim Jagielski                 else
2351*b1cdbd2cSJim Jagielski                     SetRubyHeight( (sal_uInt16)nTmp );
2352*b1cdbd2cSJim Jagielski             else
2353*b1cdbd2cSJim Jagielski                 bRet = sal_False;
2354*b1cdbd2cSJim Jagielski         }
2355*b1cdbd2cSJim Jagielski         break;
2356*b1cdbd2cSJim Jagielski         case MID_GRID_TYPE:
2357*b1cdbd2cSJim Jagielski         {
2358*b1cdbd2cSJim Jagielski             sal_Int16 nTmp = 0;
2359*b1cdbd2cSJim Jagielski             bRet = (rVal >>= nTmp);
2360*b1cdbd2cSJim Jagielski             if( bRet )
2361*b1cdbd2cSJim Jagielski             {
2362*b1cdbd2cSJim Jagielski                 switch( nTmp )
2363*b1cdbd2cSJim Jagielski                 {
2364*b1cdbd2cSJim Jagielski                     case text::TextGridMode::NONE:
2365*b1cdbd2cSJim Jagielski                         SetGridType( GRID_NONE );
2366*b1cdbd2cSJim Jagielski                         break;
2367*b1cdbd2cSJim Jagielski                     case text::TextGridMode::LINES:
2368*b1cdbd2cSJim Jagielski                         SetGridType( GRID_LINES_ONLY );
2369*b1cdbd2cSJim Jagielski                         break;
2370*b1cdbd2cSJim Jagielski                     case text::TextGridMode::LINES_AND_CHARS:
2371*b1cdbd2cSJim Jagielski                         SetGridType( GRID_LINES_CHARS );
2372*b1cdbd2cSJim Jagielski                         break;
2373*b1cdbd2cSJim Jagielski                     default:
2374*b1cdbd2cSJim Jagielski                         bRet = sal_False;
2375*b1cdbd2cSJim Jagielski                         break;
2376*b1cdbd2cSJim Jagielski                 }
2377*b1cdbd2cSJim Jagielski             }
2378*b1cdbd2cSJim Jagielski             break;
2379*b1cdbd2cSJim Jagielski 		}
2380*b1cdbd2cSJim Jagielski         case MID_GRID_SNAPTOCHARS:
2381*b1cdbd2cSJim Jagielski             SetSnapToChars( *(sal_Bool*)rVal.getValue() );
2382*b1cdbd2cSJim Jagielski             break;
2383*b1cdbd2cSJim Jagielski         case MID_GRID_STANDARD_MODE:
2384*b1cdbd2cSJim Jagielski 		{
2385*b1cdbd2cSJim Jagielski 			sal_Bool bStandard = *(sal_Bool*)rVal.getValue();
2386*b1cdbd2cSJim Jagielski            	SetSquaredMode( !bStandard );
2387*b1cdbd2cSJim Jagielski         	break;
2388*b1cdbd2cSJim Jagielski 		}
2389*b1cdbd2cSJim Jagielski         default:
2390*b1cdbd2cSJim Jagielski             DBG_ERROR("Unknown SwTextGridItem member");
2391*b1cdbd2cSJim Jagielski             bRet = sal_False;
2392*b1cdbd2cSJim Jagielski     }
2393*b1cdbd2cSJim Jagielski 
2394*b1cdbd2cSJim Jagielski     return bRet;
2395*b1cdbd2cSJim Jagielski }
2396*b1cdbd2cSJim Jagielski 
SwitchPaperMode(sal_Bool bNew)2397*b1cdbd2cSJim Jagielski void SwTextGridItem::SwitchPaperMode(sal_Bool bNew)
2398*b1cdbd2cSJim Jagielski {
2399*b1cdbd2cSJim Jagielski 	if( bNew == bSquaredMode )
2400*b1cdbd2cSJim Jagielski 	{
2401*b1cdbd2cSJim Jagielski 		//same paper mode, not switch
2402*b1cdbd2cSJim Jagielski 		return;
2403*b1cdbd2cSJim Jagielski 	}
2404*b1cdbd2cSJim Jagielski 
2405*b1cdbd2cSJim Jagielski 	// use default value when grid is disable
2406*b1cdbd2cSJim Jagielski 	if( eGridType == GRID_NONE )
2407*b1cdbd2cSJim Jagielski 	{
2408*b1cdbd2cSJim Jagielski 		bSquaredMode = bNew;
2409*b1cdbd2cSJim Jagielski 		Init();
2410*b1cdbd2cSJim Jagielski 		return;
2411*b1cdbd2cSJim Jagielski 	}
2412*b1cdbd2cSJim Jagielski 
2413*b1cdbd2cSJim Jagielski 	if( bSquaredMode )
2414*b1cdbd2cSJim Jagielski 	{
2415*b1cdbd2cSJim Jagielski 		//switch from "squared mode" to "standard mode"
2416*b1cdbd2cSJim Jagielski 		nBaseWidth = nBaseHeight;
2417*b1cdbd2cSJim Jagielski 		nBaseHeight = nBaseHeight + nRubyHeight;
2418*b1cdbd2cSJim Jagielski 		nRubyHeight = 0;
2419*b1cdbd2cSJim Jagielski 	}
2420*b1cdbd2cSJim Jagielski 	else
2421*b1cdbd2cSJim Jagielski 	{
2422*b1cdbd2cSJim Jagielski 		//switch from "standard mode" to "squared mode"
2423*b1cdbd2cSJim Jagielski 		nRubyHeight = nBaseHeight/3;
2424*b1cdbd2cSJim Jagielski 		nBaseHeight = nBaseHeight - nRubyHeight;
2425*b1cdbd2cSJim Jagielski 		nBaseWidth = nBaseHeight;
2426*b1cdbd2cSJim Jagielski 	}
2427*b1cdbd2cSJim Jagielski 	bSquaredMode = !bSquaredMode;
2428*b1cdbd2cSJim Jagielski }
2429*b1cdbd2cSJim Jagielski 
Init()2430*b1cdbd2cSJim Jagielski void SwTextGridItem::Init()
2431*b1cdbd2cSJim Jagielski {
2432*b1cdbd2cSJim Jagielski 	if( bSquaredMode )
2433*b1cdbd2cSJim Jagielski 	{
2434*b1cdbd2cSJim Jagielski 		nLines = 20;
2435*b1cdbd2cSJim Jagielski 		nBaseHeight = 400;
2436*b1cdbd2cSJim Jagielski 		nRubyHeight = 200;
2437*b1cdbd2cSJim Jagielski 		eGridType = GRID_NONE;
2438*b1cdbd2cSJim Jagielski 		bRubyTextBelow = 0;
2439*b1cdbd2cSJim Jagielski 		bPrintGrid = 1;
2440*b1cdbd2cSJim Jagielski 		bDisplayGrid = 1;
2441*b1cdbd2cSJim Jagielski 		bSnapToChars = 1;
2442*b1cdbd2cSJim Jagielski 		nBaseWidth = 400;
2443*b1cdbd2cSJim Jagielski 	}
2444*b1cdbd2cSJim Jagielski 	else
2445*b1cdbd2cSJim Jagielski 	{
2446*b1cdbd2cSJim Jagielski 		nLines = 44;
2447*b1cdbd2cSJim Jagielski 		nBaseHeight = 312;
2448*b1cdbd2cSJim Jagielski 		nRubyHeight = 0;
2449*b1cdbd2cSJim Jagielski 		eGridType = GRID_NONE;
2450*b1cdbd2cSJim Jagielski 		bRubyTextBelow = 0;
2451*b1cdbd2cSJim Jagielski 		bPrintGrid = 1;
2452*b1cdbd2cSJim Jagielski 		bDisplayGrid = 1;
2453*b1cdbd2cSJim Jagielski 		nBaseWidth = 210;
2454*b1cdbd2cSJim Jagielski 		bSnapToChars = 1;
2455*b1cdbd2cSJim Jagielski 
2456*b1cdbd2cSJim Jagielski 		//default grid type is line only in CJK env
2457*b1cdbd2cSJim Jagielski 		//disable this function due to type area change
2458*b1cdbd2cSJim Jagielski 		//if grid type change.
2459*b1cdbd2cSJim Jagielski 		//if(SvtCJKOptions().IsAsianTypographyEnabled())
2460*b1cdbd2cSJim Jagielski 		//{
2461*b1cdbd2cSJim Jagielski 		//	bDisplayGrid = 0;
2462*b1cdbd2cSJim Jagielski 		//	eGridType = GRID_LINES_ONLY;
2463*b1cdbd2cSJim Jagielski 		//}
2464*b1cdbd2cSJim Jagielski 	}
2465*b1cdbd2cSJim Jagielski }
2466*b1cdbd2cSJim Jagielski // class SwHeaderAndFooterEatSpacingItem
2467*b1cdbd2cSJim Jagielski 
Clone(SfxItemPool *) const2468*b1cdbd2cSJim Jagielski SfxPoolItem* SwHeaderAndFooterEatSpacingItem::Clone( SfxItemPool* ) const
2469*b1cdbd2cSJim Jagielski {
2470*b1cdbd2cSJim Jagielski     return new SwHeaderAndFooterEatSpacingItem( Which(), GetValue() );
2471*b1cdbd2cSJim Jagielski }
2472*b1cdbd2cSJim Jagielski 
2473*b1cdbd2cSJim Jagielski 
2474*b1cdbd2cSJim Jagielski //  class SwFrmFmt
2475*b1cdbd2cSJim Jagielski //	Implementierung teilweise inline im hxx
2476*b1cdbd2cSJim Jagielski 
2477*b1cdbd2cSJim Jagielski TYPEINIT1( SwFrmFmt, SwFmt );
2478*b1cdbd2cSJim Jagielski IMPL_FIXEDMEMPOOL_NEWDEL_DLL( SwFrmFmt, 20, 20 )
2479*b1cdbd2cSJim Jagielski 
Modify(const SfxPoolItem * pOld,const SfxPoolItem * pNew)2480*b1cdbd2cSJim Jagielski void SwFrmFmt::Modify( const SfxPoolItem* pOld, const SfxPoolItem* pNew )
2481*b1cdbd2cSJim Jagielski {
2482*b1cdbd2cSJim Jagielski 	SwFmtHeader *pH = 0;
2483*b1cdbd2cSJim Jagielski 	SwFmtFooter *pF = 0;
2484*b1cdbd2cSJim Jagielski 
2485*b1cdbd2cSJim Jagielski 	sal_uInt16 nWhich = pNew ? pNew->Which() : 0;
2486*b1cdbd2cSJim Jagielski 
2487*b1cdbd2cSJim Jagielski 	if( RES_ATTRSET_CHG == nWhich )
2488*b1cdbd2cSJim Jagielski 	{
2489*b1cdbd2cSJim Jagielski 		((SwAttrSetChg*)pNew)->GetChgSet()->GetItemState(
2490*b1cdbd2cSJim Jagielski 			RES_HEADER, sal_False, (const SfxPoolItem**)&pH );
2491*b1cdbd2cSJim Jagielski 		((SwAttrSetChg*)pNew)->GetChgSet()->GetItemState(
2492*b1cdbd2cSJim Jagielski 			RES_FOOTER, sal_False, (const SfxPoolItem**)&pF );
2493*b1cdbd2cSJim Jagielski 	}
2494*b1cdbd2cSJim Jagielski 	else if( RES_HEADER == nWhich )
2495*b1cdbd2cSJim Jagielski 		pH = (SwFmtHeader*)pNew;
2496*b1cdbd2cSJim Jagielski 	else if( RES_FOOTER == nWhich )
2497*b1cdbd2cSJim Jagielski 		pF = (SwFmtFooter*)pNew;
2498*b1cdbd2cSJim Jagielski 
2499*b1cdbd2cSJim Jagielski 	if( pH && pH->IsActive() && !pH->GetHeaderFmt() )
2500*b1cdbd2cSJim Jagielski 	{	//Hat er keinen, mach ich ihm einen
2501*b1cdbd2cSJim Jagielski         SwFrmFmt *pFmt = GetDoc()->MakeLayoutFmt( RND_STD_HEADER, 0 );
2502*b1cdbd2cSJim Jagielski         pH->RegisterToFormat( *pFmt );
2503*b1cdbd2cSJim Jagielski 	}
2504*b1cdbd2cSJim Jagielski 
2505*b1cdbd2cSJim Jagielski 	if( pF && pF->IsActive() && !pF->GetFooterFmt() )
2506*b1cdbd2cSJim Jagielski 	{	//Hat er keinen, mach ich ihm einen
2507*b1cdbd2cSJim Jagielski         SwFrmFmt *pFmt = GetDoc()->MakeLayoutFmt( RND_STD_FOOTER, 0 );
2508*b1cdbd2cSJim Jagielski         pF->RegisterToFormat( *pFmt );
2509*b1cdbd2cSJim Jagielski 	}
2510*b1cdbd2cSJim Jagielski 
2511*b1cdbd2cSJim Jagielski 	// MIB 24.3.98: Modify der Basisklasse muss immer gerufen werden, z.B.
2512*b1cdbd2cSJim Jagielski 	// wegen RESET_FMTWRITTEN.
2513*b1cdbd2cSJim Jagielski //	if ( GetDepends() )
2514*b1cdbd2cSJim Jagielski 		SwFmt::Modify( pOld, pNew );
2515*b1cdbd2cSJim Jagielski 
2516*b1cdbd2cSJim Jagielski     if (pOld && (RES_REMOVE_UNO_OBJECT == pOld->Which()))
2517*b1cdbd2cSJim Jagielski     {   // invalidate cached uno object
2518*b1cdbd2cSJim Jagielski         SetXObject(uno::Reference<uno::XInterface>(0));
2519*b1cdbd2cSJim Jagielski     }
2520*b1cdbd2cSJim Jagielski }
2521*b1cdbd2cSJim Jagielski 
RegisterToFormat(SwFmt & rFmt)2522*b1cdbd2cSJim Jagielski void SwFrmFmt::RegisterToFormat( SwFmt& rFmt )
2523*b1cdbd2cSJim Jagielski {
2524*b1cdbd2cSJim Jagielski     rFmt.Add( this );
2525*b1cdbd2cSJim Jagielski }
2526*b1cdbd2cSJim Jagielski 
2527*b1cdbd2cSJim Jagielski //Vernichtet alle Frms, die in aDepend angemeldet sind.
2528*b1cdbd2cSJim Jagielski 
DelFrms()2529*b1cdbd2cSJim Jagielski void SwFrmFmt::DelFrms()
2530*b1cdbd2cSJim Jagielski {
2531*b1cdbd2cSJim Jagielski 	SwIterator<SwFrm,SwFmt> aIter( *this );
2532*b1cdbd2cSJim Jagielski 	SwFrm * pLast = aIter.First();
2533*b1cdbd2cSJim Jagielski 	if( pLast )
2534*b1cdbd2cSJim Jagielski 		do {
2535*b1cdbd2cSJim Jagielski 				pLast->Cut();
2536*b1cdbd2cSJim Jagielski 				delete pLast;
2537*b1cdbd2cSJim Jagielski 		} while( 0 != ( pLast = aIter.Next() ));
2538*b1cdbd2cSJim Jagielski }
2539*b1cdbd2cSJim Jagielski 
MakeFrms()2540*b1cdbd2cSJim Jagielski void SwFrmFmt::MakeFrms()
2541*b1cdbd2cSJim Jagielski {
2542*b1cdbd2cSJim Jagielski 	ASSERT( !this, "Sorry not implemented." );
2543*b1cdbd2cSJim Jagielski }
2544*b1cdbd2cSJim Jagielski 
2545*b1cdbd2cSJim Jagielski 
2546*b1cdbd2cSJim Jagielski 
FindLayoutRect(const sal_Bool bPrtArea,const Point * pPoint,const sal_Bool bCalcFrm) const2547*b1cdbd2cSJim Jagielski SwRect SwFrmFmt::FindLayoutRect( const sal_Bool bPrtArea, const Point* pPoint,
2548*b1cdbd2cSJim Jagielski 								 const sal_Bool bCalcFrm ) const
2549*b1cdbd2cSJim Jagielski {
2550*b1cdbd2cSJim Jagielski 	SwRect aRet;
2551*b1cdbd2cSJim Jagielski 	SwFrm *pFrm = 0;
2552*b1cdbd2cSJim Jagielski 	if( ISA( SwSectionFmt ) )
2553*b1cdbd2cSJim Jagielski 	{
2554*b1cdbd2cSJim Jagielski         // dann den frame::Frame per Node2Layout besorgen
2555*b1cdbd2cSJim Jagielski 		SwSectionNode* pSectNd = ((SwSectionFmt*)this)->GetSectionNode();
2556*b1cdbd2cSJim Jagielski 		if( pSectNd )
2557*b1cdbd2cSJim Jagielski 		{
2558*b1cdbd2cSJim Jagielski 			SwNode2Layout aTmp( *pSectNd, pSectNd->GetIndex() - 1 );
2559*b1cdbd2cSJim Jagielski 			pFrm = aTmp.NextFrm();
2560*b1cdbd2cSJim Jagielski 
2561*b1cdbd2cSJim Jagielski 			if( pFrm && !pFrm->KnowsFormat(*this) )
2562*b1cdbd2cSJim Jagielski 			{
2563*b1cdbd2cSJim Jagielski                 // die Section hat keinen eigenen frame::Frame, also falls
2564*b1cdbd2cSJim Jagielski 				// jemand die tatsaechliche Groe?e braucht, so muss das
2565*b1cdbd2cSJim Jagielski 				// noch implementier werden, in dem sich vom Ende noch
2566*b1cdbd2cSJim Jagielski                 // der entsprechende frame::Frame besorgt wird.
2567*b1cdbd2cSJim Jagielski 				// PROBLEM: was passiert bei SectionFrames, die auf unter-
2568*b1cdbd2cSJim Jagielski 				//			schiedlichen Seiten stehen??
2569*b1cdbd2cSJim Jagielski 				if( bPrtArea )
2570*b1cdbd2cSJim Jagielski 					aRet = pFrm->Prt();
2571*b1cdbd2cSJim Jagielski 				else
2572*b1cdbd2cSJim Jagielski 				{
2573*b1cdbd2cSJim Jagielski 					aRet = pFrm->Frm();
2574*b1cdbd2cSJim Jagielski 					--aRet.Pos().Y();
2575*b1cdbd2cSJim Jagielski 				}
2576*b1cdbd2cSJim Jagielski 				pFrm = 0;		// das Rect ist ja jetzt fertig
2577*b1cdbd2cSJim Jagielski 			}
2578*b1cdbd2cSJim Jagielski 		}
2579*b1cdbd2cSJim Jagielski 	}
2580*b1cdbd2cSJim Jagielski 	else
2581*b1cdbd2cSJim Jagielski 	{
2582*b1cdbd2cSJim Jagielski 		sal_uInt16 nFrmType = RES_FLYFRMFMT == Which() ? FRM_FLY : USHRT_MAX;
2583*b1cdbd2cSJim Jagielski 		pFrm = ::GetFrmOfModify( 0, *(SwModify*)this, nFrmType, pPoint,
2584*b1cdbd2cSJim Jagielski 									0, bCalcFrm );
2585*b1cdbd2cSJim Jagielski 	}
2586*b1cdbd2cSJim Jagielski 
2587*b1cdbd2cSJim Jagielski 	if( pFrm )
2588*b1cdbd2cSJim Jagielski 	{
2589*b1cdbd2cSJim Jagielski 		if( bPrtArea )
2590*b1cdbd2cSJim Jagielski 			aRet = pFrm->Prt();
2591*b1cdbd2cSJim Jagielski 		else
2592*b1cdbd2cSJim Jagielski 			aRet = pFrm->Frm();
2593*b1cdbd2cSJim Jagielski 	}
2594*b1cdbd2cSJim Jagielski 	return aRet;
2595*b1cdbd2cSJim Jagielski }
2596*b1cdbd2cSJim Jagielski 
FindContactObj()2597*b1cdbd2cSJim Jagielski SwContact* SwFrmFmt::FindContactObj()
2598*b1cdbd2cSJim Jagielski {
2599*b1cdbd2cSJim Jagielski 	return SwIterator<SwContact,SwFmt>::FirstElement( *this );
2600*b1cdbd2cSJim Jagielski }
2601*b1cdbd2cSJim Jagielski 
FindSdrObject()2602*b1cdbd2cSJim Jagielski SdrObject* SwFrmFmt::FindSdrObject()
2603*b1cdbd2cSJim Jagielski {
2604*b1cdbd2cSJim Jagielski     // --> OD 2005-01-06 #i30669# - use method <FindContactObj()> instead of
2605*b1cdbd2cSJim Jagielski     // duplicated code.
2606*b1cdbd2cSJim Jagielski     SwContact* pFoundContact = FindContactObj();
2607*b1cdbd2cSJim Jagielski     return pFoundContact ? pFoundContact->GetMaster() : 0;
2608*b1cdbd2cSJim Jagielski     // <--
2609*b1cdbd2cSJim Jagielski }
2610*b1cdbd2cSJim Jagielski 
FindRealSdrObject()2611*b1cdbd2cSJim Jagielski SdrObject* SwFrmFmt::FindRealSdrObject()
2612*b1cdbd2cSJim Jagielski {
2613*b1cdbd2cSJim Jagielski 	if( RES_FLYFRMFMT == Which() )
2614*b1cdbd2cSJim Jagielski 	{
2615*b1cdbd2cSJim Jagielski 		Point aNullPt;
2616*b1cdbd2cSJim Jagielski 		SwFlyFrm* pFly = (SwFlyFrm*)::GetFrmOfModify( 0, *this, FRM_FLY,
2617*b1cdbd2cSJim Jagielski 													&aNullPt, 0, sal_False );
2618*b1cdbd2cSJim Jagielski 		return pFly ? pFly->GetVirtDrawObj() : 0;
2619*b1cdbd2cSJim Jagielski 	}
2620*b1cdbd2cSJim Jagielski 	return FindSdrObject();
2621*b1cdbd2cSJim Jagielski }
2622*b1cdbd2cSJim Jagielski 
2623*b1cdbd2cSJim Jagielski 
IsLowerOf(const SwFrmFmt & rFmt) const2624*b1cdbd2cSJim Jagielski sal_Bool SwFrmFmt::IsLowerOf( const SwFrmFmt& rFmt ) const
2625*b1cdbd2cSJim Jagielski {
2626*b1cdbd2cSJim Jagielski 	//Auch eine Verkettung von Innen nach aussen oder von aussen
2627*b1cdbd2cSJim Jagielski 	//nach innen ist nicht zulaessig.
2628*b1cdbd2cSJim Jagielski 	SwFlyFrm *pSFly = SwIterator<SwFlyFrm,SwFmt>::FirstElement(*this);
2629*b1cdbd2cSJim Jagielski 	if( pSFly )
2630*b1cdbd2cSJim Jagielski 	{
2631*b1cdbd2cSJim Jagielski 		SwFlyFrm *pAskFly = SwIterator<SwFlyFrm,SwFmt>::FirstElement(rFmt);
2632*b1cdbd2cSJim Jagielski 		if( pAskFly )
2633*b1cdbd2cSJim Jagielski             return pSFly->IsLowerOf( pAskFly );
2634*b1cdbd2cSJim Jagielski 	}
2635*b1cdbd2cSJim Jagielski 
2636*b1cdbd2cSJim Jagielski 	// dann mal ueber die Node-Positionen versuchen
2637*b1cdbd2cSJim Jagielski 	const SwFmtAnchor* pAnchor = &rFmt.GetAnchor();
2638*b1cdbd2cSJim Jagielski     if ((FLY_AT_PAGE != pAnchor->GetAnchorId()) && pAnchor->GetCntntAnchor())
2639*b1cdbd2cSJim Jagielski     {
2640*b1cdbd2cSJim Jagielski 		const SwSpzFrmFmts& rFmts = *GetDoc()->GetSpzFrmFmts();
2641*b1cdbd2cSJim Jagielski 		const SwNode* pFlyNd = pAnchor->GetCntntAnchor()->nNode.GetNode().
2642*b1cdbd2cSJim Jagielski 								FindFlyStartNode();
2643*b1cdbd2cSJim Jagielski 		while( pFlyNd )
2644*b1cdbd2cSJim Jagielski 		{
2645*b1cdbd2cSJim Jagielski 			// dann ueber den Anker nach oben "hangeln"
2646*b1cdbd2cSJim Jagielski 			sal_uInt16 n;
2647*b1cdbd2cSJim Jagielski 			for( n = 0; n < rFmts.Count(); ++n )
2648*b1cdbd2cSJim Jagielski 			{
2649*b1cdbd2cSJim Jagielski 				const SwFrmFmt* pFmt = rFmts[ n ];
2650*b1cdbd2cSJim Jagielski 				const SwNodeIndex* pIdx = pFmt->GetCntnt().GetCntntIdx();
2651*b1cdbd2cSJim Jagielski 				if( pIdx && pFlyNd == &pIdx->GetNode() )
2652*b1cdbd2cSJim Jagielski 				{
2653*b1cdbd2cSJim Jagielski 					if( pFmt == this )
2654*b1cdbd2cSJim Jagielski 						return sal_True;
2655*b1cdbd2cSJim Jagielski 
2656*b1cdbd2cSJim Jagielski 					pAnchor = &pFmt->GetAnchor();
2657*b1cdbd2cSJim Jagielski                     if ((FLY_AT_PAGE == pAnchor->GetAnchorId()) ||
2658*b1cdbd2cSJim Jagielski                         !pAnchor->GetCntntAnchor() )
2659*b1cdbd2cSJim Jagielski                     {
2660*b1cdbd2cSJim Jagielski                         return sal_False;
2661*b1cdbd2cSJim Jagielski                     }
2662*b1cdbd2cSJim Jagielski 
2663*b1cdbd2cSJim Jagielski 					pFlyNd = pAnchor->GetCntntAnchor()->nNode.GetNode().
2664*b1cdbd2cSJim Jagielski 								FindFlyStartNode();
2665*b1cdbd2cSJim Jagielski 					break;
2666*b1cdbd2cSJim Jagielski 				}
2667*b1cdbd2cSJim Jagielski 			}
2668*b1cdbd2cSJim Jagielski 			if( n >= rFmts.Count() )
2669*b1cdbd2cSJim Jagielski 			{
2670*b1cdbd2cSJim Jagielski 				ASSERT( !this, "Fly-Section aber kein Format gefunden" );
2671*b1cdbd2cSJim Jagielski 				return sal_False;
2672*b1cdbd2cSJim Jagielski 			}
2673*b1cdbd2cSJim Jagielski 		}
2674*b1cdbd2cSJim Jagielski 	}
2675*b1cdbd2cSJim Jagielski 	return sal_False;
2676*b1cdbd2cSJim Jagielski }
2677*b1cdbd2cSJim Jagielski 
2678*b1cdbd2cSJim Jagielski // --> OD 2004-07-27 #i31698#
GetLayoutDir() const2679*b1cdbd2cSJim Jagielski SwFrmFmt::tLayoutDir SwFrmFmt::GetLayoutDir() const
2680*b1cdbd2cSJim Jagielski {
2681*b1cdbd2cSJim Jagielski     return SwFrmFmt::HORI_L2R;
2682*b1cdbd2cSJim Jagielski }
2683*b1cdbd2cSJim Jagielski 
SetLayoutDir(const SwFrmFmt::tLayoutDir)2684*b1cdbd2cSJim Jagielski void SwFrmFmt::SetLayoutDir( const SwFrmFmt::tLayoutDir )
2685*b1cdbd2cSJim Jagielski {
2686*b1cdbd2cSJim Jagielski     // empty body, because default implementation does nothing
2687*b1cdbd2cSJim Jagielski }
2688*b1cdbd2cSJim Jagielski // <--
2689*b1cdbd2cSJim Jagielski 
2690*b1cdbd2cSJim Jagielski // --> OD 2004-08-06 #i28749#
GetPositionLayoutDir() const2691*b1cdbd2cSJim Jagielski sal_Int16 SwFrmFmt::GetPositionLayoutDir() const
2692*b1cdbd2cSJim Jagielski {
2693*b1cdbd2cSJim Jagielski     return text::PositionLayoutDir::PositionInLayoutDirOfAnchor;
2694*b1cdbd2cSJim Jagielski }
SetPositionLayoutDir(const sal_Int16)2695*b1cdbd2cSJim Jagielski void SwFrmFmt::SetPositionLayoutDir( const sal_Int16 )
2696*b1cdbd2cSJim Jagielski {
2697*b1cdbd2cSJim Jagielski     // empty body, because default implementation does nothing
2698*b1cdbd2cSJim Jagielski }
2699*b1cdbd2cSJim Jagielski // <--
GetDescription() const2700*b1cdbd2cSJim Jagielski String SwFrmFmt::GetDescription() const
2701*b1cdbd2cSJim Jagielski {
2702*b1cdbd2cSJim Jagielski     return SW_RES(STR_FRAME);
2703*b1cdbd2cSJim Jagielski }
2704*b1cdbd2cSJim Jagielski 
2705*b1cdbd2cSJim Jagielski //	class SwFlyFrmFmt
2706*b1cdbd2cSJim Jagielski //	Implementierung teilweise inline im hxx
2707*b1cdbd2cSJim Jagielski 
2708*b1cdbd2cSJim Jagielski TYPEINIT1( SwFlyFrmFmt, SwFrmFmt );
2709*b1cdbd2cSJim Jagielski IMPL_FIXEDMEMPOOL_NEWDEL( SwFlyFrmFmt,	10, 10 )
2710*b1cdbd2cSJim Jagielski 
~SwFlyFrmFmt()2711*b1cdbd2cSJim Jagielski SwFlyFrmFmt::~SwFlyFrmFmt()
2712*b1cdbd2cSJim Jagielski {
2713*b1cdbd2cSJim Jagielski 	SwIterator<SwFlyFrm,SwFmt> aIter( *this );
2714*b1cdbd2cSJim Jagielski 	SwFlyFrm * pLast = aIter.First();
2715*b1cdbd2cSJim Jagielski 	if( pLast )
2716*b1cdbd2cSJim Jagielski 		do {
2717*b1cdbd2cSJim Jagielski 				delete pLast;
2718*b1cdbd2cSJim Jagielski 		} while( 0 != ( pLast = aIter.Next() ));
2719*b1cdbd2cSJim Jagielski 
2720*b1cdbd2cSJim Jagielski 	SwIterator<SwFlyDrawContact,SwFmt> a2ndIter( *this );
2721*b1cdbd2cSJim Jagielski 	SwFlyDrawContact* pC = a2ndIter.First();
2722*b1cdbd2cSJim Jagielski 	if( pC )
2723*b1cdbd2cSJim Jagielski 		do {
2724*b1cdbd2cSJim Jagielski 				delete pC;
2725*b1cdbd2cSJim Jagielski 
2726*b1cdbd2cSJim Jagielski 		} while( 0 != ( pC = a2ndIter.Next() ));
2727*b1cdbd2cSJim Jagielski }
2728*b1cdbd2cSJim Jagielski 
2729*b1cdbd2cSJim Jagielski //Erzeugen der Frms wenn das Format einen Absatzgebundenen Rahmen beschreibt.
2730*b1cdbd2cSJim Jagielski //MA: 14. Feb. 94, Erzeugen der Frms auch fuer Seitengebundene Rahmen.
2731*b1cdbd2cSJim Jagielski 
MakeFrms()2732*b1cdbd2cSJim Jagielski void SwFlyFrmFmt::MakeFrms()
2733*b1cdbd2cSJim Jagielski {
2734*b1cdbd2cSJim Jagielski 	// gibts ueberhaupt ein Layout ??
2735*b1cdbd2cSJim Jagielski 	if( !GetDoc()->GetCurrentViewShell() )
2736*b1cdbd2cSJim Jagielski 		return;	//swmod 071108//swmod 071225
2737*b1cdbd2cSJim Jagielski 
2738*b1cdbd2cSJim Jagielski 	SwModify *pModify = 0;
2739*b1cdbd2cSJim Jagielski     // OD 24.07.2003 #111032# - create local copy of anchor attribute for possible changes.
2740*b1cdbd2cSJim Jagielski     SwFmtAnchor aAnchorAttr( GetAnchor() );
2741*b1cdbd2cSJim Jagielski     switch( aAnchorAttr.GetAnchorId() )
2742*b1cdbd2cSJim Jagielski     {
2743*b1cdbd2cSJim Jagielski     case FLY_AS_CHAR:
2744*b1cdbd2cSJim Jagielski     case FLY_AT_PARA:
2745*b1cdbd2cSJim Jagielski     case FLY_AT_CHAR:
2746*b1cdbd2cSJim Jagielski         if( aAnchorAttr.GetCntntAnchor() )
2747*b1cdbd2cSJim Jagielski         {
2748*b1cdbd2cSJim Jagielski             pModify = aAnchorAttr.GetCntntAnchor()->nNode.GetNode().GetCntntNode();
2749*b1cdbd2cSJim Jagielski         }
2750*b1cdbd2cSJim Jagielski 		break;
2751*b1cdbd2cSJim Jagielski 
2752*b1cdbd2cSJim Jagielski 	case FLY_AT_FLY:
2753*b1cdbd2cSJim Jagielski         if( aAnchorAttr.GetCntntAnchor() )
2754*b1cdbd2cSJim Jagielski 		{
2755*b1cdbd2cSJim Jagielski 			//Erst einmal ueber den Inhalt suchen, weil konstant schnell. Kann
2756*b1cdbd2cSJim Jagielski 			//Bei verketteten Rahmen aber auch schief gehen, weil dann evtl.
2757*b1cdbd2cSJim Jagielski             //niemals ein frame::Frame zu dem Inhalt existiert. Dann muss leider noch
2758*b1cdbd2cSJim Jagielski 			//die Suche vom StartNode zum FrameFormat sein.
2759*b1cdbd2cSJim Jagielski             SwNodeIndex aIdx( aAnchorAttr.GetCntntAnchor()->nNode );
2760*b1cdbd2cSJim Jagielski 			SwCntntNode *pCNd = GetDoc()->GetNodes().GoNext( &aIdx );
2761*b1cdbd2cSJim Jagielski             // --> OD 2009-12-28 #i105535#
2762*b1cdbd2cSJim Jagielski             if ( pCNd == 0 )
2763*b1cdbd2cSJim Jagielski             {
2764*b1cdbd2cSJim Jagielski                 pCNd = aAnchorAttr.GetCntntAnchor()->nNode.GetNode().GetCntntNode();
2765*b1cdbd2cSJim Jagielski             }
2766*b1cdbd2cSJim Jagielski             if ( pCNd )
2767*b1cdbd2cSJim Jagielski             // <--
2768*b1cdbd2cSJim Jagielski             {
2769*b1cdbd2cSJim Jagielski                 if( SwIterator<SwFrm,SwCntntNode>::FirstElement( *pCNd ) )
2770*b1cdbd2cSJim Jagielski                 {
2771*b1cdbd2cSJim Jagielski                     pModify = pCNd;
2772*b1cdbd2cSJim Jagielski                 }
2773*b1cdbd2cSJim Jagielski             }
2774*b1cdbd2cSJim Jagielski             // --> OD 2009-12-28 #i105535#
2775*b1cdbd2cSJim Jagielski             if ( pModify == 0 )
2776*b1cdbd2cSJim Jagielski             // <--
2777*b1cdbd2cSJim Jagielski             {
2778*b1cdbd2cSJim Jagielski                 const SwNodeIndex &rIdx = aAnchorAttr.GetCntntAnchor()->nNode;
2779*b1cdbd2cSJim Jagielski 				SwSpzFrmFmts& rFmts = *GetDoc()->GetSpzFrmFmts();
2780*b1cdbd2cSJim Jagielski 				for( sal_uInt16 i = 0; i < rFmts.Count(); ++i )
2781*b1cdbd2cSJim Jagielski 				{
2782*b1cdbd2cSJim Jagielski 					SwFrmFmt* pFlyFmt = rFmts[i];
2783*b1cdbd2cSJim Jagielski 					if( pFlyFmt->GetCntnt().GetCntntIdx() &&
2784*b1cdbd2cSJim Jagielski 						rIdx == *pFlyFmt->GetCntnt().GetCntntIdx() )
2785*b1cdbd2cSJim Jagielski 					{
2786*b1cdbd2cSJim Jagielski 						pModify = pFlyFmt;
2787*b1cdbd2cSJim Jagielski 						break;
2788*b1cdbd2cSJim Jagielski 					}
2789*b1cdbd2cSJim Jagielski 				}
2790*b1cdbd2cSJim Jagielski 			}
2791*b1cdbd2cSJim Jagielski 		}
2792*b1cdbd2cSJim Jagielski 		break;
2793*b1cdbd2cSJim Jagielski 
2794*b1cdbd2cSJim Jagielski     case FLY_AT_PAGE:
2795*b1cdbd2cSJim Jagielski         {
2796*b1cdbd2cSJim Jagielski             sal_uInt16 nPgNum = aAnchorAttr.GetPageNum();
2797*b1cdbd2cSJim Jagielski             SwPageFrm *pPage = (SwPageFrm*)GetDoc()->GetCurrentLayout()->Lower();	//swmod 080218
2798*b1cdbd2cSJim Jagielski             if( nPgNum == 0 && aAnchorAttr.GetCntntAnchor() )
2799*b1cdbd2cSJim Jagielski             {
2800*b1cdbd2cSJim Jagielski                 SwCntntNode *pCNd = aAnchorAttr.GetCntntAnchor()->nNode.GetNode().GetCntntNode();
2801*b1cdbd2cSJim Jagielski                 SwIterator<SwFrm,SwCntntNode> aIter( *pCNd );
2802*b1cdbd2cSJim Jagielski                 for ( SwFrm* pFrm = aIter.First(); pFrm != NULL; pFrm = aIter.Next() )
2803*b1cdbd2cSJim Jagielski                 {
2804*b1cdbd2cSJim Jagielski                     pPage = pFrm->FindPageFrm();
2805*b1cdbd2cSJim Jagielski                     if( pPage )
2806*b1cdbd2cSJim Jagielski                     {
2807*b1cdbd2cSJim Jagielski                         nPgNum = pPage->GetPhyPageNum();
2808*b1cdbd2cSJim Jagielski                         aAnchorAttr.SetPageNum( nPgNum );
2809*b1cdbd2cSJim Jagielski                         aAnchorAttr.SetAnchor( 0 );
2810*b1cdbd2cSJim Jagielski                         SetFmtAttr( aAnchorAttr );
2811*b1cdbd2cSJim Jagielski                         break;
2812*b1cdbd2cSJim Jagielski                     }
2813*b1cdbd2cSJim Jagielski                 }
2814*b1cdbd2cSJim Jagielski             }
2815*b1cdbd2cSJim Jagielski             while ( pPage )
2816*b1cdbd2cSJim Jagielski             {
2817*b1cdbd2cSJim Jagielski                 if ( pPage->GetPhyPageNum() == nPgNum )
2818*b1cdbd2cSJim Jagielski                 {
2819*b1cdbd2cSJim Jagielski                     pPage->PlaceFly( 0, this );
2820*b1cdbd2cSJim Jagielski                     break;
2821*b1cdbd2cSJim Jagielski                 }
2822*b1cdbd2cSJim Jagielski                 pPage = (SwPageFrm*)pPage->GetNext();
2823*b1cdbd2cSJim Jagielski             }
2824*b1cdbd2cSJim Jagielski         }
2825*b1cdbd2cSJim Jagielski         break;
2826*b1cdbd2cSJim Jagielski     default:
2827*b1cdbd2cSJim Jagielski         break;
2828*b1cdbd2cSJim Jagielski 	}
2829*b1cdbd2cSJim Jagielski 
2830*b1cdbd2cSJim Jagielski 	if( pModify )
2831*b1cdbd2cSJim Jagielski 	{
2832*b1cdbd2cSJim Jagielski         SwIterator<SwFrm,SwModify> aIter( *pModify );
2833*b1cdbd2cSJim Jagielski 		for( SwFrm *pFrm = aIter.First(); pFrm; pFrm = aIter.Next() )
2834*b1cdbd2cSJim Jagielski 		{
2835*b1cdbd2cSJim Jagielski 			sal_Bool bAdd = !pFrm->IsCntntFrm() ||
2836*b1cdbd2cSJim Jagielski 							!((SwCntntFrm*)pFrm)->IsFollow();
2837*b1cdbd2cSJim Jagielski 
2838*b1cdbd2cSJim Jagielski             if ( FLY_AT_FLY == aAnchorAttr.GetAnchorId() && !pFrm->IsFlyFrm() )
2839*b1cdbd2cSJim Jagielski             {
2840*b1cdbd2cSJim Jagielski                 // --> OD 2009-12-28 #i105535#
2841*b1cdbd2cSJim Jagielski                 // fallback to anchor type at-paragraph, if no fly frame is found.
2842*b1cdbd2cSJim Jagielski //                pFrm = pFrm->FindFlyFrm();
2843*b1cdbd2cSJim Jagielski                 SwFrm* pFlyFrm = pFrm->FindFlyFrm();
2844*b1cdbd2cSJim Jagielski                 if ( pFlyFrm )
2845*b1cdbd2cSJim Jagielski                 {
2846*b1cdbd2cSJim Jagielski                     pFrm = pFlyFrm;
2847*b1cdbd2cSJim Jagielski                 }
2848*b1cdbd2cSJim Jagielski                 else
2849*b1cdbd2cSJim Jagielski                 {
2850*b1cdbd2cSJim Jagielski                     aAnchorAttr.SetType( FLY_AT_PARA );
2851*b1cdbd2cSJim Jagielski                     SetFmtAttr( aAnchorAttr );
2852*b1cdbd2cSJim Jagielski                     MakeFrms();
2853*b1cdbd2cSJim Jagielski                     return;
2854*b1cdbd2cSJim Jagielski                 }
2855*b1cdbd2cSJim Jagielski                 // <--
2856*b1cdbd2cSJim Jagielski             }
2857*b1cdbd2cSJim Jagielski 
2858*b1cdbd2cSJim Jagielski 			if( pFrm->GetDrawObjs() )
2859*b1cdbd2cSJim Jagielski 			{
2860*b1cdbd2cSJim Jagielski                 // --> OD 2004-07-01 #i28701# - new type <SwSortedObjs>
2861*b1cdbd2cSJim Jagielski                 SwSortedObjs &rObjs = *pFrm->GetDrawObjs();
2862*b1cdbd2cSJim Jagielski 				for( sal_uInt16 i = 0; i < rObjs.Count(); ++i)
2863*b1cdbd2cSJim Jagielski 				{
2864*b1cdbd2cSJim Jagielski                     // --> OD 2004-07-01 #i28701# - consider changed type of
2865*b1cdbd2cSJim Jagielski                     // <SwSortedObjs> entries.
2866*b1cdbd2cSJim Jagielski                     SwAnchoredObject* pObj = rObjs[i];
2867*b1cdbd2cSJim Jagielski                     if( pObj->ISA(SwFlyFrm) &&
2868*b1cdbd2cSJim Jagielski                         (&pObj->GetFrmFmt()) == this )
2869*b1cdbd2cSJim Jagielski 					{
2870*b1cdbd2cSJim Jagielski 						bAdd = sal_False;
2871*b1cdbd2cSJim Jagielski 						break;
2872*b1cdbd2cSJim Jagielski 					}
2873*b1cdbd2cSJim Jagielski 				}
2874*b1cdbd2cSJim Jagielski 			}
2875*b1cdbd2cSJim Jagielski 
2876*b1cdbd2cSJim Jagielski 			if( bAdd )
2877*b1cdbd2cSJim Jagielski 			{
2878*b1cdbd2cSJim Jagielski 				SwFlyFrm *pFly = 0;
2879*b1cdbd2cSJim Jagielski                 switch( aAnchorAttr.GetAnchorId() )
2880*b1cdbd2cSJim Jagielski 				{
2881*b1cdbd2cSJim Jagielski 				case FLY_AT_FLY:
2882*b1cdbd2cSJim Jagielski 					pFly = new SwFlyLayFrm( this, pFrm, pFrm );
2883*b1cdbd2cSJim Jagielski 					break;
2884*b1cdbd2cSJim Jagielski 
2885*b1cdbd2cSJim Jagielski                 case FLY_AT_PARA:
2886*b1cdbd2cSJim Jagielski                 case FLY_AT_CHAR:
2887*b1cdbd2cSJim Jagielski 					pFly = new SwFlyAtCntFrm( this, pFrm, pFrm );
2888*b1cdbd2cSJim Jagielski 					break;
2889*b1cdbd2cSJim Jagielski 
2890*b1cdbd2cSJim Jagielski                 case FLY_AS_CHAR:
2891*b1cdbd2cSJim Jagielski 					pFly = new SwFlyInCntFrm( this, pFrm, pFrm );
2892*b1cdbd2cSJim Jagielski 					break;
2893*b1cdbd2cSJim Jagielski                 default:
2894*b1cdbd2cSJim Jagielski                     ASSERT( !this, "Neuer Ankertyp" )
2895*b1cdbd2cSJim Jagielski                     break;
2896*b1cdbd2cSJim Jagielski                 }
2897*b1cdbd2cSJim Jagielski 				pFrm->AppendFly( pFly );
2898*b1cdbd2cSJim Jagielski 				SwPageFrm *pPage = pFly->FindPageFrm();
2899*b1cdbd2cSJim Jagielski 				if( pPage )
2900*b1cdbd2cSJim Jagielski 					::RegistFlys( pPage, pFly );
2901*b1cdbd2cSJim Jagielski             }
2902*b1cdbd2cSJim Jagielski 		}
2903*b1cdbd2cSJim Jagielski 	}
2904*b1cdbd2cSJim Jagielski }
2905*b1cdbd2cSJim Jagielski 
GetFrm(const Point * pPoint,const sal_Bool bCalcFrm) const2906*b1cdbd2cSJim Jagielski SwFlyFrm* SwFlyFrmFmt::GetFrm( const Point* pPoint, const sal_Bool bCalcFrm ) const
2907*b1cdbd2cSJim Jagielski {
2908*b1cdbd2cSJim Jagielski 	return (SwFlyFrm*)::GetFrmOfModify( 0, *(SwModify*)this, FRM_FLY,
2909*b1cdbd2cSJim Jagielski 											pPoint, 0, bCalcFrm );
2910*b1cdbd2cSJim Jagielski }
2911*b1cdbd2cSJim Jagielski 
GetAnchoredObj(const Point * pPoint,const sal_Bool bCalcFrm) const2912*b1cdbd2cSJim Jagielski SwAnchoredObject* SwFlyFrmFmt::GetAnchoredObj( const Point* pPoint, const sal_Bool bCalcFrm ) const
2913*b1cdbd2cSJim Jagielski {
2914*b1cdbd2cSJim Jagielski     SwFlyFrm* pFlyFrm( GetFrm( pPoint, bCalcFrm ) );
2915*b1cdbd2cSJim Jagielski     if ( pFlyFrm )
2916*b1cdbd2cSJim Jagielski     {
2917*b1cdbd2cSJim Jagielski         return dynamic_cast<SwAnchoredObject*>(pFlyFrm);
2918*b1cdbd2cSJim Jagielski     }
2919*b1cdbd2cSJim Jagielski     else
2920*b1cdbd2cSJim Jagielski     {
2921*b1cdbd2cSJim Jagielski         return 0L;
2922*b1cdbd2cSJim Jagielski     }
2923*b1cdbd2cSJim Jagielski }
2924*b1cdbd2cSJim Jagielski 
2925*b1cdbd2cSJim Jagielski 
GetInfo(SfxPoolItem & rInfo) const2926*b1cdbd2cSJim Jagielski sal_Bool SwFlyFrmFmt::GetInfo( SfxPoolItem& rInfo ) const
2927*b1cdbd2cSJim Jagielski {
2928*b1cdbd2cSJim Jagielski     sal_Bool bRet = sal_True;
2929*b1cdbd2cSJim Jagielski     switch( rInfo.Which() )
2930*b1cdbd2cSJim Jagielski     {
2931*b1cdbd2cSJim Jagielski     case RES_CONTENT_VISIBLE:
2932*b1cdbd2cSJim Jagielski         {
2933*b1cdbd2cSJim Jagielski             ((SwPtrMsgPoolItem&)rInfo).pObject = SwIterator<SwFrm,SwFmt>::FirstElement( *this );
2934*b1cdbd2cSJim Jagielski         }
2935*b1cdbd2cSJim Jagielski         bRet = sal_False;
2936*b1cdbd2cSJim Jagielski         break;
2937*b1cdbd2cSJim Jagielski 
2938*b1cdbd2cSJim Jagielski     default:
2939*b1cdbd2cSJim Jagielski         bRet = SwFrmFmt::GetInfo( rInfo );
2940*b1cdbd2cSJim Jagielski         break;
2941*b1cdbd2cSJim Jagielski     }
2942*b1cdbd2cSJim Jagielski     return bRet;
2943*b1cdbd2cSJim Jagielski }
2944*b1cdbd2cSJim Jagielski 
2945*b1cdbd2cSJim Jagielski // --> OD 2009-07-14 #i73249#
SetObjTitle(const String & rTitle,bool bBroadcast)2946*b1cdbd2cSJim Jagielski void SwFlyFrmFmt::SetObjTitle( const String& rTitle, bool bBroadcast )
2947*b1cdbd2cSJim Jagielski {
2948*b1cdbd2cSJim Jagielski     SdrObject* pMasterObject = FindSdrObject();
2949*b1cdbd2cSJim Jagielski     ASSERT( pMasterObject,
2950*b1cdbd2cSJim Jagielski             "<SwNoTxtNode::SetObjTitle(..)> - missing <SdrObject> instance" );
2951*b1cdbd2cSJim Jagielski     if ( !pMasterObject )
2952*b1cdbd2cSJim Jagielski     {
2953*b1cdbd2cSJim Jagielski         return;
2954*b1cdbd2cSJim Jagielski     }
2955*b1cdbd2cSJim Jagielski 
2956*b1cdbd2cSJim Jagielski     if( bBroadcast )
2957*b1cdbd2cSJim Jagielski     {
2958*b1cdbd2cSJim Jagielski         SwStringMsgPoolItem aOld( RES_TITLE_CHANGED, pMasterObject->GetTitle() );
2959*b1cdbd2cSJim Jagielski         SwStringMsgPoolItem aNew( RES_TITLE_CHANGED, rTitle );
2960*b1cdbd2cSJim Jagielski         pMasterObject->SetTitle( rTitle );
2961*b1cdbd2cSJim Jagielski         ModifyNotification( &aOld, &aNew );
2962*b1cdbd2cSJim Jagielski     }
2963*b1cdbd2cSJim Jagielski     else
2964*b1cdbd2cSJim Jagielski     {
2965*b1cdbd2cSJim Jagielski         pMasterObject->SetTitle( rTitle );
2966*b1cdbd2cSJim Jagielski     }
2967*b1cdbd2cSJim Jagielski }
2968*b1cdbd2cSJim Jagielski 
GetObjTitle() const2969*b1cdbd2cSJim Jagielski const String SwFlyFrmFmt::GetObjTitle() const
2970*b1cdbd2cSJim Jagielski {
2971*b1cdbd2cSJim Jagielski     const SdrObject* pMasterObject = FindSdrObject();
2972*b1cdbd2cSJim Jagielski     ASSERT( pMasterObject,
2973*b1cdbd2cSJim Jagielski             "<SwFlyFrmFmt::GetObjTitle(..)> - missing <SdrObject> instance" );
2974*b1cdbd2cSJim Jagielski     if ( !pMasterObject )
2975*b1cdbd2cSJim Jagielski     {
2976*b1cdbd2cSJim Jagielski         return aEmptyStr;
2977*b1cdbd2cSJim Jagielski     }
2978*b1cdbd2cSJim Jagielski 
2979*b1cdbd2cSJim Jagielski     return pMasterObject->GetTitle();
2980*b1cdbd2cSJim Jagielski }
2981*b1cdbd2cSJim Jagielski 
SetObjDescription(const String & rDescription,bool bBroadcast)2982*b1cdbd2cSJim Jagielski void SwFlyFrmFmt::SetObjDescription( const String& rDescription, bool bBroadcast )
2983*b1cdbd2cSJim Jagielski {
2984*b1cdbd2cSJim Jagielski     SdrObject* pMasterObject = FindSdrObject();
2985*b1cdbd2cSJim Jagielski     ASSERT( pMasterObject,
2986*b1cdbd2cSJim Jagielski             "<SwFlyFrmFmt::SetDescription(..)> - missing <SdrObject> instance" );
2987*b1cdbd2cSJim Jagielski     if ( !pMasterObject )
2988*b1cdbd2cSJim Jagielski     {
2989*b1cdbd2cSJim Jagielski         return;
2990*b1cdbd2cSJim Jagielski     }
2991*b1cdbd2cSJim Jagielski 
2992*b1cdbd2cSJim Jagielski     if( bBroadcast )
2993*b1cdbd2cSJim Jagielski     {
2994*b1cdbd2cSJim Jagielski         SwStringMsgPoolItem aOld( RES_DESCRIPTION_CHANGED, pMasterObject->GetDescription() );
2995*b1cdbd2cSJim Jagielski         SwStringMsgPoolItem aNew( RES_DESCRIPTION_CHANGED, rDescription );
2996*b1cdbd2cSJim Jagielski         pMasterObject->SetDescription( rDescription );
2997*b1cdbd2cSJim Jagielski         ModifyNotification( &aOld, &aNew );
2998*b1cdbd2cSJim Jagielski     }
2999*b1cdbd2cSJim Jagielski     else
3000*b1cdbd2cSJim Jagielski     {
3001*b1cdbd2cSJim Jagielski         pMasterObject->SetDescription( rDescription );
3002*b1cdbd2cSJim Jagielski     }
3003*b1cdbd2cSJim Jagielski }
3004*b1cdbd2cSJim Jagielski 
GetObjDescription() const3005*b1cdbd2cSJim Jagielski const String SwFlyFrmFmt::GetObjDescription() const
3006*b1cdbd2cSJim Jagielski {
3007*b1cdbd2cSJim Jagielski     const SdrObject* pMasterObject = FindSdrObject();
3008*b1cdbd2cSJim Jagielski     ASSERT( pMasterObject,
3009*b1cdbd2cSJim Jagielski             "<SwNoTxtNode::GetDescription(..)> - missing <SdrObject> instance" );
3010*b1cdbd2cSJim Jagielski     if ( !pMasterObject )
3011*b1cdbd2cSJim Jagielski     {
3012*b1cdbd2cSJim Jagielski         return aEmptyStr;
3013*b1cdbd2cSJim Jagielski     }
3014*b1cdbd2cSJim Jagielski 
3015*b1cdbd2cSJim Jagielski     return pMasterObject->GetDescription();
3016*b1cdbd2cSJim Jagielski }
3017*b1cdbd2cSJim Jagielski // <--
3018*b1cdbd2cSJim Jagielski 
3019*b1cdbd2cSJim Jagielski /** SwFlyFrmFmt::IsBackgroundTransparent - for #99657#
3020*b1cdbd2cSJim Jagielski 
3021*b1cdbd2cSJim Jagielski     OD 22.08.2002 - overloading virtual method and its default implementation,
3022*b1cdbd2cSJim Jagielski     because format of fly frame provides transparent backgrounds.
3023*b1cdbd2cSJim Jagielski     Method determines, if background of fly frame is transparent.
3024*b1cdbd2cSJim Jagielski 
3025*b1cdbd2cSJim Jagielski     @author OD
3026*b1cdbd2cSJim Jagielski 
3027*b1cdbd2cSJim Jagielski     @return true, if background color is transparent, but not "no fill"
3028*b1cdbd2cSJim Jagielski     or the transparency of a existing background graphic is set.
3029*b1cdbd2cSJim Jagielski */
IsBackgroundTransparent() const3030*b1cdbd2cSJim Jagielski sal_Bool SwFlyFrmFmt::IsBackgroundTransparent() const
3031*b1cdbd2cSJim Jagielski {
3032*b1cdbd2cSJim Jagielski     sal_Bool bReturn = sal_False;
3033*b1cdbd2cSJim Jagielski 
3034*b1cdbd2cSJim Jagielski     /// NOTE: If background color is "no fill"/"auto fill" (COL_TRANSPARENT)
3035*b1cdbd2cSJim Jagielski     ///     and there is no background graphic, it "inherites" the background
3036*b1cdbd2cSJim Jagielski     ///     from its anchor.
3037*b1cdbd2cSJim Jagielski     if ( (GetBackground().GetColor().GetTransparency() != 0) &&
3038*b1cdbd2cSJim Jagielski          (GetBackground().GetColor() != COL_TRANSPARENT)
3039*b1cdbd2cSJim Jagielski        )
3040*b1cdbd2cSJim Jagielski     {
3041*b1cdbd2cSJim Jagielski         bReturn = sal_True;
3042*b1cdbd2cSJim Jagielski     }
3043*b1cdbd2cSJim Jagielski     else
3044*b1cdbd2cSJim Jagielski     {
3045*b1cdbd2cSJim Jagielski         const GraphicObject *pTmpGrf =
3046*b1cdbd2cSJim Jagielski                 static_cast<const GraphicObject*>(GetBackground().GetGraphicObject());
3047*b1cdbd2cSJim Jagielski         if ( (pTmpGrf) &&
3048*b1cdbd2cSJim Jagielski              (pTmpGrf->GetAttr().GetTransparency() != 0)
3049*b1cdbd2cSJim Jagielski            )
3050*b1cdbd2cSJim Jagielski         {
3051*b1cdbd2cSJim Jagielski             bReturn = sal_True;
3052*b1cdbd2cSJim Jagielski         }
3053*b1cdbd2cSJim Jagielski     }
3054*b1cdbd2cSJim Jagielski 
3055*b1cdbd2cSJim Jagielski     return bReturn;
3056*b1cdbd2cSJim Jagielski }
3057*b1cdbd2cSJim Jagielski 
3058*b1cdbd2cSJim Jagielski /** SwFlyFrmFmt::IsBackgroundBrushInherited - for #103898#
3059*b1cdbd2cSJim Jagielski 
3060*b1cdbd2cSJim Jagielski     OD 08.10.2002 - method to determine, if the brush for drawing the
3061*b1cdbd2cSJim Jagielski     background is "inherited" from its parent/grandparent.
3062*b1cdbd2cSJim Jagielski     This is the case, if no background graphic is set and the background
3063*b1cdbd2cSJim Jagielski     color is "no fill"/"auto fill"
3064*b1cdbd2cSJim Jagielski     NOTE: condition is "copied" from method <SwFrm::GetBackgroundBrush(..).
3065*b1cdbd2cSJim Jagielski 
3066*b1cdbd2cSJim Jagielski     @author OD
3067*b1cdbd2cSJim Jagielski 
3068*b1cdbd2cSJim Jagielski     @return true, if background brush is "inherited" from parent/grandparent
3069*b1cdbd2cSJim Jagielski */
IsBackgroundBrushInherited() const3070*b1cdbd2cSJim Jagielski sal_Bool SwFlyFrmFmt::IsBackgroundBrushInherited() const
3071*b1cdbd2cSJim Jagielski {
3072*b1cdbd2cSJim Jagielski     sal_Bool bReturn = sal_False;
3073*b1cdbd2cSJim Jagielski 
3074*b1cdbd2cSJim Jagielski     if ( (GetBackground().GetColor() == COL_TRANSPARENT) &&
3075*b1cdbd2cSJim Jagielski          !(GetBackground().GetGraphicObject()) )
3076*b1cdbd2cSJim Jagielski     {
3077*b1cdbd2cSJim Jagielski         bReturn = sal_True;
3078*b1cdbd2cSJim Jagielski     }
3079*b1cdbd2cSJim Jagielski 
3080*b1cdbd2cSJim Jagielski     return bReturn;
3081*b1cdbd2cSJim Jagielski }
3082*b1cdbd2cSJim Jagielski 
3083*b1cdbd2cSJim Jagielski // --> OD 2006-02-28 #125892#
SwHandleAnchorNodeChg(SwFlyFrmFmt & _rFlyFrmFmt,const SwFmtAnchor & _rNewAnchorFmt,SwFlyFrm * _pKeepThisFlyFrm)3084*b1cdbd2cSJim Jagielski SwHandleAnchorNodeChg::SwHandleAnchorNodeChg( SwFlyFrmFmt& _rFlyFrmFmt,
3085*b1cdbd2cSJim Jagielski                                               const SwFmtAnchor& _rNewAnchorFmt,
3086*b1cdbd2cSJim Jagielski                                               SwFlyFrm* _pKeepThisFlyFrm )
3087*b1cdbd2cSJim Jagielski     : mrFlyFrmFmt( _rFlyFrmFmt ),
3088*b1cdbd2cSJim Jagielski       mbAnchorNodeChanged( false )
3089*b1cdbd2cSJim Jagielski {
3090*b1cdbd2cSJim Jagielski     const RndStdIds nNewAnchorType( _rNewAnchorFmt.GetAnchorId() );
3091*b1cdbd2cSJim Jagielski     if ( ((nNewAnchorType == FLY_AT_PARA) ||
3092*b1cdbd2cSJim Jagielski           (nNewAnchorType == FLY_AT_CHAR)) &&
3093*b1cdbd2cSJim Jagielski          _rNewAnchorFmt.GetCntntAnchor() &&
3094*b1cdbd2cSJim Jagielski          _rNewAnchorFmt.GetCntntAnchor()->nNode.GetNode().GetCntntNode() )
3095*b1cdbd2cSJim Jagielski     {
3096*b1cdbd2cSJim Jagielski         const SwFmtAnchor& aOldAnchorFmt( _rFlyFrmFmt.GetAnchor() );
3097*b1cdbd2cSJim Jagielski         if ( aOldAnchorFmt.GetAnchorId() == nNewAnchorType &&
3098*b1cdbd2cSJim Jagielski              aOldAnchorFmt.GetCntntAnchor() &&
3099*b1cdbd2cSJim Jagielski              aOldAnchorFmt.GetCntntAnchor()->nNode.GetNode().GetCntntNode() &&
3100*b1cdbd2cSJim Jagielski              aOldAnchorFmt.GetCntntAnchor()->nNode !=
3101*b1cdbd2cSJim Jagielski                                     _rNewAnchorFmt.GetCntntAnchor()->nNode )
3102*b1cdbd2cSJim Jagielski         {
3103*b1cdbd2cSJim Jagielski             // determine 'old' number of anchor frames
3104*b1cdbd2cSJim Jagielski             sal_uInt32 nOldNumOfAnchFrm( 0L );
3105*b1cdbd2cSJim Jagielski             SwIterator<SwFrm,SwCntntNode> aOldIter( *(aOldAnchorFmt.GetCntntAnchor()->nNode.GetNode().GetCntntNode()) );
3106*b1cdbd2cSJim Jagielski             for( SwFrm* pOld = aOldIter.First(); pOld; pOld = aOldIter.Next() )
3107*b1cdbd2cSJim Jagielski             {
3108*b1cdbd2cSJim Jagielski                 ++nOldNumOfAnchFrm;
3109*b1cdbd2cSJim Jagielski             }
3110*b1cdbd2cSJim Jagielski             // determine 'new' number of anchor frames
3111*b1cdbd2cSJim Jagielski             sal_uInt32 nNewNumOfAnchFrm( 0L );
3112*b1cdbd2cSJim Jagielski             SwIterator<SwFrm,SwCntntNode> aNewIter( *(_rNewAnchorFmt.GetCntntAnchor()->nNode.GetNode().GetCntntNode()) );
3113*b1cdbd2cSJim Jagielski             for( SwFrm* pNew = aNewIter.First(); pNew; pNew = aNewIter.Next() )
3114*b1cdbd2cSJim Jagielski             {
3115*b1cdbd2cSJim Jagielski                 ++nNewNumOfAnchFrm;
3116*b1cdbd2cSJim Jagielski             }
3117*b1cdbd2cSJim Jagielski             if ( nOldNumOfAnchFrm != nNewNumOfAnchFrm )
3118*b1cdbd2cSJim Jagielski             {
3119*b1cdbd2cSJim Jagielski                 // delete existing fly frames except <_pKeepThisFlyFrm>
3120*b1cdbd2cSJim Jagielski                 SwIterator<SwFrm,SwFmt> aIter( mrFlyFrmFmt );
3121*b1cdbd2cSJim Jagielski                 SwFrm* pFrm = aIter.First();
3122*b1cdbd2cSJim Jagielski                 if ( pFrm )
3123*b1cdbd2cSJim Jagielski                 {
3124*b1cdbd2cSJim Jagielski                     do {
3125*b1cdbd2cSJim Jagielski                         if ( pFrm != _pKeepThisFlyFrm )
3126*b1cdbd2cSJim Jagielski                         {
3127*b1cdbd2cSJim Jagielski                             pFrm->Cut();
3128*b1cdbd2cSJim Jagielski                             delete pFrm;
3129*b1cdbd2cSJim Jagielski                         }
3130*b1cdbd2cSJim Jagielski                     } while( 0 != ( pFrm = aIter.Next() ));
3131*b1cdbd2cSJim Jagielski                 }
3132*b1cdbd2cSJim Jagielski                 // indicate, that re-creation of fly frames necessary
3133*b1cdbd2cSJim Jagielski                 mbAnchorNodeChanged = true;
3134*b1cdbd2cSJim Jagielski             }
3135*b1cdbd2cSJim Jagielski         }
3136*b1cdbd2cSJim Jagielski     }
3137*b1cdbd2cSJim Jagielski }
3138*b1cdbd2cSJim Jagielski 
~SwHandleAnchorNodeChg()3139*b1cdbd2cSJim Jagielski SwHandleAnchorNodeChg::~SwHandleAnchorNodeChg()
3140*b1cdbd2cSJim Jagielski {
3141*b1cdbd2cSJim Jagielski     if ( mbAnchorNodeChanged )
3142*b1cdbd2cSJim Jagielski     {
3143*b1cdbd2cSJim Jagielski         mrFlyFrmFmt.MakeFrms();
3144*b1cdbd2cSJim Jagielski     }
3145*b1cdbd2cSJim Jagielski }
3146*b1cdbd2cSJim Jagielski // <--
3147*b1cdbd2cSJim Jagielski //	class SwDrawFrmFmt
3148*b1cdbd2cSJim Jagielski //	Implementierung teilweise inline im hxx
3149*b1cdbd2cSJim Jagielski 
3150*b1cdbd2cSJim Jagielski TYPEINIT1( SwDrawFrmFmt, SwFrmFmt );
3151*b1cdbd2cSJim Jagielski IMPL_FIXEDMEMPOOL_NEWDEL( SwDrawFrmFmt,	10, 10 )
3152*b1cdbd2cSJim Jagielski 
~SwDrawFrmFmt()3153*b1cdbd2cSJim Jagielski SwDrawFrmFmt::~SwDrawFrmFmt()
3154*b1cdbd2cSJim Jagielski {
3155*b1cdbd2cSJim Jagielski 	SwContact *pContact = FindContactObj();
3156*b1cdbd2cSJim Jagielski 	delete pContact;
3157*b1cdbd2cSJim Jagielski }
3158*b1cdbd2cSJim Jagielski 
MakeFrms()3159*b1cdbd2cSJim Jagielski void SwDrawFrmFmt::MakeFrms()
3160*b1cdbd2cSJim Jagielski {
3161*b1cdbd2cSJim Jagielski 	SwDrawContact *pContact = (SwDrawContact*)FindContactObj();
3162*b1cdbd2cSJim Jagielski     if ( pContact )
3163*b1cdbd2cSJim Jagielski          pContact->ConnectToLayout();
3164*b1cdbd2cSJim Jagielski }
3165*b1cdbd2cSJim Jagielski 
DelFrms()3166*b1cdbd2cSJim Jagielski void SwDrawFrmFmt::DelFrms()
3167*b1cdbd2cSJim Jagielski {
3168*b1cdbd2cSJim Jagielski 	SwDrawContact *pContact = (SwDrawContact *)FindContactObj();
3169*b1cdbd2cSJim Jagielski 	if ( pContact ) //fuer den Reader und andere Unabwaegbarkeiten.
3170*b1cdbd2cSJim Jagielski 		pContact->DisconnectFromLayout();
3171*b1cdbd2cSJim Jagielski }
3172*b1cdbd2cSJim Jagielski 
3173*b1cdbd2cSJim Jagielski // --> OD 2004-07-27 #i31698#
GetLayoutDir() const3174*b1cdbd2cSJim Jagielski SwFrmFmt::tLayoutDir SwDrawFrmFmt::GetLayoutDir() const
3175*b1cdbd2cSJim Jagielski {
3176*b1cdbd2cSJim Jagielski     return meLayoutDir;
3177*b1cdbd2cSJim Jagielski }
3178*b1cdbd2cSJim Jagielski 
SetLayoutDir(const SwFrmFmt::tLayoutDir _eLayoutDir)3179*b1cdbd2cSJim Jagielski void SwDrawFrmFmt::SetLayoutDir( const SwFrmFmt::tLayoutDir _eLayoutDir )
3180*b1cdbd2cSJim Jagielski {
3181*b1cdbd2cSJim Jagielski     meLayoutDir = _eLayoutDir;
3182*b1cdbd2cSJim Jagielski }
3183*b1cdbd2cSJim Jagielski // <--
3184*b1cdbd2cSJim Jagielski 
3185*b1cdbd2cSJim Jagielski // --> OD 2004-08-06 #i28749#
GetPositionLayoutDir() const3186*b1cdbd2cSJim Jagielski sal_Int16 SwDrawFrmFmt::GetPositionLayoutDir() const
3187*b1cdbd2cSJim Jagielski {
3188*b1cdbd2cSJim Jagielski     return mnPositionLayoutDir;
3189*b1cdbd2cSJim Jagielski }
SetPositionLayoutDir(const sal_Int16 _nPositionLayoutDir)3190*b1cdbd2cSJim Jagielski void SwDrawFrmFmt::SetPositionLayoutDir( const sal_Int16 _nPositionLayoutDir )
3191*b1cdbd2cSJim Jagielski {
3192*b1cdbd2cSJim Jagielski     switch ( _nPositionLayoutDir )
3193*b1cdbd2cSJim Jagielski     {
3194*b1cdbd2cSJim Jagielski         case text::PositionLayoutDir::PositionInHoriL2R:
3195*b1cdbd2cSJim Jagielski         case text::PositionLayoutDir::PositionInLayoutDirOfAnchor:
3196*b1cdbd2cSJim Jagielski         {
3197*b1cdbd2cSJim Jagielski             mnPositionLayoutDir = _nPositionLayoutDir;
3198*b1cdbd2cSJim Jagielski         }
3199*b1cdbd2cSJim Jagielski         break;
3200*b1cdbd2cSJim Jagielski         default:
3201*b1cdbd2cSJim Jagielski         {
3202*b1cdbd2cSJim Jagielski             ASSERT( false,
3203*b1cdbd2cSJim Jagielski                     "<SwDrawFrmFmt::SetPositionLayoutDir(..)> - invalid attribute value." );
3204*b1cdbd2cSJim Jagielski         }
3205*b1cdbd2cSJim Jagielski     }
3206*b1cdbd2cSJim Jagielski }
3207*b1cdbd2cSJim Jagielski // <--
3208*b1cdbd2cSJim Jagielski 
GetDescription() const3209*b1cdbd2cSJim Jagielski String SwDrawFrmFmt::GetDescription() const
3210*b1cdbd2cSJim Jagielski {
3211*b1cdbd2cSJim Jagielski     String aResult;
3212*b1cdbd2cSJim Jagielski     const SdrObject * pSdrObj = FindSdrObject();
3213*b1cdbd2cSJim Jagielski 
3214*b1cdbd2cSJim Jagielski     if (pSdrObj)
3215*b1cdbd2cSJim Jagielski     {
3216*b1cdbd2cSJim Jagielski         if (pSdrObj != pSdrObjCached)
3217*b1cdbd2cSJim Jagielski         {
3218*b1cdbd2cSJim Jagielski             SdrObject * pSdrObjCopy = pSdrObj->Clone();
3219*b1cdbd2cSJim Jagielski             SdrUndoNewObj * pSdrUndo = new SdrUndoNewObj(*pSdrObjCopy);
3220*b1cdbd2cSJim Jagielski             sSdrObjCachedComment = pSdrUndo->GetComment();
3221*b1cdbd2cSJim Jagielski 
3222*b1cdbd2cSJim Jagielski             delete pSdrUndo;
3223*b1cdbd2cSJim Jagielski 
3224*b1cdbd2cSJim Jagielski             pSdrObjCached = pSdrObj;
3225*b1cdbd2cSJim Jagielski         }
3226*b1cdbd2cSJim Jagielski 
3227*b1cdbd2cSJim Jagielski         aResult = sSdrObjCachedComment;
3228*b1cdbd2cSJim Jagielski     }
3229*b1cdbd2cSJim Jagielski     else
3230*b1cdbd2cSJim Jagielski         aResult = SW_RES(STR_GRAPHIC);
3231*b1cdbd2cSJim Jagielski 
3232*b1cdbd2cSJim Jagielski     return aResult;
3233*b1cdbd2cSJim Jagielski }
3234*b1cdbd2cSJim Jagielski 
GetIMapObject(const Point & rPoint,const SwFlyFrm * pFly) const3235*b1cdbd2cSJim Jagielski IMapObject* SwFrmFmt::GetIMapObject( const Point& rPoint,
3236*b1cdbd2cSJim Jagielski 										const SwFlyFrm *pFly ) const
3237*b1cdbd2cSJim Jagielski {
3238*b1cdbd2cSJim Jagielski 	const SwFmtURL &rURL = GetURL();
3239*b1cdbd2cSJim Jagielski 	if( !rURL.GetMap() )
3240*b1cdbd2cSJim Jagielski 		return 0;
3241*b1cdbd2cSJim Jagielski 
3242*b1cdbd2cSJim Jagielski 	if( !pFly )
3243*b1cdbd2cSJim Jagielski 	{
3244*b1cdbd2cSJim Jagielski 		pFly = SwIterator<SwFlyFrm,SwFmt>::FirstElement( *this );
3245*b1cdbd2cSJim Jagielski 		if( !pFly )
3246*b1cdbd2cSJim Jagielski 			return 0;
3247*b1cdbd2cSJim Jagielski 	}
3248*b1cdbd2cSJim Jagielski 
3249*b1cdbd2cSJim Jagielski 	//Orignialgroesse fuer OLE und Grafik ist die TwipSize,
3250*b1cdbd2cSJim Jagielski 	//ansonsten die Groesse vom FrmFmt des Fly.
3251*b1cdbd2cSJim Jagielski 	const SwFrm *pRef;
3252*b1cdbd2cSJim Jagielski     SwNoTxtNode *pNd = 0;
3253*b1cdbd2cSJim Jagielski 	Size aOrigSz;
3254*b1cdbd2cSJim Jagielski 	if( pFly->Lower() && pFly->Lower()->IsNoTxtFrm() )
3255*b1cdbd2cSJim Jagielski 	{
3256*b1cdbd2cSJim Jagielski 		pRef = pFly->Lower();
3257*b1cdbd2cSJim Jagielski 		pNd = ((SwCntntFrm*)pRef)->GetNode()->GetNoTxtNode();
3258*b1cdbd2cSJim Jagielski 		aOrigSz = pNd->GetTwipSize();
3259*b1cdbd2cSJim Jagielski 	}
3260*b1cdbd2cSJim Jagielski 	else
3261*b1cdbd2cSJim Jagielski 	{
3262*b1cdbd2cSJim Jagielski 		pRef = pFly;
3263*b1cdbd2cSJim Jagielski 		aOrigSz = pFly->GetFmt()->GetFrmSize().GetSize();
3264*b1cdbd2cSJim Jagielski 	}
3265*b1cdbd2cSJim Jagielski 
3266*b1cdbd2cSJim Jagielski 	if( aOrigSz.Width() != 0 && aOrigSz.Height() != 0 )
3267*b1cdbd2cSJim Jagielski 	{
3268*b1cdbd2cSJim Jagielski 		Point aPos( rPoint );
3269*b1cdbd2cSJim Jagielski 		Size aActSz ( pRef == pFly ? pFly->Frm().SSize() : pRef->Prt().SSize() );
3270*b1cdbd2cSJim Jagielski 		const MapMode aSrc ( MAP_TWIP );
3271*b1cdbd2cSJim Jagielski 		const MapMode aDest( MAP_100TH_MM );
3272*b1cdbd2cSJim Jagielski 		aOrigSz = OutputDevice::LogicToLogic( aOrigSz, aSrc, aDest );
3273*b1cdbd2cSJim Jagielski 		aActSz  = OutputDevice::LogicToLogic( aActSz,  aSrc, aDest );
3274*b1cdbd2cSJim Jagielski 		aPos -= pRef->Frm().Pos();
3275*b1cdbd2cSJim Jagielski 		aPos -= pRef->Prt().Pos();
3276*b1cdbd2cSJim Jagielski 		aPos    = OutputDevice::LogicToLogic( aPos, aSrc, aDest );
3277*b1cdbd2cSJim Jagielski 		sal_uInt32 nFlags = 0;
3278*b1cdbd2cSJim Jagielski 		if ( pFly != pRef && pNd->IsGrfNode() )
3279*b1cdbd2cSJim Jagielski 		{
3280*b1cdbd2cSJim Jagielski 			const sal_uInt16 nMirror = pNd->GetSwAttrSet().
3281*b1cdbd2cSJim Jagielski 										GetMirrorGrf().GetValue();
3282*b1cdbd2cSJim Jagielski             if ( RES_MIRROR_GRAPH_BOTH == nMirror )
3283*b1cdbd2cSJim Jagielski 				nFlags = IMAP_MIRROR_HORZ | IMAP_MIRROR_VERT;
3284*b1cdbd2cSJim Jagielski             else if ( RES_MIRROR_GRAPH_VERT == nMirror )
3285*b1cdbd2cSJim Jagielski 				nFlags = IMAP_MIRROR_VERT;
3286*b1cdbd2cSJim Jagielski             else if ( RES_MIRROR_GRAPH_HOR == nMirror )
3287*b1cdbd2cSJim Jagielski 				nFlags = IMAP_MIRROR_HORZ;
3288*b1cdbd2cSJim Jagielski 
3289*b1cdbd2cSJim Jagielski 		}
3290*b1cdbd2cSJim Jagielski 		return ((ImageMap*)rURL.GetMap())->GetHitIMapObject( aOrigSz,
3291*b1cdbd2cSJim Jagielski 												aActSz, aPos, nFlags );
3292*b1cdbd2cSJim Jagielski 	}
3293*b1cdbd2cSJim Jagielski 
3294*b1cdbd2cSJim Jagielski 	return 0;
3295*b1cdbd2cSJim Jagielski }
3296*b1cdbd2cSJim Jagielski 
HasCaption() const3297*b1cdbd2cSJim Jagielski sal_Bool SwFrmFmt::HasCaption() const
3298*b1cdbd2cSJim Jagielski {
3299*b1cdbd2cSJim Jagielski 	if(pCaptionFmt != NULL && pCaptionFmt->GetDepends())
3300*b1cdbd2cSJim Jagielski 		return sal_True;
3301*b1cdbd2cSJim Jagielski 	return sal_False;
3302*b1cdbd2cSJim Jagielski }
3303*b1cdbd2cSJim Jagielski 
SetCaptionFmt(SwFrmFmt * pFmt)3304*b1cdbd2cSJim Jagielski void SwFrmFmt::SetCaptionFmt(SwFrmFmt * pFmt)
3305*b1cdbd2cSJim Jagielski {
3306*b1cdbd2cSJim Jagielski 	pCaptionFmt = pFmt;
3307*b1cdbd2cSJim Jagielski }
3308*b1cdbd2cSJim Jagielski 
GetCaptionFmt() const3309*b1cdbd2cSJim Jagielski SwFrmFmt* SwFrmFmt::GetCaptionFmt() const
3310*b1cdbd2cSJim Jagielski {
3311*b1cdbd2cSJim Jagielski 	return pCaptionFmt;
3312*b1cdbd2cSJim Jagielski }
3313