khtmlparthtmlwriter.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #include <config.h>
00033
00034 #include "khtmlparthtmlwriter.h"
00035
00036 #include <kdebug.h>
00037 #include <khtml_part.h>
00038 #include <khtmlview.h>
00039
00040
00041 #include <cassert>
00042
00043 namespace KMail {
00044
00045 KHtmlPartHtmlWriter::KHtmlPartHtmlWriter( KHTMLPart * part,
00046 QObject * parent, const char * name )
00047 : QObject( parent, name ), HtmlWriter(),
00048 mHtmlPart( part ), mState( Ended )
00049 {
00050 assert( part );
00051 connect( &mHtmlTimer, SIGNAL(timeout()), SLOT(slotWriteNextHtmlChunk()) );
00052 }
00053
00054 KHtmlPartHtmlWriter::~KHtmlPartHtmlWriter() {
00055
00056 }
00057
00058 void KHtmlPartHtmlWriter::begin( const QString & css ) {
00059 if ( mState != Ended ) {
00060 kdWarning( 5006 ) << "KHtmlPartHtmlWriter: begin() called on non-ended session!" << endl;
00061 reset();
00062 }
00063
00064
00065 mHtmlPart->view()->setUpdatesEnabled( false );
00066 mHtmlPart->view()->viewport()->setUpdatesEnabled( false );
00067 static_cast<QScrollView *>(mHtmlPart->widget())->ensureVisible( 0, 0 );
00068
00069 mHtmlPart->begin( KURL( "file:/" ) );
00070 if ( !css.isEmpty() )
00071 mHtmlPart->setUserStyleSheet( css );
00072 mState = Begun;
00073 }
00074
00075 void KHtmlPartHtmlWriter::end() {
00076 kdWarning( mState != Begun, 5006 ) << "KHtmlPartHtmlWriter: end() called on non-begun or queued session!" << endl;
00077 mHtmlPart->end();
00078 mHtmlPart->view()->viewport()->setUpdatesEnabled( true );
00079 mHtmlPart->view()->setUpdatesEnabled( true );
00080 mHtmlPart->view()->viewport()->repaint( false );
00081 mState = Ended;
00082 }
00083
00084 void KHtmlPartHtmlWriter::reset() {
00085 if ( mState != Ended ) {
00086 mHtmlTimer.stop();
00087 mHtmlQueue.clear();
00088 mState = Begun;
00089 end();
00090 }
00091 mState = Ended;
00092 }
00093
00094 void KHtmlPartHtmlWriter::write( const QString & str ) {
00095 kdWarning( mState != Begun, 5006 ) << "KHtmlPartHtmlWriter: write() called in Ended or Queued state!" << endl;
00096 mHtmlPart->write( str );
00097 }
00098
00099 void KHtmlPartHtmlWriter::queue( const QString & str ) {
00100 static const uint chunksize = 16384;
00101 for ( uint pos = 0 ; pos < str.length() ; pos += chunksize )
00102 mHtmlQueue.push_back( str.mid( pos, chunksize ) );
00103 mState = Queued;
00104 }
00105
00106 void KHtmlPartHtmlWriter::flush() {
00107 slotWriteNextHtmlChunk();
00108 }
00109
00110 void KHtmlPartHtmlWriter::slotWriteNextHtmlChunk() {
00111 if ( mHtmlQueue.empty() ) {
00112 mState = Begun;
00113 end();
00114 } else {
00115 mHtmlPart->write( mHtmlQueue.front() );
00116 mHtmlQueue.pop_front();
00117 mHtmlTimer.start( 0, true );
00118 }
00119 }
00120
00121
00122
00123 }
00124
00125 #include "khtmlparthtmlwriter.moc"
This file is part of the documentation for kmail Library Version 3.2.2.