You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdepim/knotes/knoteprinter.cpp

154 lines
3.5 KiB

#include "knoteprinter.h"
#include <libkcal/journal.h>
#include <klocale.h>
#include <kprinter.h>
#include <tqfont.h>
#include <tqpaintdevicemetrics.h>
#include <tqpainter.h>
#include <tqrect.h>
#include <tqsimplerichtext.h>
#include <tqstring.h>
KNotePrinter::KNotePrinter() : m_styleSheet( 0 ), m_mimeSourceFactory( 0 )
{
}
void KNotePrinter::setContext( const TQString& context )
{
m_context = context;
}
TQString KNotePrinter::context() const
{
return m_context;
}
void KNotePrinter::setMimeSourceFactory( TQMimeSourceFactory* factory )
{
m_mimeSourceFactory = factory;
}
TQMimeSourceFactory* KNotePrinter::mimeSourceFactory() const
{
return m_mimeSourceFactory;
}
void KNotePrinter::setFont( const TQFont& font )
{
m_font = font;
}
TQFont KNotePrinter::font() const
{
return m_font;
}
void KNotePrinter::setColorGroup( const TQColorGroup& colorGroup )
{
m_colorGroup = colorGroup;
}
TQColorGroup KNotePrinter::colorGroup() const
{
return m_colorGroup;
}
void KNotePrinter::setStyleSheet( TQStyleSheet* styleSheet )
{
m_styleSheet = styleSheet;
}
TQStyleSheet* KNotePrinter::styleSheet() const
{
return m_styleSheet;
}
void KNotePrinter::doPrint( KPrinter& printer, TQPainter& painter,
const TQString& content ) const
{
const int margin = 40; // pt
TQPaintDeviceMetrics metrics( painter.device() );
int marginX = margin * metrics.logicalDpiX() / 72;
int marginY = margin * metrics.logicalDpiY() / 72;
TQRect body( marginX, marginY,
metrics.width() - marginX * 2,
metrics.height() - marginY * 2 );
TQSimpleRichText text( content, m_font, m_context,
m_styleSheet, m_mimeSourceFactory,
body.height() /*, linkColor, linkUnderline? */ );
text.setWidth( &painter, body.width() );
TQRect view( body );
int page = 1;
for (;;)
{
text.draw( &painter, body.left(), body.top(), view, m_colorGroup );
view.moveBy( 0, body.height() );
painter.translate( 0, -body.height() );
// page numbers
painter.setFont( m_font );
painter.drawText(
view.right() - painter.fontMetrics().width( TQString::number( page ) ),
view.bottom() + painter.fontMetrics().ascent() + 5, TQString::number( page )
);
if ( view.top() >= text.height() )
break;
printer.newPage();
page++;
}
}
void KNotePrinter::printNote( const TQString& name, const TQString& content ) const
{
KPrinter printer;
printer.setFullPage( true );
if ( !printer.setup( 0, i18n("Print %1").arg(name) ) )
return;
TQPainter painter;
painter.begin( &printer );
doPrint( printer, painter, content );
painter.end();
}
void KNotePrinter::printNotes( const TQValueList<KCal::Journal*>& journals ) const
{
if ( journals.isEmpty() )
return;
KPrinter printer;
printer.setFullPage( true );
if ( !printer.setup( 0, i18n("Print Note", "Print %n notes", journals.count() ) ) )
return;
TQPainter painter;
painter.begin( &printer );
TQString content;
TQValueListConstIterator<KCal::Journal*> it( journals.begin() );
TQValueListConstIterator<KCal::Journal*> end( journals.end() );
while ( it != end ) {
KCal::Journal *j = *it;
it++;
content += "<h2>" + j->summary() + "</h2>";
content += j->description();
if ( it != end )
content += "<hr>";
}
doPrint( printer, painter, content );
painter.end();
}