xref: /trunk/main/sw/source/core/layout/newfrm.cxx (revision 26ea3662)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 // MARKER(update_precomp.py): autogen include statement, do not remove
23 #include "precompiled_sw.hxx"
24 
25 #include <svx/svdmodel.hxx>
26 #include <svx/svdpage.hxx>
27 #include <fmtfordr.hxx>
28 #include <fmtpdsc.hxx>
29 #include <frmfmt.hxx>
30 #include <swtable.hxx>
31 #include <rootfrm.hxx>
32 #include <pagefrm.hxx>
33 #include <cntfrm.hxx>
34 #include <viewsh.hxx>
35 #include <doc.hxx>
36 #include <node.hxx>
37 #include <dflyobj.hxx>
38 #include <frmtool.hxx>
39 #include <virtoutp.hxx>
40 #include <blink.hxx>
41 #include <ndindex.hxx>
42 #include <sectfrm.hxx>
43 #include <notxtfrm.hxx>
44 #include <pagedesc.hxx>
45 #include "viewimp.hxx"
46 #include "IDocumentTimerAccess.hxx"
47 #include "IDocumentLayoutAccess.hxx"
48 #include "IDocumentFieldsAccess.hxx"
49 #include "IDocumentSettingAccess.hxx"
50 #include "IDocumentDrawModelAccess.hxx"
51 #include <hints.hxx>
52 #include <viewopt.hxx>
53 #include <drawdoc.hxx>
54 
55 SwLayVout     *SwRootFrm::pVout = 0;
56 sal_Bool 		   SwRootFrm::bInPaint = sal_False;
57 sal_Bool 		   SwRootFrm::bNoVirDev = sal_False;
58 
59 SwCache *SwFrm::pCache = 0;
60 
FirstMinusSecond(long nFirst,long nSecond)61 long FirstMinusSecond( long nFirst, long nSecond )
62     { return nFirst - nSecond; }
SecondMinusFirst(long nFirst,long nSecond)63 long SecondMinusFirst( long nFirst, long nSecond )
64     { return nSecond - nFirst; }
SwIncrement(long nA,long nAdd)65 long SwIncrement( long nA, long nAdd )
66     { return nA + nAdd; }
SwDecrement(long nA,long nSub)67 long SwDecrement( long nA, long nSub )
68     { return nA - nSub; }
69 
70 static SwRectFnCollection aHorizontal = {
71     /* fnRectGet      */
72     &SwRect::_Top,
73     &SwRect::_Bottom,
74     &SwRect::_Left,
75     &SwRect::_Right,
76     &SwRect::_Width,
77     &SwRect::_Height,
78     &SwRect::TopLeft,
79     &SwRect::_Size,
80     /* fnRectSet      */
81     &SwRect::_Top,
82     &SwRect::_Bottom,
83     &SwRect::_Left,
84     &SwRect::_Right,
85     &SwRect::_Width,
86     &SwRect::_Height,
87 
88     &SwRect::SubTop,
89     &SwRect::AddBottom,
90     &SwRect::SubLeft,
91     &SwRect::AddRight,
92     &SwRect::AddWidth,
93     &SwRect::AddHeight,
94 
95     &SwRect::SetPosX,
96     &SwRect::SetPosY,
97 
98     &SwFrm::GetTopMargin,
99     &SwFrm::GetBottomMargin,
100     &SwFrm::GetLeftMargin,
101     &SwFrm::GetRightMargin,
102     &SwFrm::SetLeftRightMargins,
103     &SwFrm::SetTopBottomMargins,
104     &SwFrm::GetPrtTop,
105     &SwFrm::GetPrtBottom,
106     &SwFrm::GetPrtLeft,
107     &SwFrm::GetPrtRight,
108     &SwRect::GetTopDistance,
109     &SwRect::GetBottomDistance,
110     &SwRect::GetLeftDistance,
111     &SwRect::GetRightDistance,
112     &SwFrm::SetMaxBottom,
113     &SwRect::OverStepBottom,
114 
115     &SwRect::SetUpperLeftCorner,
116     &SwFrm::MakeBelowPos,
117     &FirstMinusSecond,
118     &FirstMinusSecond,
119     &SwIncrement,
120     &SwIncrement,
121     &SwRect::SetLeftAndWidth,
122     &SwRect::SetTopAndHeight
123 };
124 
125 static SwRectFnCollection aVertical = {
126     /* fnRectGet      */
127     &SwRect::_Right,
128     &SwRect::_Left,
129     &SwRect::_Top,
130     &SwRect::_Bottom,
131     &SwRect::_Height,
132     &SwRect::_Width,
133     &SwRect::TopRight,
134     &SwRect::SwappedSize,
135     /* fnRectSet      */
136     &SwRect::_Right,
137     &SwRect::_Left,
138     &SwRect::_Top,
139     &SwRect::_Bottom,
140     &SwRect::_Height,
141     &SwRect::_Width,
142 
143     &SwRect::AddRight,
144     &SwRect::SubLeft,
145     &SwRect::SubTop,
146     &SwRect::AddBottom,
147     &SwRect::AddHeight,
148     &SwRect::AddWidth,
149 
150     &SwRect::SetPosY,
151     &SwRect::SetPosX,
152 
153     &SwFrm::GetRightMargin,
154     &SwFrm::GetLeftMargin,
155     &SwFrm::GetTopMargin,
156     &SwFrm::GetBottomMargin,
157     &SwFrm::SetTopBottomMargins,
158     &SwFrm::SetRightLeftMargins,
159     &SwFrm::GetPrtRight,
160     &SwFrm::GetPrtLeft,
161     &SwFrm::GetPrtTop,
162     &SwFrm::GetPrtBottom,
163     &SwRect::GetRightDistance,
164     &SwRect::GetLeftDistance,
165     &SwRect::GetTopDistance,
166     &SwRect::GetBottomDistance,
167     &SwFrm::SetMinLeft,
168     &SwRect::OverStepLeft,
169 
170     &SwRect::SetUpperRightCorner,
171     &SwFrm::MakeLeftPos,
172     &FirstMinusSecond,
173     &SecondMinusFirst,
174     &SwIncrement,
175     &SwDecrement,
176     &SwRect::SetTopAndHeight,
177     &SwRect::SetRightAndWidth
178 };
179 
180 static SwRectFnCollection aBottomToTop = {
181     /* fnRectGet      */
182     &SwRect::_Bottom,
183     &SwRect::_Top,
184     &SwRect::_Left,
185     &SwRect::_Right,
186     &SwRect::_Width,
187     &SwRect::_Height,
188     &SwRect::BottomLeft,
189     &SwRect::_Size,
190     /* fnRectSet      */
191     &SwRect::_Bottom,
192     &SwRect::_Top,
193     &SwRect::_Left,
194     &SwRect::_Right,
195     &SwRect::_Width,
196     &SwRect::_Height,
197 
198     &SwRect::AddBottom,
199     &SwRect::SubTop,
200     &SwRect::SubLeft,
201     &SwRect::AddRight,
202     &SwRect::AddWidth,
203     &SwRect::AddHeight,
204 
205     &SwRect::SetPosX,
206     &SwRect::SetPosY,
207 
208     &SwFrm::GetBottomMargin,
209     &SwFrm::GetTopMargin,
210     &SwFrm::GetLeftMargin,
211     &SwFrm::GetRightMargin,
212     &SwFrm::SetLeftRightMargins,
213     &SwFrm::SetBottomTopMargins,
214     &SwFrm::GetPrtBottom,
215     &SwFrm::GetPrtTop,
216     &SwFrm::GetPrtLeft,
217     &SwFrm::GetPrtRight,
218     &SwRect::GetBottomDistance,
219     &SwRect::GetTopDistance,
220     &SwRect::GetLeftDistance,
221     &SwRect::GetRightDistance,
222     &SwFrm::SetMinTop,
223     &SwRect::OverStepTop,
224 
225     &SwRect::SetLowerLeftCorner,
226     &SwFrm::MakeUpperPos,
227     &FirstMinusSecond,
228     &SecondMinusFirst,
229     &SwIncrement,
230     &SwDecrement,
231     &SwRect::SetLeftAndWidth,
232     &SwRect::SetBottomAndHeight
233 };
234 
235 static SwRectFnCollection aVerticalRightToLeft = {
236     /* fnRectGet      */
237     &SwRect::_Left,
238     &SwRect::_Right,
239     &SwRect::_Top,
240     &SwRect::_Bottom,
241     &SwRect::_Height,
242     &SwRect::_Width,
243     &SwRect::BottomRight,
244     &SwRect::SwappedSize,
245     /* fnRectSet      */
246     &SwRect::_Left,
247     &SwRect::_Right,
248     &SwRect::_Top,
249     &SwRect::_Bottom,
250     &SwRect::_Height,
251     &SwRect::_Width,
252 
253     &SwRect::SubLeft,
254     &SwRect::AddRight,
255     &SwRect::SubTop,
256     &SwRect::AddBottom,
257     &SwRect::AddHeight,
258     &SwRect::AddWidth,
259 
260     &SwRect::SetPosY,
261     &SwRect::SetPosX,
262 
263     &SwFrm::GetLeftMargin,
264     &SwFrm::GetRightMargin,
265     &SwFrm::GetTopMargin,
266     &SwFrm::GetBottomMargin,
267     &SwFrm::SetTopBottomMargins,
268     &SwFrm::SetLeftRightMargins,
269     &SwFrm::GetPrtLeft,
270     &SwFrm::GetPrtRight,
271     &SwFrm::GetPrtBottom,
272     &SwFrm::GetPrtTop,
273     &SwRect::GetLeftDistance,
274     &SwRect::GetRightDistance,
275     &SwRect::GetBottomDistance,
276     &SwRect::GetTopDistance,
277     &SwFrm::SetMaxRight,
278     &SwRect::OverStepRight,
279 
280     &SwRect::SetLowerLeftCorner,
281     &SwFrm::MakeRightPos,
282     &FirstMinusSecond,
283     &FirstMinusSecond,
284     &SwDecrement,
285     &SwIncrement,
286     &SwRect::SetBottomAndHeight,
287     &SwRect::SetLeftAndWidth
288 };
289 //Badaa: 2008-04-18 * Support for Classical Mongolian Script (SCMS) joint with Jiayanmin
290 static SwRectFnCollection aVerticalLeftToRight = {
291     /* fnRectGet      */
292     &SwRect::_Left,
293     &SwRect::_Right,
294     &SwRect::_Top,
295     &SwRect::_Bottom,
296     &SwRect::_Height,
297     &SwRect::_Width,
298     &SwRect::TopLeft,
299     &SwRect::SwappedSize,
300     /* fnRectSet      */
301     &SwRect::_Left,
302     &SwRect::_Right,
303     &SwRect::_Top,
304     &SwRect::_Bottom,
305     &SwRect::_Height,
306     &SwRect::_Width,
307 
308     &SwRect::SubLeft,
309     &SwRect::AddRight,
310     &SwRect::SubTop,
311     &SwRect::AddBottom,
312     &SwRect::AddHeight,
313     &SwRect::AddWidth,
314 
315     &SwRect::SetPosY,
316     &SwRect::SetPosX,
317 
318     &SwFrm::GetLeftMargin,
319     &SwFrm::GetRightMargin,
320     &SwFrm::GetTopMargin,
321     &SwFrm::GetBottomMargin,
322     &SwFrm::SetTopBottomMargins,
323     &SwFrm::SetLeftRightMargins,
324     &SwFrm::GetPrtLeft,
325     &SwFrm::GetPrtRight,
326     &SwFrm::GetPrtTop,
327     &SwFrm::GetPrtBottom,
328     &SwRect::GetLeftDistance,
329     &SwRect::GetRightDistance,
330     &SwRect::GetTopDistance,
331     &SwRect::GetBottomDistance,
332     &SwFrm::SetMaxRight,
333     &SwRect::OverStepRight,
334 
335     &SwRect::SetUpperLeftCorner,
336     &SwFrm::MakeRightPos,
337     &FirstMinusSecond,
338     &FirstMinusSecond,
339     &SwIncrement,
340     &SwIncrement,
341     &SwRect::SetTopAndHeight,
342     &SwRect::SetLeftAndWidth
343 };
344 //End of SCMS
345 SwRectFn fnRectHori = &aHorizontal;
346 SwRectFn fnRectVert = &aVertical;
347 //Badaa: 2008-04-18 * Support for Classical Mongolian Script (SCMS) joint with Jiayanmin
348 SwRectFn fnRectVertL2R = &aVerticalLeftToRight;
349 //End of SCMS
350 SwRectFn fnRectB2T = &aBottomToTop;
351 SwRectFn fnRectVL2R = &aVerticalRightToLeft;
352 
353 // --> OD 2006-05-10 #i65250#
354 sal_uInt32 SwFrm::mnLastFrmId=0;
355 // <--
356 
357 TYPEINIT1(SwFrm,SwClient);		//rtti fuer SwFrm
358 TYPEINIT1(SwCntntFrm,SwFrm);	//rtti fuer SwCntntFrm
359 
360 
_FrmInit()361 void _FrmInit()
362 {
363 	SwRootFrm::pVout = new SwLayVout();
364 	SwCache *pNew = new SwCache( 100, 100
365 #ifdef DBG_UTIL
366 	, "static SwBorderAttrs::pCache"
367 #endif
368 	);
369 	SwFrm::SetCache( pNew );
370 }
371 
372 
373 
_FrmFinit()374 void _FrmFinit()
375 {
376 #ifdef DBG_UTIL
377 	// im Chache duerfen nur noch 0-Pointer stehen
378 	for( sal_uInt16 n = SwFrm::GetCachePtr()->Count(); n; )
379 		if( (*SwFrm::GetCachePtr())[ --n ] )
380 		{
381 			SwCacheObj* pObj = (*SwFrm::GetCachePtr())[ n ];
382 			ASSERT( !pObj, "Wer hat sich nicht ausgetragen?")
383 		}
384 #endif
385 	delete SwRootFrm::pVout;
386 	delete SwFrm::GetCachePtr();
387 }
388 
389 /*************************************************************************
390 |*
391 |*	RootFrm::Alles was so zur CurrShell gehoert
392 |*
393 |*	Ersterstellung		MA 09. Sep. 98
394 |*	Letzte Aenderung	MA 18. Feb. 99
395 |*
396 |*************************************************************************/
397 
398 typedef CurrShell* CurrShellPtr;
399 SV_DECL_PTRARR_SORT(SwCurrShells,CurrShellPtr,4,4)
SV_IMPL_PTRARR_SORT(SwCurrShells,CurrShellPtr)400 SV_IMPL_PTRARR_SORT(SwCurrShells,CurrShellPtr)
401 
402 CurrShell::CurrShell( ViewShell *pNew )
403 {
404 	ASSERT( pNew, "0-Shell einsetzen?" );
405 	pRoot = pNew->GetLayout();
406 	if ( pRoot )
407 	{
408 		pPrev = pRoot->pCurrShell;
409 		pRoot->pCurrShell = pNew;
410 		pRoot->pCurrShells->Insert( this );
411 	}
412 	else
413 		pPrev = 0;
414 }
415 
~CurrShell()416 CurrShell::~CurrShell()
417 {
418 	if ( pRoot )
419 	{
420 		pRoot->pCurrShells->Remove( this );
421 		if ( pPrev )
422 			pRoot->pCurrShell = pPrev;
423 		if ( !pRoot->pCurrShells->Count() && pRoot->pWaitingCurrShell )
424 		{
425 			pRoot->pCurrShell = pRoot->pWaitingCurrShell;
426 			pRoot->pWaitingCurrShell = 0;
427 		}
428 	}
429 }
430 
SetShell(ViewShell * pSh)431 void SetShell( ViewShell *pSh )
432 {
433 	SwRootFrm *pRoot = pSh->GetLayout();
434 	if ( !pRoot->pCurrShells->Count() )
435 		pRoot->pCurrShell = pSh;
436 	else
437 		pRoot->pWaitingCurrShell = pSh;
438 }
439 
DeRegisterShell(ViewShell * pSh)440 void SwRootFrm::DeRegisterShell( ViewShell *pSh )
441 {
442 	//Wenn moeglich irgendeine Shell aktivieren
443 	if ( pCurrShell == pSh )
444 		pCurrShell = pSh->GetNext() != pSh ? (ViewShell*)pSh->GetNext() : 0;
445 
446 	//Das hat sich eruebrigt
447 	if ( pWaitingCurrShell == pSh )
448 		pWaitingCurrShell = 0;
449 
450 	//Referenzen entfernen.
451 	for ( sal_uInt16 i = 0; i < pCurrShells->Count(); ++i )
452 	{
453 		CurrShell *pC = (*pCurrShells)[i];
454 		if (pC->pPrev == pSh)
455 			pC->pPrev = 0;
456 	}
457 }
458 
InitCurrShells(SwRootFrm * pRoot)459 void InitCurrShells( SwRootFrm *pRoot )
460 {
461 	pRoot->pCurrShells = new SwCurrShells;
462 }
463 
464 
465 /*************************************************************************
466 |*
467 |*	SwRootFrm::SwRootFrm()
468 |*
469 |*	Beschreibung:
470 |* 		Der RootFrm laesst sich grundsaetzlich vom Dokument ein eigenes
471 |* 		FrmFmt geben. Dieses loescht er dann selbst im DTor.
472 |* 		Das eigene FrmFmt wird vom uebergebenen Format abgeleitet.
473 |*	Ersterstellung		SS 05-Apr-1991
474 |*	Letzte Aenderung	MA 12. Dec. 94
475 |*
476 |*************************************************************************/
477 
478 
SwRootFrm(SwFrmFmt * pFmt,ViewShell * pSh)479 SwRootFrm::SwRootFrm( SwFrmFmt *pFmt, ViewShell * pSh ) :
480 	SwLayoutFrm( pFmt->GetDoc()->MakeFrmFmt(
481 		XubString( "Root", RTL_TEXTENCODING_MS_1252 ), pFmt ), 0 ),
482     // --> PAGES01
483     maPagesArea(),
484     mnViewWidth( -1 ),
485     mnColumns( 0 ),
486     mbBookMode( false ),
487     mbSidebarChanged( false ),
488     mbNeedGrammarCheck( false ),
489     // <--
490     nBrowseWidth( MM50*4 ), //2cm Minimum
491     pTurbo( 0 ),
492 	pLastPage( 0 ),
493 	pCurrShell( pSh ),
494 	pWaitingCurrShell( 0 ),
495     pDrawPage( 0 ),
496     pDestroy( 0 ),
497 	nPhyPageNums( 0 ),
498     nAccessibleShells( 0 )
499 {
500     nType = FRMC_ROOT;
501 	bIdleFormat = bTurboAllowed = bAssertFlyPages = bIsNewLayout = sal_True;
502 	bCheckSuperfluous = bBrowseWidthValid = sal_False;
503     setRootFrm( this );
504 }
505 
Init(SwFrmFmt * pFmt)506 void SwRootFrm::Init( SwFrmFmt* pFmt )
507 {
508 	InitCurrShells( this );
509 
510 	IDocumentTimerAccess *pTimerAccess = pFmt->getIDocumentTimerAccess();
511 	IDocumentLayoutAccess *pLayoutAccess = pFmt->getIDocumentLayoutAccess();
512 	IDocumentFieldsAccess *pFieldsAccess = pFmt->getIDocumentFieldsAccess();
513 	const IDocumentSettingAccess *pSettingAccess = pFmt->getIDocumentSettingAccess();
514 	pTimerAccess->StopIdling();
515 	pLayoutAccess->SetCurrentViewShell( this->GetCurrShell() );		//Fuer das Erzeugen der Flys durch MakeFrms()	//swmod 071108//swmod 071225
516 	bCallbackActionEnabled = sal_False;	//vor Verlassen auf sal_True setzen!
517 
518     SwDrawModel* pMd = pFmt->getIDocumentDrawModelAccess()->GetDrawModel();
519 	if ( pMd )
520 	{
521         // Disable "multiple layout"
522 		pDrawPage = pMd->GetPage(0); //pMd->AllocPage( FALSE );
523         //pMd->InsertPage( pDrawPage );
524         // end of disabling
525 
526 		pDrawPage->SetSize( Frm().SSize() );
527 	}
528 
529 	//Initialisierung des Layouts: Seiten erzeugen. Inhalt mit cntnt verbinden
530 	//usw.
531 	//Zuerst einiges initialiseren und den ersten Node besorgen (der wird
532 	//fuer den PageDesc benoetigt).
533 
534     SwDoc* pDoc = pFmt->GetDoc();
535 	SwNodeIndex aIndex( *pDoc->GetNodes().GetEndOfContent().StartOfSectionNode() );
536 	SwCntntNode *pNode = pDoc->GetNodes().GoNextSection( &aIndex, sal_True, sal_False );
537     // --> FME 2005-05-25 #123067# pNode = 0 can really happen:
538     SwTableNode *pTblNd= pNode ? pNode->FindTableNode() : 0;
539     // <--
540 
541 	//PageDesc besorgen (entweder vom FrmFmt des ersten Node oder den
542 	//initialen.)
543 	SwPageDesc *pDesc = 0;
544 	sal_uInt16 nPgNum = 1;
545 
546 	if ( pTblNd )
547 	{
548 		const SwFmtPageDesc &rDesc = pTblNd->GetTable().GetFrmFmt()->GetPageDesc();
549 		pDesc = (SwPageDesc*)rDesc.GetPageDesc();
550 		//#19104# Seitennummeroffset beruecksictigen!!
551 		bIsVirtPageNum = 0 != ( nPgNum = rDesc.GetNumOffset() );
552 	}
553 	else if ( pNode )
554 	{
555 		const SwFmtPageDesc &rDesc = pNode->GetSwAttrSet().GetPageDesc();
556 		pDesc = (SwPageDesc*)rDesc.GetPageDesc();
557 		//#19104# Seitennummeroffset beruecksictigen!!
558 		bIsVirtPageNum = 0 != ( nPgNum = rDesc.GetNumOffset() );
559 	}
560 	else
561 		bIsVirtPageNum = sal_False;
562 	if ( !pDesc )
563 		pDesc = (SwPageDesc*)
564             &const_cast<const SwDoc *>(pDoc)->GetPageDesc( 0 );
565 	const sal_Bool bOdd = !nPgNum || 0 != ( nPgNum % 2 );
566 
567 	//Eine Seite erzeugen und in das Layout stellen
568 	SwPageFrm *pPage = ::InsertNewPage( *pDesc, this, bOdd, sal_False, sal_False, 0 );
569 
570 	//Erstes Blatt im Bodytext-Bereich suchen.
571 	SwLayoutFrm *pLay = pPage->FindBodyCont();
572 	while( pLay->Lower() )
573 		pLay = (SwLayoutFrm*)pLay->Lower();
574 
575 	SwNodeIndex aTmp( *pDoc->GetNodes().GetEndOfContent().StartOfSectionNode(), 1 );
576 	::_InsertCnt( pLay, pDoc, aTmp.GetIndex(), sal_True );
577 	//Noch nicht ersetzte Master aus der Liste entfernen.
578 	RemoveMasterObjs( pDrawPage );
579 	if( pSettingAccess->get(IDocumentSettingAccess::GLOBAL_DOCUMENT) )
580 		pFieldsAccess->UpdateRefFlds( NULL );
581     //b6433357: Update page fields after loading
582     // --->
583     if ( !pCurrShell || !pCurrShell->Imp()->IsUpdateExpFlds() )
584     {
585         SwDocPosUpdate aMsgHnt( pPage->Frm().Top() );
586         pFieldsAccess->UpdatePageFlds( &aMsgHnt );
587     }
588     // <---
589 
590     pTimerAccess->StartIdling();
591 	bCallbackActionEnabled = sal_True;
592 
593     ViewShell *pViewSh  = GetCurrShell();
594     if (pViewSh)
595         mbNeedGrammarCheck = pViewSh->GetViewOptions()->IsOnlineSpell();
596 }
597 
598 /*************************************************************************
599 |*
600 |*	SwRootFrm::~SwRootFrm()
601 |*
602 |*	Ersterstellung		SS 05-Apr-1991
603 |*	Letzte Aenderung	MA 12. Dec. 94
604 |*
605 |*************************************************************************/
606 
607 
608 
~SwRootFrm()609 SwRootFrm::~SwRootFrm()
610 {
611 	bTurboAllowed = sal_False;
612 	pTurbo = 0;
613 	if(pBlink)
614 		pBlink->FrmDelete( this );
615 	static_cast<SwFrmFmt*>(GetRegisteredInNonConst())->GetDoc()->DelFrmFmt( static_cast<SwFrmFmt*>(GetRegisteredInNonConst()) );
616 	delete pDestroy;
617     pDestroy = 0;
618 
619 	//Referenzen entfernen.
620 	for ( sal_uInt16 i = 0; i < pCurrShells->Count(); ++i )
621 		(*pCurrShells)[i]->pRoot = 0;
622 
623 	delete pCurrShells;
624 
625 	ASSERT( 0==nAccessibleShells, "Some accessible shells are left" );
626 }
627 
628 /*************************************************************************
629 |*
630 |*	SwRootFrm::RemoveMasterObjs()
631 |*
632 |*	Ersterstellung		MA 19.10.95
633 |*	Letzte Aenderung	MA 19.10.95
634 |*
635 |*************************************************************************/
636 
637 
RemoveMasterObjs(SdrPage * pPg)638 void SwRootFrm::RemoveMasterObjs( SdrPage *pPg )
639 {
640 	//Alle Masterobjekte aus der Page entfernen. Nicht loeschen!!
641 	for( sal_uLong i = pPg ? pPg->GetObjCount() : 0; i; )
642 	{
643 		SdrObject* pObj = pPg->GetObj( --i );
644 		if( pObj->ISA(SwFlyDrawObj ) )
645 			pPg->RemoveObject( i );
646 	}
647 }
648 
649 
AllCheckPageDescs() const650 void SwRootFrm::AllCheckPageDescs() const
651 {
652 	CheckPageDescs( (SwPageFrm*)this->Lower() );
653 }
654 //swmod 080226
AllInvalidateAutoCompleteWords() const655 void SwRootFrm::AllInvalidateAutoCompleteWords() const
656 {
657 	SwPageFrm *pPage = (SwPageFrm*)this->Lower();
658 	while ( pPage )
659 	{
660 		pPage->InvalidateAutoCompleteWords();
661 		pPage = (SwPageFrm*)pPage->GetNext();
662 	}
663 }//swmod 080305
AllAddPaintRect() const664 void SwRootFrm::AllAddPaintRect() const
665 {
666 	GetCurrShell()->AddPaintRect( this->Frm() );
667 }//swmod 080305
AllRemoveFtns()668 void SwRootFrm::AllRemoveFtns()
669 {
670 	RemoveFtns();
671 }
AllInvalidateSmartTagsOrSpelling(sal_Bool bSmartTags) const672 void SwRootFrm::AllInvalidateSmartTagsOrSpelling(sal_Bool bSmartTags) const
673 {
674 	SwPageFrm *pPage = (SwPageFrm*)this->Lower();
675 	while ( pPage )
676 	{
677 		if ( bSmartTags )
678 			pPage->InvalidateSmartTags();
679 
680 		pPage->InvalidateSpelling();
681 		pPage = (SwPageFrm*)pPage->GetNext();
682 	}	//swmod 080218
683 }
684 
685