diff options
Diffstat (limited to 'tqtinterface/qt4/src/dialogs/tqprintdialog.cpp')
-rw-r--r-- | tqtinterface/qt4/src/dialogs/tqprintdialog.cpp | 1672 |
1 files changed, 0 insertions, 1672 deletions
diff --git a/tqtinterface/qt4/src/dialogs/tqprintdialog.cpp b/tqtinterface/qt4/src/dialogs/tqprintdialog.cpp deleted file mode 100644 index 2050c82..0000000 --- a/tqtinterface/qt4/src/dialogs/tqprintdialog.cpp +++ /dev/null @@ -1,1672 +0,0 @@ -/**************************************************************************** -** -** Implementation of internal print dialog (X11) used by TQPrinter::select(). -** -** Created : 950829 -** -** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA. -** -** This file is part of the dialogs module of the TQt GUI Toolkit. -** -** This file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free -** Software Foundation and appearing in the files LICENSE.GPL2 -** and LICENSE.GPL3 included in the packaging of this file. -** Alternatively you may (at your option) use any later version -** of the GNU General Public License if such license has been -** publicly approved by Trolltech ASA (or its successors, if any) -** and the KDE Free TQt Foundation. -** -** Please review the following information to ensure GNU General -** Public Licensing requirements will be met: -** http://trolltech.com/products/qt/licenses/licensing/opensource/. -** If you are unsure which license is appropriate for your use, please -** review the following information: -** http://trolltech.com/products/qt/licenses/licensing/licensingoverview -** or contact the sales department at sales@trolltech.com. -** -** This file may be used under the terms of the Q Public License as -** defined by Trolltech ASA and appearing in the file LICENSE.TQPL -** included in the packaging of this file. Licensees holding valid TQt -** Commercial licenses may use this file in accordance with the TQt -** Commercial License Agreement provided with the Software. -** -** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, -** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted -** herein. -** -**********************************************************************/ - -#include "tqprintdialog.h" - -#ifndef TQT_NO_PRINTDIALOG - -#include "tqfiledialog.h" -#include "tqfile.h" -#include "tqtextstream.h" -#include "tqcombobox.h" -#include "tqframe.h" -#include "tqlabel.h" -#include "tqlineedit.h" -#include "tqpushbutton.h" -#include "tqprinter.h" -#include "tqlistview.h" -#include "tqlayout.h" -#include "tqbuttongroup.h" -#include "tqradiobutton.h" -#include "tqspinbox.h" -#include "tqapplication.h" -#include "tqheader.h" -#include "tqstyle.h" -#include "tqstring.h" -#include "tqregexp.h" -#if !defined(TQT_NO_CUPS) || !defined(TQT_NO_NIS) -#include "tqlibrary.h" -#endif - -#ifndef TQT_NO_NIS - -#ifndef BOOL_DEFINED -#define BOOL_DEFINED -#endif - -#include <rpcsvc/ypclnt.h> -#include <rpcsvc/yp_prot.h> - -// Solaris redefines connect -> __xnet_connect with _XOPEN_SOURCE_EXTENDED. -#if defined(connect) -# undef connect -#endif - -#endif // TQT_NO_NIS - -// UNIX Large File Support redefines open -> open64 -#if defined(open) -# undef open -#endif - -#include <ctype.h> -#include <stdlib.h> - - -class TQPrintDialogSpinBox : public TQSpinBox -{ -public: - TQPrintDialogSpinBox(int min, int max, int steps, TQWidget *parent, const char *name) - : TQSpinBox(min, max, steps, parent, name) - {} - - void interpretText() - { - TQSpinBox::interpretText(); - } -}; - - - - -enum { Success = 's', Unavail = 'u', NotFound = 'n', TryAgain = 't' }; -enum { Continue = 'c', Return = 'r' }; - -class TQPrintDialogPrivate -{ -public: - TQPrinter * printer; - - TQButtonGroup * printerOrFile; - - bool outputToFile; - TQListView * printers; - TQLineEdit * fileName; - TQPushButton * browse, *ok; - - TQButtonGroup * printRange; - TQLabel * firstPageLabel; - TQPrintDialogSpinBox * firstPage; - TQLabel * lastPageLabel; - TQPrintDialogSpinBox * lastPage; - TQRadioButton * printAllButton; - TQRadioButton * printRangeButton; - TQRadioButton * printSelectionButton; - TQRadioButton * printToFileButton; - TQComboBox *orientationCombo, *sizeCombo; - - TQPrinter::PageSize pageSize; - TQPrinter::Orientation orientation; - - TQButtonGroup * pageOrder; - TQPrinter::PageOrder pageOrder2; - - TQButtonGroup * colorMode; - TQPrinter::ColorMode colorMode2; - - TQPrintDialogSpinBox * copies; - int numCopies; - - TQBoxLayout *customLayout; - - TQPrinter::PageSize indexToPageSize[TQPrinter::NPageSize]; -}; - - -typedef void (*TQ_PrintDialogHook)(TQListView *); -static TQ_PrintDialogHook addPrinterHook = 0; - -void qt_set_printdialog_hook( TQ_PrintDialogHook hook ) -{ - addPrinterHook = hook; -} - -static void isc( TQPrintDialogPrivate * d, const TQString & text, - TQPrinter::PageSize ps ); - -class TQPrinterListViewItem : public TQListViewItem -{ -public: - TQPrinterListViewItem( TQListView * printers, const TQString& name, - const TQString& host, const TQString& comment, - const TQStringList& aliases ) - : TQListViewItem( printers, name, host, comment ), ali( aliases ) { } - - bool samePrinter( const TQString& name ) { - return text( 0 ) == name || ali.find( name ) != ali.end(); - } - - TQStringList ali; -}; - -static void perhapsAddPrinter( TQListView * printers, const TQString &name, - TQString host, TQString comment, - TQStringList aliases = TQStringList() ) -{ - const TQListViewItem * i = printers->firstChild(); - while ( i && !((TQPrinterListViewItem *) i)->samePrinter(name) ) - i = i->nextSibling(); - if ( i ) - return; - if ( host.isEmpty() ) - host = TQPrintDialog::tr( "locally connected" ); - (void)new TQPrinterListViewItem( printers, - name.simplifyWhiteSpace(), - host.simplifyWhiteSpace(), - comment.simplifyWhiteSpace(), aliases ); -} - -static void parsePrinterDesc( TQString printerDesc, TQListView * printers ) -{ - if ( printerDesc.length() < 1 ) - return; - - printerDesc = printerDesc.simplifyWhiteSpace(); - int i = printerDesc.find( ':' ); - TQString printerName, printerComment, printerHost; - TQStringList aliases; - - if ( i >= 0 ) { - // have ':' want '|' - int j = printerDesc.find( '|' ); - if ( j > 0 && j < i ) { - printerName = printerDesc.left( j ); - aliases = TQStringList::split( '|', - printerDesc.mid(j + 1, i - j - 1) ); - // try extracting a comment from the aliases - printerComment = TQPrintDialog::tr( "Aliases: %1" ) - .arg( aliases.join(", ") ); - } else { - printerName = printerDesc.left( i ); - } - // look for lprng pseudo all printers entry - i = printerDesc.find( TQRegExp(TQString::tqfromLatin1(": *all *=")) ); - if ( i >= 0 ) - printerName = ""; - // look for signs of this being a remote printer - i = printerDesc.find( TQRegExp(TQString::tqfromLatin1(": *rm *=")) ); - if ( i >= 0 ) { - // point k at the end of remote host name - while ( printerDesc[i] != '=' ) - i++; - while ( printerDesc[i] == '=' || printerDesc[i].isSpace() ) - i++; - j = i; - while ( j < (int)printerDesc.length() && printerDesc[j] != ':' ) - j++; - - // and stuff that into the string - printerHost = printerDesc.mid( i, j - i ); - } - } - if ( printerName.length() ) - perhapsAddPrinter( printers, printerName, printerHost, printerComment, - aliases ); -} - -static int parsePrintcap( TQListView * printers, const TQString& fileName ) -{ - TQFile printcap( fileName ); - if ( !printcap.open( IO_ReadOnly ) ) - return NotFound; - - char * line_ascii = new char[1025]; - line_ascii[1024] = '\0'; - - TQString printerDesc; - bool atEnd = FALSE; - - while ( !atEnd ) { - if ( printcap.atEnd() || printcap.readLine( line_ascii, 1024 ) <= 0 ) - atEnd = TRUE; - TQString line = line_ascii; - line = line.stripWhiteSpace(); - if ( line.length() >= 1 && line[int(line.length()) - 1] == '\\' ) - line.truncate( line.length() - 1 ); - if ( line[0] == '#' ) { - if ( !atEnd ) - continue; - } else if ( line[0] == '|' || line[0] == ':' ) { - printerDesc += line; - if ( !atEnd ) - continue; - } - - parsePrinterDesc( printerDesc, printers ); - - // add the first line of the new printer definition - printerDesc = line; - } - delete[] line_ascii; - return Success; -} - - -// solaris, not 2.6 -static void parseEtcLpPrinters( TQListView * printers ) -{ - TQDir lp( TQString::tqfromLatin1("/etc/lp/printers") ); - const TQFileInfoList * dirs = lp.entryInfoList(); - if ( !dirs ) - return; - - TQFileInfoListIterator it( *dirs ); - TQFileInfo *printer; - TQString tmp; - while ( (printer = it.current()) != 0 ) { - ++it; - if ( printer->isDir() ) { - tmp.sprintf( "/etc/lp/printers/%s/configuration", - printer->fileName().ascii() ); - TQFile configuration( tmp ); - char * line = new char[1025]; - TQString remote( TQString::tqfromLatin1("Remote:") ); - TQString contentType( TQString::tqfromLatin1("Content types:") ); - TQString printerHost; - bool canPrintPostscript = FALSE; - if ( configuration.open( IO_ReadOnly ) ) { - while ( !configuration.atEnd() && - configuration.readLine( line, 1024 ) > 0 ) { - if ( TQString::tqfromLatin1(line).startsWith( remote ) ) { - const char * p = line; - while ( *p != ':' ) - p++; - p++; - while ( isspace((uchar) *p) ) - p++; - printerHost = TQString::fromLocal8Bit(p); - printerHost = printerHost.simplifyWhiteSpace(); - } else if ( TQString::tqfromLatin1(line).startsWith( contentType ) ) { - char * p = line; - while ( *p != ':' ) - p++; - p++; - char * e; - while ( *p ) { - while ( isspace((uchar) *p) ) - p++; - if ( *p ) { - char s; - e = p; - while ( isalnum((uchar) *e) ) - e++; - s = *e; - *e = '\0'; - if ( !qstrcmp( p, "postscript" ) || - !qstrcmp( p, "any" ) ) - canPrintPostscript = TRUE; - *e = s; - if ( s == ',' ) - e++; - p = e; - } - } - } - } - if ( canPrintPostscript ) - perhapsAddPrinter( printers, printer->fileName(), - printerHost, TQString::tqfromLatin1("") ); - } - delete[] line; - } - } -} - - -// solaris 2.6 -static char * parsePrintersConf( TQListView * printers, bool *found = 0 ) -{ - TQFile pc( TQString::tqfromLatin1("/etc/printers.conf") ); - if ( !pc.open( IO_ReadOnly ) ) { - if ( found ) - *found = FALSE; - return 0; - } - if ( found ) - *found = TRUE; - - char * line = new char[1025]; - line[1024] = '\0'; - - TQString printerDesc; - int lineLength = 0; - - char * defaultPrinter = 0; - - while ( !pc.atEnd() && - (lineLength=pc.readLine( line, 1024 )) > 0 ) { - if ( *line == '#' ) { - *line = '\0'; - lineLength = 0; - } - if ( lineLength >= 2 && line[lineLength-2] == '\\' ) { - line[lineLength-2] = '\0'; - printerDesc += TQString::fromLocal8Bit(line); - } else { - printerDesc += TQString::fromLocal8Bit(line); - printerDesc = printerDesc.simplifyWhiteSpace(); - int i = printerDesc.find( ':' ); - TQString printerName, printerHost, printerComment; - TQStringList aliases; - if ( i >= 0 ) { - // have : want | - int j = printerDesc.find( '|', 0 ); - if ( j >= i ) - j = -1; - printerName = printerDesc.mid( 0, j < 0 ? i : j ); - if ( printerName == TQString::tqfromLatin1("_default") ) { - i = printerDesc.find( - TQRegExp( TQString::tqfromLatin1(": *use *=") ) ); - while ( printerDesc[i] != '=' ) - i++; - while ( printerDesc[i] == '=' || printerDesc[i].isSpace() ) - i++; - j = i; - while ( j < (int)printerDesc.length() && - printerDesc[j] != ':' && printerDesc[j] != ',' ) - j++; - // that's our default printer - defaultPrinter = - qstrdup( TQT_TQSTRING(printerDesc.mid( i, j-i )).ascii() ); - printerName = ""; - printerDesc = ""; - } else if ( printerName == TQString::tqfromLatin1("_all") ) { - // skip it.. any other cases we want to skip? - printerName = ""; - printerDesc = ""; - } - - if ( j > 0 ) { - // try extracting a comment from the aliases - aliases = TQStringList::split( '|', - printerDesc.mid(j + 1, i - j - 1) ); - printerComment = TQPrintDialog::tr( "Aliases: %1" ) - .arg( aliases.join(", ") ); - } - // look for signs of this being a remote printer - i = printerDesc.find( - TQRegExp( TQString::tqfromLatin1(": *bsdaddr *=") ) ); - if ( i >= 0 ) { - // point k at the end of remote host name - while ( printerDesc[i] != '=' ) - i++; - while ( printerDesc[i] == '=' || printerDesc[i].isSpace() ) - i++; - j = i; - while ( j < (int)printerDesc.length() && - printerDesc[j] != ':' && printerDesc[j] != ',' ) - j++; - // and stuff that into the string - printerHost = printerDesc.mid( i, j-i ); - // maybe stick the remote printer name into the comment - if ( printerDesc[j] == ',' ) { - i = ++j; - while ( printerDesc[i].isSpace() ) - i++; - j = i; - while ( j < (int)printerDesc.length() && - printerDesc[j] != ':' && printerDesc[j] != ',' ) - j++; - if ( printerName != printerDesc.mid( i, j-i ) ) { - printerComment = - TQString::tqfromLatin1("Remote name: "); - printerComment += printerDesc.mid( i, j-i ); - } - } - } - } - if ( printerComment == ":" ) - printerComment = ""; // for cups - if ( printerName.length() ) - perhapsAddPrinter( printers, printerName, printerHost, - printerComment, aliases ); - // chop away the line, for processing the next one - printerDesc = ""; - } - } - delete[] line; - return defaultPrinter; -} - -#ifndef TQT_NO_NIS - -#if defined(TQ_C_CALLBACKS) -extern "C" { -#endif - -static int foreach( int /* status */, char * /* key */, int /* keyLen */, - char * val, int valLen, char * data ) -{ - parsePrinterDesc( TQString::tqfromLatin1(val, valLen), (TQListView *) data ); - return 0; -} - -#if defined(TQ_C_CALLBACKS) -} -#endif - -static int retrieveNisPrinters( TQListView * printers ) -{ - typedef int (*WildCast)( int, char *, int, char *, int, char * ); - char printersConfByname[] = "printers.conf.byname"; - char *domain; - int err; - - TQLibrary lib( "nsl" ); - typedef int (*ypGetDefaultDomain)(char **); - ypGetDefaultDomain _ypGetDefaultDomain = (ypGetDefaultDomain)lib.resolve( "yp_get_default_domain" ); - typedef int (*ypAll)(const char *, const char *, const struct ypall_callback *); - ypAll _ypAll = (ypAll)lib.resolve( "yp_all" ); - - if ( _ypGetDefaultDomain && _ypAll ) { - err = _ypGetDefaultDomain( &domain ); - if ( err == 0 ) { - ypall_callback cb; - // wild cast to support K&R-style system headers - (WildCast &) cb.foreach = (WildCast) foreach; - cb.data = (char *) printers; - err = _ypAll( domain, printersConfByname, &cb ); - } - if ( !err ) - return Success; - } - return Unavail; -} - -#endif // TQT_NO_NIS - -static char *parseNsswitchPrintersEntry( TQListView * printers, char *line ) -{ -#define skipSpaces() \ - while ( isspace((uchar) line[k]) ) \ - k++ - - char *defaultPrinter = 0; - bool stop = FALSE; - int lastqStatus = NotFound; - - int k = 8; - skipSpaces(); - if ( line[k] != ':' ) - return 0; - k++; - - char *cp = strchr( line, '#' ); - if ( cp != 0 ) - *cp = '\0'; - - while ( line[k] != '\0' ) { - if ( isspace((uchar) line[k]) ) { - k++; - } else if ( line[k] == '[' ) { - k++; - skipSpaces(); - while ( line[k] != '\0' ) { - char status = tolower( line[k] ); - char action = '?'; - - while ( line[k] != '=' && line[k] != ']' && - line[k] != '\0' ) - k++; - if ( line[k] == '=' ) { - k++; - skipSpaces(); - action = tolower( line[k] ); - while ( line[k] != '\0' && !isspace((uchar) line[k]) && line[k] != ']' ) - k++; - } else if ( line[k] == ']' ) { - k++; - break; - } - skipSpaces(); - - if ( lastqStatus == status ) - stop = ( action == (char) Return ); - } - } else { - if ( stop ) - break; - - TQCString source; - while ( line[k] != '\0' && !isspace((uchar) line[k]) && line[k] != '[' ) { - source += line[k]; - k++; - } - - if ( source == "user" ) { - lastqStatus = parsePrintcap( printers, - TQDir::homeDirPath() + "/.printers" ); - } else if ( source == "files" ) { - bool found; - defaultPrinter = parsePrintersConf( printers, &found ); - if ( found ) - lastqStatus = Success; -#ifndef TQT_NO_NIS - } else if ( source == "nis" ) { - lastqStatus = retrieveNisPrinters( printers ); -#endif - } else { - // nisplus, dns, etc., are not implemented yet - lastqStatus = NotFound; - } - stop = ( lastqStatus == Success ); - } - } - return defaultPrinter; -} - -static char *parseNsswitchConf( TQListView * printers ) -{ - TQFile nc( TQString::tqfromLatin1("/etc/nsswitch.conf") ); - if ( !nc.open(IO_ReadOnly) ) - return 0; - - char *defaultPrinter = 0; - - char *line = new char[1025]; - line[1024] = '\0'; - - while ( !nc.atEnd() && - nc.readLine(line, 1024) > 0 ) { - if ( strncmp(line, "printers", 8) == 0 ) { - defaultPrinter = parseNsswitchPrintersEntry( printers, line ); - delete[] line; - return defaultPrinter; - } - } - - strcpy( line, "printers: user files nis nisplus xfn" ); - defaultPrinter = parseNsswitchPrintersEntry( printers, line ); - delete[] line; - return defaultPrinter; -} - -// HP-UX -static void parseEtcLpMember( TQListView * printers ) -{ - TQDir lp( TQString::tqfromLatin1("/etc/lp/member") ); - if ( !lp.exists() ) - return; - const TQFileInfoList * dirs = lp.entryInfoList(); - if ( !dirs ) - return; - - TQFileInfoListIterator it( *dirs ); - TQFileInfo *printer; - TQString tmp; - while ( (printer = it.current()) != 0 ) { - ++it; - // I haven't found any real documentation, so I'm guessing that - // since lpstat uses /etc/lp/member rather than one of the - // other directories, it's the one to use. I did not find a - // decent way to locate aliases and remote printers. - if ( printer->isFile() ) - perhapsAddPrinter( printers, printer->fileName(), - TQPrintDialog::tr("unknown"), - TQString::tqfromLatin1("") ); - } -} - -// IRIX 6.x -static void parseSpoolInterface( TQListView * printers ) -{ - TQDir lp( TQString::tqfromLatin1("/usr/spool/lp/interface") ); - if ( !lp.exists() ) - return; - const TQFileInfoList * files = lp.entryInfoList(); - if( !files ) - return; - - TQFileInfoListIterator it( *files ); - TQFileInfo *printer; - while ( (printer = it.current()) != 0) { - ++it; - - if ( !printer->isFile() ) - continue; - - // parse out some information - TQFile configFile( printer->filePath() ); - if ( !configFile.open( IO_ReadOnly ) ) - continue; - - TQCString line( 1025 ); - TQString namePrinter; - TQString hostName; - TQString hostPrinter; - TQString printerType; - - TQString nameKey( TQString::tqfromLatin1("NAME=") ); - TQString typeKey( TQString::tqfromLatin1("TYPE=") ); - TQString hostKey( TQString::tqfromLatin1("HOSTNAME=") ); - TQString hostPrinterKey( TQString::tqfromLatin1("HOSTPRINTER=") ); - - while ( !configFile.atEnd() && - (configFile.readLine(line.data(), 1024)) > 0 ) { - TQString uline = line; - if ( uline.startsWith( typeKey ) ) { - printerType = line.mid( nameKey.length() ); - printerType = printerType.simplifyWhiteSpace(); - } else if ( uline.startsWith( hostKey ) ) { - hostName = line.mid( hostKey.length() ); - hostName = hostName.simplifyWhiteSpace(); - } else if ( uline.startsWith( hostPrinterKey ) ) { - hostPrinter = line.mid( hostPrinterKey.length() ); - hostPrinter = hostPrinter.simplifyWhiteSpace(); - } else if ( uline.startsWith( nameKey ) ) { - namePrinter = line.mid( nameKey.length() ); - namePrinter = namePrinter.simplifyWhiteSpace(); - } - } - configFile.close(); - - printerType = printerType.stripWhiteSpace(); - if ( printerType.find("postscript", 0, FALSE) < 0 ) - continue; - - int ii = 0; - while ( (ii = namePrinter.find('"', ii)) >= 0 ) - namePrinter.remove( ii, 1 ); - - if ( hostName.isEmpty() || hostPrinter.isEmpty() ) { - perhapsAddPrinter( printers, printer->fileName(), - TQString::tqfromLatin1(""), namePrinter ); - } else { - TQString comment; - comment = namePrinter; - comment += " ("; - comment += hostPrinter; - comment += ")"; - perhapsAddPrinter( printers, printer->fileName(), - hostName, comment ); - } - } -} - - -// Every unix must have its own. It's a standard. Here is AIX. -static void parseQconfig( TQListView * printers ) -{ - TQFile qconfig( TQString::tqfromLatin1("/etc/qconfig") ); - if ( !qconfig.open( IO_ReadOnly ) ) - return; - - TQTextStream ts( &qconfig ); - TQString line; - - TQString stanzaName; // either a queue or a tqdevice name - bool up = TRUE; // queue up? default TRUE, can be FALSE - TQString remoteHost; // null if local - TQString tqdeviceName; // null if remote - - TQRegExp newStanza( TQString::tqfromLatin1("^[0-z\\-]+:$") ); - - // our basic strategy here is to process each line, detecting new - // stanzas. each time we see a new stanza, we check if the - // previous stanza was a valid queue for a) a remote printer or b) - // a local printer. if it wasn't, we assume that what we see is - // the start of the first stanza, or that the previous stanza was - // a tqdevice stanza, or that there is some syntax error (we don't - // report those). - - do { - line = ts.readLine(); - bool indented = line[0].isSpace(); - line = line.simplifyWhiteSpace(); - - int i = line.find('='); - if ( indented && i != -1 ) { // line in stanza - TQString variable = TQT_TQSTRING(line.left( i )).simplifyWhiteSpace(); - TQString value=TQT_TQSTRING(line.mid( i+1, line.length() )).simplifyWhiteSpace(); - if ( variable == TQString::tqfromLatin1("tqdevice") ) - tqdeviceName = value; - else if ( variable == TQString::tqfromLatin1("host") ) - remoteHost = value; - else if ( variable == TQString::tqfromLatin1("up") ) - up = !(value.lower() == TQString::tqfromLatin1("false")); - } else if ( line[0] == '*' ) { // comment - // nothing to do - } else if ( ts.atEnd() || // end of file, or beginning of new stanza - ( !indented && line.find( newStanza ) != -1 ) ) { - if ( up && stanzaName.length() > 0 && stanzaName.length() < 21 ) { - if ( remoteHost.length() ) // remote printer - perhapsAddPrinter( printers, stanzaName, remoteHost, - TQString::null ); - else if ( tqdeviceName.length() ) // local printer - perhapsAddPrinter( printers, stanzaName, TQString::null, - TQString::null ); - } - line.truncate( line.length()-1 ); - if ( line.length() >= 1 && line.length() <= 20 ) - stanzaName = line; - up = TRUE; - remoteHost = TQString::null; - tqdeviceName = TQString::null; - } else { - // syntax error? ignore. - } - } while ( !ts.atEnd() ); -} - - -#ifndef TQT_NO_CUPS -#include <cups/cups.h> - -static char * parseCupsOutput( TQListView * printers ) -{ - char * defaultPrinter = 0; - int nd; - cups_dest_t * d; - TQLibrary lib( "cups" ); - typedef int (*CupsGetDests)(cups_dest_t **dests); - CupsGetDests _cupsGetDests = (CupsGetDests)lib.resolve( "cupsGetDests" ); - if ( _cupsGetDests ) { - nd = _cupsGetDests( &d ); - if ( nd < 1 ) - return 0; - - int n = 0; - while ( n < nd ) { - perhapsAddPrinter( printers, d[n].name, - TQPrintDialog::tr("Unknown Location"), 0 ); - if ( d[n].is_default && !defaultPrinter ) - defaultPrinter = qstrdup( d[n].instance ); - n++; - } - } - return defaultPrinter; -} -#endif - -static TQPrintDialog * globalPrintDialog = 0; - -static void qpd_cleanup_globaldialog() -{ - if ( globalPrintDialog != 0 ) - delete globalPrintDialog; - globalPrintDialog = 0; -} - -/*! - \class TQPrintDialog tqprintdialog.h - - \brief The TQPrintDialog class provides a dialog for specifying - the printer's configuration. - - \internal - - \warning The use of this class is not recommended since it is not - present on all platforms; use TQPrinter::setup() instead. - - \omit - - (ingroup dialogs) - - THIS DOCUMENTATION IS Not Revised. It must be revised before - becoming public API. - - It encompasses both the sort of details needed for doing a simple - print-out and some print configuration setup. - - The easiest way to use the class is through the static - function getPrinterSetup(). You can also subclass the TQPrintDialog - and add some custom buttons with addButton() to extend the - functionality of the print dialog. - - <img src="qprintdlg-m.png"><br clear=all> - The printer dialog, on a large screen, in Motif style. -*/ - - -/*! Constructs a new modal printer dialog that configures \a prn and is a - child of \a parent named \a name. -*/ - -TQPrintDialog::TQPrintDialog( TQPrinter *prn, TQWidget *parent, const char *name ) - : TQDialog( parent, name, TRUE ) -{ - d = new TQPrintDialogPrivate; - d->numCopies = 1; - - TQBoxLayout * tll = new TQBoxLayout( this, TQBoxLayout::Down, 12, 0 ); - - // destination - TQGroupBox * g; - g = setupDestination(); - tll->addWidget( g, 1 ); - - tll->addSpacing( 12 ); - - // printer and paper settings - TQBoxLayout * lay = new TQBoxLayout( TQBoxLayout::LeftToRight ); - tll->addLayout( lay ); - - g = setupPrinterSettings(); - lay->addWidget( g, 1 ); - - lay->addSpacing( 12 ); - - g = setupPaper(); - lay->addWidget( g ); - - tll->addSpacing( 12 ); - - // options - g = setupOptions(); - tll->addWidget( g ); - tll->addSpacing( 12 ); - - TQBoxLayout *l = new TQBoxLayout( TQBoxLayout::LeftToRight ); - d->customLayout = new TQBoxLayout( TQBoxLayout::LeftToRight ); - tll->addLayout( l ); - l->addLayout( d->customLayout ); - l->addStretch(); - tll->addSpacing( 12 ); - - // buttons - TQBoxLayout *horiz = new TQBoxLayout( TQBoxLayout::LeftToRight ); - tll->addLayout( horiz ); - - bool rightalign = - bool(tqstyle().tqstyleHint(TQStyle::SH_PrintDialog_RightAlignButtons, this)); - - if (rightalign) - horiz->addStretch( 1 ); - - d->ok = new TQPushButton( this, "ok" ); - d->ok->setText( tr("OK") ); - d->ok->setDefault( TRUE ); - horiz->addWidget( d->ok ); - if (! rightalign) - horiz->addStretch( 1 ); - horiz->addSpacing( 6 ); - - TQPushButton * cancel = new TQPushButton( this, "cancel" ); - cancel->setText( tr("Cancel") ); - horiz->addWidget( cancel ); - - TQSize s1 = d->ok->tqsizeHint(); - TQSize s2 = cancel->tqsizeHint(); - s1 = TQSize( TQMAX(s1.width(), s2.width()), - TQMAX(s1.height(), s2.height()) ); - - d->ok->setFixedSize( s1 ); - cancel->setFixedSize( s1 ); - - tll->activate(); - - connect( d->ok, TQT_SIGNAL(clicked()), TQT_SLOT(okClicked()) ); - connect( cancel, TQT_SIGNAL(clicked()), TQT_SLOT(reject()) ); - - TQSize ms( tqminimumSize() ); - TQSize ss( TQApplication::desktop()->screenGeometry( pos() ).size() ); - if ( ms.height() < 512 && ss.height() >= 600 ) - ms.setHeight( 512 ); - else if ( ms.height() < 460 && ss.height() >= 480 ) - ms.setHeight( 460 ); - resize( ms ); - - setPrinter( prn, TRUE ); - d->printers->setFocus(); -} - - -/*! Destroys the object and frees any allocated resources. Does not - delete the associated TQPrinter object. -*/ - -TQPrintDialog::~TQPrintDialog() -{ - if ( this == globalPrintDialog ) - globalPrintDialog = 0; - delete d; -} - -/*! - This method allows you to specify a global print dialog, given in \a - pd, that will be used instead of the default dialog provided by TQt. - - This is useful, since there are many different printing systems on - Unix, and we cannot support all of them. Calling this method before - using a printer for the first time allows you to set up your own - print dialog. - - \sa setupPrinters() -*/ -void TQPrintDialog::setGlobalPrintDialog( TQPrintDialog *pd ) -{ - TQPrintDialog *oldPd = globalPrintDialog; - globalPrintDialog = pd; - if ( oldPd ) - delete oldPd; - else - qAddPostRoutine( qpd_cleanup_globaldialog ); - globalPrintDialog->adjustSize(); -} - -TQGroupBox * TQPrintDialog::setupPrinterSettings() -{ - TQGroupBox * g = new TQGroupBox( 1, Qt::Horizontal, tr( "Printer settings"), - this, "settings group box" ); - - d->colorMode = new TQButtonGroup( this ); - d->colorMode->hide(); - connect( d->colorMode, TQT_SIGNAL(clicked(int)), - this, TQT_SLOT(colorModeSelected(int)) ); - - TQRadioButton *rb; - rb = new TQRadioButton( tr( "Print in color if available" ), - g, "color" ); - d->colorMode->insert( rb, TQPrinter::Color ); - rb->setChecked( TRUE ); - - rb = new TQRadioButton( tr("Print in grayscale"), - g, "graysacle" ); - d->colorMode->insert( rb, TQPrinter::GrayScale ); - - return g; -} - -TQGroupBox * TQPrintDialog::setupDestination() -{ - TQGroupBox * g = new TQGroupBox( 0, Qt::Horizontal, tr( "Print destination"), - this, "destination group box" ); - - TQBoxLayout * tll = new TQBoxLayout( g->tqlayout(), TQBoxLayout::Down ); - - d->printerOrFile = new TQButtonGroup( this ); - d->printerOrFile->hide(); - connect( d->printerOrFile, TQT_SIGNAL(clicked(int)), - this, TQT_SLOT(printerOrFileSelected(int)) ); - - // printer radio button, list - TQRadioButton * rb = new TQRadioButton( tr( "Print to printer:" ), g, - "printer" ); - tll->addWidget( rb ); - d->printerOrFile->insert( rb, 0 ); - rb->setChecked( TRUE ); - d->outputToFile = FALSE; - - TQBoxLayout * horiz = new TQBoxLayout( TQBoxLayout::LeftToRight ); - tll->addLayout( horiz, 3 ); - horiz->addSpacing( 19 ); - - d->printers = new TQListView( g, "list of printers" ); - d->printers->setAllColumnsShowFocus( TRUE ); - d->printers->addColumn( tr("Printer"), 125 ); - d->printers->addColumn( tr("Host"), 125 ); - d->printers->addColumn( tr("Comment"), 150 ); - -#if defined(TQ_OS_UNIX) - char * etcLpDefault = 0; - -#ifndef TQT_NO_CUPS - etcLpDefault = parseCupsOutput( d->printers ); -#endif - if ( d->printers->childCount() == 0 ) { - // we only use other schemes when cups fails. - - parsePrintcap( d->printers, TQString::tqfromLatin1("/etc/printcap") ); - parseEtcLpMember( d->printers ); - parseSpoolInterface( d->printers ); - parseQconfig( d->printers ); - if ( addPrinterHook ) - (*addPrinterHook)( d->printers ); - - TQFileInfo f; - f.setFile( TQString::tqfromLatin1("/etc/lp/printers") ); - if ( f.isDir() ) { - parseEtcLpPrinters( d->printers ); - TQFile def( TQString::tqfromLatin1("/etc/lp/default") ); - if ( def.open( IO_ReadOnly ) ) { - if ( etcLpDefault ) - delete[] etcLpDefault; - etcLpDefault = new char[1025]; - def.readLine( etcLpDefault, 1024 ); - char * p = etcLpDefault; - while ( p && *p ) { - if ( !isprint((uchar) *p) || isspace((uchar) *p) ) - *p = 0; - else - p++; - } - } - } - - char * def = 0; - f.setFile( TQString::tqfromLatin1("/etc/nsswitch.conf") ); - if ( f.isFile() ) { - def = parseNsswitchConf( d->printers ); - } else { - f.setFile( TQString::tqfromLatin1("/etc/printers.conf") ); - if ( f.isFile() ) - def = parsePrintersConf( d->printers ); - } - - if ( def ) { - if ( etcLpDefault ) - delete[] etcLpDefault; - etcLpDefault = def; - } - } - - // all printers hopefully known. try to find a good default - TQString dollarPrinter; - { - const char * t = getenv( "PRINTER" ); - if ( !t || !*t ) - t = getenv( "LPDEST" ); - dollarPrinter = TQString::tqfromLatin1( t ); - if ( !dollarPrinter.isEmpty() ) - perhapsAddPrinter( d->printers, dollarPrinter, - TQPrintDialog::tr("unknown"), - TQString::tqfromLatin1("") ); - } - int quality = 0; - - // bang the best default into the listview - const TQListViewItem * lvi = d->printers->firstChild(); - d->printers->setCurrentItem( (TQListViewItem *)lvi ); - while ( lvi ) { - TQRegExp ps( TQString::tqfromLatin1("[^a-z]ps(?:[^a-z]|$)") ); - TQRegExp lp( TQString::tqfromLatin1("[^a-z]lp(?:[^a-z]|$)") ); - - if ( quality < 4 && lvi->text(0) == dollarPrinter ) { - d->printers->setCurrentItem( (TQListViewItem *)lvi ); - quality = 4; - } else if ( quality < 3 && etcLpDefault && - lvi->text(0) == TQString::tqfromLatin1(etcLpDefault) ) { - d->printers->setCurrentItem( (TQListViewItem *)lvi ); - quality = 3; - } else if ( quality < 2 && - ( lvi->text(0) == TQString::tqfromLatin1("ps") || - ps.search(lvi->text(2)) != -1 ) ) { - d->printers->setCurrentItem( (TQListViewItem *)lvi ); - quality = 2; - } else if ( quality < 1 && - ( lvi->text(0) == TQString::tqfromLatin1("lp") || - lp.search(lvi->text(2)) > -1 ) ) { - d->printers->setCurrentItem( (TQListViewItem *)lvi ); - quality = 1; - } - lvi = lvi->nextSibling(); - } - - if ( d->printers->currentItem() ) - d->printers->setSelected( d->printers->currentItem(), TRUE ); - - if ( etcLpDefault ) // Avoid purify complaint - delete[] etcLpDefault; -#endif - - int h = fontMetrics().height(); - if ( d->printers->firstChild() ) - h = d->printers->firstChild()->height(); - d->printers->setMinimumSize( d->printers->tqsizeHint().width(), - d->printers->header()->height() + - 3 * h ); - horiz->addWidget( d->printers, 3 ); - - tll->addSpacing( 6 ); - - // file radio button, edit/browse - d->printToFileButton = new TQRadioButton( tr( "Print to file:" ), g, "file" ); - tll->addWidget( d->printToFileButton ); - d->printerOrFile->insert( d->printToFileButton, 1 ); - - horiz = new TQBoxLayout( TQBoxLayout::LeftToRight ); - tll->addLayout( horiz ); - horiz->addSpacing( 19 ); - - d->fileName = new TQLineEdit( g, "file name" ); - connect( d->fileName, TQT_SIGNAL( textChanged(const TQString&) ), - this, TQT_SLOT( fileNameEditChanged(const TQString&) ) ); - horiz->addWidget( d->fileName, 1 ); - horiz->addSpacing( 6 ); - d->browse = new TQPushButton( tr("Browse..."), g, "browse files" ); - d->browse->setAutoDefault( FALSE ); -#ifdef TQT_NO_FILEDIALOG - d->browse->setEnabled( FALSE ); -#endif - connect( d->browse, TQT_SIGNAL(clicked()), - this, TQT_SLOT(browseClicked()) ); - horiz->addWidget( d->browse ); - - d->fileName->setEnabled( FALSE ); - d->browse->setEnabled( FALSE ); - - tll->activate(); - - return g; -} - - -TQGroupBox * TQPrintDialog::setupOptions() -{ - TQGroupBox * g = new TQGroupBox( 0, Qt::Horizontal, tr( "Options"), - this, "options group box" ); - - TQBoxLayout * tll = new TQBoxLayout( g->tqlayout(), TQBoxLayout::Down ); - - TQBoxLayout *lay = new TQBoxLayout( TQBoxLayout::LeftToRight ); - tll->addLayout( lay ); - - tll = new TQBoxLayout( lay, TQBoxLayout::Down ); - - d->printRange = new TQButtonGroup( this ); - d->printRange->hide(); - connect( d->printRange, TQT_SIGNAL(clicked(int)), - this, TQT_SLOT(printRangeSelected(int)) ); - - d->pageOrder = new TQButtonGroup( this ); - d->pageOrder->hide(); - connect( d->pageOrder, TQT_SIGNAL(clicked(int)), - this, TQT_SLOT(pageOrderSelected(int)) ); - - d->printAllButton = new TQRadioButton( tr("Print all"), g, "print all" ); - d->printRange->insert( d->printAllButton, 0 ); - tll->addWidget( d->printAllButton ); - - d->printSelectionButton = new TQRadioButton( tr("Print selection"), - g, "print selection" ); - d->printRange->insert( d->printSelectionButton, 1 ); - tll->addWidget( d->printSelectionButton ); - - d->printRangeButton = new TQRadioButton( tr("Print range"), - g, "print range" ); - d->printRange->insert( d->printRangeButton, 2 ); - tll->addWidget( d->printRangeButton ); - - TQBoxLayout * horiz = new TQBoxLayout( TQBoxLayout::LeftToRight ); - tll->addLayout( horiz ); - - d->firstPageLabel = new TQLabel( tr("From page:"), g, "first page" ); - horiz->addSpacing( 19 ); - horiz->addWidget( d->firstPageLabel ); - - d->firstPage = new TQPrintDialogSpinBox( 1, 9999, 1, g, "first page" ); - d->firstPage->setValue( 1 ); - horiz->addWidget( d->firstPage, 1 ); - connect( d->firstPage, TQT_SIGNAL(valueChanged(int)), - this, TQT_SLOT(setFirstPage(int)) ); - - horiz = new TQBoxLayout( TQBoxLayout::LeftToRight ); - tll->addLayout( horiz ); - - d->lastPageLabel = new TQLabel( tr("To page:"), g, "last page" ); - horiz->addSpacing( 19 ); - horiz->addWidget( d->lastPageLabel ); - - d->lastPage = new TQPrintDialogSpinBox( 1, 9999, 1, g, "last page" ); - d->lastPage->setValue( 9999 ); - horiz->addWidget( d->lastPage, 1 ); - connect( d->lastPage, TQT_SIGNAL(valueChanged(int)), - this, TQT_SLOT(setLastPage(int)) ); - - lay->addSpacing( 25 ); - tll = new TQBoxLayout( lay, TQBoxLayout::Down ); - - // print order - TQRadioButton * rb = new TQRadioButton( tr("Print first page first"), - g, "first page first" ); - tll->addWidget( rb ); - d->pageOrder->insert( rb, TQPrinter::FirstPageFirst ); - rb->setChecked( TRUE ); - - rb = new TQRadioButton( tr("Print last page first"), - g, "last page first" ); - tll->addWidget( rb ); - d->pageOrder->insert( rb, TQPrinter::LastPageFirst ); - - tll->addStretch(); - - // copies - - horiz = new TQBoxLayout( TQBoxLayout::LeftToRight ); - tll->addLayout( horiz ); - - TQLabel * l = new TQLabel( tr("Number of copies:"), g, "Number of copies" ); - horiz->addWidget( l ); - - d->copies = new TQPrintDialogSpinBox( 1, 99, 1, g, "copies" ); - d->copies->setValue( 1 ); - horiz->addWidget( d->copies, 1 ); - connect( d->copies, TQT_SIGNAL(valueChanged(int)), - this, TQT_SLOT(setNumCopies(int)) ); - - TQSize s = d->firstPageLabel->tqsizeHint() - .expandedTo( d->lastPageLabel->tqsizeHint() ) - .expandedTo( l->tqsizeHint() ); - d->firstPageLabel->setMinimumSize( s ); - d->lastPageLabel->setMinimumSize( s ); - l->setMinimumSize( s.width() + 19, s.height() ); - - tll->activate(); - - return g; -} - - -void isc( TQPrintDialogPrivate * d, - const TQString & text, - TQPrinter::PageSize ps ) -{ - if ( d && text && ps < TQPrinter::NPageSize ) { - d->sizeCombo->insertItem( text, -1 ); - int index = d->sizeCombo->count()-1; - if ( index >= 0 && index < TQPrinter::NPageSize ) - d->indexToPageSize[index] = ps; - } -} - -TQGroupBox * TQPrintDialog::setupPaper() -{ - TQGroupBox * g = new TQGroupBox( 1, Qt::Horizontal, tr( "Paper format"), - this, "Paper format" ); - d->pageSize = TQPrinter::A4; - - // page orientation - d->orientationCombo = new TQComboBox( FALSE, g ); - d->orientationCombo->insertItem( tqtr( "Portrait" ), -1 ); - d->orientationCombo->insertItem( tqtr( "Landscape" ), -1 ); - - d->orientation = TQPrinter::Portrait; - - g->addSpace( 8 ); - - connect( d->orientationCombo, TQT_SIGNAL( activated(int) ), - this, TQT_SLOT( orientSelected(int) ) ); - - // paper size - d->sizeCombo = new TQComboBox( FALSE, g ); - - int n; - for( n=0; n<TQPrinter::NPageSize; n++ ) - d->indexToPageSize[n] = TQPrinter::A4; - - isc( d, tr( "A0 (841 x 1189 mm)" ), TQPrinter::A0 ); - isc( d, tr( "A1 (594 x 841 mm)" ), TQPrinter::A1 ); - isc( d, tr( "A2 (420 x 594 mm)" ), TQPrinter::A2 ); - isc( d, tr( "A3 (297 x 420 mm)" ), TQPrinter::A3 ); - isc( d, tr( "A4 (210x297 mm, 8.26x11.7 inches)" ), TQPrinter::A4 ); - isc( d, tr( "A5 (148 x 210 mm)" ), TQPrinter::A5 ); - isc( d, tr( "A6 (105 x 148 mm)" ), TQPrinter::A6 ); - isc( d, tr( "A7 (74 x 105 mm)" ), TQPrinter::A7 ); - isc( d, tr( "A8 (52 x 74 mm)" ), TQPrinter::A8 ); - isc( d, tr( "A9 (37 x 52 mm)" ), TQPrinter::A9 ); - isc( d, tr( "B0 (1000 x 1414 mm)" ), TQPrinter::B0 ); - isc( d, tr( "B1 (707 x 1000 mm)" ), TQPrinter::B1 ); - isc( d, tr( "B2 (500 x 707 mm)" ), TQPrinter::B2 ); - isc( d, tr( "B3 (353 x 500 mm)" ), TQPrinter::B3 ); - isc( d, tr( "B4 (250 x 353 mm)" ), TQPrinter::B4 ); - isc( d, tr( "B5 (176 x 250 mm, 6.93x9.84 inches)" ), TQPrinter::B5 ); - isc( d, tr( "B6 (125 x 176 mm)" ), TQPrinter::B6 ); - isc( d, tr( "B7 (88 x 125 mm)" ), TQPrinter::B7 ); - isc( d, tr( "B8 (62 x 88 mm)" ), TQPrinter::B8 ); - isc( d, tr( "B9 (44 x 62 mm)" ), TQPrinter::B9 ); - isc( d, tr( "B10 (31 x 44 mm)" ), TQPrinter::B10 ); - isc( d, tr( "C5E (163 x 229 mm)" ), TQPrinter::C5E ); - isc( d, tr( "DLE (110 x 220 mm)" ), TQPrinter::DLE ); - isc( d, tr( "Executive (7.5x10 inches, 191x254 mm)" ), TQPrinter::Executive ); - isc( d, tr( "Folio (210 x 330 mm)" ), TQPrinter::Folio ); - isc( d, tr( "Ledger (432 x 279 mm)" ), TQPrinter::Ledger ); - isc( d, tr( "Legal (8.5x14 inches, 216x356 mm)" ), TQPrinter::Legal ); - isc( d, tr( "Letter (8.5x11 inches, 216x279 mm)" ), TQPrinter::Letter ); - isc( d, tr( "Tabloid (279 x 432 mm)" ), TQPrinter::Tabloid ); - isc( d, tr( "US Common #10 Envelope (105 x 241 mm)" ), TQPrinter::Comm10E ); - - connect( d->sizeCombo, TQT_SIGNAL( activated(int) ), - this, TQT_SLOT( paperSizeSelected(int) ) ); - - return g; -} - - -/*! - Display a dialog and allow the user to configure the TQPrinter \a - p for an optional widget \a w. Returns TRUE if the user clicks OK or - presses Enter, FALSE if the user clicks Cancel or presses Esc. - - getPrinterSetup() remembers the settings and provides the same - settings the next time the dialog is shown. -*/ - -bool TQPrintDialog::getPrinterSetup( TQPrinter * p, TQWidget* w ) -{ - if ( !globalPrintDialog ) { - globalPrintDialog = new TQPrintDialog( 0, 0, "global print dialog" ); -#ifndef TQT_NO_WIDGET_TOPEXTRA - globalPrintDialog->setCaption( TQPrintDialog::tr( "Setup Printer" ) ); -#endif - qAddPostRoutine( qpd_cleanup_globaldialog ); - globalPrintDialog->setPrinter( p, TRUE ); - globalPrintDialog->adjustSize(); - } else { - globalPrintDialog->setPrinter( p, TRUE ); - } - globalPrintDialog->adjustPosition( w ); - #ifndef TQT_NO_WIDGET_TOPEXTRA - if ( w ) { - const TQPixmap *pm = w->icon(); - if ( pm && !pm->isNull() ) - globalPrintDialog->setIcon( *pm ); - else { - w = w ? w->tqtopLevelWidget() : 0; - pm = w ? w->icon() : 0; - if ( pm && !pm->isNull() ) - globalPrintDialog->setIcon( *pm ); - } - } -#endif - bool r = globalPrintDialog->exec() == TQDialog::Accepted; - globalPrintDialog->setPrinter( 0 ); - return r; -} - - -void TQPrintDialog::printerOrFileSelected( int id ) -{ - d->outputToFile = id ? TRUE : FALSE; - if ( d->outputToFile ) { - d->ok->setEnabled( TRUE ); - fileNameEditChanged( d->fileName->text() ); - if ( !d->fileName->edited() && d->fileName->text().isEmpty() ) { - TQString home = TQString::tqfromLatin1( ::getenv( "HOME" ) ); - TQString cur = TQDir::currentDirPath(); - if ( home.at(home.length()-1) != '/' ) - home += '/'; - if ( cur.at(cur.length()-1) != '/' ) - cur += '/'; - if ( cur.left( home.length() ) != home ) - cur = home; -#ifdef TQ_WS_X11 - cur += "print.ps"; -#endif - d->fileName->setText( cur ); - d->fileName->setCursorPosition( cur.length() ); - d->fileName->selectAll(); - } - d->browse->setEnabled( TRUE ); - d->fileName->setEnabled( TRUE ); - d->fileName->setFocus(); - d->printers->setEnabled( FALSE ); - } else { - d->ok->setEnabled( d->printers->childCount() != 0 ); - d->printers->setEnabled( TRUE ); - if ( d->fileName->hasFocus() || d->browse->hasFocus() ) - d->printers->setFocus(); - d->browse->setEnabled( FALSE ); - d->fileName->setEnabled( FALSE ); - } -} - - -void TQPrintDialog::landscapeSelected( int id ) -{ - d->orientation = (TQPrinter::Orientation)id; -} - - -void TQPrintDialog::paperSizeSelected( int id ) -{ - if ( id < TQPrinter::NPageSize ) - d->pageSize = TQPrinter::PageSize( d->indexToPageSize[id] ); -} - - -void TQPrintDialog::orientSelected( int id ) -{ - d->orientation = (TQPrinter::Orientation)id; -} - - -void TQPrintDialog::pageOrderSelected( int id ) -{ - d->pageOrder2 = (TQPrinter::PageOrder)id; -} - - -void TQPrintDialog::setNumCopies( int copies ) -{ - d->numCopies = copies; -} - - -void TQPrintDialog::browseClicked() -{ -#ifndef TQT_NO_FILEDIALOG - TQString fn = TQFileDialog::getSaveFileName( d->fileName->text(), tr( "PostScript Files (*.ps);;All Files (*)" ), this ); - if ( !fn.isNull() ) - d->fileName->setText( fn ); -#endif -} - - -void TQPrintDialog::okClicked() -{ - d->lastPage->interpretText(); - d->firstPage->interpretText(); - d->copies->interpretText(); - if ( d->outputToFile ) { - d->printer->setOutputToFile( TRUE ); - d->printer->setOutputFileName( d->fileName->text() ); - } else { - d->printer->setOutputToFile( FALSE ); - TQListViewItem * l = d->printers->currentItem(); - if ( l ) - d->printer->setPrinterName( l->text( 0 ) ); - } - - d->printer->setOrientation( d->orientation ); - d->printer->setPageSize( d->pageSize ); - d->printer->setPageOrder( d->pageOrder2 ); - d->printer->setColorMode( d->colorMode2 ); - d->printer->setNumCopies( d->numCopies ); - if ( d->printAllButton->isChecked() ) { - d->printer->setPrintRange(TQPrinter::AllPages); - d->printer->setFromTo( d->printer->minPage(), d->printer->maxPage() ); - } else { - if (d->printSelectionButton->isChecked()) - d->printer->setPrintRange(TQPrinter::Selection); - else - d->printer->setPrintRange(TQPrinter::PageRange); - d->printer->setFromTo( d->firstPage->value(), d->lastPage->value() ); - } - - accept(); -} - - -void TQPrintDialog::printRangeSelected( int id ) -{ - bool enable = id == 2 ? TRUE : FALSE; - d->firstPage->setEnabled( enable ); - d->lastPage->setEnabled( enable ); - d->firstPageLabel->setEnabled( enable ); - d->lastPageLabel->setEnabled( enable ); -} - - -void TQPrintDialog::setFirstPage( int fp ) -{ - if ( d->printer ) - d->lastPage->setRange( fp, TQMAX(fp, TQPrintDialog::d->printer->maxPage()) ); -} - - -void TQPrintDialog::setLastPage( int lp ) -{ - if ( d->printer ) - d->firstPage->setRange( TQMIN(lp, TQPrintDialog::d->printer->minPage()), lp ); -} - - -/*! - Sets this dialog to configure printer \a p, or no printer if \a p - is null. If \a pickUpSettings is TRUE, the dialog reads most of - its settings from \a p. If \a pickUpSettings is FALSE (the - default) the dialog keeps its old settings. -*/ - -void TQPrintDialog::setPrinter( TQPrinter * p, bool pickUpSettings ) -{ - d->printer = p; - - if ( p && pickUpSettings ) { - // top to botton in the old dialog. - // printer or file - d->printerOrFile->setButton( p->outputToFile() ); - printerOrFileSelected( p->outputToFile() ); - - // printer name - if ( !!TQT_TQSTRING(p->printerName()) ) { - TQListViewItem * i = d->printers->firstChild(); - while ( i && i->text( 0 ) != p->printerName() ) - i = i->nextSibling(); - if ( i ) { - d->printers->setSelected( i, TRUE ); - d->ok->setEnabled( TRUE ); - } else if ( d->fileName->text().isEmpty() ) { - d->ok->setEnabled( d->printers->childCount() != 0 ); - } - } - - // print command does not exist any more - - // file name - d->printToFileButton->setEnabled( d->printer->isOptionEnabled( TQPrinter::PrintToFile ) ); - d->fileName->setText( p->outputFileName() ); - - // orientation - d->orientationCombo->setCurrentItem( (int)p->orientation() ); - orientSelected( p->orientation() ); - - // page size - int n = 0; - while ( n < TQPrinter::NPageSize && - d->indexToPageSize[n] != p->pageSize() ) - n++; - d->sizeCombo->setCurrentItem( n ); - paperSizeSelected( n ); - - // New stuff (Options) - - // page order - d->pageOrder->setButton( (int)p->pageOrder() ); - pageOrderSelected( p->pageOrder() ); - - // color mode - d->colorMode->setButton( (int)p->colorMode() ); - colorModeSelected( p->colorMode() ); - - // number of copies - d->copies->setValue( p->numCopies() ); - setNumCopies( p->numCopies() ); - } - - if( p ) { - d->printAllButton->setEnabled( TRUE ); - d->printSelectionButton - ->setEnabled( d->printer->isOptionEnabled( TQPrinter::PrintSelection ) ); - d->printRangeButton - ->setEnabled( d->printer->isOptionEnabled( TQPrinter::PrintPageRange ) ); - - TQPrinter::PrintRange range = p->printRange(); - switch ( range ) { - case TQPrinter::AllPages: - d->printAllButton->setChecked(TRUE); - printRangeSelected( d->printRange->id( d->printAllButton ) ); - break; - case TQPrinter::Selection: - d->printSelectionButton->setChecked(TRUE); - printRangeSelected( d->printRange->id( d->printSelectionButton ) ); - break; - case TQPrinter::PageRange: - d->printRangeButton->setChecked(TRUE); - printRangeSelected( d->printRange->id( d->printRangeButton ) ); - break; - } - } - - if ( p && p->maxPage() ) { - d->firstPage->setRange( p->minPage(), p->maxPage() ); - d->lastPage->setRange( p->minPage(), p->maxPage() ); - if ( p->fromPage() || p->toPage() ) { - setFirstPage( p->fromPage() ); - setLastPage( p->toPage() ); - d->firstPage->setValue(p->fromPage()); - d->lastPage->setValue(p->toPage()); - } - } -} - - -/*! Returns a pointer to the printer this dialog configures, or 0 if - this dialog does not operate on any printer. */ - -TQPrinter * TQPrintDialog::printer() const -{ - return d->printer; -} - - -void TQPrintDialog::colorModeSelected( int id ) -{ - d->colorMode2 = (TQPrinter::ColorMode)id; -} - -/*! - Adds the button \a but to the tqlayout of the print dialog. The added - buttons are arranged from the left to the right below the - last groupbox of the printdialog. -*/ - -void TQPrintDialog::addButton( TQPushButton *but ) -{ - d->customLayout->addWidget( but ); -} - -void TQPrintDialog::fileNameEditChanged( const TQString &text ) -{ - if ( d->fileName->isEnabled() ) - d->ok->setEnabled( !text.isEmpty() ); -} - -#endif |