summaryrefslogtreecommitdiff
path: root/sd/source/ui/view/PrintManager.cxx
diff options
context:
space:
mode:
authorsb <sb@openoffice.org>2010-01-21 12:06:31 +0100
committersb <sb@openoffice.org>2010-01-21 12:06:31 +0100
commit6fc142c2e5993e1763a897186eef76a984105f5c (patch)
tree80a45e7f2865074dec4739690c5c49d1f2f8afc4 /sd/source/ui/view/PrintManager.cxx
parent54a3fd62fe515fc9e50e4f00620ea9600e06145b (diff)
parent5c2d284b0f9973aada365a8f464f1152671bd629 (diff)
sb118: merged in DEV300_m70
Diffstat (limited to 'sd/source/ui/view/PrintManager.cxx')
-rw-r--r--sd/source/ui/view/PrintManager.cxx1802
1 files changed, 0 insertions, 1802 deletions
diff --git a/sd/source/ui/view/PrintManager.cxx b/sd/source/ui/view/PrintManager.cxx
deleted file mode 100644
index 6d24fdf98e79..000000000000
--- a/sd/source/ui/view/PrintManager.cxx
+++ /dev/null
@@ -1,1802 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: PrintManager.cxx,v $
- * $Revision: 1.24.8.1 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_sd.hxx"
-
-#include <basegfx/polygon/b2dpolygon.hxx>
-#include <basegfx/polygon/b2dpolypolygon.hxx>
-#include <basegfx/matrix/b2dhommatrix.hxx>
-#include <basegfx/matrix/b2dhommatrixtools.hxx>
-
-#include "PrintManager.hxx"
-
-#include <svx/editstat.hxx>
-#include "optsitem.hxx"
-#include "sdattr.hxx"
-#include "sdpage.hxx"
-#include "drawdoc.hxx"
-#include "drawview.hxx"
-#include "ViewShellBase.hxx"
-#include "DrawViewShell.hxx"
-#include "OutlineViewShell.hxx"
-#include "Outliner.hxx"
-#include "Window.hxx"
-#include "FrameView.hxx"
-#include <sfx2/progress.hxx>
-#include <svtools/printdlg.hxx>
-#include <tools/multisel.hxx>
-#include <unotools/misccfg.hxx>
-#include <unotools/localedatawrapper.hxx>
-#include <svx/prtqry.hxx>
-#include "WindowUpdater.hxx"
-#include <sfx2/printer.hxx>
-#include <svx/svdoutl.hxx>
-#include "sdresid.hxx"
-#include <svx/svdetc.hxx>
-#include <svx/svdopage.hxx>
-#include <svx/svdpagv.hxx>
-#include <svx/svditer.hxx>
-
-#include "strings.hrc"
-
-#include <svx/svdopath.hxx>
-#include "sdabstdlg.hxx"
-#include "printdlg.hrc"
-#include "prntopts.hrc"
-#include "app.hrc"
-#include <svl/intitem.hxx>
-#include <svx/paperinf.hxx>
-#include <svx/xlnclit.hxx>
-#include "printdialog.hxx"
-
-namespace sd {
-
-/** This simple container reduces the number of arguments that have to be
- passed around and makes it easier to modify the set of arguments.
-*/
-class PrintManager::PrintInfo
-{
-public:
- PrintInfo (
- ViewShell& rViewShell,
- SfxPrinter& rPrinter,
- SfxProgress& rProgress,
- const MultiSelection& rSelPages,
- const String& rTimeDateStr,
- const Font& rTimeDateFont,
- const SdOptionsPrintItem* pPrintOpts,
- USHORT nPageMax,
- USHORT nCopies,
- USHORT nProgressOffset,
- USHORT nTotal)
- : mrViewShell(rViewShell),
- mrPrinter(rPrinter),
- mrProgress(rProgress),
- mrSelPages(rSelPages),
- mrTimeDateStr(rTimeDateStr),
- mrTimeDateFont(rTimeDateFont),
- mpPrintOpts(pPrintOpts),
- mnPageMax(nPageMax),
- mnCopies(nCopies),
- mnProgressOffset(nProgressOffset),
- mnTotal(nTotal)
- {}
-
- ViewShell& mrViewShell;
- SfxPrinter& mrPrinter;
- SfxProgress& mrProgress;
- const MultiSelection& mrSelPages;
- const String& mrTimeDateStr;
- const Font& mrTimeDateFont;
- const SdOptionsPrintItem* mpPrintOpts;
- USHORT mnPageMax;
- USHORT mnCopies;
- USHORT mnProgressOffset;
- USHORT mnTotal;
-};
-
-
-PrintManager::PrintManager (ViewShellBase& rBase)
- : mrBase (rBase)
-{
-}
-
-
-
-
-PrintManager::~PrintManager (void)
-{
-}
-
-
-
-
-SfxPrinter* PrintManager::GetPrinter (BOOL bCreate)
-{
- return mrBase.GetDocShell()->GetPrinter (bCreate);
-}
-
-
-
-
-USHORT PrintManager::SetPrinter (
- SfxPrinter* pNewPrinter,
- USHORT nDiffFlags,bool bIsAPI)
-{
- return SetPrinterOptDlg (pNewPrinter,nDiffFlags,!bIsAPI);
-}
-
-
-
-
-USHORT PrintManager::SetPrinterOptDlg (
- SfxPrinter* pNewPrinter,
- USHORT nDiffFlags,
- BOOL _bShowDialog)
-{
- SfxPrinter* pOld = mrBase.GetDocShell()->GetPrinter( FALSE );
- if ( pOld && pOld->IsPrinting() )
- return SFX_PRINTERROR_BUSY;
-
- mrBase.GetDocShell()->SetPrinter(pNewPrinter);
-
- if ( (nDiffFlags & SFX_PRINTER_CHG_ORIENTATION ||
- nDiffFlags & SFX_PRINTER_CHG_SIZE) && pNewPrinter )
- {
- MapMode aMap = pNewPrinter->GetMapMode();
- aMap.SetMapUnit(MAP_100TH_MM);
- MapMode aOldMap = pNewPrinter->GetMapMode();
- pNewPrinter->SetMapMode(aMap);
- Size aNewSize = pNewPrinter->GetOutputSize();
-
- BOOL bScaleAll = FALSE;
- if ( _bShowDialog )
- {
- WarningBox aWarnBox (
- mrBase.GetWindow(),
- (WinBits)(WB_YES_NO | WB_DEF_YES),
- String(SdResId(STR_SCALE_OBJS_TO_PAGE)));
- bScaleAll = (aWarnBox.Execute() == RET_YES);
- }
-
- ViewShell* pShell = mrBase.GetMainViewShell().get();
- if (pShell != NULL && pShell->ISA(DrawViewShell))
- {
- SdPage* pPage = mrBase.GetDocument()->GetSdPage(
- 0, PK_STANDARD );
- pShell->SetPageSizeAndBorder (
- static_cast<DrawViewShell*>(pShell)->GetPageKind(),
- aNewSize,
- -1,-1,-1,-1,
- bScaleAll,
- pNewPrinter->GetOrientation(),
- pPage->GetPaperBin(),
- pPage->IsBackgroundFullSize());
- }
-
- pNewPrinter->SetMapMode(aOldMap);
- }
-
- return 0;
-}
-
-
-
-
-PrintDialog* PrintManager::CreatePrintDialog (::Window *pParent)
-{
- const bool bImpress = mrBase.GetDocument()->GetDocumentType() == DOCUMENT_TYPE_IMPRESS;
-
- SdPrintDialog* pDlg = SdPrintDialog::Create(pParent,bImpress);
-
- ViewShell* pShell = mrBase.GetMainViewShell().get();
- if (pShell!=NULL && ! pShell->ISA(OutlineViewShell))
- {
-
- if (pShell->ISA(DrawViewShell))
- {
- pDlg->SetRangeText(UniString::CreateFromInt32(
- static_cast<DrawViewShell*>(pShell)->GetCurPageId()));
- }
- /* else if(pShell->ISA(::sd::slidesorter::SlideSorterViewShell))
- {
- String aStrRange(
- dynamic_cast<sd::slidesorter::SlideSorterViewShell*>(pShell)->GetPageRangeString());
- if( aStrRange.Len() )
- {
- pDlg->SetRangeText( aStrRange );
- // According #79749 always check PRINTDIALOG_ALL
- // pDlg->CheckRange( PRINTDIALOG_RANGE );
- }
- }
- */
- }
- else
- {
- String aStrRange(
- static_cast<OutlineViewShell*>(pShell)->GetPageRangeString());
- if( aStrRange.Len() )
- {
- pDlg->SetRangeText( aStrRange );
- // According #79749 always check PRINTDIALOG_ALL
- // pDlg->CheckRange( PRINTDIALOG_RANGE );
- }
- }
- pDlg->EnableRange( PRINTDIALOG_RANGE );
- pDlg->EnableRange( PRINTDIALOG_ALL );
- pDlg->EnableCollate();
-
- if (pShell->ISA(DrawViewShell) && pShell->GetView()->AreObjectsMarked())
- {
- pDlg->EnableRange( PRINTDIALOG_SELECTION );
- // According #79749 always check PRINTDIALOG_ALL
- // pDlg->CheckRange( PRINTDIALOG_SELECTION );
- }
-
- if( bImpress )
- {
- const SdOptionsPrintItem* pPrintOpts = 0;
-
- SfxPrinter* pPrinter = mrBase.GetPrinter(FALSE);
- if( pPrinter )
- {
- const SfxPoolItem* pPoolItem = 0;
- if(pPrinter->GetOptions().GetItemState(ATTR_OPTIONS_PRINT, FALSE, &pPoolItem ) == SFX_ITEM_SET )
- pPrintOpts = dynamic_cast< const SdOptionsPrintItem* >( pPoolItem );
- }
- pDlg->Init( pPrintOpts );
- }
-
- return pDlg;
-}
-
-SfxTabPage* PrintManager::CreatePrintOptionsPage( ::Window *pParent, const SfxItemSet &rOptions)
-{
- SfxTabPage* pPage = 0;
- DocumentType eDocType = mrBase.GetDocument()->GetDocumentType();
- SdAbstractDialogFactory* pFact = SdAbstractDialogFactory::Create();
- ::CreateTabPage fnCreatePage = pFact ? pFact->GetSdPrintOptionsTabPageCreatorFunc() : 0;
- if( fnCreatePage )
- {
- pPage = (*fnCreatePage)( pParent, rOptions );
- if( eDocType == DOCUMENT_TYPE_DRAW )
- {
- SfxAllItemSet aSet(*(rOptions.GetPool()));
- aSet.Put (SfxUInt32Item(SID_SDMODE_FLAG,SD_DRAW_MODE));
- pPage->PageCreated(aSet);
- }
- }
- return pPage;
-}
-
-
-
-
-USHORT PrintManager::Print (SfxProgress& rProgress, BOOL bIsAPI, PrintDialog* pDlg)
-{
- SfxPrinter* pPrinter = mrBase.GetPrinter(TRUE);
- ViewShell* pShell = mrBase.GetMainViewShell().get();
-
- if (pPrinter!=NULL && pShell!=NULL)
- {
- const PrinterOptions aOldPrinterOptions( pPrinter->GetPrinterOptions() );
- MapMode aMap( pPrinter->GetMapMode() );
- const MapMode aOldMap( aMap );
- USHORT nOldPaperBin = pPrinter->GetPaperBin();
-
- aMap.SetMapUnit(MAP_100TH_MM);
- pPrinter->SetMapMode(aMap);
-
- ::Outliner& rOutliner = mrBase.GetDocument()->GetDrawOutliner();
- ULONG nOldCntrl = rOutliner.GetControlWord();
- ULONG nCntrl = nOldCntrl;
- nCntrl &= ~EE_CNTRL_MARKFIELDS;
- nCntrl &= ~EE_CNTRL_ONLINESPELLING;
- rOutliner.SetControlWord( nCntrl );
-
- // old place of FitPageToPrinterWithDialog().
- SdOptionsPrintItem* pPrintOpts = 0;
-
- const SfxPoolItem* pPoolItem = 0;
- if (pPrinter->GetOptions().GetItemState( ATTR_OPTIONS_PRINT, FALSE, &pPoolItem ) == SFX_ITEM_SET )
- pPrintOpts = dynamic_cast< SdOptionsPrintItem* >( const_cast< SfxPoolItem* >( pPoolItem ) ) ;
-
- if( dynamic_cast<SdPrintDialog*>(pDlg) && static_cast<SdPrintDialog*>(pDlg)->Fill( pPrintOpts ) )
- {
- SfxItemSet aNewOptions( pPrinter->GetOptions() );
- aNewOptions.Put( *pPrintOpts );
- pPrinter->SetOptions( aNewOptions );
- pPrintOpts = dynamic_cast< SdOptionsPrintItem* >( const_cast< SfxPoolItem* >( pPrinter->GetOptions().GetItem( ATTR_OPTIONS_PRINT ) ) );
- }
-
- // Wenn wir im Gliederungsmodus sind, muss das Model auf Stand gebracht werden
- if (pShell->ISA(OutlineViewShell))
- static_cast<OutlineViewShell*>(pShell)->PrepareClose (FALSE, FALSE);
-
- // Basisklasse rufen, um Basic anzusprechen
- mrBase.SfxViewShell::Print( rProgress, bIsAPI, pDlg );
-
- // Setzen des Textes des Druckmonitors
- rProgress.SetText( String( SdResId( STR_STATSTR_PRINT ) ) );
-
- PrintDialogRange eOption;
- MultiSelection aPrintSelection;
- String aTimeDateStr;
- Font aTimeDateFont(FAMILY_SWISS, Size(0, 423));
- PageKind ePageKind = PK_STANDARD;
- USHORT nPage, nPageMax;
- USHORT nTotal, nCopies;
- USHORT nPrintCount = 0;
- USHORT nProgressOffset = 0;
- USHORT nCollateCopies = 1;
- BOOL bPrintMarkedOnly = FALSE;
- BOOL bPrintOutline = FALSE;
- BOOL bPrintHandout = FALSE;
- BOOL bPrintDraw = FALSE;
- BOOL bPrintNotes = FALSE;
- BOOL bHandoutHorizontal = TRUE;
- USHORT nSlidesPerHandout = 6;
-
- Orientation eOldOrientation = pPrinter->GetOrientation();
-
- if( pPrintOpts )
- {
- ::utl::MiscCfg aMisc;
-
- if( pPrintOpts->GetOptionsPrint().IsDate() )
- {
- aTimeDateStr += GetSdrGlobalData().GetLocaleData()->getDate( Date() );
- aTimeDateStr += (sal_Unicode)' ';
- }
-
- if( pPrintOpts->GetOptionsPrint().IsTime() )
- aTimeDateStr += GetSdrGlobalData().GetLocaleData()->getTime( Time(), FALSE, FALSE );
-
- if( pPrintOpts->GetOptionsPrint().IsOutline() )
- bPrintOutline = TRUE;
-
- if( pPrintOpts->GetOptionsPrint().IsHandout() )
- {
- bPrintHandout = TRUE;
- bHandoutHorizontal = pPrintOpts->GetOptionsPrint().IsHandoutHorizontal();
- nSlidesPerHandout = pPrintOpts->GetOptionsPrint().GetHandoutPages();
- }
-
- if( pPrintOpts->GetOptionsPrint().IsDraw() )
- bPrintDraw = TRUE;
-
- if( pPrintOpts->GetOptionsPrint().IsNotes() )
- {
- bPrintNotes = TRUE;
- ePageKind = PK_NOTES;
- }
-
- pPrintOpts->GetOptionsPrint().SetWarningPrinter( aMisc.IsNotFoundWarning() );
- pPrintOpts->GetOptionsPrint().SetWarningSize( aMisc.IsPaperSizeWarning() );
- pPrintOpts->GetOptionsPrint().SetWarningOrientation( aMisc.IsPaperOrientationWarning() );
-
- UINT16 nQuality = pPrintOpts->GetOptionsPrint().GetOutputQuality();
- ULONG nMode = DRAWMODE_DEFAULT;
-
- if( nQuality == 1 )
- nMode = DRAWMODE_GRAYLINE | DRAWMODE_GRAYFILL | DRAWMODE_BLACKTEXT | DRAWMODE_GRAYBITMAP | DRAWMODE_GRAYGRADIENT;
- else if( nQuality == 2 )
- nMode = DRAWMODE_BLACKLINE | DRAWMODE_BLACKTEXT | DRAWMODE_WHITEFILL | DRAWMODE_GRAYBITMAP | DRAWMODE_WHITEGRADIENT;
-
- pPrinter->SetDrawMode( nMode );
- }
- else
- bPrintDraw = TRUE;
-
- if( pDlg )
- {
- eOption = pDlg->GetCheckedRange();
-
- if( eOption == PRINTDIALOG_SELECTION )
- bPrintMarkedOnly = TRUE;
- }
- else
- // Bei PrintDirect wird gesamtes Dokument gedruckt
- eOption = PRINTDIALOG_ALL;
-
- // #72527 If we are in PrintDirect and any objects
- // are selected, then a dialog (see ViewShell::DoPrint)
- // ask whether the total document should be printed
- // or only the selected objects. If only the selected
- // object, then the flag bPrintDirectSelected is TRUE
- if (mbPrintDirectSelected)
- {
- eOption = PRINTDIALOG_SELECTION;
- bPrintMarkedOnly = TRUE;
- }
-
- nPageMax = mrBase.GetDocument()->GetSdPageCount( ePageKind );
- aPrintSelection.SetTotalRange( Range( 1, nPageMax ) );
-
- switch( eOption )
- {
- case PRINTDIALOG_ALL:
- aPrintSelection.Select(Range(1, nPageMax));
- break;
-
- case PRINTDIALOG_RANGE:
- aPrintSelection = MultiSelection(pDlg->GetRangeText());
- break;
-
- default:
- {
- if (pShell->ISA(DrawViewShell))
- aPrintSelection.Select (
- static_cast<DrawViewShell*>(pShell)->GetCurPageId());
- else
- {
- if( msPageRange.Len() )
- aPrintSelection = MultiSelection( msPageRange );
- else
- aPrintSelection.Select(Range(1, nPageMax));
- }
- }
- break;
- }
-
- nPage = Min(nPageMax, (USHORT) aPrintSelection.FirstSelected());
-
- if ( nPage > 0 )
- nPage--;
-
- nPageMax = Min(nPageMax, (USHORT) aPrintSelection.LastSelected());
-
- if( bPrintOutline )
- nPrintCount++;
-
- if( bPrintHandout )
- nPrintCount++;
-
- if( bPrintDraw )
- nPrintCount++;
-
- if( bPrintNotes )
- nPrintCount++;
-
- nCopies = (pDlg ? pDlg->GetCopyCount() : 1);
-
- USHORT nSelectCount = (USHORT) aPrintSelection.GetSelectCount();
- nTotal = nSelectCount * nCopies * nPrintCount;
-
- if( pDlg && pDlg->IsCollateEnabled() && pDlg->IsCollateChecked() )
- nCollateCopies = nCopies;
-
- // check if selected range of pages contains transparent objects
- BOOL bContainsTransparency = FALSE;
- BOOL bPrintExcluded = TRUE;
-
- if( bPrintNotes || bPrintDraw || bPrintHandout )
- {
- if( pPrintOpts )
- bPrintExcluded = pPrintOpts->GetOptionsPrint().IsHiddenPages();
-
- for( USHORT j = nPage; ( j < nPageMax && !bContainsTransparency ); j++ )
- {
- if( aPrintSelection.IsSelected( j + 1 ) )
- {
- SdPage* pPage = mrBase.GetDocument()->GetSdPage(
- j, PK_STANDARD );
-
- if( pPage && ( !pPage->IsExcluded() || bPrintExcluded ) )
- {
- bContainsTransparency = (BOOL)pPage->HasTransparentObjects();
- if( !bContainsTransparency )
- {
- if(pPage->TRG_HasMasterPage())
- {
- bContainsTransparency = (BOOL)pPage->TRG_GetMasterPage().HasTransparentObjects();
- }
- }
- }
- }
- }
- }
-
- if (pPrinter->InitJob (mrBase.GetWindow(), !bIsAPI && bContainsTransparency))
- {
- PrintInfo aInfo(
- *pShell,
- *pPrinter,
- rProgress,
- aPrintSelection,
- aTimeDateStr,
- aTimeDateFont,
- pPrintOpts,
- nPageMax,
- nCollateCopies > 1 ? 1 : nCopies,
- nProgressOffset,
- nTotal);
-
- if( bPrintHandout )
- InitHandoutTemplate( aInfo, nSlidesPerHandout, bHandoutHorizontal );
-
- for( USHORT n = 1; n <= nCollateCopies; n++ )
- {
- if ( bPrintOutline )
- {
- // siehe unten in PrintOutline()
- pPrinter->SetPaperBin( nOldPaperBin );
-
- PrintOutline(aInfo, nPage);
- aInfo.mnProgressOffset += (nSelectCount * ( nCollateCopies > 1 ? 1 : nCopies));
- }
-
- if ( bPrintHandout )
- {
- PrintHandout(aInfo, nPage );
- aInfo.mnProgressOffset += (nSelectCount * ( nCollateCopies > 1 ? 1 : nCopies));
- }
- if( bPrintDraw )
- {
- PrintStdOrNotes(aInfo, nPage, PK_STANDARD, bPrintMarkedOnly);
- aInfo.mnProgressOffset += (nSelectCount * ( nCollateCopies > 1 ? 1 : nCopies));
- }
- if( bPrintNotes )
- {
- PrintStdOrNotes(aInfo, nPage, PK_NOTES, FALSE);
- aInfo.mnProgressOffset += (nSelectCount * ( nCollateCopies > 1 ? 1 : nCopies));
- }
-
- // When in duplex mode then add an empty page after printing
- // an odd number of pages. This is to avoid the first page
- // of the next run being printed on the backside of the
- // current page.
- if (nCollateCopies > 1
- && n<nCollateCopies
- && (pPrinter->GetCurPage()%2)==0
- && (pPrinter->GetDuplexMode()==DUPLEX_ON))
- {
- pPrinter->StartPage();
- pPrinter->EndPage();
- }
- }
- }
-
- pPrinter->SetOrientation( eOldOrientation );
- pPrinter->SetPrinterOptions( aOldPrinterOptions );
- pPrinter->SetMapMode( aOldMap );
-
- rOutliner.SetControlWord(nOldCntrl);
-
- // Druckerschach wieder zuruecksetzen
- pPrinter->SetPaperBin( nOldPaperBin );
- }
-
- return 0;
-
-}
-
-
-
-
-ErrCode PrintManager::DoPrint (
- SfxPrinter* pPrinter,
- PrintDialog* pPrintDialog,
- BOOL bSilent, BOOL bIsAPI )
-{
- ErrCode nResult = ERRCODE_NONE;
-
- do
- {
- ViewShell* pShell = mrBase.GetMainViewShell().get();
- if (pShell == NULL)
- break;
-
- if ( ! FitPageToPrinterWithDialog(pPrinter, bSilent))
- break;
-
- const SdrMarkList& rMarkList = pShell->GetView()->GetMarkedObjectList();
-
- // Retrieve the range of marked pages.
- String sNewPageRange (msPageRange);
-
- RestrictPrintingToSelection (FALSE);
-
- // #105477# Don't show query dialog if print dialog has been shown
- if ( !pPrintDialog
- && !bSilent && !bIsAPI
- && (rMarkList.GetMarkCount() || sNewPageRange.Len()) )
- {
- SvxPrtQryBox aQuery (mrBase.GetWindow());
-
- switch (aQuery.Execute())
- {
- case RET_CANCEL:
- nResult = ERRCODE_IO_ABORT;
- break;
-
- case RET_OK:
- RestrictPrintingToSelection (TRUE);
- SetPrintingPageRange (sNewPageRange);
- break;
- }
- }
-
- if (nResult == ERRCODE_NONE)
- {
- // Tell the printer which digit language to use.
- WindowUpdater* pWindowUpdater = pShell->GetWindowUpdater();
- if (pWindowUpdater != NULL)
- pWindowUpdater->Update (pPrinter, mrBase.GetDocument());
-
- // Forward the call to SfxViewShell::DoPrint() which
- // eventually calls Print() (after StartJob etc.)
- nResult = mrBase.SfxViewShell::DoPrint (
- pPrinter, pPrintDialog, bSilent, bIsAPI );
-
- RestrictPrintingToSelection (FALSE);
- }
- }
- while(false);
-
- return nResult;
-}
-
-
-
-
-void PrintManager::PreparePrint (PrintDialog* )
-{
- SfxPrinter* pPrinter = GetPrinter(TRUE);
-
- if (!pPrinter)
- return;
-
- const SfxItemSet& rOptions = pPrinter->GetOptions();
- SdOptionsPrintItem* pPrintOpts = NULL;
-
- if (rOptions.GetItemState( ATTR_OPTIONS_PRINT, FALSE,
- (const SfxPoolItem**) &pPrintOpts) != SFX_ITEM_SET)
- {
- pPrintOpts = NULL;
- }
-
- // Einstellungen der ersten zu druckenden Seite setzen
-
- if (pPrintOpts)
- {
- if ( pPrintOpts->GetOptionsPrint().IsHandout() )
- {
- // Handzettel
- SdPage* pPage = mrBase.GetDocument()->GetSdPage(0, PK_HANDOUT);
-
- // Papierschacht
- if (!pPrintOpts->GetOptionsPrint().IsPaperbin()) // Drucken NICHT aus Druckereinstellung
- {
- pPrinter->SetPaperBin(pPage->GetPaperBin());
- }
-
- pPrinter->SetOrientation(pPage->TRG_GetMasterPage().GetOrientation());
- }
- else if ( pPrintOpts->GetOptionsPrint().IsDraw() || pPrintOpts->GetOptionsPrint().IsNotes() )
- {
- // Standard- oder Notizseiten
- if( !pPrintOpts->GetOptionsPrint().IsPaperbin() ) // Drucken NICHT aus Druckereinstellung
- {
- PageKind ePageKind = PK_NOTES;
-
- if (pPrintOpts->GetOptionsPrint().IsDraw())
- {
- ePageKind = PK_STANDARD;
- }
-
- SdPage* pPage = mrBase.GetDocument()->GetSdPage(0, ePageKind);
- pPrinter->SetPaperBin(pPage->GetPaperBin());
-
- Orientation eOrientation = ORIENTATION_PORTRAIT;
-
- if ( !pPrintOpts->GetOptionsPrint().IsBooklet() )
- {
- eOrientation = pPage->GetOrientation();
- }
- else
- {
- Size aPageSize(pPage->GetSize());
-
- if( aPageSize.Width() < aPageSize.Height() )
- eOrientation = ORIENTATION_LANDSCAPE;
- }
-
- pPrinter->SetOrientation(eOrientation);
- }
- }
- }
-}
-
-
-
-
-void PrintManager::RestrictPrintingToSelection (bool bFlag)
-{
- mbPrintDirectSelected = bFlag ? TRUE : FALSE;
-}
-
-
-
-
-void PrintManager::SetPrintingPageRange (const String& rsPageRange)
-{
- msPageRange = rsPageRange;
-}
-
-
-
-
-bool PrintManager::FitPageToPrinterWithDialog (
- SfxPrinter* pPrinter,
- bool bSilent)
-{
- bool bContinuePrinting = true;
-
- if (pPrinter != NULL)
- {
- // Remember old printer values so that they can be restored when
- // printing is aborted by the user.
- const PrinterOptions aOldPrinterOptions (pPrinter->GetPrinterOptions());
- const MapMode aOldMap (pPrinter->GetMapMode());
-
- // Get values from the priner in order to decide whether to show a
- // dialog.
- const SfxItemSet& rOptions = pPrinter->GetOptions();
- SdOptionsPrintItem* pPrintOpts = NULL;
- BOOL bScalePage = TRUE;
- BOOL bTilePage = FALSE;
- BOOL bPrintBooklet = FALSE;
-
- if( rOptions.GetItemState( ATTR_OPTIONS_PRINT, FALSE, (const SfxPoolItem**) &pPrintOpts ) == SFX_ITEM_SET )
- {
- bScalePage = pPrintOpts->GetOptionsPrint().IsPagesize();
- bPrintBooklet = pPrintOpts->GetOptionsPrint().IsBooklet();
- pPrintOpts->GetOptionsPrint().SetCutPage( FALSE );
- }
- else
- pPrintOpts = NULL;
-
- SdPage* pPage = mrBase.GetDocument()->GetSdPage( 0, PK_STANDARD );
- Size aPageSize( pPage->GetSize() );
- Size aPrintSize( pPrinter->GetOutputSize() );
- long nPageWidth = aPageSize.Width() - pPage->GetLftBorder() - pPage->GetRgtBorder();
- long nPageHeight = aPageSize.Height() - pPage->GetUppBorder() - pPage->GetLwrBorder();
- long nPrintWidth = aPrintSize.Width();
- long nPrintHeight = aPrintSize.Height();
- USHORT nRet = RET_OK;
-
- // When necessary then show a dialog that asks the user how to fit
- // the pages to be printed to the (smaller) printer pages.
- if ( !bScalePage
- && !bTilePage
- && !bPrintBooklet
- && ( ( nPageWidth > nPrintWidth || nPageHeight > nPrintHeight )
- && ( nPageWidth > nPrintHeight || nPageHeight > nPrintWidth )
- )
- )
- {
- if (IsScreenFormat())
- {
- // For the screen format the page content is always scaled
- // to the printable area of the printer pages.
- pPrintOpts->GetOptionsPrint().SetPagesize();
- }
- else
- {
-
- SdAbstractDialogFactory* pFact = SdAbstractDialogFactory::Create();
- AbstractSdPrintDlg* pDlg = pFact ? pFact->CreateSdPrintDlg(mrBase.GetWindow() ) : 0;
- // Do not show the dialog when the bSilent flag is set. We
- // do create the dialog anyway so that we can extract the
- // default method of mapping internal pages to printer pages
- // from it.
- if( ! bSilent && pDlg )
- nRet = pDlg->Execute();
- if( nRet == RET_OK )
- {
- switch (pDlg->GetAttr())
- {
- case 1:
- pPrintOpts->GetOptionsPrint().SetPagesize();
- break;
-
- case 2:
- // Tiling is the default behaviour in
- // ViewShell::PrintStdOrNotes(). The poperty of
- // pPrintOpts is ignored there so setting it
- // here may only lead to unwanted side effects.
- break;
-
- case 3:
- pPrintOpts->GetOptionsPrint().SetCutPage();
- break;
- }
- bContinuePrinting = true;
- }
- delete pDlg;
- }
- }
-
- // The user has pressed the 'Cancel' button. Restore the old values and
- // return a flag to tell the caller to abort printing.
- if( nRet == RET_CANCEL )
- {
- pPrinter->SetPrinterOptions( aOldPrinterOptions );
- pPrinter->SetMapMode( aOldMap );
- bContinuePrinting = false;
- }
- }
-
- return bContinuePrinting;
-}
-
-
-
-
-void PrintManager::PrintOutline (
- PrintInfo& rInfo,
- USHORT nPage)
-{
- // Papierschacht
- // Seiteneinstellungen koennen nicht fuer die Gliederung gemacht werden
- // (also auch nicht der Druckerschacht), deswegen wird der Druckerschacht
- // von der Seite PK_STANDARD genommen.
- /*
- if( pPrintOpts && !pPrintOpts->GetOptionsPrint().IsPaperbin() ) // Drucken NICHT aus Druckereinstellung
- {
- USHORT nPaperBin = GetDoc()->GetSdPage(nPage, PK_STANDARD)->GetPaperBin();
- rPrinter.SetPaperBin( nPaperBin );
- } */
- // Es wird jetzt (vorlaeufig ?) der Druckerschacht vom Drucker genommen
-
- const MapMode aOldMap( rInfo.mrPrinter.GetMapMode() );
- MapMode aMap( aOldMap );
- const Orientation eOldOrient = rInfo.mrPrinter.GetOrientation();
- Point aPageOfs( rInfo.mrPrinter.GetPageOffset() );
- Fraction aScale(1, 2);
- BOOL bPrintExcluded = TRUE;
-
- aMap.SetOrigin(Point() - aPageOfs);
- aMap.SetScaleX(aScale);
- aMap.SetScaleY(aScale);
- rInfo.mrPrinter.SetMapMode(aMap);
- rInfo.mrPrinter.SetOrientation(ORIENTATION_PORTRAIT);
-
- if ( rInfo.mpPrintOpts )
- bPrintExcluded = rInfo.mpPrintOpts->GetOptionsPrint().IsHiddenPages();
-
- Rectangle aOutRect(aPageOfs, rInfo.mrPrinter.GetOutputSize());
-
- Link aOldLink;
- Outliner* pOutliner = rInfo.mrViewShell.GetDoc()->GetInternalOutliner();
- pOutliner->Init( OUTLINERMODE_OUTLINEVIEW );
- USHORT nOutlMode = pOutliner->GetMode();
- BOOL bOldUpdateMode = pOutliner->GetUpdateMode();
-
- Size aPaperSize = pOutliner->GetPaperSize();
- pOutliner->SetPaperSize(aOutRect.GetSize());
- pOutliner->SetUpdateMode(TRUE);
-
- long nPageH = aOutRect.GetHeight();
-
- USHORT nPageCount = rInfo.mnProgressOffset;
-
- while ( nPage < rInfo.mnPageMax )
- {
- Paragraph* pPara = NULL;
- long nH = 0;
-
- pOutliner->Clear();
- pOutliner->SetFirstPageNumber(nPage+1);
-
- while ( nH < nPageH && nPage < rInfo.mnPageMax )
- {
- if ( rInfo.mrSelPages.IsSelected(nPage+1) )
- {
- //rProgress.SetState( nPageCount, nTotal );
- //rProgress.SetStateText( nPageCount, nPage+1, nTotal );
-
- String aTmp = UniString::CreateFromInt32( nPage+1 );
- aTmp += String( SdResId( STR_PRINT_OUTLINE ) );
- rInfo.mrProgress.SetStateText(nPageCount, aTmp, rInfo.mnTotal );
-
- nPageCount = nPageCount + rInfo.mnCopies;
-
- SdPage* pPage = (SdPage*)rInfo.mrViewShell.GetDoc()->GetSdPage(nPage, PK_STANDARD);
- SdrTextObj* pTextObj = NULL;
- ULONG nObj = 0;
-
- if ( !pPage->IsExcluded() || bPrintExcluded )
- {
- while ( !pTextObj && nObj < pPage->GetObjCount() )
- {
- SdrObject* pObj = pPage->GetObj(nObj++);
- if ( pObj->GetObjInventor() == SdrInventor &&
- pObj->GetObjIdentifier() == OBJ_TITLETEXT )
- pTextObj = (SdrTextObj*) pObj;
- }
-
- pPara = pOutliner->GetParagraph( pOutliner->GetParagraphCount() - 1 );
-
- if ( pTextObj && !pTextObj->IsEmptyPresObj() &&
- pTextObj->GetOutlinerParaObject() )
- pOutliner->AddText( *(pTextObj->GetOutlinerParaObject()) );
- else
- pOutliner->Insert(String());
-
- pTextObj = NULL;
- nObj = 0;
-
- while ( !pTextObj && nObj < pPage->GetObjCount() )
- {
- SdrObject* pObj = pPage->GetObj(nObj++);
- if ( pObj->GetObjInventor() == SdrInventor &&
- pObj->GetObjIdentifier() == OBJ_OUTLINETEXT )
- pTextObj = (SdrTextObj*) pObj;
- }
-
- BOOL bSubTitle = FALSE;
- if (!pTextObj)
- {
- bSubTitle = TRUE;
- pTextObj = (SdrTextObj*) pPage->GetPresObj(PRESOBJ_TEXT); // Untertitel vorhanden?
- }
-
- ULONG nParaCount1 = pOutliner->GetParagraphCount();
-
- if ( pTextObj && !pTextObj->IsEmptyPresObj() &&
- pTextObj->GetOutlinerParaObject() )
- pOutliner->AddText( *(pTextObj->GetOutlinerParaObject()) );
-
- if ( bSubTitle )
- {
- ULONG nParaCount2 = pOutliner->GetParagraphCount();
- for (ULONG nPara = nParaCount1; nPara < nParaCount2; nPara++)
- {
- Paragraph* pP = pOutliner->GetParagraph(nPara);
- if(pP && pOutliner->GetDepth( (USHORT) nPara ) > 0 )
- pOutliner->SetDepth(pP, 0);
- }
- }
-
- nH = pOutliner->GetTextHeight();
- }
- }
- nPage++;
- }
-
- if ( nH > nPageH && pPara )
- {
- ULONG nCnt = pOutliner->GetAbsPos( pOutliner->GetParagraph( pOutliner->GetParagraphCount() - 1 ) );
- ULONG nParaPos = pOutliner->GetAbsPos( pPara );
- nCnt -= nParaPos;
- pPara = pOutliner->GetParagraph( ++nParaPos );
- if ( nCnt && pPara )
- {
- pOutliner->Remove(pPara, nCnt);
- nPage--;
- }
- }
-
- rInfo.mrPrinter.StartPage();
- pOutliner->Draw(&rInfo.mrPrinter, aOutRect);
-
- if ( rInfo.mrTimeDateStr.Len() )
- {
- Font aOldFont = rInfo.mrPrinter.OutputDevice::GetFont();
- rInfo.mrPrinter.SetFont(rInfo.mrTimeDateFont);
- rInfo.mrPrinter.DrawText(aPageOfs, rInfo.mrTimeDateStr);
- rInfo.mrPrinter.SetFont(aOldFont);
- }
- rInfo.mrPrinter.EndPage();
- }
- pOutliner->SetUpdateMode(bOldUpdateMode);
- pOutliner->SetPaperSize(aPaperSize);
- pOutliner->Init( nOutlMode );
-
- rInfo.mrPrinter.SetOrientation(eOldOrient);
- rInfo.mrPrinter.SetMapMode( aOldMap );
-}
-
-
-
-
-void PrintManager::PrintHandout( PrintInfo& rInfo, USHORT nPage )
-{
- SdPage* pPage = rInfo.mrViewShell.GetDoc()->GetSdPage(0, PK_HANDOUT);
- SdPage& rMaster = (SdPage&)pPage->TRG_GetMasterPage();
- SdDrawDocument* pDocument = rInfo.mrViewShell.GetDoc();
-
- BOOL bScalePage = TRUE;
- if ( rInfo.mpPrintOpts )
- {
- bScalePage = rInfo.mpPrintOpts->GetOptionsPrint().IsPagesize();
- }
-
- // Papierschacht
- if( rInfo.mpPrintOpts && !rInfo.mpPrintOpts->GetOptionsPrint().IsPaperbin() ) // Drucken NICHT aus Druckereinstellung
- {
- USHORT nPaperBin = pPage->GetPaperBin();
- rInfo.mrPrinter.SetPaperBin( nPaperBin );
- }
-
- // Hoch/Querformat aendern?
- Orientation eOrientation = rMaster.GetOrientation();
-
- short nDlgResult = RET_OK;
-
- if ( !rInfo.mrPrinter.SetOrientation(eOrientation) &&
- (!rInfo.mpPrintOpts || rInfo.mpPrintOpts->GetOptionsPrint().IsWarningOrientation()) )
- {
- // eine Warnung anzeigen
- WarningBox aWarnBox(rInfo.mrViewShell.GetActiveWindow(),(WinBits)(WB_OK_CANCEL | WB_DEF_CANCEL),
- String(SdResId(STR_WARN_PRINTFORMAT_FAILURE)));
- nDlgResult = aWarnBox.Execute();
- }
-
- if ( nDlgResult == RET_OK )
- {
- const MapMode aOldMap( rInfo.mrPrinter.GetMapMode() );
- MapMode aMap( aOldMap );
- Point aPageOfs( rInfo.mrPrinter.GetPageOffset() );
- DrawView* pPrintView;
- BOOL bPrintExcluded = TRUE;
-
- aMap.SetOrigin(Point() - aPageOfs);
-
- if ( bScalePage )
- {
- Size aPageSize(pPage->GetSize());
- Size aPrintSize( rInfo.mrPrinter.GetOutputSize() );
-
- double fHorz = (double) aPrintSize.Width() / aPageSize.Width();
- double fVert = (double) aPrintSize.Height() / aPageSize.Height();
-
- Fraction aFract;
- if ( fHorz < fVert )
- aFract = Fraction(aPrintSize.Width(), aPageSize.Width());
- else
- aFract = Fraction(aPrintSize.Height(), aPageSize.Height());
-
- aMap.SetScaleX(aFract);
- aMap.SetScaleY(aFract);
- aMap.SetOrigin(Point());
- }
-
- rInfo.mrPrinter.SetMapMode(aMap);
-
- if (rInfo.mrViewShell.ISA(DrawViewShell))
- pPrintView = new DrawView (rInfo.mrViewShell.GetDocSh(), &rInfo.mrPrinter,
- static_cast<DrawViewShell*>(&rInfo.mrViewShell));
- else
- pPrintView = new DrawView (rInfo.mrViewShell.GetDocSh(), &rInfo.mrPrinter, NULL);
-
- USHORT nPageCount = rInfo.mnProgressOffset;
-
- rInfo.mrViewShell.WriteFrameViewData();
-
- rInfo.mrViewShell.SetPrintedHandoutPageNum(0);
-
- if ( rInfo.mpPrintOpts )
- bPrintExcluded = rInfo.mpPrintOpts->GetOptionsPrint().IsHiddenPages();
-
- std::vector< SdPage* > aPagesVector;
- while ( nPage < rInfo.mnPageMax )
- {
- nPage++;
- if( rInfo.mrSelPages.IsSelected(nPage) )
- {
- SdPage* pTemp = pDocument->GetSdPage(nPage-1, PK_STANDARD);
- if( !pTemp->IsExcluded() || bPrintExcluded )
- aPagesVector.push_back( pTemp );
- }
- }
-
- std::vector< SdrPageObj* > aPageObjVector;
- SdrObjListIter aShapeIter( *pPage );
- while( aShapeIter.IsMore() )
- {
- SdrPageObj* pPageObj = dynamic_cast< SdrPageObj* >(aShapeIter.Next());
- if( pPageObj )
- aPageObjVector.push_back( pPageObj );
- }
-
- if( aPageObjVector.empty() )
- return;
-
- rInfo.mrViewShell.SetPrintedHandoutPageCount( (USHORT)((aPagesVector.size() + aPageObjVector.size() - 1) / aPageObjVector.size()) );
-
-/*
- sal_Int32 nHandoutPageCount = aPagesVector.size() / aPageObjVector.size();
- sal_Int32 nHandoutPage = 0;
-*/
- std::vector< SdPage* >::iterator aPageIter( aPagesVector.begin() );
- while( aPageIter != aPagesVector.end() )
- {
- std::vector< SdrPageObj* >::iterator aPageObjIter( aPageObjVector.begin() );
-
- while( (aPageObjIter != aPageObjVector.end()) && (aPageIter != aPagesVector.end()) )
- {
- SdrPageObj* pPageObj = (*aPageObjIter++);
- pPageObj->SetReferencedPage( (*aPageIter++) );
- }
-
- // if there are more page objects than pages left, set the rest to invisible
- int nHangoverCount = 0;
- while(aPageObjIter != aPageObjVector.end())
- {
- (*aPageObjIter++)->SetReferencedPage(0L);
- nHangoverCount++;
- }
-
- if( nHangoverCount )
- {
- int nSkip = aPageObjVector.size() - nHangoverCount;
- aShapeIter.Reset();
- while( aShapeIter.IsMore() )
- {
- SdrPathObj* pPathObj = dynamic_cast< SdrPathObj* >( aShapeIter.Next() );
- if( pPathObj )
- {
- if( nSkip )
- {
- nSkip--;
- }
- else
- {
- pPathObj->SetMergedItem( XLineStyleItem(XLINE_NONE) );
- }
- }
- }
- }
-
- // todo progress
- String aTmp = UniString::CreateFromInt32( nPage );
- aTmp += String( SdResId( STR_PRINT_HANDOUT ) );
- rInfo.mrProgress.SetStateText( nPageCount, aTmp, rInfo.mnTotal );
-
- rInfo.mrViewShell.SetPrintedHandoutPageNum(rInfo.mrViewShell.GetPrintedHandoutPageNum() + 1);
-
- rInfo.mrPrinter.StartPage();
- pPrintView->ShowSdrPage(pPage); // , Point());
-
- SdrPageView* pPageView = pPrintView->GetSdrPageView(); // pPage);
- pPageView->SetVisibleLayers(rInfo.mrViewShell.GetFrameView()->GetVisibleLayers() );
- pPageView->SetPrintableLayers(rInfo.mrViewShell.GetFrameView()->GetPrintableLayers() );
-
- pPrintView->CompleteRedraw(&rInfo.mrPrinter, Rectangle(Point(0,0), pPage->GetSize()));
-
- if ( rInfo.mrTimeDateStr.Len() )
- {
- Font aOldFont = rInfo.mrPrinter.OutputDevice::GetFont();
- rInfo.mrPrinter.SetFont(rInfo.mrTimeDateFont);
- rInfo.mrPrinter.DrawText(aPageOfs, rInfo.mrTimeDateStr);
- rInfo.mrPrinter.SetFont(aOldFont);
- }
- rInfo.mrPrinter.EndPage();
- pPrintView->HideSdrPage(); // pPrintView->GetPageView(pPage));
-
- if( nHangoverCount )
- {
- aShapeIter.Reset();
- while( aShapeIter.IsMore() )
- {
- SdrPathObj* pPathObj = dynamic_cast< SdrPathObj* >( aShapeIter.Next() );
- if( pPathObj )
- pPathObj->SetMergedItem( XLineStyleItem(XLINE_SOLID) );
- }
- }
-
- }
-
- rInfo.mrViewShell.SetPrintedHandoutPageNum(1);
- rInfo.mrViewShell.SetPrintedHandoutPageCount(0);
- delete pPrintView;
- rInfo.mrPrinter.SetMapMode(aOldMap);
- }
-}
-
-
-
-
-void PrintManager::PrintStdOrNotes (
- PrintInfo& rInfo,
- USHORT nPage,
- PageKind ePageKind,
- BOOL bPrintMarkedOnly)
-{
- Fraction aFract;
- BOOL bScalePage = TRUE;
- BOOL bTilePage = FALSE;
- BOOL bPrintExcluded = TRUE;
- BOOL bPrintPageName = TRUE;
- BOOL bPrintBooklet = FALSE;
- BOOL bPrintFrontPage = FALSE;
- BOOL bPrintBackPage = FALSE;
- SdDrawDocument* pDocument = rInfo.mrViewShell.GetDoc();
-
- SdPage* pRefPage = pDocument->GetSdPage(nPage, ePageKind);
-
- if ( rInfo.mpPrintOpts )
- {
- bScalePage = rInfo.mpPrintOpts->GetOptionsPrint().IsPagesize();
- bTilePage = rInfo.mpPrintOpts->GetOptionsPrint().IsPagetile();
- bPrintPageName = rInfo.mpPrintOpts->GetOptionsPrint().IsPagename();
- bPrintExcluded = rInfo.mpPrintOpts->GetOptionsPrint().IsHiddenPages();
- bPrintBooklet = rInfo.mpPrintOpts->GetOptionsPrint().IsBooklet();
- bPrintFrontPage = rInfo.mpPrintOpts->GetOptionsPrint().IsFrontPage();
- bPrintBackPage = rInfo.mpPrintOpts->GetOptionsPrint().IsBackPage();
-
- // Papierschacht
- if( !rInfo.mpPrintOpts->GetOptionsPrint().IsPaperbin() ) // Drucken NICHT aus Druckereinstellung
- {
- USHORT nPaperBin = pDocument->GetSdPage(nPage, ePageKind)->GetPaperBin();
- rInfo.mrPrinter.SetPaperBin( nPaperBin );
- }
-
- }
-
- // Hoch/Querformat aendern?
- Size aPageSize(pRefPage->GetSize());
- Orientation eOrientation = ORIENTATION_PORTRAIT;
-
- short nDlgResult = RET_OK;
-
- if( !bPrintBooklet )
- {
- eOrientation = pRefPage->GetOrientation();
- }
- else if( aPageSize.Width() < aPageSize.Height() )
- eOrientation = ORIENTATION_LANDSCAPE;
-
- if ( !rInfo.mrPrinter.SetOrientation(eOrientation) &&
- (!rInfo.mpPrintOpts || rInfo.mpPrintOpts->GetOptionsPrint().IsWarningOrientation()) )
- {
- // eine Warnung anzeigen
- WarningBox aWarnBox(
- rInfo.mrViewShell.GetActiveWindow(),
- (WinBits)(WB_OK_CANCEL | WB_DEF_CANCEL),
- String(SdResId(STR_WARN_PRINTFORMAT_FAILURE)));
- nDlgResult = aWarnBox.Execute();
- }
-
- if ( nDlgResult == RET_OK )
- {
- const MapMode aOldMap( rInfo.mrPrinter.GetMapMode() );
- MapMode aMap( aOldMap );
- Point aPageOfs( rInfo.mrPrinter.GetPageOffset() );
- DrawView* pPrintView;
-
- aMap.SetOrigin(Point() - aPageOfs);
- rInfo.mrPrinter.SetMapMode(aMap);
- Size aPrintSize( rInfo.mrPrinter.GetOutputSize() );
-
- if (rInfo.mrViewShell.ISA(DrawViewShell))
- pPrintView = new DrawView (rInfo.mrViewShell.GetDocSh(), &rInfo.mrPrinter,
- static_cast<DrawViewShell*>(&rInfo.mrViewShell));
- else
- pPrintView = new DrawView (rInfo.mrViewShell.GetDocSh(), &rInfo.mrPrinter, NULL);
-
- USHORT nPageCount = rInfo.mnProgressOffset;
-
- // Als Broschuere drucken ?
- if( bPrintBooklet )
- {
- MapMode aStdMap( rInfo.mrPrinter.GetMapMode() );
- ::std::vector< USHORT > aPageVector;
- ::std::vector< ::std::pair< USHORT, USHORT > > aPairVector;
- Point aOffset;
- Size aPrintSize_2( aPrintSize );
- Size aPageSize_2( aPageSize );
-
- if( eOrientation == ORIENTATION_LANDSCAPE )
- aPrintSize_2.Width() >>= 1;
- else
- aPrintSize_2.Height() >>= 1;
-
- const double fPageWH = (double) aPageSize_2.Width() / aPageSize_2.Height();
- const double fPrintWH = (double) aPrintSize_2.Width() / aPrintSize_2.Height();
-
- if( fPageWH < fPrintWH )
- {
- aPageSize_2.Width() = (long) ( aPrintSize_2.Height() * fPageWH );
- aPageSize_2.Height()= aPrintSize_2.Height();
- }
- else
- {
- aPageSize_2.Width() = aPrintSize_2.Width();
- aPageSize_2.Height() = (long) ( aPrintSize_2.Width() / fPageWH );
- }
-
- aMap.SetScaleX( Fraction( aPageSize_2.Width(), aPageSize.Width() ) );
- aMap.SetScaleY( Fraction( aPageSize_2.Height(), aPageSize.Height() ) );
-
- // calculate adjusted print size
- aPrintSize = OutputDevice::LogicToLogic( aPrintSize, aStdMap, aMap );
-
- if( eOrientation == ORIENTATION_LANDSCAPE )
- {
- aOffset.X() = ( ( aPrintSize.Width() >> 1 ) - aPageSize.Width() ) >> 1;
- aOffset.Y() = ( aPrintSize.Height() - aPageSize.Height() ) >> 1;
- }
- else
- {
- aOffset.X() = ( aPrintSize.Width() - aPageSize.Width() ) >> 1;
- aOffset.Y() = ( ( aPrintSize.Height() >> 1 ) - aPageSize.Height() ) >> 1;
- }
-
- // create vector of pages to print
- while( nPage < rInfo.mnPageMax )
- {
- if( rInfo.mrSelPages.IsSelected( nPage + 1 ) )
- {
- SdPage* pP = pDocument->GetSdPage( nPage, ePageKind );
-
- if( pP && ( !pP->IsExcluded() || bPrintExcluded ) )
- aPageVector.push_back( nPage );
- }
-
- nPage++;
- }
-
- // create pairs of pages to print on each page
- if( aPageVector.size() )
- {
- sal_uInt32 nFirstIndex = 0, nLastIndex = aPageVector.size() - 1;
-
- if( aPageVector.size() & 1 )
- aPairVector.push_back( ::std::make_pair( (USHORT) 65535, aPageVector[ nFirstIndex++ ] ) );
- else
- aPairVector.push_back( ::std::make_pair( aPageVector[ nLastIndex-- ], aPageVector[ nFirstIndex++ ] ) );
-
- while( nFirstIndex < nLastIndex )
- {
- if( nFirstIndex & 1 )
- aPairVector.push_back( ::std::make_pair( aPageVector[ nFirstIndex++ ], aPageVector[ nLastIndex-- ] ) );
- else
- aPairVector.push_back( ::std::make_pair( aPageVector[ nLastIndex-- ], aPageVector[ nFirstIndex++ ] ) );
- }
- }
-
- for( sal_uInt32 i = 0; i < aPairVector.size(); i++ )
- {
- if( ( !( i & 1 ) && bPrintFrontPage ) || ( ( i & 1 ) && bPrintBackPage ) )
- {
- const ::std::pair< USHORT, USHORT > aPair( aPairVector[ i ] );
-
- rInfo.mrPrinter.StartPage();
-
- SdPage* pPageToPrint = pDocument->GetSdPage( aPair.first, ePageKind );
-
- if( pPageToPrint )
- {
- aMap.SetOrigin( aOffset );
- rInfo.mrPrinter.SetMapMode( aMap );
- PrintPage(rInfo, pPrintView, pPageToPrint, bPrintMarkedOnly );
- }
-
- pPageToPrint = pDocument->GetSdPage( aPair.second, ePageKind );
-
- if( pPageToPrint )
- {
- Point aSecondOffset( aOffset );
-
- if( eOrientation == ORIENTATION_LANDSCAPE )
- aSecondOffset.X() += ( aPrintSize.Width() >> 1 );
- else
- aSecondOffset.Y() += ( aPrintSize.Height() >> 1 );
-
- aMap.SetOrigin( aSecondOffset );
- rInfo.mrPrinter.SetMapMode( aMap );
- PrintPage(rInfo, pPrintView, pPageToPrint, bPrintMarkedOnly );
- }
-
- rInfo.mrPrinter.EndPage();
- }
- }
-
- rInfo.mrPrinter.SetMapMode( aStdMap );
- }
- else
- {
- rInfo.mrViewShell.WriteFrameViewData();
- Point aPtZero;
-
- while ( nPage < rInfo.mnPageMax )
- {
- if (rInfo.mrSelPages.IsSelected(nPage+1) )
- {
- SdPage* pPage = pDocument->GetSdPage(nPage, ePageKind);
- // Kann sich die Seitengroesse geaendert haben?
- aPageSize = pPage->GetSize();
-
- rInfo.mrProgress.SetState( nPageCount, rInfo.mnTotal );
- nPageCount = nPageCount + rInfo.mnCopies;
-
- if ( bScalePage )
- {
- double fHorz = (double) aPrintSize.Width() / aPageSize.Width();
- double fVert = (double) aPrintSize.Height() / aPageSize.Height();
-
- if ( fHorz < fVert )
- aFract = Fraction(aPrintSize.Width(), aPageSize.Width());
- else
- aFract = Fraction(aPrintSize.Height(), aPageSize.Height());
-
- aMap.SetScaleX(aFract);
- aMap.SetScaleY(aFract);
- aMap.SetOrigin(Point());
- }
-
- if ( !pPage->IsExcluded() || bPrintExcluded )
- {
- String aTmp = UniString::CreateFromInt32( nPage+1 );
-
- if(ePageKind == PK_NOTES)
- aTmp += String( SdResId( STR_PRINT_NOTES ) );
- else
- aTmp += String( SdResId( STR_PRINT_DRAWING ) );
- rInfo.mrProgress.SetStateText( nPageCount, aTmp, rInfo.mnTotal );
-
- String aPageStr;
- if ( bPrintPageName )
- {
- aPageStr = pPage->GetName();
- aPageStr += (sal_Unicode)' ';
- }
- aPageStr += rInfo.mrTimeDateStr;
-
- MapMode aStdMap = rInfo.mrPrinter.GetMapMode();
- rInfo.mrPrinter.SetMapMode(aMap);
-
- //
- BOOL bPrint = TRUE;
- Point aPageOrigin;
- long aPageWidth = aPageSize.Width() - pPage->GetLftBorder() - pPage->GetRgtBorder();
- long aPageHeight = aPageSize.Height() - pPage->GetUppBorder() - pPage->GetLwrBorder();
- long aPrintWidth = aPrintSize.Width();
- long aPrintHeight = aPrintSize.Height();
-
- // Bugfix zu 44530:
- // Falls implizit umgestellt wurde (Landscape/Portrait)
- // wird dies beim Kacheln, bzw. aufteilen (Poster) beruecksichtigt
- BOOL bSwitchPageSize = FALSE;
- if( ( aPrintWidth > aPrintHeight && aPageWidth < aPageHeight ) ||
- ( aPrintWidth < aPrintHeight && aPageWidth > aPageHeight ) )
- {
- bSwitchPageSize = TRUE;
- aPrintWidth = aPrintSize.Height();
- aPrintHeight = aPrintSize.Width();
- }
-
- // Eine (kleine) Seite, die gekachelt ausgegeben werden soll
- if( bTilePage &&
- aPageWidth < aPrintWidth &&
- aPageHeight < aPrintHeight )
- {
- aPageWidth += 500;
- aPageHeight += 500;
- Point aPrintOrigin;
-
- rInfo.mrPrinter.StartPage();
- pPrintView->ShowSdrPage( pPage );
-
- SdrPageView* pPageView = pPrintView->GetSdrPageView(); // pPage);
- pPageView->SetVisibleLayers(rInfo.mrViewShell.GetFrameView()->GetVisibleLayers() );
- pPageView->SetPrintableLayers(rInfo.mrViewShell.GetFrameView()->GetPrintableLayers() );
-
- long nPagesPrinted = 0; // Fuer Bedingung s.u.
- BOOL bPrintPage; // Fuer Bedingung s.u.
-
- while( bPrint )
- {
- BOOL bWidth = aPageWidth < aPrintWidth;
- BOOL bHeight = aPageHeight < aPrintHeight;
- if( !bWidth && !bHeight )
- bPrint = FALSE;
-
- // Etwas umstaendliche Abfrage, die ausdrueckt, ob eine Seite
- // beim Kacheln abgeschnitten oder gar nicht dargestellt werden
- // soll. Die Bedingung ist, dass eine 2. Seite (horz. oder vert.)
- // immer gedruck wird, waehrend eine dritte Seite (oder hoeher)
- // nur noch gedruckt wird, wenn diese auch noch vollstaendig
- // aufs Papier passt.
- if( nPagesPrinted < 4 && !( !bWidth && nPagesPrinted == 2 ) )
- bPrintPage = TRUE;
- else
- bPrintPage = FALSE;
- nPagesPrinted++;
-
- if( ( bWidth && bHeight ) || bPrintPage )
- {
- aStdMap.SetOrigin( aPrintOrigin );
- rInfo.mrPrinter.SetMapMode( aStdMap );
-
- if (rInfo.mrViewShell.ISA(DrawViewShell) && bPrintMarkedOnly )
- {
- rInfo.mrViewShell.GetView()->DrawMarkedObj(rInfo.mrPrinter);
- }
- else
- pPrintView->CompleteRedraw( &rInfo.mrPrinter, Rectangle( aPtZero, aPageSize ) );
- }
- if( bWidth )
- {
- aPrintOrigin.X() += aPageWidth;
- aPrintWidth -= aPageWidth;
- }
- else if( bHeight )
- {
- aPrintOrigin.X() = 0;
- aPrintWidth = bSwitchPageSize ? aPrintSize.Height() : aPrintSize.Width();
- aPrintOrigin.Y() += aPageHeight;
- aPrintHeight -= aPageHeight;
- }
- }
-
- if ( aPageStr.Len() )
- {
- Font aOldFont = rInfo.mrPrinter.OutputDevice::GetFont();
- rInfo.mrPrinter.SetFont(rInfo.mrTimeDateFont);
- rInfo.mrPrinter.DrawText(aPageOfs, aPageStr);
- rInfo.mrPrinter.SetFont(aOldFont);
- }
- rInfo.mrPrinter.EndPage();
- pPrintView->HideSdrPage(); // pPrintView->GetPageView(pPage));
-
- bPrint = FALSE;
- }
-
- // For pages larger then the printable area there
- // are three options:
- // 1. Scale down to the page to the printable area.
- // 2. Print only the upper left part of the page
- // (without the unprintable borders).
- // 3. Split the page into parts of the size of the
- // printable area.
- if (bPrint)
- {
- const bool bCutPage (rInfo.mpPrintOpts && rInfo.mpPrintOpts->GetOptionsPrint().IsCutPage());
- if (bScalePage || bCutPage)
- {
- // Handle 1 and 2.
-
- // if CutPage is set then do not move
- // it, otherwise move the scaled page
- // to printable area
-
- PrintPagePart(
- rInfo,
- pPage,
- *pPrintView,
- bCutPage ? Point(-aPageOfs.X(), -aPageOfs.Y()) : Point(0,0),
- bPrintMarkedOnly,
- aPageStr,
- aPageOfs);
- }
- else
- {
- // Handle 3. Print parts of the page in the
- // size of the printable area until the
- // whole page is covered.
-
- // keep the page content at its
- // position if it fits, otherwise move
- // it to the printable area
- Point aOrigin (aPageWidth < aPrintWidth ? -aPageOfs.X() : 0, aPageHeight < aPrintHeight ? -aPageOfs.Y() : 0);
-
- for (aPageOrigin = aOrigin;
- -aPageOrigin.Y()<aPageHeight;
- aPageOrigin.Y() -= aPrintHeight)
- {
- for (aPageOrigin.X()=aOrigin.X();
- -aPageOrigin.X()<aPageWidth;
- aPageOrigin.X() -= aPrintWidth)
- {
- PrintPagePart(
- rInfo,
- pPage,
- *pPrintView,
- aPageOrigin,
- bPrintMarkedOnly,
- aPageStr,
- aPageOfs);
- }
- }
- }
- }
- }
- }
- nPage++;
- }
- }
-
- delete pPrintView;
- rInfo.mrPrinter.SetMapMode( aOldMap );
- }
-}
-
-
-
-
-void PrintManager::PrintPagePart (
- PrintInfo& rInfo,
- SdPage* pPage,
- DrawView& rPrintView,
- const Point& rPageOrigin,
- BOOL bPrintMarkedOnly,
- const String& rsPageString,
- const Point& rStringOffset)
-{
- rInfo.mrPrinter.StartPage();
- rPrintView.ShowSdrPage(pPage); // , Point(0,0));
-
- // Set origin of the map mode so that the next part of the page is
- // printed.
- MapMode aOriginalMapMode = rInfo.mrPrinter.GetMapMode();
- MapMode aMapMode = rInfo.mrPrinter.GetMapMode();
- aMapMode.SetOrigin(rPageOrigin);
- rInfo.mrPrinter.SetMapMode(aMapMode);
-
- SdrPageView* pPageView = rPrintView.GetSdrPageView(); // pPage);
- pPageView->SetVisibleLayers(rInfo.mrViewShell.GetFrameView()->GetVisibleLayers() );
- pPageView->SetPrintableLayers(rInfo.mrViewShell.GetFrameView()->GetPrintableLayers() );
-
- if (rInfo.mrViewShell.ISA(DrawViewShell) && bPrintMarkedOnly)
- rInfo.mrViewShell.GetView()->DrawMarkedObj(rInfo.mrPrinter);
- else
- rPrintView.CompleteRedraw(&rInfo.mrPrinter, Rectangle(Point(0,0), pPage->GetSize()));
- rInfo.mrPrinter.SetMapMode(aOriginalMapMode);
-
- if (rsPageString.Len())
- {
- Font aOldFont = rInfo.mrPrinter.OutputDevice::GetFont();
- rInfo.mrPrinter.SetFont(rInfo.mrTimeDateFont);
- rInfo.mrPrinter.DrawText(rStringOffset, rsPageString);
- rInfo.mrPrinter.SetFont(aOldFont);
- }
- rInfo.mrPrinter.EndPage();
- rPrintView.HideSdrPage(); // rPrintView.GetPageView(pPage));
-}
-
-
-
-
-
-void PrintManager::PrintPage (
- PrintInfo& rInfo,
- ::sd::View* pPrintView,
- SdPage* pPage,
- BOOL bPrintMarkedOnly)
-{
- Point aPtZero;
- pPrintView->ShowSdrPage( pPage ); // , aPtZero );
-
- SdrPageView* pPageView = pPrintView->GetSdrPageView(); // pPage );
- pPageView->SetVisibleLayers(rInfo.mrViewShell.GetFrameView()->GetVisibleLayers() );
- pPageView->SetPrintableLayers(rInfo.mrViewShell.GetFrameView()->GetPrintableLayers() );
-
- if (rInfo.mrViewShell.ISA(DrawViewShell) && bPrintMarkedOnly)
- rInfo.mrViewShell.GetView()->DrawMarkedObj(rInfo.mrPrinter);
- else
- pPrintView->CompleteRedraw(&rInfo.mrPrinter, Rectangle(Point(0,0), pPage->GetSize()));
-
- pPrintView->HideSdrPage(); // pPrintView->GetPageView( pPage ) );
-}
-
-
-
-
-bool PrintManager::IsScreenFormat (void)
-{
- // Determine the page size.
- SdPage* pPage = mrBase.GetDocument()->GetSdPage(0, PK_STANDARD);
- Size aPaperSize (pPage->GetSize());
-
- // Take Orientation into account.
- if (pPage->GetOrientation() == ORIENTATION_LANDSCAPE)
- Swap(aPaperSize);
-
- // Check whether paper size is 'Screen'
- Paper ePaper(SvxPaperInfo::GetSvxPaper(aPaperSize, MAP_100TH_MM, TRUE));
- return (ePaper == PAPER_SCREEN);
-}
-
-
-void PrintManager::InitHandoutTemplate( PrintInfo& /*rInfo*/, USHORT nSlidesPerHandout, BOOL bHandoutHorizontal )
-{
- AutoLayout eLayout = AUTOLAYOUT_HANDOUT6;
- switch( nSlidesPerHandout )
- {
- case 1: eLayout = AUTOLAYOUT_HANDOUT1; break;
- case 2: eLayout = AUTOLAYOUT_HANDOUT2; break;
- case 3: eLayout = AUTOLAYOUT_HANDOUT3; break;
- case 4: eLayout = AUTOLAYOUT_HANDOUT4; break;
- case 9: eLayout = AUTOLAYOUT_HANDOUT9; break;
- }
-
- if( !mrBase.GetDocument() )
- return;
-
- SdDrawDocument& rModel = *mrBase.GetDocument();
-
- // first, prepare handout page (not handout master)
-
- SdPage* pHandout = rModel.GetSdPage(0, PK_HANDOUT);
- if( !pHandout )
- return;
-
- // delete all previous shapes from handout page
- while( pHandout->GetObjCount() )
- {
- SdrObject* pObj = pHandout->NbcRemoveObject(0);
- if( pObj )
- SdrObject::Free( pObj );
- }
-
- const bool bDrawLines = eLayout == AUTOLAYOUT_HANDOUT3;
-
- std::vector< Rectangle > aAreas;
- SdPage::CalculateHandoutAreas( rModel, eLayout, bHandoutHorizontal, aAreas );
-
- std::vector< Rectangle >::iterator iter( aAreas.begin() );
- while( iter != aAreas.end() )
- {
- pHandout->NbcInsertObject( new SdrPageObj((*iter++)) );
-
- if( bDrawLines && (iter != aAreas.end()) )
- {
- Rectangle aRect( (*iter++) );
-
- basegfx::B2DPolygon aPoly;
- aPoly.insert(0, basegfx::B2DPoint( aRect.Left(), aRect.Top() ) );
- aPoly.insert(1, basegfx::B2DPoint( aRect.Right(), aRect.Top() ) );
-
- const basegfx::B2DHomMatrix aMatrix(basegfx::tools::createTranslateB2DHomMatrix(
- 0.0, static_cast< double >( aRect.GetHeight() / 7 )));
- basegfx::B2DPolyPolygon aPathPoly;
-
- for( sal_uInt16 nLine = 0; nLine < 7; nLine++ )
- {
- aPoly.transform( aMatrix );
- aPathPoly.append( aPoly );
- }
-
- SdrPathObj* pPathObj = new SdrPathObj(OBJ_PATHLINE, aPathPoly );
- pPathObj->SetMergedItem( XLineStyleItem(XLINE_SOLID) );
- pPathObj->SetMergedItem( XLineColorItem(String(), Color(COL_BLACK)));
-
- pHandout->NbcInsertObject( pPathObj );
- }
- }
-}
-
-} // end of namespace sd