void PrintDialog::storeValues() { getOptions(); // options were not set get last options with this hack m_doc->Print_Options.printer = PrintDest->currentText(); m_doc->Print_Options.filename = QDir::fromNativeSeparators(LineEdit1->text()); m_doc->Print_Options.toFile = outputToFile(); m_doc->Print_Options.copies = numCopies(); m_doc->Print_Options.outputSeparations = outputSeparations(); m_doc->Print_Options.separationName = separationName(); m_doc->Print_Options.allSeparations = allSeparations(); if (m_doc->Print_Options.outputSeparations) m_doc->Print_Options.useSpotColors = true; else m_doc->Print_Options.useSpotColors = doSpot(); m_doc->Print_Options.useColor = color(); m_doc->Print_Options.mirrorH = mirrorHorizontal(); m_doc->Print_Options.mirrorV = mirrorVertical(); m_doc->Print_Options.useICC = ICCinUse(); m_doc->Print_Options.doClip = doClip(); m_doc->Print_Options.doGCR = doGCR(); m_doc->Print_Options.prnEngine= printEngine(); m_doc->Print_Options.setDevParam = doDev(); m_doc->Print_Options.useDocBleeds = docBleeds->isChecked(); m_doc->Print_Options.bleeds.Top = BleedTop->value() / m_doc->unitRatio(); m_doc->Print_Options.bleeds.Left = BleedLeft->value() / m_doc->unitRatio(); m_doc->Print_Options.bleeds.Right = BleedRight->value() / m_doc->unitRatio(); m_doc->Print_Options.bleeds.Bottom = BleedBottom->value() / m_doc->unitRatio(); m_doc->Print_Options.markLength = markLength->value() / m_doc->unitRatio(); m_doc->Print_Options.markOffset = markOffset->value() / m_doc->unitRatio(); m_doc->Print_Options.cropMarks = cropMarks->isChecked(); m_doc->Print_Options.bleedMarks = bleedMarks->isChecked(); m_doc->Print_Options.registrationMarks = registrationMarks->isChecked(); m_doc->Print_Options.colorMarks = colorMarks->isChecked(); m_doc->Print_Options.includePDFMarks = usePDFMarks->isChecked(); if (OtherCom->isChecked()) { m_doc->Print_Options.printerCommand = Command->text(); m_doc->Print_Options.useAltPrintCommand = true; } else m_doc->Print_Options.useAltPrintCommand = false; #ifdef HAVE_CUPS m_doc->Print_Options.printerOptions = PrinterOpts; #else m_doc->Print_Options.printerOptions = QString(); #endif m_doc->Print_Options.devMode = DevMode; }
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; }
// Print a range of lines to a printer. int QsciPrinter::printRange(QsciScintillaBase *qsb, int from, int to) { // Sanity check. if (!qsb) return false; // Setup the printing area. QRect def_area; def_area.setX(0); def_area.setY(0); QPaintDeviceMetrics metrics(this); def_area.setWidth(metrics.width()); def_area.setHeight(metrics.height()); // Get the page range. int pgFrom, pgTo; pgFrom = fromPage(); pgTo = toPage(); // Find the position range. long startPos, endPos; endPos = qsb->SendScintilla(QsciScintillaBase::SCI_GETLENGTH); startPos = (from > 0 ? qsb -> SendScintilla(QsciScintillaBase::SCI_POSITIONFROMLINE,from) : 0); if (to >= 0) { long toPos = qsb -> SendScintilla(QsciScintillaBase::SCI_POSITIONFROMLINE,to + 1); if (endPos > toPos) endPos = toPos; } if (startPos >= endPos) return false; QPainter painter(this); bool reverse = (pageOrder() == LastPageFirst); bool needNewPage = false; qsb -> SendScintilla(QsciScintillaBase::SCI_SETPRINTMAGNIFICATION,mag); qsb -> SendScintilla(QsciScintillaBase::SCI_SETPRINTWRAPMODE,wrap); for (int i = 1; i <= numCopies(); ++i) { // If we are printing in reverse page order then remember the start // position of each page. QValueStack<long> pageStarts; int currPage = 1; long pos = startPos; while (pos < endPos) { // See if we have finished the requested page range. if (pgTo > 0 && pgTo < currPage) break; // See if we are going to render this page, or just see how much // would fit onto it. bool render = false; if (pgFrom == 0 || pgFrom <= currPage) { if (reverse) pageStarts.push(pos); else { render = true; if (needNewPage) { if (!newPage()) return false; } else needNewPage = true; } } QRect area = def_area; formatPage(painter,render,area,currPage); pos = qsb -> SendScintilla(QsciScintillaBase::SCI_FORMATRANGE,render,&painter,area,pos,endPos); ++currPage; } // All done if we are printing in normal page order. if (!reverse) continue; // Now go through each page on the stack and really print it. while (!pageStarts.isEmpty()) { --currPage; long ePos = pos; pos = pageStarts.pop(); if (needNewPage) { if (!newPage()) return false; } else needNewPage = true; QRect area = def_area; formatPage(painter,true,area,currPage); qsb->SendScintilla(QsciScintillaBase::SCI_FORMATRANGE,true,&painter,area,pos,ePos); } } return true; }
void KPrinter::translateQtOptions() { d->m_wrapper->setCreator(creator()); d->m_wrapper->setDocName(docName()); d->m_wrapper->setFullPage(fullPage()); d->m_wrapper->setColorMode((QPrinter::ColorMode)colorMode()); d->m_wrapper->setOrientation((QPrinter::Orientation)orientation()); if ( !option( "kde-printsize" ).isEmpty() ) d->m_wrapper->setPageSize( ( QPrinter::PageSize )option( "kde-printsize" ).toInt() ); else d->m_wrapper->setPageSize((QPrinter::PageSize)pageSize()); d->m_wrapper->setOutputToFile(true); d->m_wrapper->setOutputFileName(d->m_tmpbuffer); d->m_wrapper->setNumCopies(option("kde-qtcopies").isEmpty() ? 1 : option("kde-qtcopies").toInt()); if (!option("kde-margin-top").isEmpty()) { /** * Scale margings as the margin widget always stores values * in dot units ( 1/72th in ), to be resolution independent * when specified by the user ( who usually specifies margins * in metric units ). */ int res = resolution(); d->m_wrapper->setMargins( ( int )( ( option("kde-margin-top").toFloat() * res + 71 ) / 72 ), ( int )( ( option("kde-margin-left").toFloat() * res + 71 ) / 72 ), ( int )( ( option("kde-margin-bottom").toFloat() * res + 71 ) / 72 ), ( int )( ( option("kde-margin-right").toFloat() * res + 71 ) / 72 ) ); } else if ( d->m_pagesize != NULL ) { int res = resolution(); DrPageSize *ps = d->m_pagesize; int top = ( int )( ps->topMargin() * res + 71 ) / 72; int left = ( int )( ps->leftMargin() * res + 71 ) / 72; int bottom = ( int )( ps->bottomMargin() * res + 71 ) / 72; int right = ( int )( ps->rightMargin() * res + 71 ) / 72; if ( !fullPage() ) { // Printers can often print very close to the edges (PPD files say ImageArea==PaperDimension). // But that doesn't mean it looks good. Apps which use setFullPage(false) assume that // KPrinter will give them reasonable margins, so let's QMAX with defaults from Qt in that case. // Keep this in sync with KPMarginPage::initPageSize unsigned int it, il, ib, ir; d->m_wrapper->margins( &it, &il, &ib, &ir ); top = QMAX( top, (int)it ); left = QMAX( left, (int)il ); bottom = QMAX( bottom, (int)ib ); right = QMAX( right, (int)ir ); } d->m_wrapper->setMargins( top, left, bottom, right ); } /*else { int res = d->m_wrapper->resolution(); d->m_wrapper->setMargins( res/3, res/2, res/3, res/2 ); }*/ // for special printers, copies are handled by Qt if (option("kde-isspecial") == "1") d->m_wrapper->setNumCopies(numCopies()); }