Changeset 573 for trunk/src/gui/painting/qprinterinfo_pm.cpp
- Timestamp:
- Feb 17, 2010, 8:53:20 PM (15 years ago)
- File:
-
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/gui/painting/qprinterinfo_pm.cpp
r563 r573 4 4 ** All rights reserved. 5 5 ** Contact: Nokia Corporation (qt-info@nokia.com) 6 ** 7 ** Copyright (C) 2009 netlabs.org. OS/2 parts. 6 8 ** 7 9 ** This file is part of the QtGui module of the Qt Toolkit. … … 42 44 #include "qprinterinfo.h" 43 45 44 #include <qfile.h> 45 #include <qfileinfo.h> 46 #include <qdir.h> 47 #include <qprintdialog.h> 48 #include <qlibrary.h> 49 #include <qtextstream.h> 50 51 #if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) 46 #if !defined(QT_NO_CUPS) 52 47 # include <private/qcups_p.h> 53 48 # include <cups/cups.h> 54 49 # include <private/qpdf_p.h> 55 50 #endif 56 57 #include <private/qprinterinfo_unix_p.h>58 51 59 52 QT_BEGIN_NAMESPACE … … 98 91 ///////////////////////////////////////////////////////////////////////////// 99 92 100 void qt_perhapsAddPrinter(QList<QPrinterDescription> *printers, const QString &name,101 QString host, QString comment,102 QStringList aliases)103 {104 for (int i = 0; i < printers->size(); ++i)105 if (printers->at(i).samePrinter(name))106 return;107 108 #ifndef QT_NO_PRINTDIALOG109 if (host.isEmpty())110 host = QPrintDialog::tr("locally connected");111 #endif112 printers->append(QPrinterDescription(name.simplified(), host.simplified(), comment.simplified(), aliases));113 }114 115 void qt_parsePrinterDesc(QString printerDesc, QList<QPrinterDescription> *printers)116 {117 if (printerDesc.length() < 1)118 return;119 120 printerDesc = printerDesc.simplified();121 int i = printerDesc.indexOf(QLatin1Char(':'));122 QString printerName, printerComment, printerHost;123 QStringList aliases;124 125 if (i >= 0) {126 // have ':' want '|'127 int j = printerDesc.indexOf(QLatin1Char('|'));128 if (j > 0 && j < i) {129 printerName = printerDesc.left(j);130 aliases = printerDesc.mid(j + 1, i - j - 1).split(QLatin1Char('|'));131 #ifndef QT_NO_PRINTDIALOG132 // try extracting a comment from the aliases133 printerComment = QPrintDialog::tr("Aliases: %1")134 .arg(aliases.join(QLatin1String(", ")));135 #endif136 } else {137 printerName = printerDesc.left(i);138 }139 // look for lprng pseudo all printers entry140 i = printerDesc.indexOf(QRegExp(QLatin1String(": *all *=")));141 if (i >= 0)142 printerName = QString();143 // look for signs of this being a remote printer144 i = printerDesc.indexOf(QRegExp(QLatin1String(": *rm *=")));145 if (i >= 0) {146 // point k at the end of remote host name147 while (printerDesc[i] != QLatin1Char('='))148 i++;149 while (printerDesc[i] == QLatin1Char('=') || printerDesc[i].isSpace())150 i++;151 j = i;152 while (j < (int)printerDesc.length() && printerDesc[j] != QLatin1Char(':'))153 j++;154 155 // and stuff that into the string156 printerHost = printerDesc.mid(i, j - i);157 }158 }159 if (printerName.length())160 qt_perhapsAddPrinter(printers, printerName, printerHost, printerComment,161 aliases);162 }163 164 int qt_parsePrintcap(QList<QPrinterDescription> *printers, const QString& fileName)165 {166 QFile printcap(fileName);167 if (!printcap.open(QIODevice::ReadOnly))168 return NotFound;169 170 char *line_ascii = new char[1025];171 line_ascii[1024] = '\0';172 173 QString printerDesc;174 bool atEnd = false;175 176 while (!atEnd) {177 if (printcap.atEnd() || printcap.readLine(line_ascii, 1024) <= 0)178 atEnd = true;179 QString line = QString::fromLocal8Bit(line_ascii);180 line = line.trimmed();181 if (line.length() >= 1 && line[int(line.length()) - 1] == QLatin1Char('\\'))182 line.chop(1);183 if (line[0] == QLatin1Char('#')) {184 if (!atEnd)185 continue;186 } else if (line[0] == QLatin1Char('|') || line[0] == QLatin1Char(':')187 || line.isEmpty()) {188 printerDesc += line;189 if (!atEnd)190 continue;191 }192 193 qt_parsePrinterDesc(printerDesc, printers);194 195 // add the first line of the new printer definition196 printerDesc = line;197 }198 delete[] line_ascii;199 return Success;200 }201 202 /*!203 \internal204 205 Checks $HOME/.printers for a line matching '_default <name>' (where206 <name> does not contain any white space). The first such match207 results in <name> being returned.208 If no lines match then an empty string is returned.209 */210 QString qt_getDefaultFromHomePrinters()211 {212 QFile file(QDir::homePath() + QLatin1String("/.printers"));213 if (!file.open(QIODevice::ReadOnly))214 return QString();215 QString all(QLatin1String(file.readAll()));216 QStringList words = all.split(QRegExp(QLatin1String("\\W+")), QString::SkipEmptyParts);217 const int i = words.indexOf(QLatin1String("_default"));218 if (i != -1 && i < words.size() - 1)219 return words.at(i + 1);220 return QString();221 }222 223 // solaris, not 2.6224 void qt_parseEtcLpPrinters(QList<QPrinterDescription> *printers)225 {226 QDir lp(QLatin1String("/etc/lp/printers"));227 QFileInfoList dirs = lp.entryInfoList();228 if (dirs.isEmpty())229 return;230 231 QString tmp;232 for (int i = 0; i < dirs.size(); ++i) {233 QFileInfo printer = dirs.at(i);234 if (printer.isDir()) {235 tmp.sprintf("/etc/lp/printers/%s/configuration",236 printer.fileName().toAscii().data());237 QFile configuration(tmp);238 char *line = new char[1025];239 QString remote(QLatin1String("Remote:"));240 QString contentType(QLatin1String("Content types:"));241 QString printerHost;242 bool canPrintPostscript = false;243 if (configuration.open(QIODevice::ReadOnly)) {244 while (!configuration.atEnd() &&245 configuration.readLine(line, 1024) > 0) {246 if (QString::fromLatin1(line).startsWith(remote)) {247 const char *p = line;248 while (*p != ':')249 p++;250 p++;251 while (isspace((uchar) *p))252 p++;253 printerHost = QString::fromLocal8Bit(p);254 printerHost = printerHost.simplified();255 } else if (QString::fromLatin1(line).startsWith(contentType)) {256 char *p = line;257 while (*p != ':')258 p++;259 p++;260 char *e;261 while (*p) {262 while (isspace((uchar) *p))263 p++;264 if (*p) {265 char s;266 e = p;267 while (isalnum((uchar) *e))268 e++;269 s = *e;270 *e = '\0';271 if (!qstrcmp(p, "postscript") ||272 !qstrcmp(p, "any"))273 canPrintPostscript = true;274 *e = s;275 if (s == ',')276 e++;277 p = e;278 }279 }280 }281 }282 if (canPrintPostscript)283 qt_perhapsAddPrinter(printers, printer.fileName(),284 printerHost, QLatin1String(""));285 }286 delete[] line;287 }288 }289 }290 291 // solaris 2.6292 char *qt_parsePrintersConf(QList<QPrinterDescription> *printers, bool *found)293 {294 QFile pc(QLatin1String("/etc/printers.conf"));295 if (!pc.open(QIODevice::ReadOnly)) {296 if (found)297 *found = false;298 return 0;299 }300 if (found)301 *found = true;302 303 char *line = new char[1025];304 line[1024] = '\0';305 306 QString printerDesc;307 int lineLength = 0;308 309 char *defaultPrinter = 0;310 311 while (!pc.atEnd() &&312 (lineLength=pc.readLine(line, 1024)) > 0) {313 if (*line == '#') {314 *line = '\0';315 lineLength = 0;316 }317 if (lineLength >= 2 && line[lineLength-2] == '\\') {318 line[lineLength-2] = '\0';319 printerDesc += QString::fromLocal8Bit(line);320 } else {321 printerDesc += QString::fromLocal8Bit(line);322 printerDesc = printerDesc.simplified();323 int i = printerDesc.indexOf(QLatin1Char(':'));324 QString printerName, printerHost, printerComment;325 QStringList aliases;326 if (i >= 0) {327 // have : want |328 int j = printerDesc.indexOf(QLatin1Char('|'));329 if (j >= i)330 j = -1;331 printerName = printerDesc.mid(0, j < 0 ? i : j);332 if (printerName == QLatin1String("_default")) {333 i = printerDesc.indexOf(334 QRegExp(QLatin1String(": *use *=")));335 while (printerDesc[i] != QLatin1Char('='))336 i++;337 while (printerDesc[i] == QLatin1Char('=') || printerDesc[i].isSpace())338 i++;339 j = i;340 while (j < (int)printerDesc.length() &&341 printerDesc[j] != QLatin1Char(':') && printerDesc[j] != QLatin1Char(','))342 j++;343 // that's our default printer344 defaultPrinter =345 qstrdup(printerDesc.mid(i, j-i).toAscii().data());346 printerName = QString();347 printerDesc = QString();348 } else if (printerName == QLatin1String("_all")) {349 // skip it.. any other cases we want to skip?350 printerName = QString();351 printerDesc = QString();352 }353 354 if (j > 0) {355 // try extracting a comment from the aliases356 aliases = printerDesc.mid(j + 1, i - j - 1).split(QLatin1Char('|'));357 #ifndef QT_NO_PRINTDIALOG358 printerComment = QPrintDialog::tr("Aliases: %1")359 .arg(aliases.join(QLatin1String(", ")));360 #endif361 }362 // look for signs of this being a remote printer363 i = printerDesc.indexOf(364 QRegExp(QLatin1String(": *bsdaddr *=")));365 if (i >= 0) {366 // point k at the end of remote host name367 while (printerDesc[i] != QLatin1Char('='))368 i++;369 while (printerDesc[i] == QLatin1Char('=') || printerDesc[i].isSpace())370 i++;371 j = i;372 while (j < (int)printerDesc.length() &&373 printerDesc[j] != QLatin1Char(':') && printerDesc[j] != QLatin1Char(','))374 j++;375 // and stuff that into the string376 printerHost = printerDesc.mid(i, j-i);377 // maybe stick the remote printer name into the comment378 if (printerDesc[j] == QLatin1Char(',')) {379 i = ++j;380 while (printerDesc[i].isSpace())381 i++;382 j = i;383 while (j < (int)printerDesc.length() &&384 printerDesc[j] != QLatin1Char(':') && printerDesc[j] != QLatin1Char(','))385 j++;386 if (printerName != printerDesc.mid(i, j-i)) {387 printerComment =388 QLatin1String("Remote name: ");389 printerComment += printerDesc.mid(i, j-i);390 }391 }392 }393 }394 if (printerComment == QLatin1String(":"))395 printerComment = QString(); // for cups396 if (printerName.length())397 qt_perhapsAddPrinter(printers, printerName, printerHost,398 printerComment, aliases);399 // chop away the line, for processing the next one400 printerDesc = QString();401 }402 }403 delete[] line;404 return defaultPrinter;405 }406 407 #ifndef QT_NO_NIS408 409 #if defined(Q_C_CALLBACKS)410 extern "C" {411 #endif412 413 int qt_pd_foreach(int /*status */, char * /*key */, int /*keyLen */,414 char *val, int valLen, char *data)415 {416 qt_parsePrinterDesc(QString::fromLatin1(val, valLen), (QList<QPrinterDescription> *)data);417 return 0;418 }419 420 #if defined(Q_C_CALLBACKS)421 }422 #endif423 424 int qt_retrieveNisPrinters(QList<QPrinterDescription> *printers)425 {426 #ifndef QT_NO_LIBRARY427 typedef int (*WildCast)(int, char *, int, char *, int, char *);428 char printersConfByname[] = "printers.conf.byname";429 char *domain;430 int err;431 432 QLibrary lib(QLatin1String("nsl"));433 typedef int (*ypGetDefaultDomain)(char **);434 ypGetDefaultDomain _ypGetDefaultDomain = (ypGetDefaultDomain)lib.resolve("yp_get_default_domain");435 typedef int (*ypAll)(const char *, const char *, const struct ypall_callback *);436 ypAll _ypAll = (ypAll)lib.resolve("yp_all");437 438 if (_ypGetDefaultDomain && _ypAll) {439 err = _ypGetDefaultDomain(&domain);440 if (err == 0) {441 ypall_callback cb;442 // wild cast to support K&R-style system headers443 (WildCast &) cb.foreach = (WildCast) qt_pd_foreach;444 cb.data = (char *) printers;445 err = _ypAll(domain, printersConfByname, &cb);446 }447 if (!err)448 return Success;449 }450 #endif //QT_NO_LIBRARY451 return Unavail;452 }453 454 #endif // QT_NO_NIS455 456 char *qt_parseNsswitchPrintersEntry(QList<QPrinterDescription> *printers, char *line)457 {458 #define skipSpaces() \459 while (line[k] != '\0' && isspace((uchar) line[k])) \460 k++461 462 char *defaultPrinter = 0;463 bool stop = false;464 int lastStatus = NotFound;465 466 int k = 8;467 skipSpaces();468 if (line[k] != ':')469 return 0;470 k++;471 472 char *cp = strchr(line, '#');473 if (cp != 0)474 *cp = '\0';475 476 while (line[k] != '\0') {477 if (isspace((uchar) line[k])) {478 k++;479 } else if (line[k] == '[') {480 k++;481 skipSpaces();482 while (line[k] != '\0') {483 char status = tolower(line[k]);484 char action = '?';485 486 while (line[k] != '=' && line[k] != ']' && line[k] != '\0')487 k++;488 if (line[k] == '=') {489 k++;490 skipSpaces();491 action = tolower(line[k]);492 while (line[k] != '\0' && !isspace((uchar) line[k]) && line[k] != ']')493 k++;494 } else if (line[k] == ']') {495 k++;496 break;497 }498 skipSpaces();499 500 if (lastStatus == status)501 stop = (action == (char) Return);502 }503 } else {504 if (stop)505 break;506 507 QByteArray source;508 while (line[k] != '\0' && !isspace((uchar) line[k]) && line[k] != '[') {509 source += line[k];510 k++;511 }512 513 if (source == "user") {514 lastStatus = qt_parsePrintcap(printers,515 QDir::homePath() + QLatin1String("/.printers"));516 } else if (source == "files") {517 bool found;518 defaultPrinter = qt_parsePrintersConf(printers, &found);519 if (found)520 lastStatus = Success;521 #ifndef QT_NO_NIS522 } else if (source == "nis") {523 lastStatus = qt_retrieveNisPrinters(printers);524 #endif525 } else {526 // nisplus, dns, etc., are not implemented yet527 lastStatus = NotFound;528 }529 stop = (lastStatus == Success);530 }531 }532 return defaultPrinter;533 }534 535 char *qt_parseNsswitchConf(QList<QPrinterDescription> *printers)536 {537 QFile nc(QLatin1String("/etc/nsswitch.conf"));538 if (!nc.open(QIODevice::ReadOnly))539 return 0;540 541 char *defaultPrinter = 0;542 543 char *line = new char[1025];544 line[1024] = '\0';545 546 while (!nc.atEnd() &&547 nc.readLine(line, 1024) > 0) {548 if (qstrncmp(line, "printers", 8) == 0) {549 defaultPrinter = qt_parseNsswitchPrintersEntry(printers, line);550 delete[] line;551 return defaultPrinter;552 }553 }554 555 strcpy(line, "printers: user files nis nisplus xfn");556 defaultPrinter = qt_parseNsswitchPrintersEntry(printers, line);557 delete[] line;558 return defaultPrinter;559 }560 561 // HP-UX562 void qt_parseEtcLpMember(QList<QPrinterDescription> *printers)563 {564 QDir lp(QLatin1String("/etc/lp/member"));565 if (!lp.exists())566 return;567 QFileInfoList dirs = lp.entryInfoList();568 if (dirs.isEmpty())569 return;570 571 #ifdef QT_NO_PRINTDIALOG572 Q_UNUSED(printers);573 #else574 QString tmp;575 for (int i = 0; i < dirs.size(); ++i) {576 QFileInfo printer = dirs.at(i);577 // I haven't found any real documentation, so I'm guessing that578 // since lpstat uses /etc/lp/member rather than one of the579 // other directories, it's the one to use. I did not find a580 // decent way to locate aliases and remote printers.581 if (printer.isFile())582 qt_perhapsAddPrinter(printers, printer.fileName(),583 QPrintDialog::tr("unknown"),584 QLatin1String(""));585 }586 #endif587 }588 589 // IRIX 6.x590 void qt_parseSpoolInterface(QList<QPrinterDescription> *printers)591 {592 QDir lp(QLatin1String("/usr/spool/lp/interface"));593 if (!lp.exists())594 return;595 QFileInfoList files = lp.entryInfoList();596 if(files.isEmpty())597 return;598 599 for (int i = 0; i < files.size(); ++i) {600 QFileInfo printer = files.at(i);601 602 if (!printer.isFile())603 continue;604 605 // parse out some information606 QFile configFile(printer.filePath());607 if (!configFile.open(QIODevice::ReadOnly))608 continue;609 610 QByteArray line;611 line.resize(1025);612 QString namePrinter;613 QString hostName;614 QString hostPrinter;615 QString printerType;616 617 QString nameKey(QLatin1String("NAME="));618 QString typeKey(QLatin1String("TYPE="));619 QString hostKey(QLatin1String("HOSTNAME="));620 QString hostPrinterKey(QLatin1String("HOSTPRINTER="));621 622 while (!configFile.atEnd() &&623 (configFile.readLine(line.data(), 1024)) > 0) {624 QString uline = QString::fromLocal8Bit(line);625 if (uline.startsWith(typeKey) ) {626 printerType = uline.mid(nameKey.length());627 printerType = printerType.simplified();628 } else if (uline.startsWith(hostKey)) {629 hostName = uline.mid(hostKey.length());630 hostName = hostName.simplified();631 } else if (uline.startsWith(hostPrinterKey)) {632 hostPrinter = uline.mid(hostPrinterKey.length());633 hostPrinter = hostPrinter.simplified();634 } else if (uline.startsWith(nameKey)) {635 namePrinter = uline.mid(nameKey.length());636 namePrinter = namePrinter.simplified();637 }638 }639 configFile.close();640 641 printerType = printerType.trimmed();642 if (printerType.indexOf(QLatin1String("postscript"), 0, Qt::CaseInsensitive) < 0)643 continue;644 645 int ii = 0;646 while ((ii = namePrinter.indexOf(QLatin1Char('"'), ii)) >= 0)647 namePrinter.remove(ii, 1);648 649 if (hostName.isEmpty() || hostPrinter.isEmpty()) {650 qt_perhapsAddPrinter(printers, printer.fileName(),651 QLatin1String(""), namePrinter);652 } else {653 QString comment;654 comment = namePrinter;655 comment += QLatin1String(" (");656 comment += hostPrinter;657 comment += QLatin1Char(')');658 qt_perhapsAddPrinter(printers, printer.fileName(),659 hostName, comment);660 }661 }662 }663 664 665 // Every unix must have its own. It's a standard. Here is AIX.666 void qt_parseQconfig(QList<QPrinterDescription> *printers)667 {668 QFile qconfig(QLatin1String("/etc/qconfig"));669 if (!qconfig.open(QIODevice::ReadOnly))670 return;671 672 QTextStream ts(&qconfig);673 QString line;674 675 QString stanzaName; // either a queue or a device name676 bool up = true; // queue up? default true, can be false677 QString remoteHost; // null if local678 QString deviceName; // null if remote679 680 QRegExp newStanza(QLatin1String("^[0-z\\-]*:$"));681 682 // our basic strategy here is to process each line, detecting new683 // stanzas. each time we see a new stanza, we check if the684 // previous stanza was a valid queue for a) a remote printer or b)685 // a local printer. if it wasn't, we assume that what we see is686 // the start of the first stanza, or that the previous stanza was687 // a device stanza, or that there is some syntax error (we don't688 // report those).689 690 do {691 line = ts.readLine();692 bool indented = line[0].isSpace();693 line = line.simplified();694 695 int i = line.indexOf(QLatin1Char('='));696 if (indented && i != -1) { // line in stanza697 QString variable = line.left(i).simplified();698 QString value=line.mid(i+1, line.length()).simplified();699 if (variable == QLatin1String("device"))700 deviceName = value;701 else if (variable == QLatin1String("host"))702 remoteHost = value;703 else if (variable == QLatin1String("up"))704 up = !(value.toLower() == QLatin1String("false"));705 } else if (line[0] == QLatin1Char('*')) { // comment706 // nothing to do707 } else if (ts.atEnd() || // end of file, or beginning of new stanza708 (!indented && line.contains(newStanza))) {709 if (up && stanzaName.length() > 0 && stanzaName.length() < 21) {710 if (remoteHost.length()) // remote printer711 qt_perhapsAddPrinter(printers, stanzaName, remoteHost,712 QString());713 else if (deviceName.length()) // local printer714 qt_perhapsAddPrinter(printers, stanzaName, QString(),715 QString());716 }717 line.chop(1);718 if (line.length() >= 1 && line.length() <= 20)719 stanzaName = line;720 up = true;721 remoteHost.clear();722 deviceName.clear();723 } else {724 // syntax error? ignore.725 }726 } while (!ts.atEnd());727 }728 729 int qt_getLprPrinters(QList<QPrinterDescription>& printers)730 {731 QByteArray etcLpDefault;732 qt_parsePrintcap(&printers, QLatin1String("/etc/printcap"));733 qt_parseEtcLpMember(&printers);734 qt_parseSpoolInterface(&printers);735 qt_parseQconfig(&printers);736 737 QFileInfo f;738 f.setFile(QLatin1String("/etc/lp/printers"));739 if (f.isDir()) {740 qt_parseEtcLpPrinters(&printers);741 QFile def(QLatin1String("/etc/lp/default"));742 if (def.open(QIODevice::ReadOnly)) {743 etcLpDefault.resize(1025);744 if (def.readLine(etcLpDefault.data(), 1024) > 0) {745 QRegExp rx(QLatin1String("^(\\S+)"));746 if (rx.indexIn(QString::fromLatin1(etcLpDefault)) != -1)747 etcLpDefault = rx.cap(1).toAscii();748 }749 }750 }751 752 char *def = 0;753 f.setFile(QLatin1String("/etc/nsswitch.conf"));754 if (f.isFile()) {755 def = qt_parseNsswitchConf(&printers);756 } else {757 f.setFile(QLatin1String("/etc/printers.conf"));758 if (f.isFile())759 def = qt_parsePrintersConf(&printers);760 }761 762 if (def) {763 etcLpDefault = def;764 delete [] def;765 }766 767 QString homePrintersDefault = qt_getDefaultFromHomePrinters();768 769 // all printers hopefully known. try to find a good default770 QString dollarPrinter;771 {772 dollarPrinter = QString::fromLocal8Bit(qgetenv("PRINTER"));773 if (dollarPrinter.isEmpty())774 dollarPrinter = QString::fromLocal8Bit(qgetenv("LPDEST"));775 if (dollarPrinter.isEmpty())776 dollarPrinter = QString::fromLocal8Bit(qgetenv("NPRINTER"));777 if (dollarPrinter.isEmpty())778 dollarPrinter = QString::fromLocal8Bit(qgetenv("NGPRINTER"));779 #ifndef QT_NO_PRINTDIALOG780 if (!dollarPrinter.isEmpty())781 qt_perhapsAddPrinter(&printers, dollarPrinter,782 QPrintDialog::tr("unknown"),783 QLatin1String(""));784 #endif785 }786 787 int quality = 0;788 int best = 0;789 for (int i = 0; i < printers.size(); ++i) {790 QRegExp ps(QLatin1String("[^a-z]ps(?:[^a-z]|$)"));791 QRegExp lp(QLatin1String("[^a-z]lp(?:[^a-z]|$)"));792 793 QString name = printers.at(i).name;794 QString comment = printers.at(i).comment;795 if (quality < 5 && name == dollarPrinter) {796 best = i;797 quality = 5;798 } else if (quality < 4 && !homePrintersDefault.isEmpty() &&799 name == homePrintersDefault) {800 best = i;801 quality = 4;802 } else if (quality < 3 && !etcLpDefault.isEmpty() &&803 name == QLatin1String(etcLpDefault)) {804 best = i;805 quality = 3;806 } else if (quality < 2 &&807 (name == QLatin1String("ps") ||808 ps.indexIn(comment) != -1)) {809 best = i;810 quality = 2;811 } else if (quality < 1 &&812 (name == QLatin1String("lp") ||813 lp.indexIn(comment) > -1)) {814 best = i;815 quality = 1;816 }817 }818 819 return best;820 }821 822 /////////////////////////////////////////////////////////////////////////////823 /////////////////////////////////////////////////////////////////////////////824 825 93 QList<QPrinterInfo> QPrinterInfo::availablePrinters() 826 94 { 827 95 QList<QPrinterInfo> list; 828 96 829 #if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY)97 #if !defined(QT_NO_CUPS) 830 98 QCUPSSupport cups; 831 99 if (QCUPSSupport::isAvailable()) { … … 843 111 list[i].d_ptr->m_cupsPrinterIndex = i; 844 112 } 845 } else {846 #endif847 QList<QPrinterDescription> lprPrinters;848 int defprn = qt_getLprPrinters(lprPrinters);849 // populating printer combo850 QList<QPrinterDescription>::const_iterator i = lprPrinters.constBegin();851 for(; i != lprPrinters.constEnd(); ++i) {852 list.append(QPrinterInfo((*i).name));853 }854 if (defprn >= 0 && defprn < lprPrinters.size()) {855 list[defprn].d_ptr->m_default = true;856 }857 #if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY)858 113 } 859 114 #endif … … 890 145 d->q_ptr = this; 891 146 892 #if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY)147 #if !defined(QT_NO_CUPS) 893 148 QCUPSSupport cups; 894 149 if (QCUPSSupport::isAvailable()) { … … 907 162 } 908 163 } 909 } else {910 #endif911 QList<QPrinterDescription> lprPrinters;912 int defprn = qt_getLprPrinters(lprPrinters);913 // populating printer combo914 QList<QPrinterDescription>::const_iterator i = lprPrinters.constBegin();915 int c;916 for(c = 0; i != lprPrinters.constEnd(); ++i, ++c) {917 if (i->name == printer.printerName()) {918 if (defprn == c)919 d->m_default = true;920 return;921 }922 }923 #if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY)924 164 } 925 165 #endif … … 971 211 d->m_mustGetPaperSizes = false; 972 212 973 #if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY)213 #if !defined(QT_NO_CUPS) 974 214 QCUPSSupport cups; 975 215 if (QCUPSSupport::isAvailable()) {
Note:
See TracChangeset
for help on using the changeset viewer.