knotes

knoteprinter.cpp

00001 #include "knoteprinter.h"
00002 
00003 #include <libkcal/journal.h>
00004 
00005 #include <klocale.h>
00006 #include <kprinter.h>
00007 #include <kdebug.h>
00008 #include <qfont.h>
00009 #include <qpaintdevicemetrics.h>
00010 #include <qpainter.h>
00011 #include <qrect.h>
00012 #include <qsimplerichtext.h>
00013 #include <qstring.h>
00014 
00015 KNotePrinter::KNotePrinter() : m_styleSheet( 0 ), m_mimeSourceFactory( 0 )
00016 {
00017 }
00018 
00019 void KNotePrinter::setContext( const QString& context )
00020 {
00021     m_context = context;
00022 }
00023 
00024 QString KNotePrinter::context() const
00025 {
00026     return m_context;
00027 }
00028 
00029 void KNotePrinter::setMimeSourceFactory( QMimeSourceFactory* factory )
00030 {
00031     m_mimeSourceFactory = factory;
00032 }
00033 
00034 QMimeSourceFactory* KNotePrinter::mimeSourceFactory() const
00035 {
00036     return m_mimeSourceFactory;
00037 }
00038 
00039 void KNotePrinter::setFont( const QFont& font )
00040 {
00041     m_font = font;
00042 }
00043 
00044 QFont KNotePrinter::font() const
00045 {
00046     return m_font;
00047 }
00048 
00049 void KNotePrinter::setColorGroup( const QColorGroup& colorGroup )
00050 {
00051     m_colorGroup = colorGroup;
00052 }
00053 
00054 QColorGroup KNotePrinter::colorGroup() const
00055 {
00056     return m_colorGroup;
00057 }
00058 
00059 void KNotePrinter::setStyleSheet( QStyleSheet* styleSheet )
00060 {
00061     m_styleSheet = styleSheet;
00062 }
00063 
00064 QStyleSheet* KNotePrinter::styleSheet() const
00065 {
00066     return m_styleSheet;
00067 }
00068 
00069 void KNotePrinter::doPrint( KPrinter& printer, QPainter& painter,
00070                             const QString& content ) const
00071 {
00072     const int margin = 40;  // pt
00073 
00074     QPaintDeviceMetrics metrics( painter.device() );
00075     int marginX = margin * metrics.logicalDpiX() / 72;
00076     int marginY = margin * metrics.logicalDpiY() / 72;
00077 
00078     QRect body( marginX, marginY,
00079             metrics.width() - marginX * 2,
00080             metrics.height() - marginY * 2 );
00081 
00082     kdDebug()<<" content :"<<content<<endl;
00083     kdDebug()<<" m_styleSheet :"<<m_styleSheet<<endl;
00084     //kdDebug()<<" m_font :"<<m_font;
00085     QSimpleRichText text( content, m_font, m_context,
00086             m_styleSheet, m_mimeSourceFactory,
00087             body.height() /*, linkColor, linkUnderline? */ );
00088 
00089     text.setWidth( &painter, body.width() );
00090     QRect view( body );
00091 
00092     int page = 1;
00093 
00094     for (;;)
00095     {
00096         text.draw( &painter, body.left(), body.top(), view, m_colorGroup );
00097         view.moveBy( 0, body.height() );
00098         painter.translate( 0, -body.height() );
00099 
00100         // page numbers
00101         painter.setFont( m_font );
00102         painter.drawText(
00103                 view.right() - painter.fontMetrics().width( QString::number( page ) ),
00104                 view.bottom() + painter.fontMetrics().ascent() + 5, QString::number( page )
00105                 );
00106 
00107         if ( view.top() >= text.height() )
00108             break;
00109 
00110         printer.newPage();
00111         page++;
00112     }
00113 }
00114 
00115 void KNotePrinter::printNote( const QString& name, const QString& content ) const
00116 {
00117     KPrinter printer;
00118     printer.setFullPage( true );
00119 
00120     if ( !printer.setup( 0, i18n("Print %1").arg(name) ) )
00121         return;
00122     QPainter painter;
00123     painter.begin( &printer );
00124     doPrint( printer, painter, content );
00125     painter.end();
00126 }
00127 
00128 void KNotePrinter::printNotes( const QValueList<KCal::Journal*>& journals ) const
00129 {
00130     if ( journals.isEmpty() )
00131         return;
00132 
00133     KPrinter printer;
00134     printer.setFullPage( true );
00135 
00136     if ( !printer.setup( 0, i18n("Print Note", "Print %n notes", journals.count() ) ) )
00137         return;
00138 
00139     QPainter painter;
00140     painter.begin( &printer );
00141     QString content;
00142     QValueListConstIterator<KCal::Journal*> it( journals.constBegin() );
00143     QValueListConstIterator<KCal::Journal*> end( journals.constEnd() );
00144     while ( it != end ) {
00145         KCal::Journal *j = *it;
00146         it++;
00147         content += "<h2>" + j->summary() + "</h2>";
00148         content += j->description();
00149         if ( it != end )
00150             content += "<hr>";
00151     }
00152     doPrint( printer, painter, content );
00153     painter.end();
00154 }
00155 
00156