nsresult gfxWindowsSurface::BeginPrinting(const nsAString& aTitle, const nsAString& aPrintToFileName) { #ifdef NS_PRINTING #define DOC_TITLE_LENGTH (MAX_PATH-1) DOCINFOW docinfo; nsString titleStr(aTitle); if (titleStr.Length() > DOC_TITLE_LENGTH) { titleStr.SetLength(DOC_TITLE_LENGTH-3); titleStr.AppendLiteral("..."); } nsString docName(aPrintToFileName); docinfo.cbSize = sizeof(docinfo); docinfo.lpszDocName = titleStr.Length() > 0 ? titleStr.get() : L"Mozilla Document"; docinfo.lpszOutput = docName.Length() > 0 ? docName.get() : nullptr; docinfo.lpszDatatype = nullptr; docinfo.fwType = 0; ::StartDocW(mDC, &docinfo); return NS_OK; #else return NS_ERROR_FAILURE; #endif }
QString Property::docCommentPreventReentrantMemberVariable(const QString &className) const { if (docName().isEmpty()) { return QString(""); } QString s; s = CODESCHEME_DocCommentContent_PreventReentrantMemberVariable; s = replacePercentToSepecialString(s); return s; }
QString Property::docCommentResetFunction(const QString &className, bool isInline) const { if (docName().isEmpty()) { return QString(""); } QString s; s = CODESCHEME_DocCommentContent_ResetFunction; s = replacePercentToSepecialString(s); return s; }
//! Update the window title with filename and modification status void ThymioVPLStandalone::updateWindowTitle(bool modified) { QString modifiedText; if (modified) modifiedText = tr("[modified] "); QString docName(tr("Untitled")); if (!fileName.isEmpty()) docName = fileName.mid(fileName.lastIndexOf("/") + 1); setWindowTitle(tr("%0 %1- Thymio Visual Programming Language - ver. %2").arg(docName).arg(modifiedText).arg(ASEBA_VERSION)); }
QString Property::docCommentWriteFunction(const QString &className, bool emitSignal, bool isInline, bool preventReentrant) const { if (docName().isEmpty()) { return QString(""); } QString s; QString customDetail(""), signalDetail(""); if (!docDetail().isEmpty()) { customDetail = QString(CODESCHEME_DocComment_Comma) + docDetail(); } if (emitSignal && notify()) { signalDetail = QString(CODESCHEME_DocComment_Comma) + CODESCHEME_DocComment_WriteFunction_SignalDetail; } s = CODESCHEME_DocCommentContent_WriteFunction; s = replacePercentToSepecialString(s); return s; }
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; }
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()); }