summaryrefslogtreecommitdiff
path: root/svtools/source/dialogs/printdlg.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'svtools/source/dialogs/printdlg.cxx')
-rw-r--r--svtools/source/dialogs/printdlg.cxx798
1 files changed, 798 insertions, 0 deletions
diff --git a/svtools/source/dialogs/printdlg.cxx b/svtools/source/dialogs/printdlg.cxx
new file mode 100644
index 000000000000..532fd3f61bb2
--- /dev/null
+++ b/svtools/source/dialogs/printdlg.cxx
@@ -0,0 +1,798 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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_svtools.hxx"
+#include <tools/debug.hxx>
+#ifndef _SV_APP_HXX
+#include <vcl/svapp.hxx>
+#endif
+#ifndef _VCL_PRINT_HXX
+#include <vcl/print.hxx>
+#endif
+#include <vcl/msgbox.hxx>
+#include <vcl/jobset.hxx>
+#include <tools/urlobj.hxx>
+
+#include "printdlg.hrc"
+#include "controldims.hrc"
+#include <svtools/prnsetup.hxx>
+#include <svtools/printdlg.hxx>
+#include <svtools/svtdata.hxx>
+#include <filedlg.hxx>
+#include "svl/pickerhelper.hxx"
+#ifndef _SVT_HELPID_HRC
+#include <svtools/helpid.hrc>
+#endif
+#include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
+#include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp>
+#include <com/sun/star/ui/dialogs/XFilePicker.hpp>
+#include <com/sun/star/ui/dialogs/XFilterManager.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <comphelper/processfactory.hxx>
+
+using rtl::OUString;
+using namespace com::sun::star;
+
+struct SvtPrinterImpl
+{
+ Printer* m_pTempPrinter;
+ sal_Bool m_bHelpDisabled;
+ PrintSheetRange m_eSheetRange;
+
+ SvtPrinterImpl() :
+ m_pTempPrinter( NULL ), m_bHelpDisabled( sal_False ), m_eSheetRange( PRINTSHEETS_ALL ) {}
+ ~SvtPrinterImpl() { delete m_pTempPrinter; }
+};
+
+#define TEMPPRINTER() mpPrinterImpl->m_pTempPrinter
+
+// =======================================================================
+
+PrintDialog::PrintDialog( Window* pWindow, bool bWithSheetsAndCells ) :
+ ModalDialog ( pWindow, SvtResId( DLG_SVT_PRNDLG_PRINTDLG ) ),
+ maFlPrinter ( this, SvtResId( FL_PRINTER ) ),
+ maFtName ( this, SvtResId( FT_NAME ) ),
+ maLbName ( this, SvtResId( LB_NAMES ) ),
+ maBtnProperties ( this, SvtResId( BTN_PROPERTIES ) ),
+ maFtStatus ( this, SvtResId( FT_STATUS ) ),
+ maFiStatus ( this, SvtResId( FI_STATUS ) ),
+ maFtType ( this, SvtResId( FT_TYPE ) ),
+ maFiType ( this, SvtResId( FI_TYPE ) ),
+ maFtLocation ( this, SvtResId( FT_LOCATION ) ),
+ maFiLocation ( this, SvtResId( FI_LOCATION ) ),
+ maFtComment ( this, SvtResId( FT_COMMENT ) ),
+ maFiComment ( this, SvtResId( FI_COMMENT ) ),
+ maCbxFilePrint ( this, SvtResId( CBX_FILEPRINT ) ),
+ maFiPrintFile ( this, SvtResId( FI_PRINTFILE ) ),
+ maFiFaxNo ( this, SvtResId( FI_FAXNO ) ),
+ maEdtFaxNo ( this, SvtResId( EDT_FAXNO ) ),
+ maFlPrint ( this, SvtResId( FL_PRINT ) ),
+ maRbtAllSheets ( this, SvtResId( RBT_ALL_SHEETS ) ),
+ maRbtSelectedSheets ( this, SvtResId( RBT_SELECTED_SHEETS ) ),
+ maRbtSelectedCells ( this, SvtResId( RBT_SELECTED_CELLS ) ),
+ maFlPrintRange ( this, SvtResId( FL_PRINTRANGE ) ),
+ maRbtAll ( this, SvtResId( RBT_ALL ) ),
+ maRbtPages ( this, SvtResId( RBT_PAGES ) ),
+ maRbtSelection ( this, SvtResId( RBT_SELECTION ) ),
+ maEdtPages ( this, SvtResId( EDT_PAGES ) ),
+ maFlSepCopiesRange ( this, SvtResId( FL_SEPCOPIESRANGE ) ),
+ maFlCopies ( this, SvtResId( FL_COPIES ) ),
+ maFtCopies ( this, SvtResId( FT_COPIES ) ),
+ maNumCopies ( this, SvtResId( NUM_COPIES ) ),
+ maImgCollate ( this, SvtResId( IMG_COLLATE ) ),
+ maImgNotCollate ( this, SvtResId( IMG_NOT_COLLATE ) ),
+ maCbxCollate ( this, SvtResId( CBX_COLLATE ) ),
+ maFlSepButtonLine ( this, SvtResId( FL_SEPBUTTONLINE ) ),
+ maBtnOptions ( this, SvtResId( BTN_OPTIONS ) ),
+ maBtnOK ( this, SvtResId( BTN_OK ) ),
+ maBtnCancel ( this, SvtResId( BTN_CANCEL ) ),
+ maBtnHelp ( this, SvtResId( BTN_HELP ) ),
+ mbWithSheetsAndCells( bWithSheetsAndCells ),
+ maAllFilterStr ( SvtResId( STR_ALLFILTER ) )
+
+{
+ FreeResource();
+
+ mpPrinter = NULL;
+ mpPrinterImpl = new SvtPrinterImpl;
+ mnCopyCount = 1;
+ mnFirstPage = 0;
+ mnLastPage = 0;
+ mnMinPage = 1;
+ mnMaxPage = 65535;
+ meCheckRange = PRINTDIALOG_ALL;
+ mbAll = TRUE;
+ mbSelection = FALSE;
+ mbFromTo = FALSE;
+ mbRange = FALSE;
+ mbCollate = TRUE;
+ mbCollateCheck = TRUE;
+ mbOptions = FALSE;
+
+ maStatusTimer.SetTimeout( IMPL_PRINTDLG_STATUS_UPDATE );
+ maStatusTimer.SetTimeoutHdl( LINK( this, PrintDialog, ImplStatusHdl ) );
+ maBtnProperties.SetClickHdl( LINK( this, PrintDialog, ImplPropertiesHdl ) );
+ maLbName.SetSelectHdl( LINK( this, PrintDialog, ImplChangePrinterHdl ) );
+
+ maFiPrintFile.SetStyle( maFiPrintFile.GetStyle() | WB_PATHELLIPSIS );
+
+ Link aLink( LINK( this, PrintDialog, ImplModifyControlHdl ) );
+ maCbxFilePrint.SetClickHdl( aLink );
+ maRbtAll.SetClickHdl( aLink );
+ maRbtPages.SetClickHdl( aLink );
+ maRbtSelection.SetClickHdl( aLink );
+ maEdtPages.SetModifyHdl( aLink );
+ maNumCopies.SetModifyHdl( aLink );
+ maCbxCollate.SetClickHdl( aLink );
+ maBtnOptions.SetClickHdl( aLink );
+ maEdtFaxNo.SetModifyHdl( aLink );
+ maBtnOK.SetClickHdl( aLink );
+
+ maRbtAll.Check();
+ ImplSetImages();
+}
+
+// -----------------------------------------------------------------------
+
+PrintDialog::~PrintDialog()
+{
+ ImplFreePrnDlgListBox( &maLbName, FALSE );
+ delete mpPrinterImpl;
+}
+
+// -----------------------------------------------------------------------
+
+void PrintDialog::ImplSetImages()
+{
+ if( ! GetSettings().GetStyleSettings().GetHighContrastMode() )
+ {
+ maImgCollate.SetModeImage( Image( SvtResId( RID_IMG_PRNDLG_COLLATE ) ), BMP_COLOR_NORMAL );
+ maImgNotCollate.SetModeImage( Image( SvtResId( RID_IMG_PRNDLG_NOCOLLATE ) ), BMP_COLOR_NORMAL );
+ }
+ else
+ {
+ maImgCollate.SetModeImage( Image( SvtResId( RID_IMG_PRNDLG_COLLATE_HC ) ), BMP_COLOR_HIGHCONTRAST );
+ maImgNotCollate.SetModeImage( Image( SvtResId( RID_IMG_PRNDLG_NOCOLLATE_HC ) ), BMP_COLOR_HIGHCONTRAST );
+ }
+}
+
+// -----------------------------------------------------------------------
+
+void PrintDialog::ImplSetInfo()
+{
+ const QueueInfo* pInfo = Printer::GetQueueInfo( maLbName.GetSelectEntry(), true );
+ if ( pInfo )
+ {
+ maFiType.SetText( pInfo->GetDriver() );
+ maFiLocation.SetText( pInfo->GetLocation() );
+ maFiComment.SetText( pInfo->GetComment() );
+ maFiStatus.SetText( ImplPrnDlgGetStatusText( *pInfo ) );
+ }
+ else
+ {
+ XubString aTempStr;
+ maFiType.SetText( aTempStr );
+ maFiLocation.SetText( aTempStr );
+ maFiComment.SetText( aTempStr );
+ maFiStatus.SetText( aTempStr );
+ }
+
+#ifdef UNX
+ if( pInfo && pInfo->GetLocation().EqualsAscii( "fax_queue" ) )
+ {
+ maFiPrintFile.Show( FALSE );
+ maCbxFilePrint.Show( FALSE );
+ maFiFaxNo.Show( TRUE );
+ maEdtFaxNo.Show( TRUE );
+ Printer* pPrinter = TEMPPRINTER() ? TEMPPRINTER() : mpPrinter;
+ maEdtFaxNo.SetText( pPrinter->GetJobValue( String::CreateFromAscii( "FAX#" ) ) );
+
+ Size aFTSize = maFiFaxNo.GetSizePixel();
+ long nTextWidth = maFiFaxNo.GetCtrlTextWidth( maFiFaxNo.GetText() ) + 10;
+ if ( aFTSize.Width() < nTextWidth )
+ {
+ long nDelta = nTextWidth - aFTSize.Width();
+ aFTSize.Width() = aFTSize.Width() + nDelta;
+ maFiFaxNo.SetSizePixel( aFTSize );
+ Size aEdtSize = maEdtFaxNo.GetSizePixel();
+ aEdtSize.Width() = aEdtSize.Width() - nDelta;
+ Point aEdtPos = maEdtFaxNo.GetPosPixel();
+ aEdtPos.X() = aEdtPos.X() + nDelta;
+ maEdtFaxNo.SetPosSizePixel( aEdtPos, aEdtSize );
+ }
+ }
+ else
+#endif
+ {
+ maFiPrintFile.Show( TRUE );
+ maCbxFilePrint.Show( TRUE );
+ maFiFaxNo.Show( FALSE );
+ maEdtFaxNo.Show( FALSE );
+ }
+
+}
+
+// -----------------------------------------------------------------------
+
+void PrintDialog::ImplCheckOK()
+{
+ // Ueberprueft, ob der OK-Button enabled ist
+ BOOL bEnable = TRUE;
+
+ if ( bEnable && maRbtPages.IsChecked() )
+ bEnable = maEdtPages.GetText().Len() > 0;
+
+ if ( bEnable )
+ {
+ if ( TEMPPRINTER() )
+ bEnable = TEMPPRINTER()->IsValid();
+ else
+ bEnable = mpPrinter->IsValid();
+ }
+
+ maBtnOK.Enable( bEnable );
+}
+
+// -----------------------------------------------------------------------
+
+void PrintDialog::ImplInitControls()
+{
+ // Alles
+ if ( mbAll )
+ {
+ maRbtAll.Enable();
+ if( meCheckRange == PRINTDIALOG_ALL )
+ maRbtAll.Check( TRUE );
+ }
+ else
+ maRbtAll.Enable( FALSE );
+
+ // Selektion
+ if ( mbSelection )
+ {
+ maRbtSelection.Enable();
+ if ( meCheckRange == PRINTDIALOG_SELECTION )
+ maRbtSelection.Check( TRUE );
+ }
+ else
+ maRbtSelection.Enable( FALSE );
+
+ // Seiten
+ if ( mbRange )
+ {
+ maRbtPages.Enable();
+ maEdtPages.Show();
+ maEdtPages.SetText( maRangeText );
+
+ if( ( meCheckRange == PRINTDIALOG_FROMTO ) ||
+ ( meCheckRange == PRINTDIALOG_RANGE ) )
+ {
+ maRbtPages.Check( TRUE );
+ maEdtPages.Enable();
+ }
+ else
+ maEdtPages.Enable( FALSE );
+ }
+ else
+ {
+ maRbtPages.Enable( FALSE );
+ maEdtPages.Hide();
+ }
+
+ // Anzahl Kopien
+ maNumCopies.SetValue( mnCopyCount );
+
+ // Sortierung
+ maCbxCollate.Enable( mbCollate );
+ maCbxCollate.Check( mbCollateCheck );
+
+ // Zusaetze-Button
+ if ( mbOptions )
+ maBtnOptions.Show();
+
+ if ( !mbWithSheetsAndCells )
+ {
+ Size aMarginSize =
+ LogicToPixel( Size( RSC_SP_CTRL_GROUP_X, RSC_SP_CTRL_GROUP_Y ), MAP_APPFONT );
+ long nTempPos = maImgCollate.GetPosPixel().Y() +
+ maImgCollate.GetSizePixel().Height() + aMarginSize.Height();
+ long nDelta1 = maFlPrintRange.GetPosPixel().Y() - maFlPrint.GetPosPixel().Y();
+ long nDelta2 = maFlSepButtonLine.GetPosPixel().Y() - nTempPos;
+
+ maFlPrint.Hide();
+ maRbtAllSheets.Hide();
+ maRbtSelectedSheets.Hide();
+ maRbtSelectedCells.Hide();
+ maRbtSelection.Show();
+
+ Size aNewSize = GetSizePixel();
+ aNewSize.Height() -= nDelta2;
+ SetSizePixel( aNewSize );
+ aNewSize = maFlSepCopiesRange.GetSizePixel();
+ aNewSize.Height() -= nDelta2;
+ maFlSepCopiesRange.SetSizePixel( aNewSize );
+
+ long nDelta = nDelta1;
+ Window* pControls[] = { &maFlPrintRange, &maRbtAll,
+ &maRbtPages, &maEdtPages, &maRbtSelection, NULL,
+ &maFlSepButtonLine, &maBtnOptions, &maBtnOK,
+ &maBtnCancel, &maBtnHelp };
+ Window** pCtrl = pControls;
+ const sal_Int32 nCount = sizeof( pControls ) / sizeof( pControls[0] );
+ for ( sal_Int32 i = 0; i < nCount; ++i, ++pCtrl )
+ {
+ if ( NULL == *pCtrl )
+ {
+ nDelta = nDelta2;
+ continue;
+ }
+ Point aNewPos = (*pCtrl)->GetPosPixel();
+ aNewPos.Y() -= nDelta;
+ (*pCtrl)->SetPosPixel( aNewPos );
+ }
+ }
+}
+
+// -----------------------------------------------------------------------
+
+void PrintDialog::ImplFillDialogData()
+{
+ if ( maRbtAll.IsChecked() )
+ meCheckRange = PRINTDIALOG_ALL;
+ else if( maRbtSelection.IsChecked() )
+ meCheckRange = PRINTDIALOG_SELECTION;
+ else
+ {
+ meCheckRange = PRINTDIALOG_RANGE;
+ maRangeText = maEdtPages.GetText();
+ }
+
+ mnCopyCount = (USHORT) maNumCopies.GetValue();
+ mbCollateCheck = maCbxCollate.IsChecked();
+
+ // In Datei drucken
+ if ( maCbxFilePrint.IsChecked() )
+ mpPrinter->SetPrintFile( maFiPrintFile.GetText() );
+ mpPrinter->EnablePrintFile( maCbxFilePrint.IsChecked() );
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( PrintDialog, ImplStatusHdl, Timer*, EMPTYARG )
+{
+ QueueInfo aInfo;
+ ImplPrnDlgUpdateQueueInfo( &maLbName, aInfo );
+ maFiStatus.SetText( ImplPrnDlgGetStatusText( aInfo ) );
+
+ return 0;
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( PrintDialog, ImplPropertiesHdl, void*, EMPTYARG )
+{
+ if ( !TEMPPRINTER() )
+ TEMPPRINTER() = new Printer( mpPrinter->GetJobSetup() );
+ TEMPPRINTER()->Setup( this );
+
+ return 0;
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( PrintDialog, ImplChangePrinterHdl, void*, EMPTYARG )
+{
+ TEMPPRINTER() = ImplPrnDlgListBoxSelect( &maLbName, &maBtnProperties,
+ mpPrinter, TEMPPRINTER() );
+ ImplSetInfo();
+ ImplCheckOK(); // Check if "OK" button can be enabled now!
+
+ return 0;
+}
+
+// -----------------------------------------------------------------------
+
+bool PrintDialog::ImplGetFilename()
+{
+ uno::Reference< lang::XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() );
+ static ::rtl::OUString aOldFile;
+ if( xFactory.is() )
+ {
+ uno::Sequence< uno::Any > aTempl( 1 );
+ aTempl.getArray()[0] <<= ui::dialogs::TemplateDescription::FILESAVE_AUTOEXTENSION;
+ uno::Reference< ui::dialogs::XFilePicker > xFilePicker(
+ xFactory->createInstanceWithArguments(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.ui.dialogs.FilePicker" ) ),
+ aTempl ), uno::UNO_QUERY );
+ DBG_ASSERT( xFilePicker.is(), "could not get FilePicker service" );
+
+ uno::Reference< ui::dialogs::XFilterManager > xFilterMgr( xFilePicker, uno::UNO_QUERY );
+ if( xFilePicker.is() && xFilterMgr.is() )
+ {
+ try
+ {
+#ifdef UNX
+ // add PostScript and PDF
+ Printer* pPrinter = TEMPPRINTER() ? TEMPPRINTER() : mpPrinter;
+ bool bPS = true, bPDF = true;
+ if( pPrinter )
+ {
+ if( pPrinter->GetCapabilities( PRINTER_CAPABILITIES_PDF ) )
+ bPS = false;
+ else
+ bPDF = false;
+ }
+ if( bPS )
+ xFilterMgr->appendFilter( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "PostScript" ) ), ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "*.ps" ) ) );
+ if( bPDF )
+ xFilterMgr->appendFilter( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Portable Document Format" ) ), ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "*.pdf" ) ) );
+#elif defined WNT
+ xFilterMgr->appendFilter( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "*.PRN" ) ), ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "*.prn" ) ) );
+#endif
+ // add arbitrary files
+ xFilterMgr->appendFilter( maAllFilterStr, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "*.*" ) ) );
+ }
+ catch( lang::IllegalArgumentException rExc )
+ {
+ DBG_ERRORFILE( "caught IllegalArgumentException when registering filter\n" );
+ }
+
+ if( aOldFile.getLength() )
+ {
+ INetURLObject aUrl( aOldFile, INET_PROT_FILE );
+ xFilePicker->setDefaultName( aUrl.GetLastName() );
+ aUrl.CutLastName();
+ xFilePicker->setDisplayDirectory( aUrl.GetMainURL( INetURLObject::DECODE_TO_IURI ) );
+ }
+
+ if( xFilePicker->execute() == ui::dialogs::ExecutableDialogResults::OK )
+ {
+ uno::Sequence< ::rtl::OUString > aPathSeq( xFilePicker->getFiles() );
+ INetURLObject aObj( aPathSeq[0] );
+ maFiPrintFile.SetText( aOldFile = aObj.PathToFileName() );
+ return true;
+ }
+ return false;
+ }
+ }
+
+ // something went awry, lets try the old fashioned dialogue
+ Window* pDlgParent = IsReallyVisible() ? this : GetParent();
+ FileDialog aDlg( pDlgParent, WB_STDDIALOG | WB_SAVEAS );
+#ifdef WNT
+ aDlg.AddFilter( String( RTL_CONSTASCII_USTRINGPARAM( "*.prn" ) ), String( RTL_CONSTASCII_USTRINGPARAM( "*.prn" ) ) );
+ aDlg.SetDefaultExt( String( RTL_CONSTASCII_USTRINGPARAM( "prn" ) ) );
+#elif defined UNX
+ aDlg.AddFilter( String( RTL_CONSTASCII_USTRINGPARAM( "PostScript" ) ), String( RTL_CONSTASCII_USTRINGPARAM( "*.ps" ) ) );
+ aDlg.SetDefaultExt( String( RTL_CONSTASCII_USTRINGPARAM( "ps" ) ) );
+#endif
+
+ if( aOldFile.getLength() )
+ aDlg.SetPath( aOldFile );
+
+ if( aDlg.Execute() )
+ {
+ String aTargetFile = aDlg.GetPath();
+ maFiPrintFile.SetText( aOldFile = aTargetFile );
+ return true;
+ }
+
+ return false;
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( PrintDialog, ImplModifyControlHdl, void*, p )
+{
+ // Radiobuttons (Umfang)
+ if ( !p || (p == &maRbtAll) || (p == &maRbtPages) || (p == &maRbtSelection) )
+ {
+ BOOL bCheck = maRbtPages.IsChecked();
+ maEdtPages.Enable( bCheck );
+ if ( p == &maRbtPages )
+ maEdtPages.GrabFocus();
+ ImplCheckOK();
+ }
+
+ // Edit-Felder (Seiten)
+ if ( p == &maEdtPages )
+ ImplCheckOK();
+
+ if( p == &maEdtFaxNo )
+ {
+ Printer* pPrinter = TEMPPRINTER() ? TEMPPRINTER() : mpPrinter;
+ pPrinter->SetJobValue( String::CreateFromAscii( "FAX#" ), maEdtFaxNo.GetText() );
+ }
+
+ // Anzahl Kopien
+ BOOL bNumCopies = FALSE;
+
+ if ( !p || p == &maNumCopies )
+ {
+ if ( p )
+ bNumCopies = TRUE;
+ //BOOL bCopies = maNumCopies.GetValue() > 1;
+ maCbxCollate.Enable( mbCollate );
+
+ /*if ( !bCopies )
+ maCbxCollate.Check( FALSE );
+ else*/
+ if ( mbCollateCheck )
+ maCbxCollate.Check( TRUE );
+ }
+
+ // Sortieren
+ if ( !p || p == &maCbxCollate || bNumCopies )
+ {
+ BOOL bCheck = maCbxCollate.IsChecked();
+
+ if ( !bNumCopies )
+ mbCollateCheck = maCbxCollate.IsChecked();
+
+ if( bCheck )
+ {
+ maImgCollate.Show();
+ maImgNotCollate.Hide();
+ }
+ else
+ {
+ maImgCollate.Hide();
+ maImgNotCollate.Show();
+ }
+ }
+
+ // Zus"atze
+ if ( p == &maBtnOptions )
+ ClickOptionsHdl();
+
+ if( p == &maBtnOK )
+ {
+ EndDialog( maCbxFilePrint.IsChecked() ? ImplGetFilename() : TRUE );
+ }
+
+ return 0;
+}
+
+// -----------------------------------------------------------------------
+
+long PrintDialog::ClickOptionsHdl()
+{
+ if ( maOptionsHdlLink.IsSet() )
+ return maOptionsHdlLink.Call( this );
+ else
+ return TRUE;
+}
+
+// -----------------------------------------------------------------------
+
+long PrintDialog::OK()
+{
+ if ( maOKHdlLink.IsSet() )
+ return maOKHdlLink.Call( this );
+ else
+ return TRUE;
+}
+
+// -----------------------------------------------------------------------
+
+void PrintDialog::EnableSheetRange( bool bEnable, PrintSheetRange eRange )
+{
+ if ( mbWithSheetsAndCells )
+ {
+ switch ( eRange )
+ {
+ case PRINTSHEETS_ALL :
+ maRbtAllSheets.Enable( bEnable != false );
+ break;
+ case PRINTSHEETS_SELECTED_SHEETS :
+ maRbtSelectedSheets.Enable( bEnable != false );
+ break;
+ case PRINTSHEETS_SELECTED_CELLS :
+ maRbtSelectedCells.Enable( bEnable != false );
+ break;
+ default:
+ DBG_ERRORFILE( "PrintDialog::EnableSheetRange(): invalid range" );
+ }
+ }
+}
+
+// -----------------------------------------------------------------------
+
+bool PrintDialog::IsSheetRangeEnabled( PrintSheetRange eRange ) const
+{
+ if ( !mbWithSheetsAndCells )
+ return false;
+
+ bool bRet = false;
+ switch ( eRange )
+ {
+ case PRINTSHEETS_ALL :
+ bRet = maRbtAllSheets.IsEnabled() != FALSE;
+ break;
+ case PRINTSHEETS_SELECTED_SHEETS :
+ bRet = maRbtSelectedSheets.IsEnabled() != FALSE;
+ break;
+ case PRINTSHEETS_SELECTED_CELLS :
+ bRet = maRbtSelectedCells.IsEnabled() != FALSE;
+ break;
+ default:
+ DBG_ERRORFILE( "PrintDialog::IsSheetRangeEnabled(): invalid range" );
+ }
+ return bRet;
+}
+
+// -----------------------------------------------------------------------
+
+void PrintDialog::CheckSheetRange( PrintSheetRange eRange )
+{
+ if ( mbWithSheetsAndCells )
+ {
+ switch ( eRange )
+ {
+ case PRINTSHEETS_ALL :
+ maRbtAllSheets.Check();
+ break;
+ case PRINTSHEETS_SELECTED_SHEETS :
+ maRbtSelectedSheets.Check();
+ break;
+ case PRINTSHEETS_SELECTED_CELLS :
+ maRbtSelectedCells.Check();
+ break;
+ default:
+ DBG_ERRORFILE( "PrintDialog::CheckSheetRange(): invalid range" );
+ }
+ }
+}
+
+// -----------------------------------------------------------------------
+
+PrintSheetRange PrintDialog::GetCheckedSheetRange() const
+{
+ PrintSheetRange eRange = PRINTSHEETS_ALL;
+ if ( mbWithSheetsAndCells )
+ {
+ if ( maRbtSelectedSheets.IsChecked() )
+ eRange = PRINTSHEETS_SELECTED_SHEETS;
+ else if ( maRbtSelectedCells.IsChecked() )
+ eRange = PRINTSHEETS_SELECTED_CELLS;
+ }
+ return eRange;
+}
+
+// -----------------------------------------------------------------------
+
+bool PrintDialog::IsSheetRangeChecked( PrintSheetRange eRange ) const
+{
+ if ( !mbWithSheetsAndCells )
+ return false;
+
+ bool bRet = false;
+ switch ( eRange )
+ {
+ case PRINTSHEETS_ALL :
+ bRet = maRbtAllSheets.IsChecked() != FALSE;
+ break;
+ case PRINTSHEETS_SELECTED_SHEETS :
+ bRet = maRbtSelectedSheets.IsChecked() != FALSE;
+ break;
+ case PRINTSHEETS_SELECTED_CELLS :
+ bRet = maRbtSelectedCells.IsChecked() != FALSE;
+ break;
+ default:
+ DBG_ERRORFILE( "PrintDialog::IsSheetRangeChecked(): invalid range" );
+ }
+ return bRet;
+}
+
+// -----------------------------------------------------------------------
+
+long PrintDialog::Notify( NotifyEvent& rNEvt )
+{
+ if ( (rNEvt.GetType() == EVENT_GETFOCUS) && IsReallyVisible() )
+ ImplStatusHdl( &maStatusTimer );
+ else if ( rNEvt.GetType() == EVENT_KEYINPUT )
+ {
+ if ( rNEvt.GetKeyEvent()->GetKeyCode().GetCode() == KEY_F1 && mpPrinterImpl->m_bHelpDisabled )
+ return 1; // do nothing
+ }
+
+ return ModalDialog::Notify( rNEvt );
+}
+
+// -----------------------------------------------------------------------
+
+void PrintDialog::DataChanged( const DataChangedEvent& rDCEvt )
+{
+ if ( rDCEvt.GetType() == DATACHANGED_PRINTER )
+ {
+ TEMPPRINTER() = ImplPrnDlgUpdatePrinter( mpPrinter, TEMPPRINTER() );
+ Printer* pPrn;
+ if ( TEMPPRINTER() )
+ pPrn = TEMPPRINTER();
+ else
+ pPrn = mpPrinter;
+ ImplFillPrnDlgListBox( pPrn, &maLbName, &maBtnProperties );
+ ImplSetInfo();
+ ImplCheckOK();
+ }
+ else if ( rDCEvt.GetType() == DATACHANGED_SETTINGS )
+ ImplSetImages();
+
+ ModalDialog::DataChanged( rDCEvt );
+}
+
+// -----------------------------------------------------------------------
+
+short PrintDialog::Execute()
+{
+ if ( !mpPrinter || mpPrinter->IsPrinting() || mpPrinter->IsJobActive() )
+ {
+ DBG_ERRORFILE( "PrinterSetupDialog::Execute() - No Printer or printer is printing" );
+ return FALSE;
+ }
+
+ // check if the printer brings up its own dialog
+ // in that case leave the work to that dialog
+ if( mpPrinter->GetCapabilities( PRINTER_CAPABILITIES_EXTERNALDIALOG ) )
+ return TRUE;
+
+ Printer::updatePrinters();
+
+ // Controls initialisieren
+ ImplFillPrnDlgListBox( mpPrinter, &maLbName, &maBtnProperties );
+ ImplSetInfo();
+ maStatusTimer.Start();
+ ImplInitControls();
+ maNumCopies.GrabFocus();
+ maNumCopies.SetSelection( Selection( 0, maNumCopies.GetText().Len() ) );
+ ImplModifyControlHdl( NULL );
+
+ // Dialog starten
+ short nRet = ModalDialog::Execute();
+
+ // Wenn Dialog mit OK beendet wurde, dann die Daten updaten
+ if( nRet == TRUE )
+ {
+ if ( TEMPPRINTER() )
+ mpPrinter->SetPrinterProps( TEMPPRINTER() );
+ ImplFillDialogData();
+ }
+
+ maStatusTimer.Stop();
+
+ return nRet;
+}
+
+// -----------------------------------------------------------------------
+
+void PrintDialog::DisableHelp()
+{
+ mpPrinterImpl->m_bHelpDisabled = sal_True;
+ maBtnHelp.Disable();
+}
+