xref: /trunk/main/sw/source/core/view/vprint.cxx (revision ca41231d9e330adbb3cff54175670d80e843e360)
1efeef26fSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3efeef26fSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4efeef26fSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5efeef26fSAndrew Rist  * distributed with this work for additional information
6efeef26fSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7efeef26fSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8efeef26fSAndrew Rist  * "License"); you may not use this file except in compliance
9efeef26fSAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
11efeef26fSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13efeef26fSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14efeef26fSAndrew Rist  * software distributed under the License is distributed on an
15efeef26fSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16efeef26fSAndrew Rist  * KIND, either express or implied.  See the License for the
17efeef26fSAndrew Rist  * specific language governing permissions and limitations
18efeef26fSAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
20efeef26fSAndrew Rist  *************************************************************/
21efeef26fSAndrew Rist 
22efeef26fSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sw.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir 
28cdf0e10cSrcweir #include <com/sun/star/uno/Sequence.hxx>
29cdf0e10cSrcweir #include <com/sun/star/uno/Any.hxx>
30cdf0e10cSrcweir #include <com/sun/star/uno/Any.hxx>
31cdf0e10cSrcweir #include <com/sun/star/view/XRenderable.hpp>
32cdf0e10cSrcweir 
33cdf0e10cSrcweir #include <hintids.hxx>
34cdf0e10cSrcweir #include <rtl/ustring.hxx>
35cdf0e10cSrcweir #include <sfx2/app.hxx>
36cdf0e10cSrcweir #include <sfx2/objsh.hxx>
37cdf0e10cSrcweir #include <sfx2/prnmon.hxx>
38cdf0e10cSrcweir #include <svl/languageoptions.hxx>
39cdf0e10cSrcweir #include <editeng/paperinf.hxx>
40cdf0e10cSrcweir #include <editeng/pbinitem.hxx>
41cdf0e10cSrcweir #include <svx/svdview.hxx>
42cdf0e10cSrcweir #include <toolkit/awt/vclxdevice.hxx>
43cdf0e10cSrcweir #include <tools/debug.hxx>
44cdf0e10cSrcweir #include <unotools/localedatawrapper.hxx>
45cdf0e10cSrcweir #include <unotools/moduleoptions.hxx>
46cdf0e10cSrcweir #include <unotools/syslocale.hxx>
47cdf0e10cSrcweir #include <vcl/oldprintadaptor.hxx>
48cdf0e10cSrcweir 
49cdf0e10cSrcweir #include <unotxdoc.hxx>
50cdf0e10cSrcweir #include <docsh.hxx>
51cdf0e10cSrcweir #include <txtfld.hxx>
52cdf0e10cSrcweir #include <fmtfld.hxx>
53cdf0e10cSrcweir #include <fmtfsize.hxx>
54cdf0e10cSrcweir #include <frmatr.hxx>
55cdf0e10cSrcweir #include <rootfrm.hxx>
56cdf0e10cSrcweir #include <pagefrm.hxx>
57cdf0e10cSrcweir #include <cntfrm.hxx>
58cdf0e10cSrcweir #include <doc.hxx>
59cdf0e10cSrcweir #include <IDocumentUndoRedo.hxx>
60cdf0e10cSrcweir #include <wdocsh.hxx>
61cdf0e10cSrcweir #include <fesh.hxx>
62cdf0e10cSrcweir #include <pam.hxx>
63cdf0e10cSrcweir #include <viewimp.hxx>      // Imp->SetFirstVisPageInvalid()
64cdf0e10cSrcweir #include <layact.hxx>
65cdf0e10cSrcweir #include <ndtxt.hxx>
66cdf0e10cSrcweir #include <fldbas.hxx>
67cdf0e10cSrcweir #include <docfld.hxx>       // _SetGetExpFld
68cdf0e10cSrcweir #include <docufld.hxx>      // PostItFld /-Type
69cdf0e10cSrcweir #include <shellres.hxx>
70cdf0e10cSrcweir #include <viewopt.hxx>
71cdf0e10cSrcweir #include <printdata.hxx>    // SwPrintData
72cdf0e10cSrcweir #include <pagedesc.hxx>
73*ca41231dSmseidel #include <poolfmt.hxx>      // for RES_POOLPAGE_JAKET
74cdf0e10cSrcweir #include <mdiexp.hxx>       // Ansteuern der Statusleiste
75cdf0e10cSrcweir #include <statstr.hrc>      //      -- " --
76cdf0e10cSrcweir #include <ptqueue.hxx>
77cdf0e10cSrcweir #include <tabfrm.hxx>
78cdf0e10cSrcweir #include <txtfrm.hxx>       // MinPrtLine
79cdf0e10cSrcweir #include <viscrs.hxx>       // SwShellCrsr
80cdf0e10cSrcweir #include <fmtpdsc.hxx>      // SwFmtPageDesc
81cdf0e10cSrcweir #include <globals.hrc>
82cdf0e10cSrcweir 
83cdf0e10cSrcweir 
84cdf0e10cSrcweir using namespace ::com::sun::star;
85cdf0e10cSrcweir 
86cdf0e10cSrcweir //--------------------------------------------------------------------
87cdf0e10cSrcweir //Klasse zum Puffern von Paints
88cdf0e10cSrcweir class SwQueuedPaint
89cdf0e10cSrcweir {
90cdf0e10cSrcweir public:
91cdf0e10cSrcweir     SwQueuedPaint *pNext;
92cdf0e10cSrcweir     ViewShell      *pSh;
93cdf0e10cSrcweir     SwRect          aRect;
94cdf0e10cSrcweir 
SwQueuedPaint(ViewShell * pNew,const SwRect & rRect)95cdf0e10cSrcweir     SwQueuedPaint( ViewShell *pNew, const SwRect &rRect ) :
96cdf0e10cSrcweir         pNext( 0 ),
97cdf0e10cSrcweir         pSh( pNew ),
98cdf0e10cSrcweir         aRect( rRect )
99cdf0e10cSrcweir     {}
100cdf0e10cSrcweir };
101cdf0e10cSrcweir 
102cdf0e10cSrcweir SwQueuedPaint *SwPaintQueue::pQueue = 0;
103cdf0e10cSrcweir 
104cdf0e10cSrcweir // saves some settings from the draw view
105cdf0e10cSrcweir class SwDrawViewSave
106cdf0e10cSrcweir {
107cdf0e10cSrcweir     String sLayerNm;
108cdf0e10cSrcweir     SdrView* pDV;
109cdf0e10cSrcweir     sal_Bool bPrintControls;
110cdf0e10cSrcweir public:
111cdf0e10cSrcweir     SwDrawViewSave( SdrView* pSdrView );
112cdf0e10cSrcweir     ~SwDrawViewSave();
113cdf0e10cSrcweir };
114cdf0e10cSrcweir 
115cdf0e10cSrcweir 
Add(ViewShell * pNew,const SwRect & rNew)116cdf0e10cSrcweir void SwPaintQueue::Add( ViewShell *pNew, const SwRect &rNew )
117cdf0e10cSrcweir {
118cdf0e10cSrcweir     SwQueuedPaint *pPt;
119cdf0e10cSrcweir     if ( 0 != (pPt = pQueue) )
120cdf0e10cSrcweir     {
121cdf0e10cSrcweir         while ( pPt->pSh != pNew && pPt->pNext )
122cdf0e10cSrcweir             pPt = pPt->pNext;
123cdf0e10cSrcweir         if ( pPt->pSh == pNew )
124cdf0e10cSrcweir         {
125cdf0e10cSrcweir             pPt->aRect.Union( rNew );
126cdf0e10cSrcweir             return;
127cdf0e10cSrcweir         }
128cdf0e10cSrcweir     }
129cdf0e10cSrcweir     SwQueuedPaint *pNQ = new SwQueuedPaint( pNew, rNew );
130cdf0e10cSrcweir     if ( pPt )
131cdf0e10cSrcweir         pPt->pNext = pNQ;
132cdf0e10cSrcweir     else
133cdf0e10cSrcweir         pQueue = pNQ;
134cdf0e10cSrcweir }
135cdf0e10cSrcweir 
136cdf0e10cSrcweir 
137cdf0e10cSrcweir 
Repaint()138cdf0e10cSrcweir void SwPaintQueue::Repaint()
139cdf0e10cSrcweir {
140cdf0e10cSrcweir     if ( !SwRootFrm::IsInPaint() && pQueue )
141cdf0e10cSrcweir     {
142cdf0e10cSrcweir         SwQueuedPaint *pPt = pQueue;
143cdf0e10cSrcweir         do
144cdf0e10cSrcweir         {   ViewShell *pSh = pPt->pSh;
145cdf0e10cSrcweir             SET_CURR_SHELL( pSh );
146cdf0e10cSrcweir             if ( pSh->IsPreView() )
147cdf0e10cSrcweir             {
148cdf0e10cSrcweir                 if ( pSh->GetWin() )
149cdf0e10cSrcweir                 {
150*ca41231dSmseidel                     // Für PreView aussenherum, weil im PaintHdl (UI) die
151cdf0e10cSrcweir                     // Zeilen/Spalten bekannt sind.
152cdf0e10cSrcweir                     pSh->GetWin()->Invalidate();
153cdf0e10cSrcweir                     pSh->GetWin()->Update();
154cdf0e10cSrcweir                 }
155cdf0e10cSrcweir             }
156cdf0e10cSrcweir             else
157cdf0e10cSrcweir                 pSh->Paint( pPt->aRect.SVRect() );
158cdf0e10cSrcweir             pPt = pPt->pNext;
159cdf0e10cSrcweir         } while ( pPt );
160cdf0e10cSrcweir 
161cdf0e10cSrcweir         do
162cdf0e10cSrcweir         {   pPt = pQueue;
163cdf0e10cSrcweir             pQueue = pQueue->pNext;
164cdf0e10cSrcweir             delete pPt;
165cdf0e10cSrcweir         } while ( pQueue );
166cdf0e10cSrcweir     }
167cdf0e10cSrcweir }
168cdf0e10cSrcweir 
169cdf0e10cSrcweir 
170cdf0e10cSrcweir 
Remove(ViewShell * pSh)171cdf0e10cSrcweir void SwPaintQueue::Remove( ViewShell *pSh )
172cdf0e10cSrcweir {
173cdf0e10cSrcweir     SwQueuedPaint *pPt;
174cdf0e10cSrcweir     if ( 0 != (pPt = pQueue) )
175cdf0e10cSrcweir     {
176cdf0e10cSrcweir         SwQueuedPaint *pPrev = 0;
177cdf0e10cSrcweir         while ( pPt && pPt->pSh != pSh )
178cdf0e10cSrcweir         {
179cdf0e10cSrcweir             pPrev = pPt;
180cdf0e10cSrcweir             pPt = pPt->pNext;
181cdf0e10cSrcweir         }
182cdf0e10cSrcweir         if ( pPt )
183cdf0e10cSrcweir         {
184cdf0e10cSrcweir             if ( pPrev )
185cdf0e10cSrcweir                 pPrev->pNext = pPt->pNext;
186cdf0e10cSrcweir             else if ( pPt == pQueue )
187cdf0e10cSrcweir                 pQueue = 0;
188cdf0e10cSrcweir             delete pPt;
189cdf0e10cSrcweir         }
190cdf0e10cSrcweir     }
191cdf0e10cSrcweir }
192cdf0e10cSrcweir 
1935766e809SHerbert Dürr // ******************************************************************************
194cdf0e10cSrcweir 
SetSwVisArea(ViewShell * pSh,const SwRect & rRect)1955766e809SHerbert Dürr void SetSwVisArea( ViewShell *pSh, const SwRect &rRect /*, sal_Bool bPDFExport*/ )
196cdf0e10cSrcweir {
197cdf0e10cSrcweir     ASSERT( !pSh->GetWin(), "Drucken mit Window?" );
198cdf0e10cSrcweir     pSh->aVisArea = rRect;
199cdf0e10cSrcweir     pSh->Imp()->SetFirstVisPageInvalid();
200cdf0e10cSrcweir     Point aPt( rRect.Pos() );
201cdf0e10cSrcweir 
202cdf0e10cSrcweir     // calculate an offset for the rectangle of the n-th page to
203cdf0e10cSrcweir     // move the start point of the output operation to a position
204cdf0e10cSrcweir     // such that in the output device all pages will be painted
205cdf0e10cSrcweir     // at the same position
206cdf0e10cSrcweir     aPt.X() = -aPt.X(); aPt.Y() = -aPt.Y();
207cdf0e10cSrcweir 
208cdf0e10cSrcweir     OutputDevice *pOut = pSh->GetOut();
209cdf0e10cSrcweir 
210cdf0e10cSrcweir     MapMode aMapMode( pOut->GetMapMode() );
211cdf0e10cSrcweir     aMapMode.SetOrigin( aPt );
212cdf0e10cSrcweir     pOut->SetMapMode( aMapMode );
213cdf0e10cSrcweir }
214cdf0e10cSrcweir 
215cdf0e10cSrcweir /******************************************************************************/
216cdf0e10cSrcweir 
InitPrt(OutputDevice * pOutDev)217cdf0e10cSrcweir void ViewShell::InitPrt( OutputDevice *pOutDev )
218cdf0e10cSrcweir {
219*ca41231dSmseidel     // Für den Printer merken wir uns einen negativen Offset, der
220*ca41231dSmseidel     // genau dem Offset der OutputSize entspricht. Das ist notwendig,
221*ca41231dSmseidel     // weil unser Ursprung die linke obere Ecke der physikalischen
222*ca41231dSmseidel     // Seite ist, die Ausgaben (SV) aber den Outputoffset als Ursprung
223cdf0e10cSrcweir     // betrachten.
224cdf0e10cSrcweir     if ( pOutDev )
225cdf0e10cSrcweir     {
226cdf0e10cSrcweir         aPrtOffst = Point();
227cdf0e10cSrcweir 
228cdf0e10cSrcweir         aPrtOffst += pOutDev->GetMapMode().GetOrigin();
229cdf0e10cSrcweir         MapMode aMapMode( pOutDev->GetMapMode() );
230cdf0e10cSrcweir         aMapMode.SetMapUnit( MAP_TWIP );
231cdf0e10cSrcweir         pOutDev->SetMapMode( aMapMode );
232cdf0e10cSrcweir         pOutDev->SetLineColor();
233cdf0e10cSrcweir         pOutDev->SetFillColor();
234cdf0e10cSrcweir     }
235cdf0e10cSrcweir     else
236cdf0e10cSrcweir         aPrtOffst.X() = aPrtOffst.Y() = 0;
237cdf0e10cSrcweir 
238cdf0e10cSrcweir     if ( !pWin )
239cdf0e10cSrcweir         pOut = pOutDev; //Oder was sonst?
240cdf0e10cSrcweir }
241cdf0e10cSrcweir 
242cdf0e10cSrcweir /******************************************************************************
243cdf0e10cSrcweir  *  Methode     :   void ViewShell::ChgAllPageOrientation
244cdf0e10cSrcweir  *  Erstellt    :   MA 08. Aug. 95
245cdf0e10cSrcweir  *  Aenderung   :
246cdf0e10cSrcweir  ******************************************************************************/
247cdf0e10cSrcweir 
248cdf0e10cSrcweir 
ChgAllPageOrientation(sal_uInt16 eOri)249cdf0e10cSrcweir void ViewShell::ChgAllPageOrientation( sal_uInt16 eOri )
250cdf0e10cSrcweir {
251cdf0e10cSrcweir     ASSERT( nStartAction, "missing an Action" );
252cdf0e10cSrcweir     SET_CURR_SHELL( this );
253cdf0e10cSrcweir 
254cdf0e10cSrcweir     sal_uInt16 nAll = GetDoc()->GetPageDescCnt();
255cdf0e10cSrcweir     sal_Bool bNewOri = Orientation(eOri) == ORIENTATION_PORTRAIT ? sal_False : sal_True;
256cdf0e10cSrcweir 
257cdf0e10cSrcweir     for( sal_uInt16 i = 0; i < nAll; ++ i )
258cdf0e10cSrcweir     {
259cdf0e10cSrcweir         const SwPageDesc& rOld =
260cdf0e10cSrcweir             const_cast<const SwDoc *>(GetDoc())->GetPageDesc( i );
261cdf0e10cSrcweir 
262cdf0e10cSrcweir         if( rOld.GetLandscape() != bNewOri )
263cdf0e10cSrcweir         {
264cdf0e10cSrcweir             SwPageDesc aNew( rOld );
265cdf0e10cSrcweir             {
266cdf0e10cSrcweir                 ::sw::UndoGuard const ug(GetDoc()->GetIDocumentUndoRedo());
267cdf0e10cSrcweir                 GetDoc()->CopyPageDesc(rOld, aNew);
268cdf0e10cSrcweir             }
269cdf0e10cSrcweir             aNew.SetLandscape( bNewOri );
270cdf0e10cSrcweir             SwFrmFmt& rFmt = aNew.GetMaster();
271cdf0e10cSrcweir             SwFmtFrmSize aSz( rFmt.GetFrmSize() );
272cdf0e10cSrcweir             // Groesse anpassen.
273cdf0e10cSrcweir             // PORTRAIT  -> Hoeher als Breit
274cdf0e10cSrcweir             // LANDSCAPE -> Breiter als Hoch
275cdf0e10cSrcweir             // Hoehe ist die VarSize, Breite ist die FixSize (per Def.)
276cdf0e10cSrcweir             if( bNewOri ? aSz.GetHeight() > aSz.GetWidth()
277cdf0e10cSrcweir                         : aSz.GetHeight() < aSz.GetWidth() )
278cdf0e10cSrcweir             {
279cdf0e10cSrcweir                 SwTwips aTmp = aSz.GetHeight();
280cdf0e10cSrcweir                 aSz.SetHeight( aSz.GetWidth() );
281cdf0e10cSrcweir                 aSz.SetWidth( aTmp );
282cdf0e10cSrcweir                 rFmt.SetFmtAttr( aSz );
283cdf0e10cSrcweir             }
284cdf0e10cSrcweir             GetDoc()->ChgPageDesc( i, aNew );
285cdf0e10cSrcweir         }
286cdf0e10cSrcweir     }
287cdf0e10cSrcweir }
288cdf0e10cSrcweir 
289cdf0e10cSrcweir /******************************************************************************
290cdf0e10cSrcweir  *  Methode     :   void ViewShell::ChgAllPageOrientation
291cdf0e10cSrcweir  *  Erstellt    :   MA 08. Aug. 95
292cdf0e10cSrcweir  *  Aenderung   :
293cdf0e10cSrcweir  ******************************************************************************/
294cdf0e10cSrcweir 
295cdf0e10cSrcweir 
ChgAllPageSize(Size & rSz)296cdf0e10cSrcweir void ViewShell::ChgAllPageSize( Size &rSz )
297cdf0e10cSrcweir {
298cdf0e10cSrcweir     ASSERT( nStartAction, "missing an Action" );
299cdf0e10cSrcweir     SET_CURR_SHELL( this );
300cdf0e10cSrcweir 
301cdf0e10cSrcweir     SwDoc* pMyDoc = GetDoc();
302cdf0e10cSrcweir     sal_uInt16 nAll = pMyDoc->GetPageDescCnt();
303cdf0e10cSrcweir 
304cdf0e10cSrcweir     for( sal_uInt16 i = 0; i < nAll; ++i )
305cdf0e10cSrcweir     {
306cdf0e10cSrcweir         const SwPageDesc &rOld = const_cast<const SwDoc *>(pMyDoc)->GetPageDesc( i );
307cdf0e10cSrcweir         SwPageDesc aNew( rOld );
308cdf0e10cSrcweir         {
309cdf0e10cSrcweir             ::sw::UndoGuard const ug(GetDoc()->GetIDocumentUndoRedo());
310cdf0e10cSrcweir             GetDoc()->CopyPageDesc( rOld, aNew );
311cdf0e10cSrcweir         }
312cdf0e10cSrcweir         SwFrmFmt& rPgFmt = aNew.GetMaster();
313cdf0e10cSrcweir         Size aSz( rSz );
314cdf0e10cSrcweir         const sal_Bool bOri = aNew.GetLandscape();
315cdf0e10cSrcweir         if( bOri  ? aSz.Height() > aSz.Width()
316cdf0e10cSrcweir                   : aSz.Height() < aSz.Width() )
317cdf0e10cSrcweir         {
318cdf0e10cSrcweir             SwTwips aTmp = aSz.Height();
319cdf0e10cSrcweir             aSz.Height() = aSz.Width();
320cdf0e10cSrcweir             aSz.Width()  = aTmp;
321cdf0e10cSrcweir         }
322cdf0e10cSrcweir 
323cdf0e10cSrcweir         SwFmtFrmSize aFrmSz( rPgFmt.GetFrmSize() );
324cdf0e10cSrcweir         aFrmSz.SetSize( aSz );
325cdf0e10cSrcweir         rPgFmt.SetFmtAttr( aFrmSz );
326cdf0e10cSrcweir         pMyDoc->ChgPageDesc( i, aNew );
327cdf0e10cSrcweir     }
328cdf0e10cSrcweir }
329cdf0e10cSrcweir 
330cdf0e10cSrcweir 
CalcPagesForPrint(sal_uInt16 nMax)331cdf0e10cSrcweir void ViewShell::CalcPagesForPrint( sal_uInt16 nMax )
332cdf0e10cSrcweir {
333cdf0e10cSrcweir     SET_CURR_SHELL( this );
334cdf0e10cSrcweir 
335cdf0e10cSrcweir     SwRootFrm* pMyLayout = GetLayout();
336cdf0e10cSrcweir 
337cdf0e10cSrcweir     const SwFrm *pPage = pMyLayout->Lower();
338cdf0e10cSrcweir     SwLayAction aAction( pMyLayout, Imp() );
339cdf0e10cSrcweir 
340cdf0e10cSrcweir     pMyLayout->StartAllAction();
341cdf0e10cSrcweir     for ( sal_uInt16 i = 1; pPage && i <= nMax; pPage = pPage->GetNext(), ++i )
342cdf0e10cSrcweir     {
343cdf0e10cSrcweir         pPage->Calc();
344cdf0e10cSrcweir         SwRect aOldVis( VisArea() );
345cdf0e10cSrcweir         aVisArea = pPage->Frm();
346cdf0e10cSrcweir         Imp()->SetFirstVisPageInvalid();
347cdf0e10cSrcweir         aAction.Reset();
348cdf0e10cSrcweir         aAction.SetPaint( sal_False );
349cdf0e10cSrcweir         aAction.SetWaitAllowed( sal_False );
350cdf0e10cSrcweir         aAction.SetReschedule( sal_True );
351cdf0e10cSrcweir 
352cdf0e10cSrcweir         aAction.Action();
353cdf0e10cSrcweir 
354cdf0e10cSrcweir         aVisArea = aOldVis; //Zuruecksetzen wg. der Paints!
355cdf0e10cSrcweir         Imp()->SetFirstVisPageInvalid();
356cdf0e10cSrcweir //      SwPaintQueue::Repaint();
357cdf0e10cSrcweir     }
358cdf0e10cSrcweir 
359cdf0e10cSrcweir     pMyLayout->EndAllAction();
360cdf0e10cSrcweir }
361cdf0e10cSrcweir 
362cdf0e10cSrcweir /******************************************************************************/
363cdf0e10cSrcweir 
FillPrtDoc(SwDoc * pPrtDoc,const SfxPrinter * pPrt)364cdf0e10cSrcweir SwDoc * ViewShell::FillPrtDoc( SwDoc *pPrtDoc, const SfxPrinter* pPrt)
365cdf0e10cSrcweir {
366cdf0e10cSrcweir     ASSERT( this->IsA( TYPE(SwFEShell) ),"ViewShell::Prt for FEShell only");
367cdf0e10cSrcweir     SwFEShell* pFESh = (SwFEShell*)this;
368cdf0e10cSrcweir     // Wir bauen uns ein neues Dokument
369cdf0e10cSrcweir //  SwDoc *pPrtDoc = new SwDoc;
370cdf0e10cSrcweir //  pPrtDoc->acquire();
371cdf0e10cSrcweir //  pPrtDoc->SetRefForDocShell( (SvEmbeddedObjectRef*)&(long&)rDocShellRef );
372cdf0e10cSrcweir     pPrtDoc->LockExpFlds();
373cdf0e10cSrcweir 
374cdf0e10cSrcweir     // Der Drucker wird uebernommen
375cdf0e10cSrcweir     //! Make a copy of it since it gets destroyed with the temporary document
376cdf0e10cSrcweir     //! used for PDF export
377cdf0e10cSrcweir     if (pPrt)
378cdf0e10cSrcweir         pPrtDoc->setPrinter( new SfxPrinter(*pPrt), true, true );
379cdf0e10cSrcweir 
380cdf0e10cSrcweir     const SfxPoolItem* pCpyItem;
381cdf0e10cSrcweir     const SfxItemPool& rPool = GetAttrPool();
382cdf0e10cSrcweir     for( sal_uInt16 nWh = POOLATTR_BEGIN; nWh < POOLATTR_END; ++nWh )
383cdf0e10cSrcweir         if( 0 != ( pCpyItem = rPool.GetPoolDefaultItem( nWh ) ) )
384cdf0e10cSrcweir             pPrtDoc->GetAttrPool().SetPoolDefaultItem( *pCpyItem );
385cdf0e10cSrcweir 
386cdf0e10cSrcweir     // JP 29.07.99 - Bug 67951 - set all Styles from the SourceDoc into
387cdf0e10cSrcweir     //                           the PrintDoc - will be replaced!
388cdf0e10cSrcweir     pPrtDoc->ReplaceStyles( *GetDoc() );
389cdf0e10cSrcweir 
390cdf0e10cSrcweir     SwShellCrsr *pActCrsr = pFESh->_GetCrsr();
391cdf0e10cSrcweir     SwShellCrsr *pFirstCrsr = dynamic_cast<SwShellCrsr*>(pActCrsr->GetNext());
392cdf0e10cSrcweir     if( !pActCrsr->HasMark() ) // bei Multiselektion kann der aktuelle Cursor leer sein
393cdf0e10cSrcweir     {
394cdf0e10cSrcweir         pActCrsr = dynamic_cast<SwShellCrsr*>(pActCrsr->GetPrev());
395cdf0e10cSrcweir     }
396cdf0e10cSrcweir 
397cdf0e10cSrcweir     // Die Y-Position der ersten Selektion
398cdf0e10cSrcweir     // Die Y-Position der ersten Selektion
399cdf0e10cSrcweir     Point aSelPoint;
400cdf0e10cSrcweir     if( pFESh->IsTableMode() )
401cdf0e10cSrcweir     {
402cdf0e10cSrcweir         SwShellTableCrsr* pShellTblCrsr = pFESh->GetTableCrsr();
403cdf0e10cSrcweir 
404cdf0e10cSrcweir         const SwCntntNode* pCntntNode = pShellTblCrsr->GetNode()->GetCntntNode();
405cdf0e10cSrcweir         const SwCntntFrm *pCntntFrm = pCntntNode ? pCntntNode->getLayoutFrm( GetLayout(), 0, pShellTblCrsr->Start() ) : 0;
406cdf0e10cSrcweir         if( pCntntFrm )
407cdf0e10cSrcweir         {
408cdf0e10cSrcweir             SwRect aCharRect;
409cdf0e10cSrcweir             SwCrsrMoveState aTmpState( MV_NONE );
410cdf0e10cSrcweir             pCntntFrm->GetCharRect( aCharRect, *pShellTblCrsr->Start(), &aTmpState );
411cdf0e10cSrcweir     aSelPoint = Point( aCharRect.Left(), aCharRect.Top() );
412cdf0e10cSrcweir         }
413cdf0e10cSrcweir     }
414cdf0e10cSrcweir     else
415cdf0e10cSrcweir     {
416cdf0e10cSrcweir         aSelPoint = pFirstCrsr->GetSttPos();
417cdf0e10cSrcweir     }
418cdf0e10cSrcweir 
419cdf0e10cSrcweir     const SwPageFrm* pPage = GetLayout()->GetPageAtPos( aSelPoint );
420cdf0e10cSrcweir     ASSERT( pPage, "no page found!" );
421cdf0e10cSrcweir 
422cdf0e10cSrcweir     // get page descriptor - fall back to the first one if pPage could not be found
423cdf0e10cSrcweir     const SwPageDesc* pPageDesc = pPage ? pPrtDoc->FindPageDescByName(
424cdf0e10cSrcweir         pPage->GetPageDesc()->GetName() ) : &pPrtDoc->_GetPageDesc( (sal_uInt16)0 );
425cdf0e10cSrcweir 
426cdf0e10cSrcweir     if( !pFESh->IsTableMode() && pActCrsr->HasMark() )
427cdf0e10cSrcweir     {   // Am letzten Absatz die Absatzattribute richten:
428cdf0e10cSrcweir         SwNodeIndex aNodeIdx( *pPrtDoc->GetNodes().GetEndOfContent().StartOfSectionNode() );
429cdf0e10cSrcweir         SwTxtNode* pTxtNd = pPrtDoc->GetNodes().GoNext( &aNodeIdx )->GetTxtNode();
430cdf0e10cSrcweir         SwCntntNode *pLastNd =
431cdf0e10cSrcweir             pActCrsr->GetCntntNode( (*pActCrsr->GetMark()) <= (*pActCrsr->GetPoint()) );
432cdf0e10cSrcweir         // Hier werden die Absatzattribute des ersten Absatzes uebertragen
433cdf0e10cSrcweir         if( pLastNd && pLastNd->IsTxtNode() )
434cdf0e10cSrcweir             ((SwTxtNode*)pLastNd)->CopyCollFmt( *pTxtNd );
435cdf0e10cSrcweir     }
436cdf0e10cSrcweir 
437cdf0e10cSrcweir     // es wurde in der CORE eine neu angelegt (OLE-Objekte kopiert!)
438cdf0e10cSrcweir //REMOVE    //      if( aDocShellRef.Is() )
439cdf0e10cSrcweir //REMOVE    //          SwDataExchange::InitOle( aDocShellRef, pPrtDoc );
440cdf0e10cSrcweir     // und fuellen es mit dem selektierten Bereich
441cdf0e10cSrcweir     pFESh->Copy( pPrtDoc );
442cdf0e10cSrcweir 
443cdf0e10cSrcweir     //Jetzt noch am ersten Absatz die Seitenvorlage setzen
444cdf0e10cSrcweir     {
445cdf0e10cSrcweir         SwNodeIndex aNodeIdx( *pPrtDoc->GetNodes().GetEndOfContent().StartOfSectionNode() );
446cdf0e10cSrcweir         SwCntntNode* pCNd = pPrtDoc->GetNodes().GoNext( &aNodeIdx ); // gehe zum 1. ContentNode
447cdf0e10cSrcweir         if( pFESh->IsTableMode() )
448cdf0e10cSrcweir         {
449cdf0e10cSrcweir             SwTableNode* pTNd = pCNd->FindTableNode();
450cdf0e10cSrcweir             if( pTNd )
451cdf0e10cSrcweir                 pTNd->GetTable().GetFrmFmt()->SetFmtAttr( SwFmtPageDesc( pPageDesc ) );
452cdf0e10cSrcweir         }
453cdf0e10cSrcweir         else
454cdf0e10cSrcweir         {
455cdf0e10cSrcweir             pCNd->SetAttr( SwFmtPageDesc( pPageDesc ) );
456cdf0e10cSrcweir             if( pFirstCrsr->HasMark() )
457cdf0e10cSrcweir             {
458cdf0e10cSrcweir                 SwTxtNode *pTxtNd = pCNd->GetTxtNode();
459cdf0e10cSrcweir                 if( pTxtNd )
460cdf0e10cSrcweir                 {
461cdf0e10cSrcweir                     SwCntntNode *pFirstNd =
462cdf0e10cSrcweir                         pFirstCrsr->GetCntntNode( (*pFirstCrsr->GetMark()) > (*pFirstCrsr->GetPoint()) );
463cdf0e10cSrcweir                     // Hier werden die Absatzattribute des ersten Absatzes uebertragen
464cdf0e10cSrcweir                     if( pFirstNd && pFirstNd->IsTxtNode() )
465cdf0e10cSrcweir                         ((SwTxtNode*)pFirstNd)->CopyCollFmt( *pTxtNd );
466cdf0e10cSrcweir                 }
467cdf0e10cSrcweir             }
468cdf0e10cSrcweir         }
469cdf0e10cSrcweir     }
470cdf0e10cSrcweir     return pPrtDoc;
471cdf0e10cSrcweir }
472cdf0e10cSrcweir 
473cdf0e10cSrcweir 
PrintOrPDFExport(OutputDevice * pOutDev,SwPrintData const & rPrintData,sal_Int32 nRenderer)474cdf0e10cSrcweir sal_Bool ViewShell::PrintOrPDFExport(
475cdf0e10cSrcweir     OutputDevice *pOutDev,
476cdf0e10cSrcweir     SwPrintData const& rPrintData,
477cdf0e10cSrcweir     sal_Int32 nRenderer /* the index in the vector of pages to be printed */ )
478cdf0e10cSrcweir {
479cdf0e10cSrcweir //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
480cdf0e10cSrcweir //Immer die Druckroutinen in viewpg.cxx (PrintProspect) mitpflegen!!
481cdf0e10cSrcweir //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
482cdf0e10cSrcweir 
483cdf0e10cSrcweir     const sal_Int32 nMaxRenderer = rPrintData.GetRenderData().GetPagesToPrint().size() - 1;
484cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1
485cdf0e10cSrcweir     DBG_ASSERT( 0 <= nRenderer && nRenderer <= nMaxRenderer, "nRenderer out of bounds");
486cdf0e10cSrcweir #endif
487cdf0e10cSrcweir     if (!pOutDev || nMaxRenderer < 0 || nRenderer < 0 || nRenderer > nMaxRenderer)
488cdf0e10cSrcweir         return sal_False;
489cdf0e10cSrcweir 
490cdf0e10cSrcweir     // save settings of OutputDevice (should be done always since the
491cdf0e10cSrcweir     // output device is now provided by a call from outside the Writer)
492cdf0e10cSrcweir     pOutDev->Push();
493cdf0e10cSrcweir 
494cdf0e10cSrcweir     // eine neue Shell fuer den Printer erzeugen
495cdf0e10cSrcweir     ViewShell *pShell;
496cdf0e10cSrcweir     SwDoc *pOutDevDoc;
497cdf0e10cSrcweir 
498cdf0e10cSrcweir     // Print/PDF export for (multi-)selection has already generated a
499cdf0e10cSrcweir     // temporary document with the selected text.
500cdf0e10cSrcweir     // (see XRenderable implementation in unotxdoc.cxx)
501cdf0e10cSrcweir     // It is implemented this way because PDF export calls this Prt function
502cdf0e10cSrcweir     // once per page and we do not like to always have the temporary document
503cdf0e10cSrcweir     // to be created that often here.
504cdf0e10cSrcweir     pOutDevDoc = GetDoc();
505cdf0e10cSrcweir     pShell = new ViewShell( *this, 0, pOutDev );
506cdf0e10cSrcweir 
507cdf0e10cSrcweir     SdrView *pDrawView = pShell->GetDrawView();
508cdf0e10cSrcweir     if (pDrawView)
509cdf0e10cSrcweir     {
510cdf0e10cSrcweir         pDrawView->SetBufferedOutputAllowed( false );
511cdf0e10cSrcweir         pDrawView->SetBufferedOverlayAllowed( false );
512cdf0e10cSrcweir     }
513cdf0e10cSrcweir 
514cdf0e10cSrcweir     {   //Zusaetzlicher Scope, damit die CurrShell vor dem zerstoeren der
515cdf0e10cSrcweir         //Shell zurueckgesetzt wird.
516cdf0e10cSrcweir 
517cdf0e10cSrcweir         SET_CURR_SHELL( pShell );
518cdf0e10cSrcweir 
519cdf0e10cSrcweir         //JP 01.02.99: das ReadOnly Flag wird NIE mitkopiert; Bug 61335
520cdf0e10cSrcweir         if( pOpt->IsReadonly() )
521cdf0e10cSrcweir             pShell->pOpt->SetReadonly( sal_True );
522cdf0e10cSrcweir 
523cdf0e10cSrcweir         // save options at draw view:
524cdf0e10cSrcweir         SwDrawViewSave aDrawViewSave( pShell->GetDrawView() );
525cdf0e10cSrcweir 
526cdf0e10cSrcweir         pShell->PrepareForPrint( rPrintData );
527cdf0e10cSrcweir 
528cdf0e10cSrcweir         const sal_Int32 nPage = rPrintData.GetRenderData().GetPagesToPrint()[ nRenderer ];
529cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1
530cdf0e10cSrcweir         DBG_ASSERT( nPage == 0 || rPrintData.GetRenderData().GetValidPagesSet().count( nPage ) == 1, "nPage not valid" );
531cdf0e10cSrcweir #endif
532cdf0e10cSrcweir         const SwPageFrm *pStPage = 0;
533cdf0e10cSrcweir         if (nPage > 0) // a 'regular' page, not one from the post-it document
534cdf0e10cSrcweir         {
535cdf0e10cSrcweir             const SwRenderData::ValidStartFramesMap_t &rFrms = rPrintData.GetRenderData().GetValidStartFrames();
536cdf0e10cSrcweir             SwRenderData::ValidStartFramesMap_t::const_iterator aIt( rFrms.find( nPage ) );
537cdf0e10cSrcweir             DBG_ASSERT( aIt != rFrms.end(), "failed to find start frame" );
538cdf0e10cSrcweir             if (aIt == rFrms.end())
539cdf0e10cSrcweir                 return sal_False;
540cdf0e10cSrcweir             pStPage = aIt->second;
541cdf0e10cSrcweir         }
542cdf0e10cSrcweir         else // a page from the post-its document ...
543cdf0e10cSrcweir         {
544cdf0e10cSrcweir             DBG_ASSERT( nPage == 0, "unexpected page number. 0 for post-it pages expected" );
545cdf0e10cSrcweir             pStPage = rPrintData.GetRenderData().GetPostItStartFrames()[ nRenderer ];
546cdf0e10cSrcweir         }
547cdf0e10cSrcweir         DBG_ASSERT( pStPage, "failed to get start page" );
548cdf0e10cSrcweir 
549*ca41231dSmseidel         //!! applying view options and formatting the document should now only be done in getRendererCount!
550cdf0e10cSrcweir 
551cdf0e10cSrcweir         ViewShell *pViewSh2 = nPage == 0 ? /* post-it page? */
552cdf0e10cSrcweir                 rPrintData.GetRenderData().m_pPostItShell : pShell;
553cdf0e10cSrcweir         ::SetSwVisArea( pViewSh2, pStPage->Frm() );
554cdf0e10cSrcweir 
555cdf0e10cSrcweir // FIXME disabled because rPrintData.aOffset is always (0,0)
556cdf0e10cSrcweir #if 0
557cdf0e10cSrcweir         // wenn wir einen Umschlag drucken wird ein Offset beachtet
558cdf0e10cSrcweir         if( pStPage->GetFmt()->GetPoolFmtId() == RES_POOLPAGE_JAKET )
559cdf0e10cSrcweir         {
560cdf0e10cSrcweir             Point aNewOrigin = pOutDev->GetMapMode().GetOrigin();
561cdf0e10cSrcweir             aNewOrigin += rPrintData.aOffset;
562cdf0e10cSrcweir             MapMode aTmp( pOutDev->GetMapMode() );
563cdf0e10cSrcweir             aTmp.SetOrigin( aNewOrigin );
564cdf0e10cSrcweir             pOutDev->SetMapMode( aTmp );
565cdf0e10cSrcweir         }
566cdf0e10cSrcweir #endif
567cdf0e10cSrcweir 
568cdf0e10cSrcweir         pShell->InitPrt( pOutDev );
569cdf0e10cSrcweir 
570cdf0e10cSrcweir         pViewSh2 = nPage == 0 ? /* post-it page? */
571cdf0e10cSrcweir                 rPrintData.GetRenderData().m_pPostItShell : pShell;
572cdf0e10cSrcweir         ::SetSwVisArea( pViewSh2, pStPage->Frm() );
573cdf0e10cSrcweir 
574cdf0e10cSrcweir         pStPage->GetUpper()->Paint( pStPage->Frm(), &rPrintData );
575cdf0e10cSrcweir 
576cdf0e10cSrcweir         SwPaintQueue::Repaint();
577cdf0e10cSrcweir     } // Zus. Scope wg. CurShell!
578cdf0e10cSrcweir 
579cdf0e10cSrcweir     delete pShell;
580cdf0e10cSrcweir 
581cdf0e10cSrcweir     // restore settings of OutputDevice (should be done always now since the
582cdf0e10cSrcweir     // output device is now provided by a call from outside the Writer)
583cdf0e10cSrcweir     pOutDev->Pop();
584cdf0e10cSrcweir 
585cdf0e10cSrcweir     return sal_True;
586cdf0e10cSrcweir }
587cdf0e10cSrcweir 
588cdf0e10cSrcweir /******************************************************************************
589cdf0e10cSrcweir  *  Methode     :   PrtOle2()
590cdf0e10cSrcweir  *  Beschreibung:
591cdf0e10cSrcweir  *  Erstellt    :   PK 07.12.94
592cdf0e10cSrcweir  *  Aenderung   :   MA 16. Feb. 95
593cdf0e10cSrcweir  ******************************************************************************/
594cdf0e10cSrcweir 
595cdf0e10cSrcweir 
596cdf0e10cSrcweir 
PrtOle2(SwDoc * pDoc,const SwViewOption * pOpt,const SwPrintData & rOptions,OutputDevice * pOleOut,const Rectangle & rRect)597cdf0e10cSrcweir void ViewShell::PrtOle2( SwDoc *pDoc, const SwViewOption *pOpt, const SwPrintData& rOptions,
598cdf0e10cSrcweir                          OutputDevice* pOleOut, const Rectangle& rRect )
599cdf0e10cSrcweir {
600cdf0e10cSrcweir     // Wir brauchen eine Shell fuer das Drucken. Entweder hat das Doc schon
601cdf0e10cSrcweir     // eine, dann legen wir uns eine neue Sicht an, oder das Doc hat noch
602cdf0e10cSrcweir     // keine, dann erzeugen wir die erste Sicht.
603cdf0e10cSrcweir     ViewShell *pSh;
604cdf0e10cSrcweir     if( pDoc->GetCurrentViewShell() )
605cdf0e10cSrcweir         pSh = new ViewShell( *pDoc->GetCurrentViewShell(), 0, pOleOut,VSHELLFLAG_SHARELAYOUT );//swmod 080129
606cdf0e10cSrcweir     else    //swmod 071108//swmod 071225
607cdf0e10cSrcweir         pSh = new ViewShell( *pDoc, 0, pOpt, pOleOut);//swmod 080129
608cdf0e10cSrcweir 
609cdf0e10cSrcweir     {
610cdf0e10cSrcweir         SET_CURR_SHELL( pSh );
611cdf0e10cSrcweir         pSh->PrepareForPrint( rOptions );
612cdf0e10cSrcweir         pSh->SetPrtFormatOption( sal_True );
613cdf0e10cSrcweir 
614cdf0e10cSrcweir         SwRect aSwRect( rRect );
615cdf0e10cSrcweir         pSh->aVisArea = aSwRect;
616cdf0e10cSrcweir 
617cdf0e10cSrcweir         if ( pSh->GetViewOptions()->getBrowseMode() &&
618cdf0e10cSrcweir             pSh->GetNext() == pSh )
619cdf0e10cSrcweir         {
620cdf0e10cSrcweir             pSh->CheckBrowseView( sal_False );
621cdf0e10cSrcweir             pSh->GetLayout()->Lower()->InvalidateSize();
622cdf0e10cSrcweir         }
623cdf0e10cSrcweir 
624cdf0e10cSrcweir         // --> FME 2005-02-10 #119474#
625cdf0e10cSrcweir         // CalcPagesForPrint() should not be necessary here. The pages in the
626cdf0e10cSrcweir         // visible area will be formatted in SwRootFrm::Paint().
627cdf0e10cSrcweir         // Removing this gives us a performance gain during saving the
628cdf0e10cSrcweir         // document because the thumbnail creation will not trigger a complete
629cdf0e10cSrcweir         // formatting of the document.
630cdf0e10cSrcweir         // Seiten fuers Drucken formatieren
631cdf0e10cSrcweir         // pSh->CalcPagesForPrint( SHRT_MAX );
632cdf0e10cSrcweir         // <--
633cdf0e10cSrcweir 
634cdf0e10cSrcweir         //#39275# jetzt will der Meyer doch ein Clipping
635cdf0e10cSrcweir         pOleOut->Push( PUSH_CLIPREGION );
636cdf0e10cSrcweir         pOleOut->IntersectClipRegion( aSwRect.SVRect() );
637cdf0e10cSrcweir         pSh->GetLayout()->Paint( aSwRect );
638cdf0e10cSrcweir //      SFX_APP()->SpoilDemoOutput( *pOleOut, rRect );
639cdf0e10cSrcweir         pOleOut->Pop();
640cdf0e10cSrcweir 
641*ca41231dSmseidel         // erst muss das CurrShell Object zerstört werden!!
642cdf0e10cSrcweir     }
643cdf0e10cSrcweir     delete pSh;
644cdf0e10cSrcweir }
645cdf0e10cSrcweir 
646cdf0e10cSrcweir /******************************************************************************
647cdf0e10cSrcweir  *  Methode     :   IsAnyFieldInDoc()
648cdf0e10cSrcweir  *  Beschreibung:   Stellt fest, ob im DocNodesArray Felder verankert sind
649cdf0e10cSrcweir  *  Erstellt    :   JP 27.07.95
650cdf0e10cSrcweir  *  Aenderung   :   JP 10.12.97
651cdf0e10cSrcweir  ******************************************************************************/
652cdf0e10cSrcweir 
653cdf0e10cSrcweir 
654cdf0e10cSrcweir 
IsAnyFieldInDoc() const655cdf0e10cSrcweir sal_Bool ViewShell::IsAnyFieldInDoc() const
656cdf0e10cSrcweir {
657cdf0e10cSrcweir     const SfxPoolItem* pItem;
658cdf0e10cSrcweir     sal_uInt32 nMaxItems = pDoc->GetAttrPool().GetItemCount2( RES_TXTATR_FIELD );
659cdf0e10cSrcweir     for( sal_uInt32 n = 0; n < nMaxItems; ++n )
66069a74367SOliver-Rainer Wittmann     {
661cdf0e10cSrcweir         if( 0 != (pItem = pDoc->GetAttrPool().GetItem2( RES_TXTATR_FIELD, n )))
662cdf0e10cSrcweir         {
663cdf0e10cSrcweir             const SwFmtFld* pFmtFld = (SwFmtFld*)pItem;
664cdf0e10cSrcweir             const SwTxtFld* pTxtFld = pFmtFld->GetTxtFld();
665dec99bbdSOliver-Rainer Wittmann             if( pTxtFld && pTxtFld->GetTxtNode().GetNodes().IsDocNodes() )
666c0286415SOliver-Rainer Wittmann             {
667cdf0e10cSrcweir                 return sal_True;
668cdf0e10cSrcweir             }
669c0286415SOliver-Rainer Wittmann         }
67069a74367SOliver-Rainer Wittmann     }
67169a74367SOliver-Rainer Wittmann 
67269a74367SOliver-Rainer Wittmann     nMaxItems = pDoc->GetAttrPool().GetItemCount2( RES_TXTATR_INPUTFIELD );
67369a74367SOliver-Rainer Wittmann     for( sal_uInt32 n = 0; n < nMaxItems; ++n )
67469a74367SOliver-Rainer Wittmann     {
67569a74367SOliver-Rainer Wittmann         if( 0 != (pItem = pDoc->GetAttrPool().GetItem2( RES_TXTATR_INPUTFIELD, n )))
67669a74367SOliver-Rainer Wittmann         {
67769a74367SOliver-Rainer Wittmann             const SwFmtFld* pFmtFld = (SwFmtFld*)pItem;
67869a74367SOliver-Rainer Wittmann             const SwTxtFld* pTxtFld = pFmtFld->GetTxtFld();
67969a74367SOliver-Rainer Wittmann             if( pTxtFld && pTxtFld->GetTxtNode().GetNodes().IsDocNodes() )
68069a74367SOliver-Rainer Wittmann             {
68169a74367SOliver-Rainer Wittmann                 return sal_True;
68269a74367SOliver-Rainer Wittmann             }
68369a74367SOliver-Rainer Wittmann         }
68469a74367SOliver-Rainer Wittmann     }
68569a74367SOliver-Rainer Wittmann 
686cdf0e10cSrcweir     return sal_False;
687cdf0e10cSrcweir }
688cdf0e10cSrcweir 
689cdf0e10cSrcweir 
690cdf0e10cSrcweir 
691cdf0e10cSrcweir /******************************************************************************
692cdf0e10cSrcweir  * SwDrawViewSave
693cdf0e10cSrcweir  *
694cdf0e10cSrcweir  * Saves some settings at the draw view
695cdf0e10cSrcweir  ******************************************************************************/
696cdf0e10cSrcweir 
SwDrawViewSave(SdrView * pSdrView)697cdf0e10cSrcweir SwDrawViewSave::SwDrawViewSave( SdrView* pSdrView )
698cdf0e10cSrcweir     : pDV( pSdrView )
699cdf0e10cSrcweir {
700cdf0e10cSrcweir     if ( pDV )
701cdf0e10cSrcweir     {
702cdf0e10cSrcweir         sLayerNm.AssignAscii( RTL_CONSTASCII_STRINGPARAM("Controls" ) );
703cdf0e10cSrcweir         bPrintControls = pDV->IsLayerPrintable( sLayerNm );
704cdf0e10cSrcweir     }
705cdf0e10cSrcweir }
706cdf0e10cSrcweir 
~SwDrawViewSave()707cdf0e10cSrcweir SwDrawViewSave::~SwDrawViewSave()
708cdf0e10cSrcweir {
709cdf0e10cSrcweir     if ( pDV )
710cdf0e10cSrcweir     {
711cdf0e10cSrcweir         pDV->SetLayerPrintable( sLayerNm, bPrintControls );
712cdf0e10cSrcweir     }
713cdf0e10cSrcweir }
714cdf0e10cSrcweir 
715cdf0e10cSrcweir 
716cdf0e10cSrcweir // OD 09.01.2003 #i6467# - method also called for page preview
PrepareForPrint(const SwPrintData & rOptions)717cdf0e10cSrcweir void ViewShell::PrepareForPrint( const SwPrintData &rOptions )
718cdf0e10cSrcweir {
719cdf0e10cSrcweir     // Viewoptions fuer den Drucker setzen
720cdf0e10cSrcweir     pOpt->SetGraphic ( sal_True == rOptions.bPrintGraphic );
721cdf0e10cSrcweir     pOpt->SetTable   ( sal_True == rOptions.bPrintTable );
722cdf0e10cSrcweir     pOpt->SetDraw    ( sal_True == rOptions.bPrintDraw );
723cdf0e10cSrcweir     pOpt->SetControl ( sal_True == rOptions.bPrintControl );
724cdf0e10cSrcweir     pOpt->SetPageBack( sal_True == rOptions.bPrintPageBackground );
725cdf0e10cSrcweir     pOpt->SetBlackFont( sal_True == rOptions.bPrintBlackFont );
726cdf0e10cSrcweir 
727cdf0e10cSrcweir     if ( HasDrawView() )
728cdf0e10cSrcweir     {
729cdf0e10cSrcweir         SdrView *pDrawView = GetDrawView();
730cdf0e10cSrcweir         String sLayerNm;
731cdf0e10cSrcweir         sLayerNm.AssignAscii(RTL_CONSTASCII_STRINGPARAM("Controls" ));
732cdf0e10cSrcweir         // OD 09.01.2003 #i6467# - consider, if view shell belongs to page preview
733cdf0e10cSrcweir         if ( !IsPreView() )
734cdf0e10cSrcweir         {
735cdf0e10cSrcweir             pDrawView->SetLayerPrintable( sLayerNm, rOptions.bPrintControl );
736cdf0e10cSrcweir         }
737cdf0e10cSrcweir         else
738cdf0e10cSrcweir         {
739cdf0e10cSrcweir             pDrawView->SetLayerVisible( sLayerNm, rOptions.bPrintControl );
740cdf0e10cSrcweir         }
741cdf0e10cSrcweir     }
742cdf0e10cSrcweir }
743cdf0e10cSrcweir 
744*ca41231dSmseidel /* vim: set noet sw=4 ts=4: */
745