void IppReportDlg::slotUser1() { KPrinter printer; printer.setFullPage(true); printer.setDocName(caption()); if (printer.setup(this)) { TQPainter painter(&printer); TQPaintDeviceMetrics metrics(&printer); // report is printed using TQSimpleRichText TQSimpleRichText rich(m_edit->text(), font()); rich.setWidth(&painter, metrics.width()); int margin = (int)(1.5 / 2.54 * metrics.logicalDpiY()); // 1.5 cm TQRect r(margin, margin, metrics.width()-2*margin, metrics.height()-2*margin); int hh = rich.height(), page(1); while (1) { rich.draw(&painter, margin, margin, r, colorGroup()); TQString s = caption() + ": " + TQString::number(page); TQRect br = painter.fontMetrics().boundingRect(s); painter.drawText(r.right()-br.width()-5, r.top()-br.height()-4, br.width()+5, br.height()+4, Qt::AlignRight|Qt::AlignTop, s); r.moveBy(0, r.height()-10); painter.translate(0, -(r.height()-10)); if (r.top() < hh) { printer.newPage(); page++; } else break; } } }
void KSnapshot::slotPrint() { KPrinter printer; if (snapshot.width() > snapshot.height()) printer.setOrientation(KPrinter::Landscape); else printer.setOrientation(KPrinter::Portrait); qApp->processEvents(); if (printer.setup(this, i18n("Print Screenshot"))) { qApp->processEvents(); QPainter painter(&printer); QPaintDeviceMetrics metrics(painter.device()); float w = snapshot.width(); float dw = w - metrics.width(); float h = snapshot.height(); float dh = h - metrics.height(); bool scale = false; if ( (dw > 0.0) || (dh > 0.0) ) scale = true; if ( scale ) { QImage img = snapshot.convertToImage(); qApp->processEvents(); float newh, neww; if ( dw > dh ) { neww = w-dw; newh = neww/w*h; } else { newh = h-dh; neww = newh/h*w; } img = img.smoothScale( int(neww), int(newh), QImage::ScaleMin ); qApp->processEvents(); int x = (metrics.width()-img.width())/2; int y = (metrics.height()-img.height())/2; painter.drawImage( x, y, img); } else { int x = (metrics.width()-snapshot.width())/2; int y = (metrics.height()-snapshot.height())/2; painter.drawPixmap( x, y, snapshot ); } } qApp->processEvents(); }
void KstApp::immediatePrintToFile(const QString &filename) { KPrinter printer; printer.setPageSize(KPrinter::Letter); printer.setOrientation(KPrinter::Landscape); printer.setOutputToFile(true); printer.setOutputFileName(filename); view->print(&printer); }
void KgpgApp::slotFilePrint() { KPrinter prt; //kdDebug(2100)<<"Printing..."<<endl; if (prt.setup(this)) { TQPainter painter(&prt); TQPaintDeviceMetrics metrics(painter.device()); painter.drawText( 0, 0, metrics.width(), metrics.height(), AlignLeft|AlignTop|DontClip,view->editor->text() ); } }
void Kolf::print() { KPrinter pr; pr.addDialogPage(new PrintDialogPage()); if (pr.setup(this, i18n("Print %1 - Hole %2").arg(game->courseName()).arg(game->currentHole()))) { pr.newPage(); if (game) game->print(pr); } }
bool KstIfaceImpl::printPostScript(const QString& url) { if (url.isEmpty()) { return false; } KstView *view = _app->viewObject(); KPrinter printer; printer.setPageSize(KPrinter::Letter); printer.setOrientation(KPrinter::Landscape); printer.setOutputToFile(true); printer.setOutputFileName(url); view->print(&printer); return true; // FIXME: eventually return an error code }
void KstApp::slotFilePrint() { slotUpdateStatusMsg(i18n("Printing...")); KPrinter printer; printer.setPageSize(KPrinter::Letter); printer.setOrientation(KPrinter::Landscape); // FIXME: Make a better title for the printingdialog if (printer.setup(this, i18n("Print Data"))) { view->print(&printer); } slotUpdateStatusMsg(i18n("Ready")); }
void KMJobViewer::slotDropped( QDropEvent *e, QListViewItem* ) { QStringList files; QString target; KURL::List uris; KURLDrag::decode( e, uris ); for ( KURL::List::ConstIterator it = uris.begin(); it != uris.end(); ++it) { if ( KIO::NetAccess::download( *it, target, 0 ) ) files << target; } if ( files.count() > 0 ) { KPrinter prt; if ( prt.autoConfigure( m_prname, this ) ) prt.printFiles( files, false, false ); } }
void KJotsEdit::print(TQString title) { KPrinter printer; printer.setDocName(title); printer.setFullPage(false); printer.setCreator("KJots"); if (printer.setup(this)) { TQFont printFont = font(); TQPainter painter( &printer ); TQPaintDeviceMetrics metrics( &printer ); int y = 0; int maxWidth = metrics.width(); int maxHeight = metrics.height(); TQString currentParagraph; for (int paragraphCount = 0; paragraphCount < paragraphs(); ++paragraphCount ) { currentParagraph = text(paragraphCount); TQRect r = painter.boundingRect(0, y, maxWidth, maxHeight, TQPainter::ExpandTabs | TQPainter::WordBreak, currentParagraph); if ((y + r.height()) > maxHeight) { printer.newPage(); y = 0; } painter.drawText(0, y, maxWidth, maxHeight - y, TQPainter::ExpandTabs | TQPainter::WordBreak, currentParagraph); y += r.height(); } painter.end(); } }
void PrintWrapper::slotPrint() { KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET) struct sigaction action; #endif /* HAVE_SIGACTION && !HAVE_SIGSET*/ // read variables from command line QString printer = args->getOption("d"); QString title = args->getOption("t"); int ncopies = QString(args->getOption("n")).toInt(); QString job_mode = args->getOption("j"); QString system = args->getOption("system"); KStringList optlist = args->getOptionList("o"); QMap< QString, QString > opts; KURL::List files; QStringList filestoprint; force_stdin = args->isSet("stdin"); docopy = args->isSet("c"); bool nodialog = !(args->isSet("dialog")); if(isatty(0)) { kdDebug(500) << "stdin is a terminal, disabling it" << endl; check_stdin = false; } // parse options for(KStringList::ConstIterator it = optlist.begin(); it != optlist.end(); ++it) { QStringList l = QStringList::split('=', QString(*it), false); if(l.count() >= 1) opts[l[0]] = (l.count() == 2 ? l[1] : QString::null); } // read file list for(int i = 0; i < args->count(); i++) files.append(args->url(i)); // some clean-up args->clear(); // set default values if necessary if(job_mode == "console") job_output = 1; else if(job_mode == "none") job_output = 2; else job_output = 0; // some checking if(files.count() > 0) { check_stdin = false; if(force_stdin) { showmsg(i18n("A file has been specified on the command line. Printing from STDIN will be disabled."), 1); force_stdin = false; } } if(nodialog && files.count() == 0 && !force_stdin && !check_stdin) { errormsg(i18n("When using '--nodialog', you must at least specify one file to print or use the '--stdin' flag.")); } if(check_stdin) { // check if there's any input on stdin fd_set in; struct timeval tm; tm.tv_sec = 0; tm.tv_usec = 0; FD_ZERO(&in); FD_SET(0, &in); if(select(1, &in, NULL, NULL, &tm)) { // we have data on stdin if(read(0, &readchar, 1) > 0) { force_stdin = true; check_stdin = false; dataread = true; kdDebug(500) << "input detected on stdin" << endl; } else { force_stdin = check_stdin = false; kdDebug(500) << "stdin closed and empty" << endl; } } else kdDebug(500) << "no input on stdin at startup" << endl; } // force_stdin ? or also check_stdin ? KPrinter::ApplicationType dialog_mode = (force_stdin || nodialog ? KPrinter::StandAlone : KPrinter::StandAlonePersistent); KPrinter::setApplicationType(dialog_mode); if(!force_stdin) KPrinter::addStandardPage(KPrinter::FilesPage); KPrinter kprinter; if(nodialog) { KMPrinter *prt(0); KMManager *mgr = KMManager::self(); mgr->printerList(false); if(!printer.isEmpty()) prt = mgr->findPrinter(printer); else prt = mgr->defaultPrinter(); if(prt == 0) errormsg(i18n("The specified printer or the default printer could not be found.")); else if(!prt->autoConfigure(&kprinter)) errormsg(i18n("Operation aborted.")); } else if(!printer.isEmpty()) kprinter.setSearchName(printer); kprinter.setDocName(title); kprinter.initOptions(opts); kprinter.setOption("kde-filelist", files.toStringList().join("@@")); kdDebug(500) << kprinter.option("kde-filelist") << endl; if(ncopies > 0) kprinter.setNumCopies(ncopies); if(nodialog) slotPrintRequested(&kprinter); else { dlg = KPrintDialog::printerDialog(&kprinter, 0); if(dlg) { connect(dlg, SIGNAL(printRequested(KPrinter *)), SLOT(slotPrintRequested(KPrinter *))); if(check_stdin) { notif = new QSocketNotifier(0, QSocketNotifier::Read, this); connect(notif, SIGNAL(activated(int)), this, SLOT(slotGotStdin())); kdDebug(500) << "waiting for input on stdin" << endl; } dlg->exec(); delete dlg; } else errormsg(i18n("Unable to construct the print dialog.")); }
void DetailledPrintStyle::print( const KABC::Addressee::List &contacts, PrintProgress *progress ) { mPrintProgress = progress; progress->addMessage( i18n( "Setting up fonts and colors" ) ); progress->setProgress( 0 ); bool useKDEFonts; QFont font; QColor foreColor = Qt::black; QColor headerColor = Qt::white; bool useHeaderColor = true; QColor backColor = Qt::black; bool useBGColor; // save, always available defaults: QFont header = QFont("Helvetica", 12, QFont::Normal); QFont headlines = QFont("Helvetica", 12, QFont::Normal, true); QFont body = QFont("Helvetica", 12, QFont::Normal); QFont fixed = QFont("Courier", 12, QFont::Normal); QFont comment = QFont("Helvetica", 10, QFont::Normal); // store the configuration settings: KConfig *config = kapp->config(); config->setGroup( ConfigSectionName ); useKDEFonts = mPageAppearance->cbStandardFonts->isChecked(); config->writeEntry( UseKDEFonts, useKDEFonts ); // read the font and color selections from the wizard pages: useBGColor=mPageAppearance->cbBackgroundColor->isChecked(); config->writeEntry( ColoredContactHeaders, useBGColor ); // use colored contact headers, otherwise use plain black and white): if ( useBGColor ) { headerColor = mPageAppearance->kcbHeaderTextColor->color(); backColor = mPageAppearance->kcbHeaderBGColor->color(); config->writeEntry( ContactHeaderForeColor, headerColor ); config->writeEntry( ContactHeaderBGColor, backColor ); } if ( mPageAppearance->cbStandardFonts->isChecked() ) { QFont standard = KGlobalSettings::generalFont(); header = standard; headlines = standard; body = standard; fixed = KGlobalSettings::fixedFont(); comment = standard; } else { header.setFamily( mPageAppearance->kfcHeaderFont->currentText() ); header.setPointSize( mPageAppearance->kisbHeaderFontSize->value() ); config->writeEntry( HeaderFont, header ); // headlines: headlines.setFamily( mPageAppearance->kfcHeadlineFont->currentText() ); headlines.setPointSize( mPageAppearance->kisbHeadlineFontSize->value() ); config->writeEntry( HeadlinesFont, headlines ); // body: body.setFamily( mPageAppearance->kfcBodyFont->currentText() ); body.setPointSize( mPageAppearance->kisbBodyFontSize->value() ); config->writeEntry( BodyFont, body ); // details: comment.setFamily( mPageAppearance->kfcDetailsFont->currentText() ); comment.setPointSize( mPageAppearance->kisbDetailsFontSize->value() ); config->writeEntry( DetailsFont, comment ); // fixed: fixed.setFamily( mPageAppearance->kfcFixedFont->currentText() ); fixed.setPointSize( mPageAppearance->kisbFixedFontSize->value() ); config->writeEntry( FixedFont, fixed ); } mPainter = new KABEntryPainter; mPainter->setForegroundColor( foreColor ); mPainter->setHeaderColor( headerColor ); mPainter->setBackgroundColor( backColor ); mPainter->setUseHeaderColor( useHeaderColor ); mPainter->setHeaderFont( header ); mPainter->setHeadLineFont( headlines ); mPainter->setBodyFont( body ); mPainter->setFixedFont( fixed ); mPainter->setCommentFont( comment ); KPrinter *printer = wizard()->printer(); QPainter painter; progress->addMessage( i18n( "Setting up margins and spacing" ) ); int marginTop = 0, marginLeft = 64, // to allow stapling, need refinement with two-side prints marginRight = 0, marginBottom = 0; register int left, top, width, height; painter.begin( printer ); printer->setFullPage( true ); // use whole page QPaintDeviceMetrics metrics( printer ); left = QMAX( printer->margins().width(), marginLeft ); top = QMAX( printer->margins().height(), marginTop ); width = metrics.width() - left - QMAX( printer->margins().width(), marginRight ); height = metrics.height() - top - QMAX( printer->margins().height(), marginBottom ); painter.setViewport( left, top, width, height ); progress->addMessage( i18n( "Printing" ) ); printEntries( contacts, printer, &painter, QRect( 0, 0, metrics.width(), metrics.height() ) ); progress->addMessage( i18n( "Done" ) ); painter.end(); config->sync(); }
void KGVDocument::print() { if( !dsc() ) return; KPrinter printer; if( dsc()->isStructured() ) { printer.setPageSelection( KPrinter::ApplicationSide ); printer.setCurrentPage( _part->miniWidget()->displayOptions().page() + 1 ); printer.setMinMax( 1, dsc()->page_count() ); printer.setOption( "kde-range", pageListToRange( _part->markList()->markList() ) ); if( printer.setup( _part->widget(), i18n("Print %1").arg(_part->url().fileName()) ) ) { KTempFile tf( QString::null, ".ps" ); if( tf.status() == 0 ) { if ( printer.pageList().empty() ) { KMessageBox::sorry( 0, i18n( "Printing failed because the list of " "pages to be printed was empty." ), i18n( "Error Printing" ) ); } else if ( savePages( tf.name(), printer.pageList() ) ) { printer.printFiles( QStringList( tf.name() ), true ); } else { KMessageBox::error( 0, i18n( "<qt><strong>Printing failure:</strong><br>Could not convert to PostScript</qt>" ) ); } } else { // TODO: Proper error handling ; } } } else { printer.setPageSelection( KPrinter::SystemSide ); if( printer.setup( _part->widget(), i18n("Print %1").arg(_part->url().fileName()) ) ) printer.printFiles( _fileName ); } }
bool KexiSimplePrintingCommand::print(const QString& aTitleText) { KexiDB::Connection *conn = m_mainWin->project()->dbConnection(); KexiDB::TableOrQuerySchema tableOrQuery(conn, m_objectId); if (!tableOrQuery.table() && !tableOrQuery.query()) { //! @todo item not found return false; } QString titleText(aTitleText.stripWhiteSpace()); if (titleText.isEmpty()) titleText = tableOrQuery.captionOrName(); KexiSimplePrintingEngine engine(m_settings, this); QString errorMessage; if (!engine.init(*conn, tableOrQuery, titleText, errorMessage)) { if (!errorMessage.isEmpty()) KMessageBox::sorry(m_mainWin, errorMessage, i18n("Printing")); return false; } //setup printing #ifdef Q_WS_WIN QPrinter printer(QPrinter::HighResolution); printer.setOrientation( m_settings.pageLayout.orientation == PG_PORTRAIT ? QPrinter::Portrait : QPrinter::Landscape ); printer.setPageSize( (QPrinter::PageSize)KoPageFormat::printerPageSize( m_settings.pageLayout.format ) ); // "chicken-egg" problem: // we cannot use real from/to values in setMinMax() and setFromTo() // because page count is known after obtaining print settings printer.setFromTo(1,1); #else KPrinter printer; printer.setOrientation( m_settings.pageLayout.orientation == PG_PORTRAIT ? KPrinter::Portrait : KPrinter::Landscape ); printer.setPageSize( (KPrinter::PageSize)KoPageFormat::printerPageSize( m_settings.pageLayout.format ) ); #endif printer.setFullPage(true); QString docName( titleText ); printer.setDocName( docName ); printer.setCreator(KEXI_APP_NAME); if ( !printer.setup( m_mainWin ) ) { return true; } // now we have final settings //! @todo get printer.pageOrder() (for reversed order requires improved engine) QPainter painter; if (!painter.begin(&printer)) { //! @todo msg return false; } engine.calculatePagesCount(painter); uint loops, loopsPerPage; QValueList<int> pagesToPrint; int fromPage = 0; #ifdef Q_WS_WIN int toPage = 0; if (QPrinter::PageRange == printer.printRange()) { fromPage = printer.fromPage(); toPage = printer.toPage(); } if (fromPage==0 || toPage==0) { fromPage = 0; toPage = (int)engine.pagesCount()-1; } else { fromPage--; if (toPage > (int)engine.pagesCount()) toPage = (int)engine.pagesCount(); toPage--; } // win32 only supports one range, build the list for (int i = fromPage; i<=toPage; i++) { pagesToPrint.append(i); } // on win32 the OS does perform buffering (only when collation is off, each copy needs to be repeated) loops = 1; loopsPerPage = printer.collateCopies() ? 1 : printer.numCopies(); #else // on !win32 print QPrinter::numCopies() times (the OS does not perform buffering) pagesToPrint = printer.pageList(); kdDebug() << pagesToPrint << endl; if (pagesToPrint.isEmpty()) { fromPage = 0; for (int i = 0; i<(int)engine.pagesCount(); i++) { pagesToPrint.append(i); } } else fromPage = pagesToPrint.first(); if (printer.collate()==KPrinter::Collate) { //collation: p1, p2,..pn; p1, p2,..pn; ......; p1, p2,..pn loops = printer.numCopies(); loopsPerPage = 1; } else { //no collation: p1, p1, ..., p1; p2, p2, ..., p2; ......; pn, pn,..pn loops = 1; loopsPerPage = printer.numCopies(); } //! @todo also look at printer.pageSet() option : all/odd/even pages #endif // now, total number of printed pages is printer.numCopies()*printer.pageList().count() kdDebug() << "printing..." << endl; bool firstPage = true; for (uint copy = 0;copy < loops; copy++) { kdDebug() << "copy " << (copy+1) << " of " << loops << endl; uint pageNumber = fromPage; QValueList<int>::ConstIterator pagesIt = pagesToPrint.constBegin(); for(;(int)pageNumber == fromPage || !engine.eof(); ++pageNumber) { kdDebug() << "printing..." << endl; if (pagesIt == pagesToPrint.constEnd()) //no more pages to print break; if ((int)pageNumber < *pagesIt) { //skip pages without printing (needed for computation) engine.paintPage(pageNumber, painter, false); continue; } if (*pagesIt < (int)pageNumber) { //sanity ++pagesIt; continue; } for (uint onePageCounter = 0; onePageCounter < loopsPerPage; onePageCounter++) { if (!firstPage) printer.newPage(); else firstPage = false; kdDebug() << "page #" << pageNumber << endl; engine.paintPage(pageNumber, painter); } ++pagesIt; } } kdDebug() << "end of printing." << endl; // stop painting, this will automatically send the print data to the printer if (!painter.end()) return false; if (!engine.done()) return false; return true; }
int KPrinterWrapper::metric(int m) const { return m_printer->metric(m); }
void TopLevel::printIt( KPrinter &printer, QPainter &painter ) { QPaintDeviceMetrics dm(painter.device()); QApplication::setOverrideCursor( waitCursor ); kapp->processEvents(); const bool fullpage = printer.option(APP_KFAX_SCALE_FULLPAGE) == "true"; const bool center_h = printer.option(APP_KFAX_CENTER_HORZ) == "true"; const bool center_v = printer.option(APP_KFAX_CENTER_VERT) == "true"; int currentpage = 0; bool first_page_printed = false; struct pagenode *pn; for(pn = firstpage; pn; pn = pn->next) { ++currentpage; // should this page be printed ? if (printer.pageList().findIndex(currentpage) < 0) continue; XImage *Image = Pimage(pn); if (!Image) continue; // byte-swapping the image QByteArray bytes( Image->height*Image->bytes_per_line ); for (int y=Image->height-1; y>=0; --y) { Q_UINT32 offset = y*Image->bytes_per_line; Q_UINT32 *source = (Q_UINT32 *) (Image->data + offset); Q_UINT32 *dest = (Q_UINT32 *) (bytes.data() + offset); for (int x=(Image->bytes_per_line/4)-1; x>=0; --x) { Q_UINT32 dv = 0, sv = *source; for (int bit=32; bit>0; --bit) { dv <<= 1; dv |= sv&1; sv >>= 1; } *dest = dv; ++dest; ++source; } } QImage image( (uchar *)bytes.data(), Image->bytes_per_line*8, Image->height, 1, NULL, 2, QImage::LittleEndian); if (first_page_printed) printer.newPage(); first_page_printed = true; const QSize printersize( dm.width(), dm.height() ); kdDebug() << "Printersize = " << printersize << endl; // print Image in original size if possible, else scale it. const QSize size( // logical size of the image Image->width * dm.logicalDpiX() / pn->dpiX, Image->height * dm.logicalDpiY() / pn->dpiY ); kdDebug() << "Org image size = " << Image->width << "x" << Image->height << " logical picture res = " << pn->dpiX << "x" << pn->dpiY << endl; kdDebug() << "New image size = " << size << " logical printer res = " << dm.logicalDpiX() << "x" << dm.logicalDpiY() << endl; uint top, left, bottom, right; if (fullpage) top = left = bottom = right = 0; else printer.margins( &top, &left, &bottom, &right ); kdDebug() << "Margins = " << top << " " << left << " " << bottom << " " << right << endl; const QSize maxSize( printersize.width()-left-right, printersize.height()-top-bottom ); QSize scaledImageSize = size; if (size.width() > maxSize.width() || size.height() > maxSize.height() ) { // Image does not fit - scale it and print centered scaledImageSize.scale( maxSize, QSize::ScaleMin ); kdDebug() << "Image does not fit - scaling to " << maxSize << endl; } else { // Image does fit - print it in original size, but centered scaledImageSize.scale( size, QSize::ScaleMin ); kdDebug() << "Image does fit - scaling to " << size << endl; } kdDebug() << "Final image size " << scaledImageSize << endl; int x,y; if (center_h) x = (maxSize.width()-scaledImageSize.width())/2 + left; else x = left; if (center_v) y = (maxSize.height()-scaledImageSize.height())/2 + top; else y = top; painter.drawImage( QRect(x,y,scaledImageSize.width(), scaledImageSize.height()), image ); } QApplication::restoreOverrideCursor(); }