Changeset 8127 in ntrip for trunk/BNC/qwtpolar/qwt_polar_renderer.cpp
- Timestamp:
- May 10, 2017, 3:20:54 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/BNC/qwtpolar/qwt_polar_renderer.cpp
r4272 r8127 11 11 #include "qwt_polar_layout.h" 12 12 #include <qwt_legend.h> 13 #include <qwt_legend_item.h>14 13 #include <qwt_dyngrid_layout.h> 15 14 #include <qwt_text_label.h> … … 17 16 #include <qpainter.h> 18 17 #include <qprinter.h> 18 #include <qprintdialog.h> 19 #include <qfiledialog.h> 19 20 #include <qimagewriter.h> 20 21 #include <qfileinfo.h> … … 115 116 116 117 const QString fmt = format.toLower(); 117 if ( format == "pdf" || format == "ps" ) 118 { 118 if ( format == "pdf" ) 119 { 120 #ifndef QT_NO_PRINTER 119 121 QPrinter printer; 122 printer.setColorMode( QPrinter::Color ); 120 123 printer.setFullPage( true ); 121 124 printer.setPaperSize( sizeMM, QPrinter::Millimeter ); 122 125 printer.setDocName( title ); 123 126 printer.setOutputFileName( fileName ); 124 printer.setOutputFormat( ( format == "pdf" ) 125 ? QPrinter::PdfFormat : QPrinter::PostScriptFormat ); 127 printer.setOutputFormat( QPrinter::PdfFormat ); 126 128 printer.setResolution( resolution ); 127 129 128 130 QPainter painter( &printer ); 129 131 render( plot, &painter, documentRect ); 132 #endif 133 } 134 else if ( format == "ps" ) 135 { 136 #if QT_VERSION < 0x050000 137 #ifndef QT_NO_PRINTER 138 QPrinter printer; 139 printer.setColorMode( QPrinter::Color ); 140 printer.setFullPage( true ); 141 printer.setPaperSize( sizeMM, QPrinter::Millimeter ); 142 printer.setDocName( title ); 143 printer.setOutputFileName( fileName ); 144 printer.setOutputFormat( QPrinter::PostScriptFormat ); 145 printer.setResolution( resolution ); 146 147 QPainter painter( &printer ); 148 render( plot, &painter, documentRect ); 149 #endif 150 #endif 130 151 } 131 152 #ifndef QWT_NO_POLAR_SVG … … 300 321 301 322 painter->save(); 302 renderLegend( p ainter, layout->legendRect() );323 renderLegend( plot, painter, layout->legendRect() ); 303 324 painter->restore(); 304 325 … … 340 361 Render the legend into a given rectangle. 341 362 363 \param plot Plot widget 342 364 \param painter Painter 343 365 \param rect Bounding rectangle 344 366 */ 345 346 void QwtPolarRenderer::renderLegend( 367 void QwtPolarRenderer::renderLegend( const QwtPolarPlot *plot, 347 368 QPainter *painter, const QRectF &rect ) const 348 369 { 349 QwtLegend *legend = d_data->plot->legend(); 350 if ( legend == NULL || legend->isEmpty() ) 351 return; 352 353 const QwtDynGridLayout *legendLayout = qobject_cast<QwtDynGridLayout *>( 354 legend->contentsWidget()->layout() ); 355 if ( legendLayout == NULL ) 356 return; 357 358 uint numCols = legendLayout->columnsForWidth( rect.width() ); 359 const QList<QRect> itemRects = 360 legendLayout->layoutItems( rect.toRect(), numCols ); 361 362 int index = 0; 363 364 for ( int i = 0; i < legendLayout->count(); i++ ) 365 { 366 QLayoutItem *item = legendLayout->itemAt( i ); 367 QWidget *w = item->widget(); 368 if ( w ) 370 if ( plot->legend() ) 371 plot->legend()->renderLegend( painter, rect, true ); 372 } 373 374 /*! 375 \brief Execute a file dialog and render the plot to the selected file 376 377 The document will be rendered in 85 dpi for a size 30x30 cm 378 379 \param plot Plot widget 380 \param documentName Default document name 381 \param sizeMM Size for the document in millimeters. 382 \param resolution Resolution in dots per Inch (dpi) 383 384 \sa renderDocument() 385 */ 386 bool QwtPolarRenderer::exportTo( QwtPolarPlot *plot, 387 const QString &documentName, const QSizeF &sizeMM, int resolution ) 388 { 389 if ( plot == NULL ) 390 return false; 391 392 QString fileName = documentName; 393 394 // What about translation 395 396 #ifndef QT_NO_FILEDIALOG 397 const QList<QByteArray> imageFormats = 398 QImageWriter::supportedImageFormats(); 399 400 QStringList filter; 401 #ifndef QT_NO_PRINTER 402 filter += QString( "PDF " ) + tr( "Documents" ) + " (*.pdf)"; 403 #endif 404 #ifndef QWT_NO_SVG 405 filter += QString( "SVG " ) + tr( "Documents" ) + " (*.svg)"; 406 #endif 407 #ifndef QT_NO_PRINTER 408 filter += QString( "Postscript " ) + tr( "Documents" ) + " (*.ps)"; 409 #endif 410 411 if ( imageFormats.size() > 0 ) 412 { 413 QString imageFilter( tr( "Images" ) ); 414 imageFilter += " ("; 415 for ( int i = 0; i < imageFormats.size(); i++ ) 369 416 { 370 painter->save(); 371 372 painter->setClipRect( itemRects[index] ); 373 renderLegendItem( painter, w, itemRects[index] ); 374 375 index++; 376 painter->restore(); 417 if ( i > 0 ) 418 imageFilter += " "; 419 imageFilter += "*."; 420 imageFilter += imageFormats[i]; 377 421 } 378 } 379 380 } 381 382 /*! 383 Print the legend item into a given rectangle. 384 385 \param painter Painter 386 \param widget Widget representing a legend item 387 \param rect Bounding rectangle 388 389 \note When widget is not derived from QwtLegendItem renderLegendItem 390 does nothing and needs to be overloaded 391 */ 392 void QwtPolarRenderer::renderLegendItem( QPainter *painter, 393 const QWidget *widget, const QRectF &rect ) const 394 { 395 const QwtLegendItem *item = qobject_cast<const QwtLegendItem *>( widget ); 396 if ( item ) 397 { 398 const QSize sz = item->identifierSize(); 399 400 const QRectF identifierRect( rect.x() + item->margin(), 401 rect.center().y() - 0.5 * sz.height(), sz.width(), sz.height() ); 402 403 QwtLegendItemManager *itemManger = d_data->plot->legend()->find( item ); 404 if ( itemManger ) 405 { 406 painter->save(); 407 painter->setClipRect( identifierRect, Qt::IntersectClip ); 408 itemManger->drawLegendIdentifier( painter, identifierRect ); 409 painter->restore(); 410 } 411 412 // Label 413 414 QRectF titleRect = rect; 415 titleRect.setX( identifierRect.right() + 2 * item->spacing() ); 416 417 painter->setFont( item->font() ); 418 item->text().draw( painter, titleRect ); 419 } 420 } 421 422 imageFilter += ")"; 423 424 filter += imageFilter; 425 } 426 427 fileName = QFileDialog::getSaveFileName( 428 NULL, tr( "Export File Name" ), fileName, 429 filter.join( ";;" ), NULL, QFileDialog::DontConfirmOverwrite ); 430 #endif 431 if ( fileName.isEmpty() ) 432 return false; 433 434 renderDocument( plot, fileName, sizeMM, resolution ); 435 436 return true; 437 }
Note:
See TracChangeset
for help on using the changeset viewer.