1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir #include <stdio.h> 29*cdf0e10cSrcweir #include <vcl/msgbox.hxx> 30*cdf0e10cSrcweir #include <vcl/svapp.hxx> 31*cdf0e10cSrcweir #ifndef _PAD_RTSETUP_HRC_ 32*cdf0e10cSrcweir #include <rtsetup.hrc> 33*cdf0e10cSrcweir #endif 34*cdf0e10cSrcweir #include <cmddlg.hxx> 35*cdf0e10cSrcweir #include <padialog.hxx> 36*cdf0e10cSrcweir #include <helper.hxx> 37*cdf0e10cSrcweir #include <prtsetup.hxx> 38*cdf0e10cSrcweir 39*cdf0e10cSrcweir using namespace psp; 40*cdf0e10cSrcweir using namespace rtl; 41*cdf0e10cSrcweir using namespace padmin; 42*cdf0e10cSrcweir 43*cdf0e10cSrcweir #define PRINTER_PERSISTENCE_GROUP "KnownPrinterCommands" 44*cdf0e10cSrcweir #define FAX_PERSISTENCE_GROUP "KnownFaxCommands" 45*cdf0e10cSrcweir #define PDF_PERSISTENCE_GROUP "KnowPdfCommands" 46*cdf0e10cSrcweir #define MAX_COMMANDS 50 47*cdf0e10cSrcweir 48*cdf0e10cSrcweir void CommandStore::getSystemPrintCommands( ::std::list< String >& rCommands ) 49*cdf0e10cSrcweir { 50*cdf0e10cSrcweir static ::std::list< OUString > aSysCommands; 51*cdf0e10cSrcweir static bool bOnce = false; 52*cdf0e10cSrcweir if( ! bOnce ) 53*cdf0e10cSrcweir { 54*cdf0e10cSrcweir bOnce = true; 55*cdf0e10cSrcweir PrinterInfoManager::get().getSystemPrintCommands( aSysCommands ); 56*cdf0e10cSrcweir } 57*cdf0e10cSrcweir 58*cdf0e10cSrcweir ::std::list< OUString >::const_iterator it; 59*cdf0e10cSrcweir for( it = aSysCommands.begin(); it != aSysCommands.end(); ++it ) 60*cdf0e10cSrcweir rCommands.push_back( *it ); 61*cdf0e10cSrcweir } 62*cdf0e10cSrcweir 63*cdf0e10cSrcweir void CommandStore::getSystemPdfCommands( ::std::list< String >& rCommands ) 64*cdf0e10cSrcweir { 65*cdf0e10cSrcweir static bool bOnce = false; 66*cdf0e10cSrcweir static ::std::list< String > aSysCommands; 67*cdf0e10cSrcweir 68*cdf0e10cSrcweir if( ! bOnce ) 69*cdf0e10cSrcweir { 70*cdf0e10cSrcweir bOnce = true; 71*cdf0e10cSrcweir char pBuffer[1024]; 72*cdf0e10cSrcweir FILE* pPipe; 73*cdf0e10cSrcweir String aCommand; 74*cdf0e10cSrcweir rtl_TextEncoding aEncoding = osl_getThreadTextEncoding(); 75*cdf0e10cSrcweir 76*cdf0e10cSrcweir pPipe = popen( "which gs 2>/dev/null", "r" ); 77*cdf0e10cSrcweir if( pPipe ) 78*cdf0e10cSrcweir { 79*cdf0e10cSrcweir if (fgets( pBuffer, sizeof( pBuffer ), pPipe ) != NULL) 80*cdf0e10cSrcweir { 81*cdf0e10cSrcweir int nLen = strlen( pBuffer ); 82*cdf0e10cSrcweir if( pBuffer[nLen-1] == '\n' ) // strip newline 83*cdf0e10cSrcweir pBuffer[--nLen] = 0; 84*cdf0e10cSrcweir aCommand = String( ByteString( pBuffer ), aEncoding ); 85*cdf0e10cSrcweir if( ( ( aCommand.GetChar( 0 ) == '/' ) 86*cdf0e10cSrcweir || ( aCommand.GetChar( 0 ) == '.' && aCommand.GetChar( 1 ) == '/' ) 87*cdf0e10cSrcweir || ( aCommand.GetChar( 0 ) == '.' && aCommand.GetChar( 1 ) == '.' && aCommand.GetChar( 2 ) == '/' ) ) 88*cdf0e10cSrcweir && nLen > 2 89*cdf0e10cSrcweir && aCommand.GetChar( nLen-2 ) == 'g' 90*cdf0e10cSrcweir && aCommand.GetChar( nLen-1 ) == 's' ) 91*cdf0e10cSrcweir { 92*cdf0e10cSrcweir aCommand.AppendAscii( " -q -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=\"(OUTFILE)\" -" ); 93*cdf0e10cSrcweir aSysCommands.push_back( aCommand ); 94*cdf0e10cSrcweir } 95*cdf0e10cSrcweir } 96*cdf0e10cSrcweir pclose( pPipe ); 97*cdf0e10cSrcweir } 98*cdf0e10cSrcweir 99*cdf0e10cSrcweir pPipe = popen( "which distill 2>/dev/null", "r" ); 100*cdf0e10cSrcweir if( pPipe ) 101*cdf0e10cSrcweir { 102*cdf0e10cSrcweir if (fgets( pBuffer, sizeof( pBuffer ), pPipe ) != NULL) 103*cdf0e10cSrcweir { 104*cdf0e10cSrcweir int nLen = strlen( pBuffer ); 105*cdf0e10cSrcweir if( pBuffer[nLen-1] == '\n' ) // strip newline 106*cdf0e10cSrcweir pBuffer[--nLen] = 0; 107*cdf0e10cSrcweir aCommand = String( ByteString( pBuffer ), aEncoding ); 108*cdf0e10cSrcweir if( ( ( aCommand.GetChar( 0 ) == '/' ) 109*cdf0e10cSrcweir || ( aCommand.GetChar( 0 ) == '.' && aCommand.GetChar( 1 ) == '/' ) 110*cdf0e10cSrcweir || ( aCommand.GetChar( 0 ) == '.' && aCommand.GetChar( 1 ) == '.' && aCommand.GetChar( 2 ) == '/' ) ) 111*cdf0e10cSrcweir && nLen > 7 112*cdf0e10cSrcweir && aCommand.Copy( nLen - 8 ).EqualsAscii( "/distill" ) ) 113*cdf0e10cSrcweir { 114*cdf0e10cSrcweir aCommand.AppendAscii( " (TMP) ; mv `echo (TMP) | sed s/\\.ps\\$/.pdf/` \"(OUTFILE)\"" ); 115*cdf0e10cSrcweir aSysCommands.push_back( aCommand ); 116*cdf0e10cSrcweir } 117*cdf0e10cSrcweir } 118*cdf0e10cSrcweir pclose( pPipe ); 119*cdf0e10cSrcweir } 120*cdf0e10cSrcweir } 121*cdf0e10cSrcweir ::std::list< String >::const_iterator it; 122*cdf0e10cSrcweir for( it = aSysCommands.begin(); it != aSysCommands.end(); ++it ) 123*cdf0e10cSrcweir rCommands.push_back( *it ); 124*cdf0e10cSrcweir } 125*cdf0e10cSrcweir 126*cdf0e10cSrcweir 127*cdf0e10cSrcweir 128*cdf0e10cSrcweir void CommandStore::getStoredCommands( const char* pGroup, ::std::list< String >& rCommands ) 129*cdf0e10cSrcweir { 130*cdf0e10cSrcweir Config& rConfig( getPadminRC() ); 131*cdf0e10cSrcweir rConfig.SetGroup( pGroup ); 132*cdf0e10cSrcweir int nKeys = rConfig.GetKeyCount(); 133*cdf0e10cSrcweir ::std::list< String >::const_iterator it; 134*cdf0e10cSrcweir while( nKeys-- ) 135*cdf0e10cSrcweir { 136*cdf0e10cSrcweir String aCommand( rConfig.ReadKey( ByteString::CreateFromInt32( nKeys ), RTL_TEXTENCODING_UTF8 ) ); 137*cdf0e10cSrcweir if( aCommand.Len() ) 138*cdf0e10cSrcweir { 139*cdf0e10cSrcweir for( it = rCommands.begin(); it != rCommands.end() && *it != aCommand; ++it ) 140*cdf0e10cSrcweir ; 141*cdf0e10cSrcweir if( it == rCommands.end() ) 142*cdf0e10cSrcweir rCommands.push_back( aCommand ); 143*cdf0e10cSrcweir } 144*cdf0e10cSrcweir } 145*cdf0e10cSrcweir } 146*cdf0e10cSrcweir 147*cdf0e10cSrcweir void CommandStore::setCommands( 148*cdf0e10cSrcweir const char* pGroup, 149*cdf0e10cSrcweir const ::std::list< String >& rCommands, 150*cdf0e10cSrcweir const ::std::list< String >& rSysCommands 151*cdf0e10cSrcweir ) 152*cdf0e10cSrcweir { 153*cdf0e10cSrcweir Config& rConfig( getPadminRC() ); 154*cdf0e10cSrcweir rConfig.DeleteGroup( pGroup ); 155*cdf0e10cSrcweir rConfig.SetGroup( pGroup ); 156*cdf0e10cSrcweir ::std::list< String >::const_iterator it, loop; 157*cdf0e10cSrcweir ::std::list< String > aWriteList; 158*cdf0e10cSrcweir 159*cdf0e10cSrcweir int nWritten = 0; 160*cdf0e10cSrcweir for( it = rCommands.begin(); it != rCommands.end(); ++it ) 161*cdf0e10cSrcweir { 162*cdf0e10cSrcweir if( it->Len() ) 163*cdf0e10cSrcweir { 164*cdf0e10cSrcweir for( loop = rSysCommands.begin(); loop != rSysCommands.end() && *loop != *it; ++loop ) 165*cdf0e10cSrcweir ; 166*cdf0e10cSrcweir if( loop == rSysCommands.end() ) 167*cdf0e10cSrcweir { 168*cdf0e10cSrcweir aWriteList.push_back( *it ); 169*cdf0e10cSrcweir nWritten++; 170*cdf0e10cSrcweir } 171*cdf0e10cSrcweir } 172*cdf0e10cSrcweir } 173*cdf0e10cSrcweir while( nWritten > MAX_COMMANDS ) 174*cdf0e10cSrcweir { 175*cdf0e10cSrcweir aWriteList.pop_front(); 176*cdf0e10cSrcweir nWritten--; 177*cdf0e10cSrcweir } 178*cdf0e10cSrcweir for( nWritten = 0, it = aWriteList.begin(); it != aWriteList.end(); ++it, ++nWritten ) 179*cdf0e10cSrcweir rConfig.WriteKey( ByteString::CreateFromInt32( nWritten ), ByteString( *it, RTL_TEXTENCODING_UTF8 ) ); 180*cdf0e10cSrcweir } 181*cdf0e10cSrcweir 182*cdf0e10cSrcweir 183*cdf0e10cSrcweir void CommandStore::getPrintCommands( ::std::list< String >& rCommands ) 184*cdf0e10cSrcweir { 185*cdf0e10cSrcweir rCommands.clear(); 186*cdf0e10cSrcweir getSystemPrintCommands( rCommands ); 187*cdf0e10cSrcweir getStoredCommands( PRINTER_PERSISTENCE_GROUP, rCommands ); 188*cdf0e10cSrcweir } 189*cdf0e10cSrcweir 190*cdf0e10cSrcweir void CommandStore::getPdfCommands( ::std::list< String >& rCommands ) 191*cdf0e10cSrcweir { 192*cdf0e10cSrcweir rCommands.clear(); 193*cdf0e10cSrcweir getSystemPdfCommands( rCommands ); 194*cdf0e10cSrcweir getStoredCommands( PDF_PERSISTENCE_GROUP, rCommands ); 195*cdf0e10cSrcweir } 196*cdf0e10cSrcweir 197*cdf0e10cSrcweir void CommandStore::getFaxCommands( ::std::list< String >& rCommands ) 198*cdf0e10cSrcweir { 199*cdf0e10cSrcweir rCommands.clear(); 200*cdf0e10cSrcweir getStoredCommands( FAX_PERSISTENCE_GROUP, rCommands ); 201*cdf0e10cSrcweir } 202*cdf0e10cSrcweir 203*cdf0e10cSrcweir void CommandStore::setPrintCommands( const ::std::list< String >& rCommands ) 204*cdf0e10cSrcweir { 205*cdf0e10cSrcweir ::std::list< String > aSysCmds; 206*cdf0e10cSrcweir getSystemPrintCommands( aSysCmds ); 207*cdf0e10cSrcweir setCommands( PRINTER_PERSISTENCE_GROUP, rCommands, aSysCmds ); 208*cdf0e10cSrcweir } 209*cdf0e10cSrcweir 210*cdf0e10cSrcweir void CommandStore::setPdfCommands( const ::std::list< String >& rCommands ) 211*cdf0e10cSrcweir { 212*cdf0e10cSrcweir ::std::list< String > aSysCmds; 213*cdf0e10cSrcweir getSystemPdfCommands( aSysCmds ); 214*cdf0e10cSrcweir setCommands( PDF_PERSISTENCE_GROUP, rCommands, aSysCmds ); 215*cdf0e10cSrcweir } 216*cdf0e10cSrcweir 217*cdf0e10cSrcweir void CommandStore::setFaxCommands( const ::std::list< String >& rCommands ) 218*cdf0e10cSrcweir { 219*cdf0e10cSrcweir ::std::list< String > aSysCmds; 220*cdf0e10cSrcweir setCommands( FAX_PERSISTENCE_GROUP, rCommands, aSysCmds ); 221*cdf0e10cSrcweir } 222*cdf0e10cSrcweir 223*cdf0e10cSrcweir 224*cdf0e10cSrcweir RTSCommandPage::RTSCommandPage( RTSDialog* pParent ) : 225*cdf0e10cSrcweir TabPage( &pParent->m_aTabControl, PaResId( RID_RTS_COMMANDPAGE ) ), 226*cdf0e10cSrcweir m_pParent( pParent ), 227*cdf0e10cSrcweir m_aCommandsCB( this, PaResId( RID_RTS_CMD_CB_COMMANDS ) ), 228*cdf0e10cSrcweir m_aExternalCB( this, PaResId( RID_RTS_CMD_CB_EXTERNAL ) ), 229*cdf0e10cSrcweir m_aQuickFT( this, PaResId( RID_RTS_CMD_FT_QUICKCMD ) ), 230*cdf0e10cSrcweir m_aQuickCB( this, PaResId( RIT_RTS_CMD_CB_QUICKCMD ) ), 231*cdf0e10cSrcweir m_aCommandTitle( this, PaResId( RID_RTS_CMD_FL_INSTALL ) ), 232*cdf0e10cSrcweir m_aPrinterName( this, PaResId( RID_RTS_CMD_TXT_PRTNAME ) ), 233*cdf0e10cSrcweir m_aConnectedTo( this, PaResId( RID_RTS_CMD_TXT_CONNECT ) ), 234*cdf0e10cSrcweir m_aPrinterFL( this, PaResId( RID_RTS_CMD_FL_DEFAULT ) ), 235*cdf0e10cSrcweir m_aConfigureText( this, PaResId( RID_RTS_CMD_TXT_CONFIGURE ) ), 236*cdf0e10cSrcweir m_aConfigureBox( this, PaResId( RID_RTS_CMD_LB_CONFIGURE ) ), 237*cdf0e10cSrcweir m_aPdfDirectoryText( this, PaResId( RID_RTS_CMD_TXT_PDFDIR ) ), 238*cdf0e10cSrcweir m_aPdfDirectoryButton( this, PaResId( RID_RTS_CMD_BTN_PDFDIR ) ), 239*cdf0e10cSrcweir m_aPdfDirectoryEdit( this, PaResId( RID_RTS_CMD_EDT_PDFDIR ) ), 240*cdf0e10cSrcweir m_aFaxSwallowBox( this, PaResId( RID_RTS_CMD_BOX_SWALLOWFAXNO ) ), 241*cdf0e10cSrcweir m_aHelpButton( this, PaResId( RID_RTS_CMD_BTN_HELP ) ), 242*cdf0e10cSrcweir m_aRemovePB( this, PaResId( RID_RTS_CMD_BTN_REMOVE ) ), 243*cdf0e10cSrcweir m_aFaxHelp( PaResId( RID_RTS_CMD_STR_FAXHELP ) ), 244*cdf0e10cSrcweir m_aPrinterHelp( PaResId( RID_RTS_CMD_STR_PRINTERHELP ) ), 245*cdf0e10cSrcweir m_aPdfHelp( PaResId( RID_RTS_CMD_STR_PDFHELP ) ) 246*cdf0e10cSrcweir { 247*cdf0e10cSrcweir // configuring as printer is only sensible in default print system 248*cdf0e10cSrcweir PrinterInfoManager& rMgr( PrinterInfoManager::get() ); 249*cdf0e10cSrcweir if( rMgr.getType() == PrinterInfoManager::Default || rMgr.isCUPSDisabled() ) 250*cdf0e10cSrcweir m_nPrinterEntry = m_aConfigureBox.InsertEntry( String( PaResId( RID_RTS_CMD_STR_CONFIGURE_PRINTER ) ) ); 251*cdf0e10cSrcweir else 252*cdf0e10cSrcweir m_nPrinterEntry = ~0; 253*cdf0e10cSrcweir m_nFaxEntry = m_aConfigureBox.InsertEntry( String( PaResId( RID_RTS_CMD_STR_CONFIGURE_FAX ) ) ); 254*cdf0e10cSrcweir m_nPdfEntry = m_aConfigureBox.InsertEntry( String( PaResId( RID_RTS_CMD_STR_CONFIGURE_PDF ) ) ); 255*cdf0e10cSrcweir 256*cdf0e10cSrcweir FreeResource(); 257*cdf0e10cSrcweir 258*cdf0e10cSrcweir CommandStore::getPrintCommands( m_aPrinterCommands ); 259*cdf0e10cSrcweir CommandStore::getFaxCommands( m_aFaxCommands ); 260*cdf0e10cSrcweir CommandStore::getPdfCommands( m_aPdfCommands ); 261*cdf0e10cSrcweir 262*cdf0e10cSrcweir m_aPrinterName.SetText( m_pParent->m_aPrinter ); 263*cdf0e10cSrcweir 264*cdf0e10cSrcweir m_aCommandsCB.SetDoubleClickHdl( LINK( this, RTSCommandPage, DoubleClickHdl ) ); 265*cdf0e10cSrcweir m_aCommandsCB.SetSelectHdl( LINK( this, RTSCommandPage, SelectHdl ) ); 266*cdf0e10cSrcweir m_aCommandsCB.SetModifyHdl( LINK( this, RTSCommandPage, ModifyHdl ) ); 267*cdf0e10cSrcweir m_aConfigureBox.SetSelectHdl( LINK( this, RTSCommandPage, SelectHdl ) ); 268*cdf0e10cSrcweir m_aHelpButton.SetClickHdl( LINK( this, RTSCommandPage, ClickBtnHdl ) ); 269*cdf0e10cSrcweir m_aRemovePB.SetClickHdl( LINK( this, RTSCommandPage, ClickBtnHdl ) ); 270*cdf0e10cSrcweir m_aPdfDirectoryButton.SetClickHdl( LINK( this, RTSCommandPage, ClickBtnHdl ) ); 271*cdf0e10cSrcweir m_aExternalCB.SetToggleHdl( LINK( this, RTSCommandPage, ClickBtnHdl ) ); 272*cdf0e10cSrcweir 273*cdf0e10cSrcweir m_aPdfDirectoryButton.Show( sal_False ); 274*cdf0e10cSrcweir m_aPdfDirectoryEdit.Show( sal_False ); 275*cdf0e10cSrcweir m_aPdfDirectoryText.Show( sal_False ); 276*cdf0e10cSrcweir m_aFaxSwallowBox.Show( sal_False ); 277*cdf0e10cSrcweir m_aCommandsCB.SetText( m_pParent->m_aJobData.m_aCommand ); 278*cdf0e10cSrcweir m_aQuickCB.SetText( m_pParent->m_aJobData.m_aQuickCommand ); 279*cdf0e10cSrcweir 280*cdf0e10cSrcweir m_bWasFax = false; 281*cdf0e10cSrcweir m_bWasPdf = false; 282*cdf0e10cSrcweir m_aConfigureBox.SelectEntryPos( m_nPrinterEntry ); 283*cdf0e10cSrcweir sal_Int32 nIndex = 0; 284*cdf0e10cSrcweir while( nIndex != -1 ) 285*cdf0e10cSrcweir { 286*cdf0e10cSrcweir OUString aToken( m_pParent->m_aJobData.m_aFeatures.getToken( 0, ',', nIndex ) ); 287*cdf0e10cSrcweir if( ! aToken.compareToAscii( "fax", 3 ) ) 288*cdf0e10cSrcweir { 289*cdf0e10cSrcweir m_bWasFax = true; 290*cdf0e10cSrcweir m_aFaxSwallowBox.Show( sal_True ); 291*cdf0e10cSrcweir sal_Int32 nPos = 0; 292*cdf0e10cSrcweir m_aFaxSwallowBox.Check( ! aToken.getToken( 1, '=', nPos ).compareToAscii( "swallow", 7 ) ? sal_True : sal_False ); 293*cdf0e10cSrcweir m_aConfigureBox.SelectEntryPos( m_nFaxEntry ); 294*cdf0e10cSrcweir } 295*cdf0e10cSrcweir else if( ! aToken.compareToAscii( "pdf=", 4 ) ) 296*cdf0e10cSrcweir { 297*cdf0e10cSrcweir m_bWasPdf = true; 298*cdf0e10cSrcweir sal_Int32 nPos = 0; 299*cdf0e10cSrcweir m_aPdfDirectoryEdit.SetText( aToken.getToken( 1, '=', nPos ) ); 300*cdf0e10cSrcweir m_aPdfDirectoryEdit.Show( sal_True ); 301*cdf0e10cSrcweir m_aPdfDirectoryButton.Show( sal_True ); 302*cdf0e10cSrcweir m_aPdfDirectoryText.Show( sal_True ); 303*cdf0e10cSrcweir m_aConfigureBox.SelectEntryPos( m_nPdfEntry ); 304*cdf0e10cSrcweir } 305*cdf0e10cSrcweir else if( ! aToken.compareToAscii( "external_dialog" ) ) 306*cdf0e10cSrcweir { 307*cdf0e10cSrcweir m_aExternalCB.Check(); 308*cdf0e10cSrcweir m_bWasExternalDialog = true; 309*cdf0e10cSrcweir } 310*cdf0e10cSrcweir } 311*cdf0e10cSrcweir 312*cdf0e10cSrcweir m_aQuickCB.Enable( m_aExternalCB.IsChecked() ); 313*cdf0e10cSrcweir 314*cdf0e10cSrcweir String aString( m_aConnectedTo.GetText() ); 315*cdf0e10cSrcweir aString += String( m_pParent->m_aJobData.m_aCommand ); 316*cdf0e10cSrcweir m_aConnectedTo.SetText( aString ); 317*cdf0e10cSrcweir 318*cdf0e10cSrcweir UpdateCommands(); 319*cdf0e10cSrcweir } 320*cdf0e10cSrcweir 321*cdf0e10cSrcweir RTSCommandPage::~RTSCommandPage() 322*cdf0e10cSrcweir { 323*cdf0e10cSrcweir } 324*cdf0e10cSrcweir 325*cdf0e10cSrcweir void RTSCommandPage::save() 326*cdf0e10cSrcweir { 327*cdf0e10cSrcweir String aCommand,aQuickCommand; 328*cdf0e10cSrcweir bool bHaveFax = m_aConfigureBox.GetSelectEntryPos() == m_nFaxEntry ? true : false; 329*cdf0e10cSrcweir bool bHavePdf = m_aConfigureBox.GetSelectEntryPos() == m_nPdfEntry ? true : false; 330*cdf0e10cSrcweir ::std::list< String >::iterator it; 331*cdf0e10cSrcweir 332*cdf0e10cSrcweir String aFeatures; 333*cdf0e10cSrcweir sal_Int32 nIndex = 0; 334*cdf0e10cSrcweir String aOldPdfPath; 335*cdf0e10cSrcweir bool bOldFaxSwallow = false; 336*cdf0e10cSrcweir bool bFaxSwallow = m_aFaxSwallowBox.IsChecked() ? true : false; 337*cdf0e10cSrcweir bool bOldExternalDialog = false, bExternalDialog = m_aExternalCB.IsChecked() ? true : false; 338*cdf0e10cSrcweir 339*cdf0e10cSrcweir while( nIndex != -1 ) 340*cdf0e10cSrcweir { 341*cdf0e10cSrcweir OUString aToken( m_pParent->m_aJobData.m_aFeatures.getToken( 0, ',', nIndex ) ); 342*cdf0e10cSrcweir if( aToken.compareToAscii( "fax", 3 ) && 343*cdf0e10cSrcweir aToken.compareToAscii( "pdf", 3 ) && 344*cdf0e10cSrcweir aToken.compareToAscii( "external_dialog" ) 345*cdf0e10cSrcweir ) 346*cdf0e10cSrcweir { 347*cdf0e10cSrcweir if( aToken.getLength() ) 348*cdf0e10cSrcweir { 349*cdf0e10cSrcweir if( aFeatures.Len() ) 350*cdf0e10cSrcweir aFeatures += ','; 351*cdf0e10cSrcweir aFeatures += String( aToken ); 352*cdf0e10cSrcweir } 353*cdf0e10cSrcweir } 354*cdf0e10cSrcweir else if( ! aToken.compareToAscii( "pdf=", 4 ) ) 355*cdf0e10cSrcweir { 356*cdf0e10cSrcweir sal_Int32 nPos = 0; 357*cdf0e10cSrcweir aOldPdfPath = aToken.getToken( 1, '=', nPos ); 358*cdf0e10cSrcweir } 359*cdf0e10cSrcweir else if( ! aToken.compareToAscii( "fax=", 4 ) ) 360*cdf0e10cSrcweir { 361*cdf0e10cSrcweir sal_Int32 nPos = 0; 362*cdf0e10cSrcweir bOldFaxSwallow = aToken.getToken( 1, '=', nPos ).compareToAscii( "swallow", 7 ) ? false : true; 363*cdf0e10cSrcweir } 364*cdf0e10cSrcweir else if( ! aToken.compareToAscii( "external_dialog" ) ) 365*cdf0e10cSrcweir { 366*cdf0e10cSrcweir bOldExternalDialog = true; 367*cdf0e10cSrcweir } 368*cdf0e10cSrcweir } 369*cdf0e10cSrcweir ::std::list< String >* pList = &m_aPrinterCommands; 370*cdf0e10cSrcweir if( bExternalDialog ) 371*cdf0e10cSrcweir { 372*cdf0e10cSrcweir if( aFeatures.Len() ) 373*cdf0e10cSrcweir aFeatures += ','; 374*cdf0e10cSrcweir aFeatures.AppendAscii( "external_dialog" ); 375*cdf0e10cSrcweir } 376*cdf0e10cSrcweir if( bHaveFax ) 377*cdf0e10cSrcweir { 378*cdf0e10cSrcweir if( aFeatures.Len() ) 379*cdf0e10cSrcweir aFeatures += ','; 380*cdf0e10cSrcweir aFeatures.AppendAscii( "fax=" ); 381*cdf0e10cSrcweir if( bFaxSwallow ) 382*cdf0e10cSrcweir aFeatures.AppendAscii( "swallow" ); 383*cdf0e10cSrcweir pList = &m_aFaxCommands; 384*cdf0e10cSrcweir } 385*cdf0e10cSrcweir if( bHavePdf ) 386*cdf0e10cSrcweir { 387*cdf0e10cSrcweir if( aFeatures.Len() ) 388*cdf0e10cSrcweir aFeatures += ','; 389*cdf0e10cSrcweir aFeatures.AppendAscii( "pdf=" ); 390*cdf0e10cSrcweir aFeatures.Append( m_aPdfDirectoryEdit.GetText() ); 391*cdf0e10cSrcweir pList = &m_aPdfCommands; 392*cdf0e10cSrcweir } 393*cdf0e10cSrcweir aCommand = m_aCommandsCB.GetText(); 394*cdf0e10cSrcweir aQuickCommand = m_aQuickCB.GetText(); 395*cdf0e10cSrcweir for( it = pList->begin(); it != pList->end() && *it != aCommand; ++it ) 396*cdf0e10cSrcweir ; 397*cdf0e10cSrcweir if( it == pList->end() ) 398*cdf0e10cSrcweir pList->push_back( aCommand ); 399*cdf0e10cSrcweir 400*cdf0e10cSrcweir if( aCommand != String( m_pParent->m_aJobData.m_aCommand ) || 401*cdf0e10cSrcweir aQuickCommand != String( m_pParent->m_aJobData.m_aQuickCommand ) || 402*cdf0e10cSrcweir ( m_bWasFax && ! bHaveFax ) || 403*cdf0e10cSrcweir ( ! m_bWasFax && bHaveFax ) || 404*cdf0e10cSrcweir ( m_bWasPdf && ! bHavePdf ) || 405*cdf0e10cSrcweir ( ! m_bWasPdf && bHavePdf ) || 406*cdf0e10cSrcweir ( bHavePdf && aOldPdfPath != m_aPdfDirectoryEdit.GetText() ) || 407*cdf0e10cSrcweir ( bHaveFax && bFaxSwallow != bOldFaxSwallow ) || 408*cdf0e10cSrcweir ( m_bWasExternalDialog && ! bExternalDialog ) || 409*cdf0e10cSrcweir ( ! m_bWasExternalDialog && bExternalDialog ) 410*cdf0e10cSrcweir ) 411*cdf0e10cSrcweir { 412*cdf0e10cSrcweir m_pParent->m_aJobData.m_aCommand = aCommand; 413*cdf0e10cSrcweir m_pParent->m_aJobData.m_aQuickCommand = aQuickCommand; 414*cdf0e10cSrcweir m_pParent->m_aJobData.m_aFeatures = aFeatures; 415*cdf0e10cSrcweir 416*cdf0e10cSrcweir PrinterInfoManager::get().changePrinterInfo( m_pParent->m_aPrinter, m_pParent->m_aJobData ); 417*cdf0e10cSrcweir } 418*cdf0e10cSrcweir CommandStore::setPrintCommands( m_aPrinterCommands ); 419*cdf0e10cSrcweir CommandStore::setFaxCommands( m_aFaxCommands ); 420*cdf0e10cSrcweir CommandStore::setPdfCommands( m_aPdfCommands ); 421*cdf0e10cSrcweir } 422*cdf0e10cSrcweir 423*cdf0e10cSrcweir 424*cdf0e10cSrcweir IMPL_LINK( RTSCommandPage, SelectHdl, Control*, pBox ) 425*cdf0e10cSrcweir { 426*cdf0e10cSrcweir if( pBox == &m_aConfigureBox ) 427*cdf0e10cSrcweir { 428*cdf0e10cSrcweir sal_Bool bEnable = m_aConfigureBox.GetSelectEntryPos() == m_nPdfEntry ? sal_True : sal_False; 429*cdf0e10cSrcweir m_aPdfDirectoryButton.Show( bEnable ); 430*cdf0e10cSrcweir m_aPdfDirectoryEdit.Show( bEnable ); 431*cdf0e10cSrcweir m_aPdfDirectoryText.Show( bEnable ); 432*cdf0e10cSrcweir bEnable = m_aConfigureBox.GetSelectEntryPos() == m_nFaxEntry ? sal_True : sal_False; 433*cdf0e10cSrcweir m_aFaxSwallowBox.Show( bEnable ); 434*cdf0e10cSrcweir UpdateCommands(); 435*cdf0e10cSrcweir } 436*cdf0e10cSrcweir else if( pBox == &m_aCommandsCB ) 437*cdf0e10cSrcweir { 438*cdf0e10cSrcweir m_aRemovePB.Enable( sal_True ); 439*cdf0e10cSrcweir } 440*cdf0e10cSrcweir 441*cdf0e10cSrcweir return 0; 442*cdf0e10cSrcweir } 443*cdf0e10cSrcweir 444*cdf0e10cSrcweir IMPL_LINK( RTSCommandPage, ClickBtnHdl, Button*, pButton ) 445*cdf0e10cSrcweir { 446*cdf0e10cSrcweir if( pButton == & m_aPdfDirectoryButton ) 447*cdf0e10cSrcweir { 448*cdf0e10cSrcweir String aPath( m_aPdfDirectoryEdit.GetText() ); 449*cdf0e10cSrcweir if( chooseDirectory( aPath ) ) 450*cdf0e10cSrcweir m_aPdfDirectoryEdit.SetText( aPath ); 451*cdf0e10cSrcweir } 452*cdf0e10cSrcweir else if( pButton == &m_aRemovePB ) 453*cdf0e10cSrcweir { 454*cdf0e10cSrcweir String aEntry( m_aCommandsCB.GetText() ); 455*cdf0e10cSrcweir ::std::list< String >* pList; 456*cdf0e10cSrcweir if( m_aConfigureBox.GetSelectEntryPos() == m_nPrinterEntry ) 457*cdf0e10cSrcweir pList = &m_aPrinterCommands; 458*cdf0e10cSrcweir else if( m_aConfigureBox.GetSelectEntryPos() == m_nFaxEntry ) 459*cdf0e10cSrcweir pList = &m_aFaxCommands; 460*cdf0e10cSrcweir else 461*cdf0e10cSrcweir pList = &m_aPdfCommands; 462*cdf0e10cSrcweir 463*cdf0e10cSrcweir pList->remove( aEntry ); 464*cdf0e10cSrcweir m_aCommandsCB.RemoveEntry( aEntry ); 465*cdf0e10cSrcweir m_aQuickCB.RemoveEntry( aEntry ); 466*cdf0e10cSrcweir } 467*cdf0e10cSrcweir else if( pButton == &m_aHelpButton ) 468*cdf0e10cSrcweir { 469*cdf0e10cSrcweir String aHelpText; 470*cdf0e10cSrcweir if( m_aConfigureBox.GetSelectEntryPos() == m_nPrinterEntry ) 471*cdf0e10cSrcweir aHelpText = m_aPrinterHelp; 472*cdf0e10cSrcweir else if( m_aConfigureBox.GetSelectEntryPos() == m_nFaxEntry ) 473*cdf0e10cSrcweir aHelpText = m_aFaxHelp; 474*cdf0e10cSrcweir else if( m_aConfigureBox.GetSelectEntryPos() == m_nPdfEntry ) 475*cdf0e10cSrcweir aHelpText = m_aPdfHelp; 476*cdf0e10cSrcweir 477*cdf0e10cSrcweir InfoBox aBox( this, aHelpText ); 478*cdf0e10cSrcweir aBox.Execute(); 479*cdf0e10cSrcweir } 480*cdf0e10cSrcweir else if( pButton == &m_aExternalCB ) 481*cdf0e10cSrcweir { 482*cdf0e10cSrcweir m_aQuickCB.Enable( m_aExternalCB.IsChecked() ); 483*cdf0e10cSrcweir } 484*cdf0e10cSrcweir return 0; 485*cdf0e10cSrcweir } 486*cdf0e10cSrcweir 487*cdf0e10cSrcweir IMPL_LINK( RTSCommandPage, DoubleClickHdl, ComboBox*, pComboBox ) 488*cdf0e10cSrcweir { 489*cdf0e10cSrcweir if( pComboBox == &m_aCommandsCB ) 490*cdf0e10cSrcweir ConnectCommand(); 491*cdf0e10cSrcweir return 0; 492*cdf0e10cSrcweir } 493*cdf0e10cSrcweir 494*cdf0e10cSrcweir IMPL_LINK( RTSCommandPage, ModifyHdl, Edit*, pEdit ) 495*cdf0e10cSrcweir { 496*cdf0e10cSrcweir if( pEdit == &m_aCommandsCB ) 497*cdf0e10cSrcweir m_aRemovePB.Enable( m_aCommandsCB.GetEntryPos( m_aCommandsCB.GetText() ) != LISTBOX_ENTRY_NOTFOUND ); 498*cdf0e10cSrcweir 499*cdf0e10cSrcweir return 0; 500*cdf0e10cSrcweir } 501*cdf0e10cSrcweir 502*cdf0e10cSrcweir void RTSCommandPage::UpdateCommands() 503*cdf0e10cSrcweir { 504*cdf0e10cSrcweir m_aCommandsCB.Clear(); 505*cdf0e10cSrcweir ::std::list< String >::iterator it; 506*cdf0e10cSrcweir if( m_aConfigureBox.GetSelectEntryPos() == m_nPrinterEntry ) 507*cdf0e10cSrcweir { 508*cdf0e10cSrcweir for( it = m_aPrinterCommands.begin(); it != m_aPrinterCommands.end(); ++it ) 509*cdf0e10cSrcweir { 510*cdf0e10cSrcweir m_aCommandsCB.InsertEntry( *it ); 511*cdf0e10cSrcweir m_aQuickCB.InsertEntry( *it ); 512*cdf0e10cSrcweir } 513*cdf0e10cSrcweir if( ! m_bWasFax ) 514*cdf0e10cSrcweir m_aCommandsCB.SetText( m_pParent->m_aJobData.m_aCommand ); 515*cdf0e10cSrcweir else 516*cdf0e10cSrcweir m_aCommandsCB.SetText( String() ); 517*cdf0e10cSrcweir } 518*cdf0e10cSrcweir else if( m_aConfigureBox.GetSelectEntryPos() == m_nFaxEntry ) 519*cdf0e10cSrcweir { 520*cdf0e10cSrcweir for( it = m_aFaxCommands.begin(); it != m_aFaxCommands.end(); ++it ) 521*cdf0e10cSrcweir { 522*cdf0e10cSrcweir m_aCommandsCB.InsertEntry( *it ); 523*cdf0e10cSrcweir m_aQuickCB.InsertEntry( *it ); 524*cdf0e10cSrcweir } 525*cdf0e10cSrcweir if( m_bWasFax ) 526*cdf0e10cSrcweir m_aCommandsCB.SetText( m_pParent->m_aJobData.m_aCommand ); 527*cdf0e10cSrcweir else 528*cdf0e10cSrcweir m_aCommandsCB.SetText( String() ); 529*cdf0e10cSrcweir } 530*cdf0e10cSrcweir else if( m_aConfigureBox.GetSelectEntryPos() == m_nPdfEntry ) 531*cdf0e10cSrcweir { 532*cdf0e10cSrcweir for( it = m_aPdfCommands.begin(); it != m_aPdfCommands.end(); ++it ) 533*cdf0e10cSrcweir { 534*cdf0e10cSrcweir m_aCommandsCB.InsertEntry( *it ); 535*cdf0e10cSrcweir m_aQuickCB.InsertEntry( *it ); 536*cdf0e10cSrcweir } 537*cdf0e10cSrcweir if( m_bWasPdf ) 538*cdf0e10cSrcweir m_aCommandsCB.SetText( m_pParent->m_aJobData.m_aCommand ); 539*cdf0e10cSrcweir else 540*cdf0e10cSrcweir m_aCommandsCB.SetText( String() ); 541*cdf0e10cSrcweir } 542*cdf0e10cSrcweir } 543*cdf0e10cSrcweir 544*cdf0e10cSrcweir void RTSCommandPage::ConnectCommand() 545*cdf0e10cSrcweir { 546*cdf0e10cSrcweir String aString( m_aConnectedTo.GetText().GetToken( 0, ':' ) ); 547*cdf0e10cSrcweir aString.AppendAscii( ": " ); 548*cdf0e10cSrcweir aString += m_aCommandsCB.GetText(); 549*cdf0e10cSrcweir 550*cdf0e10cSrcweir m_aConnectedTo.SetText( aString ); 551*cdf0e10cSrcweir } 552