QList<QPrinterInfo> QPrinterInfo::availablePrinters() { QList<QPrinterInfo> printers; DWORD needed = 0; DWORD returned = 0; if (!EnumPrinters(PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS, NULL, 4, 0, 0, &needed, &returned)) { LPBYTE buffer = new BYTE[needed]; if (EnumPrinters(PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS, NULL, 4, buffer, needed, &needed, &returned)) { PPRINTER_INFO_4 infoList = reinterpret_cast<PPRINTER_INFO_4>(buffer); QPrinterInfo defPrn = defaultPrinter(); for (uint i = 0; i < returned; ++i) { QString printerName(QString::fromWCharArray(infoList[i].pPrinterName)); QPrinterInfo printerInfo(printerName); if (printerInfo.printerName() == defPrn.printerName()) printerInfo.d_ptr->isDefault = true; printers.append(printerInfo); } } delete [] buffer; } return printers; }
QList<QPrinterInfo> QPrinterInfo::availablePrinters() { QList<QPrinterInfo> printers; #if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) if (QCUPSSupport::isAvailable()) { QCUPSSupport cups; int cupsPrinterCount = cups.availablePrintersCount(); const cups_dest_t* cupsPrinters = cups.availablePrinters(); for (int i = 0; i < cupsPrinterCount; ++i) { QString printerName(QString::fromLocal8Bit(cupsPrinters[i].name)); if (cupsPrinters[i].instance) printerName += QLatin1Char('/') + QString::fromLocal8Bit(cupsPrinters[i].instance); QPrinterInfo printerInfo(printerName); if (cupsPrinters[i].is_default) printerInfo.d_ptr->isDefault = true; printerInfo.d_ptr->cupsPrinterIndex = i; printers.append(printerInfo); } } else #endif { QList<QPrinterDescription> lprPrinters; int defprn = qt_getLprPrinters(lprPrinters); // populating printer combo foreach (const QPrinterDescription &description, lprPrinters) printers.append(QPrinterInfo(description.name)); if (defprn >= 0 && defprn < printers.size()) printers[defprn].d_ptr->isDefault = true; } return printers; }
void ReportPrinter::setPrinterType(type type) { if(outputFormat() != QPrinter::NativeFormat) { type = Standard; } if(type == m_printerType) { return; } // NB engines switch resets printer properties, we have to save them // (and also note that the print dialog can't support and custom printers, so it has to be called before switching to a custom type) QString savePrinterName = printerName(); releaseEngines(); switch (type) { case Sato: m_paintEngine = new SatoPaintEngine(this); if (m_printToBuffer) m_paintEngine->setPrintToBuffer(); m_printEngine = new SatoPrintEngine(m_paintEngine, this); break; case Zebra: m_paintEngine = new ZebraPaintEngine(this); if (m_printToBuffer) m_paintEngine->setPrintToBuffer(); m_printEngine = new ZebraPrintEngine(m_paintEngine, this); break; default: break; } if(m_paintEngine && m_printEngine) { setEngines(m_printEngine, m_paintEngine); } m_printerType = type; setPrinterName(savePrinterName); }
bool QPrinter::prepare(PMPrintSettings *s) { if (!psession && PMCreateSession(&psession) != noErr) return FALSE; if (*s == kPMNoPrintSettings) { if (PMCreatePrintSettings(s) != noErr) return FALSE; if (PMSessionDefaultPrintSettings(psession, *s) != noErr) return FALSE; } else { if (PMSessionValidatePrintSettings(psession, *s, kPMDontWantBoolean) != noErr) return FALSE; } if (minPage() != 0 || maxPage() != 0) PMSetPageRange(*s, minPage(), maxPage()); if (d->printRange != AllPages) { PMSetFirstPage(*s, fromPage(), TRUE); PMSetLastPage(*s, toPage(), TRUE); } PMSetColorMode(*s, colorMode() == GrayScale ? kPMGray : kPMColor); PMSetCopies(*s, numCopies(), TRUE); if (outputToFile()) { CFStringRef cfstring = qstring2cfstring(outputFileName()); CFURLRef outFile = CFURLCreateWithFileSystemPath(kCFAllocatorSystemDefault, cfstring, kCFURLPOSIXPathStyle, false); PMSessionSetDestination(psession, *s, kPMDestinationFile, kPMDocumentFormatPDF, outFile); CFRelease(outFile); CFRelease(cfstring); } QString printName = printerName(); if (!printName.isEmpty()) { CFStringRef pname = qstring2cfstring(printName); PMSessionSetCurrentPrinter(psession, pname); CFRelease(pname); } return TRUE; }
status_t BPrinter::_Configure() const { status_t status = B_ERROR; image_id id = _LoadDriver(); if (id < 0) return status; BString printerName(_ReadAttribute(PSRV_PRINTER_ATTR_PRINTER_NAME)); if (printerName.Length() > 0) { typedef char* (*add_printer_func_t)(const char*); add_printer_func_t add_printer; if (get_image_symbol(id, "add_printer", B_SYMBOL_TYPE_TEXT , (void**)&add_printer) == B_OK) { if (add_printer(printerName.String()) != NULL) status = B_OK; } } else { status = B_ERROR; } unload_add_on(id); return status; }
QList<QCUPSSupport::Printer> QCUPSSupport::availableUnixPrinters() { QList<Printer> printers; if (QCUPSSupport::isAvailable()) { QCUPSSupport cups; int cupsPrinterCount = cups.availablePrintersCount(); const cups_dest_t* cupsPrinters = cups.availablePrinters(); for (int i = 0; i < cupsPrinterCount; ++i) { QString printerName(QString::fromLocal8Bit(cupsPrinters[i].name)); if (cupsPrinters[i].instance) printerName += QLatin1Char('/') + QString::fromLocal8Bit(cupsPrinters[i].instance); Printer p(printerName); if (cupsPrinters[i].is_default) p.isDefault = true; p.cupsPrinterIndex = i; printers.append(p); } } return printers; }
bool KPrinter::printFiles(const QStringList& l, bool flag, bool startviewer) { QStringList files(l); bool status(true); // First apply possible filters, and update "remove" flag if filters has // been applied (result == 0, means nothing happened). int fresult = d->m_impl->filterFiles(this, files, flag); if (fresult == -1) { reportError(this); status = false; } else if (fresult == 1) flag = true; if (status) { // Automatic conversion to format supported by print system fresult = d->m_impl->autoConvertFiles(this, files, flag); if (fresult == -1) { reportError(this); status = false; } else if (fresult == 1) flag = true; } // Continue if status is OK (filtering succeeded) and no output-to-file if (status && files.count() > 0) { // Show preview if needed (only possible for a single file !), and stop // if the user requested it. Force preview if preview-only mode has been set: it // then use by default the first file in the list. if (((files.count() != 1 || option("kde-preview") != "1") && !d->m_previewonly) || doPreview(files[0])) { // check if printing has been prepared (it may be not prepared if the KPrinter object is not // use as a QPaintDevice object) preparePrinting(); if (!d->m_impl->printFiles(this, files, flag)) { reportError(this); status = false; } else { if (/* !outputToFile() && */ startviewer) { QStringList args; args << "-d"; args << printerName(); args << "--noshow"; kapp->kdeinitExec("kjobviewer", args); } } } else if (flag) // situation: only one file, it has been previewed and printing has been canceled, then // we should remove the file ourself { QFile::remove(files[0]); } } finishPrinting(); return status; }