This is a multi-part message in MIME format. --------------090306000807070106090800 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit If there's no cell to print, KSpread will display "Nothing to print" dialog box. This is annoying for print preview. The attached patch fixes the problem, that dialog box would only be displayed for real printing and would not appear at all with print preview (and instead, a blank page will be shown for the preview). That dummy "one point painting" hack is needed, otherwise KPrinter will complain (something about application/x-zerosize mimetype). If there's any better hack (or solution), please educate me... The patch also fixes painting problem (again and again) when the dialog is still not closed by user. (And hopefully this is the last patch which can close bug #60147) Best regards, Ariya Hidayat http://ariya.pandu.org/ --------------090306000807070106090800 Content-Type: text/plain; name="noprint.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="noprint.patch" Index: kspread_sheetprint.cc =================================================================== RCS file: /home/kde/koffice/kspread/kspread_sheetprint.cc,v retrieving revision 1.8 diff -u -p -r1.8 kspread_sheetprint.cc --- kspread_sheetprint.cc 27 Apr 2003 16:24:17 -0000 1.8 +++ kspread_sheetprint.cc 13 Nov 2003 20:11:27 -0000 @@ -178,7 +178,7 @@ bool KSpreadSheetPrint::pageNeedsPrintin return filled; } -void KSpreadSheetPrint::print( QPainter &painter, KPrinter *_printer ) +bool KSpreadSheetPrint::print( QPainter &painter, KPrinter *_printer ) { kdDebug(36001)<<"PRINTING ...."<setDefaultGridPen( gridPen ); - } - m_pSheet->setShowGrid( oldShowGrid ); - - //abort printing - _printer->abort(); - - return; + // nothing to print + painter.setPen( QPen( Qt::black, 1 ) ); + painter.drawPoint( 1, 1 ); } + else + { - int pageNo = 1; + int pageNo = 1; - // - // Print all pages in the list - // - QValueList::Iterator it = page_list.begin(); - QValueList::Iterator fit = page_frame_list.begin(); - QValueList::Iterator fito = page_frame_list_offset.begin(); + // + // Print all pages in the list + // + QValueList::Iterator it = page_list.begin(); + QValueList::Iterator fit = page_frame_list.begin(); + QValueList::Iterator fito = page_frame_list_offset.begin(); - for( ; it != page_list.end(); ++it, ++fit, ++fito, ++pageNo ) - { - painter.setClipRect( 0, 0, m_pDoc->zoomItX( paperWidthPts() ), - m_pDoc->zoomItY( paperHeightPts() ) ); - printHeaderFooter( painter, pageNo ); + for( ; it != page_list.end(); ++it, ++fit, ++fito, ++pageNo ) + { + painter.setClipRect( 0, 0, m_pDoc->zoomItX( paperWidthPts() ), + m_pDoc->zoomItY( paperHeightPts() ) ); + printHeaderFooter( painter, pageNo ); - painter.translate( m_pDoc->zoomItX( leftBorderPts() ), - m_pDoc->zoomItY( topBorderPts() ) ); + painter.translate( m_pDoc->zoomItX( leftBorderPts() ), + m_pDoc->zoomItY( topBorderPts() ) ); - // Print the page - printPage( painter, *it, *fit, *fito ); + // Print the page + printPage( painter, *it, *fit, *fito ); - painter.translate( - m_pDoc->zoomItX( leftBorderPts() ), - - m_pDoc->zoomItY( topBorderPts() ) ); + painter.translate( - m_pDoc->zoomItX( leftBorderPts() ), + - m_pDoc->zoomItY( topBorderPts() ) ); - if ( pageNo < (int)page_list.count() ) - _printer->newPage(); + if ( pageNo < (int)page_list.count() ) + _printer->newPage(); + } } if ( !m_bPrintGrid ) @@ -296,6 +290,8 @@ void KSpreadSheetPrint::print( QPainter m_pDoc->setDefaultGridPen( gridPen ); } m_pSheet->setShowGrid( oldShowGrid ); + + return ( page_list.count() > 0 ); } void KSpreadSheetPrint::printPage( QPainter &_painter, const QRect& page_range, @@ -378,7 +374,7 @@ void KSpreadSheetPrint::printRect( QPain bottomRight.setX( bottomRight.x() + m_pSheet->columnFormat( x )->dblWidth() ); for ( int y = regionTop; y <= regionBottom; ++y ) - bottomRight.setY( bottomRight.y() + bottomRight.setY( bottomRight.y() + m_pSheet->rowFormat( y )->dblHeight() ); KoRect rect( topLeft, bottomRight ); Index: kspread_sheetprint.h =================================================================== RCS file: /home/kde/koffice/kspread/kspread_sheetprint.h,v retrieving revision 1.4 diff -u -p -r1.4 kspread_sheetprint.h --- kspread_sheetprint.h 27 Apr 2003 16:24:17 -0000 1.4 +++ kspread_sheetprint.h 13 Nov 2003 20:11:28 -0000 @@ -37,7 +37,10 @@ public: KSpreadSheetPrint( KSpreadSheet *sheet ); ~KSpreadSheetPrint(); - void print( QPainter &painter, KPrinter *_printer ); + /** + * @return false if nothing to print. + */ + bool print( QPainter &painter, KPrinter *_printer ); /** * @return the printable width of the paper in millimeters. Index: kspread_view.cc =================================================================== RCS file: /home/kde/koffice/kspread/kspread_view.cc,v retrieving revision 1.698 diff -u -p -r1.698 kspread_view.cc --- kspread_view.cc 5 Nov 2003 21:16:38 -0000 1.698 +++ kspread_view.cc 13 Nov 2003 20:11:28 -0000 @@ -3988,7 +3988,7 @@ void KSpreadView::print( KPrinter &prt ) print->setPaperOrientation( PG_PORTRAIT ); } - print->print( painter, &prt ); + bool result = print->print( painter, &prt ); //Restore original orientation print->setPaperOrientation( _orient ); @@ -4001,6 +4001,16 @@ void KSpreadView::print( KPrinter &prt ) setZoom( oldZoom, false ); m_pDoc->emitEndOperation(); + // Nothing to print + if( !result ) + { + if( !prt.previewOnly() ) + { + KMessageBox::information( 0, i18n("Nothing to print.") ); + prt.abort(); + } + } + painter.end(); } --------------090306000807070106090800 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ koffice-devel mailing list koffice-devel@mail.kde.org https://mail.kde.org/mailman/listinfo/koffice-devel --------------090306000807070106090800--