diff options
Diffstat (limited to 'padmin/source/padialog.cxx')
-rw-r--r-- | padmin/source/padialog.cxx | 765 |
1 files changed, 0 insertions, 765 deletions
diff --git a/padmin/source/padialog.cxx b/padmin/source/padialog.cxx deleted file mode 100644 index dbc57e48ff..0000000000 --- a/padmin/source/padialog.cxx +++ /dev/null @@ -1,765 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * 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. - * - ************************************************************************/ - -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <string.h> -#include <math.h> - -#include "padialog.hrc" -#include "fontentry.hxx" -#include "helper.hxx" -#include "padialog.hxx" -#include "adddlg.hxx" -#include "prtsetup.hxx" - -#include "vcl/msgbox.hxx" -#include "vcl/print.hxx" -#include "vcl/gradient.hxx" -#include "vcl/bitmap.hxx" -#include "vcl/lineinfo.hxx" -#include "vcl/svapp.hxx" -#include "vcl/event.hxx" -#include "vcl/printerinfomanager.hxx" - -#include "tools/stream.hxx" -#include "tools/color.hxx" - -#include "osl/file.hxx" - -#include "rtl/ustrbuf.hxx" -#include <sal/macros.h> - -#include "unotools/localedatawrapper.hxx" -#include "unotools/configitem.hxx" -#include "unotools/configmgr.hxx" - -#include "com/sun/star/awt/Size.hpp" - -using namespace psp; -using namespace padmin; -using namespace osl; -using namespace com::sun::star; -using namespace com::sun::star::uno; -using namespace com::sun::star::beans; - -using ::rtl::OUString; -using ::rtl::OUStringBuffer; - -PADialog* PADialog::Create( Window* pParent, sal_Bool bAdmin ) -{ - return new PADialog( pParent, bAdmin ); -} - -PADialog::PADialog( Window* pParent, sal_Bool /*bAdmin*/ ) : - ModalDialog( pParent, PaResId( RID_PADIALOG ) ), - m_aDevicesLB( this, PaResId( RID_PA_LB_DEV ) ), - m_aConfPB( this, PaResId( RID_PA_BTN_CONF ) ), - m_aRenamePB( this, PaResId( RID_PA_BTN_RENAME ) ), - m_aStdPB( this, PaResId( RID_PA_BTN_STD ) ), - m_aRemPB( this, PaResId( RID_PA_BTN_DEL ) ), - m_aTestPagePB( this, PaResId( RID_PA_TESTPAGE ) ), - m_aPrintersFL( this, PaResId( RID_PA_FL_PRINTERS ) ), - m_aDriverTxt( this, PaResId( RID_PA_TXT_DRIVER ) ), - m_aDriver( this, PaResId( RID_PA_TXT_DRIVER_STRING ) ), - m_aLocationTxt( this, PaResId( RID_PA_TXT_LOCATION ) ), - m_aLocation( this, PaResId( RID_PA_TXT_LOCATION_STRING ) ), - m_aCommandTxt( this, PaResId( RID_PA_TXT_COMMAND ) ), - m_aCommand( this, PaResId( RID_PA_TXT_COMMAND_STRING ) ), - m_aCommentTxt( this, PaResId( RID_PA_TXT_COMMENT ) ), - m_aComment( this, PaResId( RID_PA_TXT_COMMENT_STRING ) ), - m_aCUPSFL( this, PaResId( RID_PA_FL_CUPSUSAGE ) ), - m_aCUPSCB( this, PaResId( RID_PA_CB_CUPSUSAGE ) ), - m_aSepButtonFL( this, PaResId( RID_PA_FL_SEPBUTTON ) ), - m_aAddPB( this, PaResId( RID_PA_BTN_ADD ) ), - m_aFontsPB( this, PaResId( RID_PA_BTN_FONTS ) ), - m_aCancelButton( this, PaResId( RID_PA_BTN_CANCEL ) ), - m_aDefPrt( PaResId( RID_PA_STR_DEFPRT ) ), - m_aRenameStr( PaResId( RID_PA_STR_RENAME ) ), - m_rPIManager( PrinterInfoManager::get() ) -{ - FreeResource(); - updateSettings(); - Init(); -} - -void PADialog::updateSettings() -{ - m_aPrinterImg = Image( BitmapEx( PaResId( RID_BMP_SMALL_PRINTER ) ) ); - m_aFaxImg = Image( BitmapEx( PaResId( RID_BMP_SMALL_FAX ) ) ); - m_aPdfImg = Image( BitmapEx( PaResId( RID_BMP_SMALL_PDF ) ) ); -} - -void PADialog::Init() -{ - // #i79787# initially ensure printer discovery has ended - m_rPIManager.checkPrintersChanged( true ); - m_aCUPSCB.Check( m_rPIManager.isCUPSDisabled() ); - - UpdateDevice(); - UpdateText(); - - m_aRemPB.Enable( sal_False ); - - m_aDevicesLB.SetDoubleClickHdl( LINK( this, PADialog, DoubleClickHdl ) ); - m_aDevicesLB.SetSelectHdl( LINK( this, PADialog, SelectHdl ) ); - m_aStdPB.SetClickHdl( LINK( this, PADialog, ClickBtnHdl ) ); - m_aRemPB.SetClickHdl( LINK( this, PADialog, ClickBtnHdl ) ); - m_aConfPB.SetClickHdl( LINK( this, PADialog, ClickBtnHdl ) ); - m_aRenamePB.SetClickHdl( LINK( this, PADialog, ClickBtnHdl ) ); - m_aTestPagePB.SetClickHdl( LINK( this, PADialog, ClickBtnHdl ) ); - m_aFontsPB.SetClickHdl( LINK( this, PADialog, ClickBtnHdl ) ); - m_aAddPB.SetClickHdl( LINK( this, PADialog, ClickBtnHdl ) ); - m_aDevicesLB.setDelPressedLink( LINK( this, PADialog, DelPressedHdl ) ); - m_aCUPSCB.SetClickHdl( LINK( this, PADialog, ClickBtnHdl ) ); - - ::psp::PrintFontManager& rFontManager( ::psp::PrintFontManager::get() ); - if( ! rFontManager.checkImportPossible() ) - m_aFontsPB.Enable( sal_False ); - if( rFontManager.hasFontconfig() ) - { - m_aFontsPB.Enable( sal_False ); - m_aFontsPB.Show( sal_False ); - } - - // at this point no actual changes will be written - // but the write will have checked whether any writeable config exists - if( ! m_rPIManager.writePrinterConfig() ) - { - m_aAddPB.Enable( sal_False ); - m_aRemPB.Enable( sal_False ); - m_aConfPB.Enable( sal_False ); - m_aRenamePB.Enable( sal_False ); - m_aStdPB.Enable( sal_False ); - m_aCUPSCB.Enable( sal_False ); - ErrorBox aBox( GetParent(), WB_OK | WB_DEF_OK, String( PaResId( RID_ERR_NOWRITE ) ) ); - aBox.Execute(); - } -} - -PADialog::~PADialog() -{ - m_rPIManager.writePrinterConfig(); - freePadminRC(); -} - -long PADialog::Notify( NotifyEvent& rEv ) -{ - if( IsVisible() && - (rEv.GetType() == EVENT_GETFOCUS || rEv.GetType() == EVENT_LOSEFOCUS ) - ) - { - if( m_rPIManager.checkPrintersChanged( true ) ) - { - String aSelectEntry = m_aDevicesLB.GetSelectEntry(); - UpdateDevice(); - UpdateText(); - m_aDevicesLB.SelectEntry( aSelectEntry ); - } - } - return ModalDialog::Notify( rEv ); -} - -void PADialog::DataChanged( const DataChangedEvent& rEv ) -{ - ModalDialog::DataChanged( rEv ); - if( (rEv.GetType() == DATACHANGED_SETTINGS) && - (rEv.GetFlags() & SETTINGS_STYLE) ) - { - updateSettings(); - // push the new images into the listbox - UpdateDevice(); - } -} - -String PADialog::getSelectedDevice() -{ - int nPos = m_aDevicesLB.GetSelectEntryPos(); - int nLen = (int)(sal_IntPtr)m_aDevicesLB.GetEntryData( nPos ); - return m_aDevicesLB.GetEntry( nPos ).Copy( 0, nLen ); -} - -IMPL_LINK( PADialog, DelPressedHdl, ListBox*, pBox ) -{ - if( pBox == &m_aDevicesLB && m_aRemPB.IsEnabled() ) - ClickBtnHdl( &m_aRemPB ); - return 0; -} - -IMPL_LINK( PADialog, ClickBtnHdl, PushButton*, pButton ) -{ - if( pButton == &m_aStdPB ) - UpdateDefPrt(); - else if( pButton == &m_aRemPB && AreYouSure( this, RID_QUERY_REMOVEPRINTER ) ) - RemDevice(); - else if( pButton == &m_aConfPB ) - ConfigureDevice(); - else if( pButton == &m_aRenamePB ) - RenameDevice(); - else if( pButton == &m_aTestPagePB ) - PrintTestPage(); - else if( pButton == &m_aAddPB ) - AddDevice(); - else if( pButton == &m_aFontsPB ) - { - FontNameDlg aDialog( this ); - aDialog.Execute(); - } - else if( static_cast<Button*>(pButton) == &m_aCUPSCB ) - { - m_rPIManager.setCUPSDisabled( m_aCUPSCB.IsChecked() ); - UpdateDevice(); - UpdateText(); - } - - return 0; -} - -IMPL_LINK( PADialog, DoubleClickHdl, ListBox*, pListBox ) -{ - if( pListBox == &m_aDevicesLB ) - UpdateDefPrt(); - return 0; -} - -IMPL_LINK( PADialog, SelectHdl, ListBox*, pListBox ) -{ - if( pListBox == &m_aDevicesLB ) - { - String sSelect = getSelectedDevice(); - String sDefPrt = m_rPIManager.getDefaultPrinter(); - if( sDefPrt == sSelect || ! m_rPIManager.removePrinter( sSelect, true ) ) - m_aRemPB.Enable( sal_False ); - else - m_aRemPB.Enable( sal_True ); - UpdateText(); - } - return 0; -} - -void PADialog::UpdateDefPrt() -{ - m_rPIManager.setDefaultPrinter( getSelectedDevice() ); - - UpdateDevice(); - UpdateText(); - - if( m_aRemPB.HasFocus() ) - m_aDevicesLB.GetFocus(); - m_aRemPB.Enable( sal_False ); -} - -void PADialog::UpdateText() -{ - OUString aDev( getSelectedDevice() ); - if( aDev.getLength() ) - { - const PrinterInfo& rInfo = m_rPIManager.getPrinterInfo( aDev ); - String aDriver( rInfo.m_aPrinterName ); - aDriver.AppendAscii( " (" ); - aDriver += String( rInfo.m_aDriverName ); - aDriver.Append( ')' ); - m_aDriver.SetText( aDriver ); - m_aCommand.SetText( rInfo.m_aCommand ); - m_aComment.SetText( rInfo.m_aComment ); - m_aLocation.SetText( rInfo.m_aLocation ); - } - else // nothing selected - { - String aEmpty; - m_aDriver.SetText( aEmpty ); - m_aCommand.SetText( aEmpty ); - m_aComment.SetText( aEmpty ); - m_aLocation.SetText( aEmpty ); - } -} - -static Point project( const Point& rPoint ) -{ - const double angle_x = M_PI / 6.0; - const double angle_z = M_PI / 6.0; - - // transform planar coordinates to 3d - double x = rPoint.X(); - double y = rPoint.Y(); - //double z = 0; - - // rotate around X axis - double x1 = x; - double y1 = y * cos( angle_x ); - double z1 = y * sin( angle_x ); - - // rotate around Z axis - double x2 = x1 * cos( angle_z ) + y1 * sin( angle_z ); - //double y2 = y1 * cos( angle_z ) - x1 * sin( angle_z ); - double z2 = z1; - - return Point( (sal_Int32)x2, (sal_Int32)z2 ); -} - -static Color approachColor( const Color& rFrom, const Color& rTo ) -{ - Color aColor; - sal_uInt8 nDiff; - // approach red - if( rFrom.GetRed() < rTo.GetRed() ) - { - nDiff = rTo.GetRed() - rFrom.GetRed(); - aColor.SetRed( rFrom.GetRed() + ( nDiff < 10 ? nDiff : 10 ) ); - } - else if( rFrom.GetRed() > rTo.GetRed() ) - { - nDiff = rFrom.GetRed() - rTo.GetRed(); - aColor.SetRed( rFrom.GetRed() - ( nDiff < 10 ? nDiff : 10 ) ); - } - else - aColor.SetRed( rFrom.GetRed() ); - - // approach Green - if( rFrom.GetGreen() < rTo.GetGreen() ) - { - nDiff = rTo.GetGreen() - rFrom.GetGreen(); - aColor.SetGreen( rFrom.GetGreen() + ( nDiff < 10 ? nDiff : 10 ) ); - } - else if( rFrom.GetGreen() > rTo.GetGreen() ) - { - nDiff = rFrom.GetGreen() - rTo.GetGreen(); - aColor.SetGreen( rFrom.GetGreen() - ( nDiff < 10 ? nDiff : 10 ) ); - } - else - aColor.SetGreen( rFrom.GetGreen() ); - - // approach blue - if( rFrom.GetBlue() < rTo.GetBlue() ) - { - nDiff = rTo.GetBlue() - rFrom.GetBlue(); - aColor.SetBlue( rFrom.GetBlue() + ( nDiff < 10 ? nDiff : 10 ) ); - } - else if( rFrom.GetBlue() > rTo.GetBlue() ) - { - nDiff = rFrom.GetBlue() - rTo.GetBlue(); - aColor.SetBlue( rFrom.GetBlue() - ( nDiff < 10 ? nDiff : 10 ) ); - } - else - aColor.SetBlue( rFrom.GetBlue() ); - - return aColor; -} - -class SpaPrinterController : public vcl::PrinterController -{ -public: - SpaPrinterController( const boost::shared_ptr<Printer>& i_pPrinter ) - : vcl::PrinterController( i_pPrinter ) - {} - virtual ~SpaPrinterController() - {} - - virtual int getPageCount() const { return 1; } - virtual Sequence< PropertyValue > getPageParameters( int i_nPage ) const; - virtual void printPage( int i_nPage ) const; - virtual void jobFinished( com::sun::star::view::PrintableState ); -}; - -Sequence< PropertyValue > SpaPrinterController::getPageParameters( int ) const -{ - Sequence< PropertyValue > aRet( 1 ); - - Size aPageSize( getPrinter()->GetPaperSizePixel() ); - aPageSize = getPrinter()->PixelToLogic( aPageSize, MapMode( MAP_100TH_MM ) ); - - awt::Size aSize; - aSize.Width = aPageSize.Width(); - aSize.Height = aPageSize.Height(); - aRet[0].Value = makeAny(aSize); - - return aRet; -} - -void SpaPrinterController::printPage( int ) const -{ - const double DELTA = 5.0; - - boost::shared_ptr<Printer> pPrinter( getPrinter() ); - - PrinterInfo aInfo( psp::PrinterInfoManager::get().getPrinterInfo( pPrinter->GetName() ) ); - const PPDParser* pPrintParser = aInfo.m_pParser; - - MapMode aMapMode( MAP_100TH_MM ); - - Bitmap aButterfly( PaResId( RID_BUTTERFLY ) ); - - pPrinter->SetMapMode( aMapMode ); - - Any aRet = utl::ConfigManager::GetDirectConfigProperty( utl::ConfigManager::PRODUCTNAME ); - OUString aJobName; - aRet >>= aJobName; - - aJobName = aJobName + OUString( RTL_CONSTASCII_USTRINGPARAM( " Testpage" ) ); - - Size aPaperSize=pPrinter->GetOutputSize(); - Point aCenter( aPaperSize.Width()/2-300, - aPaperSize.Height() - aPaperSize.Width()/2 ); - Point aP1( aPaperSize.Width()/48, 0), aP2( aPaperSize.Width()/40, 0 ), aPoint; - - pPrinter->DrawRect( Rectangle( Point( 0,0 ), aPaperSize ) ); - pPrinter->DrawRect( Rectangle( Point( 100,100 ), - Size( aPaperSize.Width()-200, - aPaperSize.Height()-200 ) ) ); - pPrinter->DrawRect( Rectangle( Point( 200,200 ), - Size( aPaperSize.Width()-400, - aPaperSize.Height()-400 ) ) ); - pPrinter->DrawRect( Rectangle( Point( 300,300 ), - Size( aPaperSize.Width()-600, - aPaperSize.Height()-600 ) ) ); - - Font aFont( String( RTL_CONSTASCII_USTRINGPARAM( "Courier" ) ), Size( 0, 400 ) ); - aFont.SetWeight( WEIGHT_NORMAL ); - aFont.SetItalic( ITALIC_NONE ); - pPrinter->SetFont( aFont ); - - OUStringBuffer aPrintText(1024); - long nWidth = 0, nMaxWidth = 0; - String aToken; - - static const struct - { - const char* const pDirect; - sal_uInt16 nResId; - } aResIds[] = - { - { NULL, RID_TXT_TESTPAGE_NAME }, - { NULL, RID_TXT_TESTPAGE_MODEL }, - { "PPD", 0 }, - { NULL, RID_TXT_TESTPAGE_QUEUE }, - { NULL, RID_TXT_TESTPAGE_COMMENT }, - { NULL, RID_TXT_TESTPAGE_DATE }, - { NULL, RID_TXT_TESTPAGE_TIME } - }; - - for( unsigned int i = 0; i < SAL_N_ELEMENTS(aResIds); i++ ) - { - if( aResIds[i].pDirect ) - aToken = String::CreateFromAscii( aResIds[i].pDirect ); - else - aToken = String( PaResId( aResIds[i].nResId ) ); - nMaxWidth = ( nWidth = pPrinter->GetTextWidth( aToken ) ) > nMaxWidth ? nWidth : nMaxWidth; - aPrintText.append( aToken ); - aPrintText.append( (sal_Unicode)'\n' ); - }; - - pPrinter->DrawText( Rectangle( Point( 1000, 1000 ), - Size( aPaperSize.Width() - 2000, - aPaperSize.Height() - 4000 ) ), - aPrintText.makeStringAndClear(), - TEXT_DRAW_MULTILINE ); - - AllSettings aSettings( Application::GetSettings() ); - const LocaleDataWrapper& rLocaleWrapper( aSettings.GetLocaleDataWrapper() ); - - aPrintText.appendAscii( ": " ); - aPrintText.append( pPrinter->GetName() ); - aPrintText.appendAscii( "\n: " ); - if( pPrintParser ) - aPrintText.append( pPrintParser->getPrinterName() ); - aPrintText.appendAscii( "\n: " ); - INetURLObject aDriverPath( pPrintParser ? pPrintParser->getFilename() : String( RTL_CONSTASCII_USTRINGPARAM( "<undef>" ) ), - INET_PROT_FILE, INetURLObject::ENCODE_ALL ); - aPrintText.append( aDriverPath.GetName() ); - aPrintText.appendAscii( "\n: " ); - aPrintText.append( aInfo.m_aCommand ); - aPrintText.appendAscii( "\n: " ); - aPrintText.append( aInfo.m_aComment ); - aPrintText.appendAscii( "\n: " ); - aPrintText.append( rLocaleWrapper.getDate( Date() ) ); - aPrintText.appendAscii( "\n: " ); - aPrintText.append( rLocaleWrapper.getTime( Time() ) ); - - pPrinter->DrawText( Rectangle( Point( 1100 + nMaxWidth, 1000 ), - Size( aPaperSize.Width() - 2100 - nMaxWidth, - aPaperSize.Height() - 4000 ) ), - aPrintText.makeStringAndClear(), - TEXT_DRAW_MULTILINE ); - - pPrinter->DrawBitmap( Point( aPaperSize.Width() - 4000, 1000 ), - Size( 3000,3000 ), - aButterfly ); - pPrinter->SetFillColor(); - pPrinter->DrawRect( Rectangle( Point( aPaperSize.Width() - 4000, 1000 ), - Size( 3000,3000 ) ) ); - - Color aWhite( 0xff, 0xff, 0xff ); - Color aBlack( 0, 0, 0 ); - Color aLightRed( 0xff, 0, 0 ); - Color aDarkRed( 0x40, 0, 0 ); - Color aLightBlue( 0, 0, 0xff ); - Color aDarkBlue( 0,0,0x40 ); - Color aLightGreen( 0, 0xff, 0 ); - Color aDarkGreen( 0, 0x40, 0 ); - - Gradient aGradient( GRADIENT_LINEAR, aBlack, aWhite ); - aGradient.SetAngle( 900 ); - pPrinter->DrawGradient( Rectangle( Point( 1000, 5500 ), - Size( aPaperSize.Width() - 2000, - 500 ) ), aGradient ); - aGradient.SetStartColor( aDarkRed ); - aGradient.SetEndColor( aLightBlue ); - pPrinter->DrawGradient( Rectangle( Point( 1000, 6300 ), - Size( aPaperSize.Width() - 2000, - 500 ) ), aGradient ); - aGradient.SetStartColor( aDarkBlue ); - aGradient.SetEndColor( aLightGreen ); - pPrinter->DrawGradient( Rectangle( Point( 1000, 7100 ), - Size( aPaperSize.Width() - 2000, - 500 ) ), aGradient ); - aGradient.SetStartColor( aDarkGreen ); - aGradient.SetEndColor( aLightRed ); - pPrinter->DrawGradient( Rectangle( Point( 1000, 7900 ), - Size( aPaperSize.Width() - 2000, - 500 ) ), aGradient ); - - - - LineInfo aLineInfo( LINE_SOLID, 200 ); - double sind = sin( DELTA*M_PI/180.0 ); - double cosd = cos( DELTA*M_PI/180.0 ); - double factor = 1 + (DELTA/1000.0); - int n=0; - Color aLineColor( 0, 0, 0 ); - Color aApproachColor( 0, 0, 200 ); - while ( aP2.X() < aCenter.X() && n++ < 680 ) - { - aLineInfo.SetWidth( n/3 ); - aLineColor = approachColor( aLineColor, aApproachColor ); - pPrinter->SetLineColor( aLineColor ); - - // switch aproach color - if( aApproachColor.IsRGBEqual( aLineColor ) ) - { - if( aApproachColor.GetRed() ) - aApproachColor = Color( 0, 0, 200 ); - else if( aApproachColor.GetGreen() ) - aApproachColor = Color( 200, 0, 0 ); - else - aApproachColor = Color( 0, 200, 0 ); - } - - pPrinter->DrawLine( project( aP1 ) + aCenter, - project( aP2 ) + aCenter, - aLineInfo ); - aPoint.X() = (int)((((double)aP1.X())*cosd - ((double)aP1.Y())*sind)*factor); - aPoint.Y() = (int)((((double)aP1.Y())*cosd + ((double)aP1.X())*sind)*factor); - aP1 = aPoint; - aPoint.X() = (int)((((double)aP2.X())*cosd - ((double)aP2.Y())*sind)*factor); - aPoint.Y() = (int)((((double)aP2.Y())*cosd + ((double)aP2.X())*sind)*factor); - aP2 = aPoint; - } -#if (OSL_DEBUG_LEVEL > 1) || defined DBG_UTIL - fprintf( stderr, "%d lines\n",n ); -#endif -} - -void SpaPrinterController::jobFinished( com::sun::star::view::PrintableState ) -{ - String aInfoString( PaResId( RID_PA_TXT_TESTPAGE_PRINTED ) ); - InfoBox aInfoBox( NULL, aInfoString ); - aInfoBox.SetText( String( PaResId( RID_BXT_TESTPAGE ) ) ); - aInfoBox.Execute(); -} - -void PADialog::PrintTestPage() -{ - String sPrinter( getSelectedDevice() ); - - boost::shared_ptr<Printer> pPrinter( new Printer( sPrinter ) ); - - if( pPrinter->GetName() != sPrinter ) - { - String aString( PaResId( RID_ERR_NOPRINTER ) ); - aString.SearchAndReplaceAscii( "%s", sPrinter ); - - ErrorBox aErrorBox( this, WB_OK | WB_DEF_OK, aString ); - aErrorBox.SetText( String( PaResId( RID_BXT_ENVIRONMENT ) ) ); - aErrorBox.Execute(); - return; - } - - boost::shared_ptr<vcl::PrinterController> pController( new SpaPrinterController( pPrinter ) ); - JobSetup aJobSetup( pPrinter->GetJobSetup() ); - aJobSetup.SetValue( String( RTL_CONSTASCII_USTRINGPARAM( "IsQuickJob" ) ), - String( RTL_CONSTASCII_USTRINGPARAM( "true" ) ) ); - Printer::PrintJob( pController, aJobSetup ); -} - -void PADialog::AddDevice() -{ - AddPrinterDialog aDlg( this ); - - if( aDlg.Execute() ) - UpdateDevice(); -} - -void PADialog::RemDevice() -{ - String aPrinter( getSelectedDevice() ); - String aDefPrinter( m_rPIManager.getDefaultPrinter() ); - // do not remove the default printer - if( aPrinter.Equals( aDefPrinter ) ) - return; - - if( ! m_rPIManager.removePrinter( aPrinter ) ) - { - String aText( PaResId( RID_ERR_PRINTERNOTREMOVEABLE ) ); - aText.SearchAndReplace( String( RTL_CONSTASCII_USTRINGPARAM( "%s" ) ), aPrinter ); - ErrorBox aBox( this, WB_OK | WB_DEF_OK, aText ); - aBox.Execute(); - return; - } - m_aPrinters.remove( aPrinter ); - - m_aDevicesLB.RemoveEntry( m_aDevicesLB.GetSelectEntryPos() ); - for( int i=0; i < m_aDevicesLB.GetEntryCount(); i++ ) - { - if( m_aDevicesLB.GetEntry( i ).CompareTo( aDefPrinter, aDefPrinter.Len() ) == COMPARE_EQUAL ) - { - m_aDevicesLB.SelectEntryPos( i, sal_True ); - UpdateText(); - break; - } - } - - m_aDevicesLB.GetFocus(); - - if( m_aDevicesLB.GetEntryCount() < 2 ) - m_aRemPB.Enable( sal_False ); -} - -void PADialog::ConfigureDevice() -{ - String aPrinter( getSelectedDevice() ); - - if( ! aPrinter.Len() ) - return; - - PrinterInfo aInfo( m_rPIManager.getPrinterInfo( aPrinter ) ); - RTSDialog aDialog( aInfo, aPrinter, true, this ); - - if( aDialog.Execute() ) - m_rPIManager.changePrinterInfo( aPrinter, aDialog.getSetup() ); - - UpdateText(); -} - -void PADialog::RenameDevice() -{ - String aPrinter( getSelectedDevice() ); - OUString aOldPrinter( aPrinter ); - - if( ! aPrinter.Len() ) - return; - - String aTmpString( PaResId( RID_QRY_PRTNAME ) ); - QueryString aQuery( this, - aTmpString, - aPrinter ); - aQuery.SetText( m_aRenameStr ); - aQuery.Execute(); - - if( aPrinter.Len() ) - { - PrinterInfo aInfo( m_rPIManager.getPrinterInfo( aOldPrinter ) ); - aInfo.m_aPrinterName = aPrinter; - if( m_rPIManager.addPrinter( aPrinter, aInfo.m_aDriverName ) ) - { - bool bWasDefault = m_rPIManager.getDefaultPrinter() == aOldPrinter; - m_aPrinters.push_back( aPrinter ); - if( m_rPIManager.removePrinter( aOldPrinter ) ) - m_aPrinters.remove( aOldPrinter ); - m_rPIManager.changePrinterInfo( aPrinter, aInfo ); - if( bWasDefault ) - { - m_rPIManager.setDefaultPrinter( aPrinter ); - UpdateDefPrt(); - } - UpdateDevice(); - } - } -} - -void PADialog::UpdateDevice() -{ - m_aDevicesLB.Clear(); - - m_rPIManager.listPrinters( m_aPrinters ); - ::std::list< OUString >::iterator it; - for( it = m_aPrinters.begin(); it != m_aPrinters.end(); ++it ) - { - const PrinterInfo& rInfo( m_rPIManager.getPrinterInfo( *it ) ); - sal_Int32 nIndex = 0; - bool bAutoQueue = false; - bool bFax = false; - bool bPdf = false; - while( nIndex != -1 && ! bAutoQueue ) - { - OUString aToken( rInfo.m_aFeatures.getToken( 0, ',', nIndex ) ); - if( aToken.getLength() ) - { - if( aToken.compareToAscii( "autoqueue" ) == 0 ) - bAutoQueue = true; - else if( aToken.compareToAscii( "pdf=", 4 ) == 0 ) - bPdf = true; - else if( aToken.compareToAscii( "fax", 3 ) == 0 ) - bFax = true; - } - } - if( bAutoQueue ) - continue; - - String aEntry( *it ); - if( *it == m_rPIManager.getDefaultPrinter() ) - { - aEntry.AppendAscii( " (" ); - aEntry += m_aDefPrt; - aEntry.AppendAscii( ")" ); - } - int nPos = - m_aDevicesLB.InsertEntry( aEntry, - bFax ? m_aFaxImg : - bPdf ? m_aPdfImg : m_aPrinterImg - ); - m_aDevicesLB.SetEntryData( nPos, (void*)(sal_IntPtr)it->getLength() ); - if( *it == m_rPIManager.getDefaultPrinter() ) - { - m_aDevicesLB.SelectEntryPos( nPos ); - UpdateText(); - } - } -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |