diff options
author | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2013-01-26 13:17:50 -0600 |
---|---|---|
committer | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2013-01-26 13:17:50 -0600 |
commit | b363d2579af0a11b77e698aed2e1021c2233b644 (patch) | |
tree | f4a47b87354b7a6a3b266c8121bd8ddaeb7accaa /kmail/tdehtmlparthtmlwriter.cpp | |
parent | 61bddfe3a7226b18c68a76124b727c736f431688 (diff) | |
download | tdepim-b363d2579af0a11b77e698aed2e1021c2233b644.tar.gz tdepim-b363d2579af0a11b77e698aed2e1021c2233b644.zip |
Rename a number of libraries and executables to avoid conflicts with KDE4
Diffstat (limited to 'kmail/tdehtmlparthtmlwriter.cpp')
-rw-r--r-- | kmail/tdehtmlparthtmlwriter.cpp | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/kmail/tdehtmlparthtmlwriter.cpp b/kmail/tdehtmlparthtmlwriter.cpp new file mode 100644 index 000000000..7321e1285 --- /dev/null +++ b/kmail/tdehtmlparthtmlwriter.cpp @@ -0,0 +1,154 @@ +/* -*- c++ -*- + tdehtmlparthtmlwriter.cpp + + This file is part of KMail, the KDE mail client. + Copyright (c) 2003 Marc Mutz <mutz@kde.org> + + KMail is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License, version 2, as + published by the Free Software Foundation. + + KMail is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the TQt library by Trolltech AS, Norway (or with modified versions + of TQt that use the same license as TQt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + TQt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#include <config.h> + +#include "tdehtmlparthtmlwriter.h" + +#include <kdebug.h> +#include <tdehtml_part.h> +#include <tdehtmlview.h> + +#include <dom/dom_string.h> +#include <dom/html_document.h> +#include <dom/html_image.h> +#include <dom/html_misc.h> + +#include <cassert> + +namespace KMail { + + KHtmlPartHtmlWriter::KHtmlPartHtmlWriter( KHTMLPart * part, + TQObject * parent, const char * name ) + : TQObject( parent, name ), HtmlWriter(), + mHtmlPart( part ), mHtmlTimer( 0, "mHtmlTimer" ), mState( Ended ) + { + assert( part ); + connect( &mHtmlTimer, TQT_SIGNAL(timeout()), TQT_SLOT(slotWriteNextHtmlChunk()) ); + } + + KHtmlPartHtmlWriter::~KHtmlPartHtmlWriter() { + + } + + void KHtmlPartHtmlWriter::begin( const TQString & css ) { + if ( mState != Ended ) { + kdWarning( 5006 ) << "KHtmlPartHtmlWriter: begin() called on non-ended session!" << endl; + reset(); + } + + mEmbeddedPartMap.clear(); + + // clear the widget: + mHtmlPart->view()->setUpdatesEnabled( false ); + mHtmlPart->view()->viewport()->setUpdatesEnabled( false ); + static_cast<TQScrollView *>(mHtmlPart->widget())->ensureVisible( 0, 0 ); + + mHtmlPart->begin( KURL( "file:/" ) ); + if ( !css.isEmpty() ) + mHtmlPart->setUserStyleSheet( css ); + mState = Begun; + } + + void KHtmlPartHtmlWriter::end() { + kdWarning( mState != Begun, 5006 ) << "KHtmlPartHtmlWriter: end() called on non-begun or queued session!" << endl; + mHtmlPart->end(); + + resolveCidUrls(); + + mHtmlPart->view()->viewport()->setUpdatesEnabled( true ); + mHtmlPart->view()->setUpdatesEnabled( true ); + mHtmlPart->view()->viewport()->repaint( false ); + mState = Ended; + } + + void KHtmlPartHtmlWriter::reset() { + if ( mState != Ended ) { + mHtmlTimer.stop(); + mHtmlQueue.clear(); + mState = Begun; // don't run into end()'s warning + end(); + } + mState = Ended; + } + + void KHtmlPartHtmlWriter::write( const TQString & str ) { + kdWarning( mState != Begun, 5006 ) << "KHtmlPartHtmlWriter: write() called in Ended or Queued state!" << endl; + mHtmlPart->write( str ); + } + + void KHtmlPartHtmlWriter::queue( const TQString & str ) { + static const uint chunksize = 16384; + for ( uint pos = 0 ; pos < str.length() ; pos += chunksize ) + mHtmlQueue.push_back( str.mid( pos, chunksize ) ); + mState = Queued; + } + + void KHtmlPartHtmlWriter::flush() { + slotWriteNextHtmlChunk(); + } + + void KHtmlPartHtmlWriter::slotWriteNextHtmlChunk() { + if ( mHtmlQueue.empty() ) { + mState = Begun; // don't run into end()'s warning + end(); + } else { + mHtmlPart->write( mHtmlQueue.front() ); + mHtmlQueue.pop_front(); + mHtmlTimer.start( 0, true ); + } + } + + void KHtmlPartHtmlWriter::embedPart( const TQCString & contentId, + const TQString & contentURL ) { + mEmbeddedPartMap[TQString(contentId)] = contentURL; + } + + void KHtmlPartHtmlWriter::resolveCidUrls() + { + DOM::HTMLDocument document = mHtmlPart->htmlDocument(); + DOM::HTMLCollection images = document.images(); + for ( DOM::Node node = images.firstItem(); !node.isNull(); node = images.nextItem() ) { + DOM::HTMLImageElement image( node ); + KURL url( image.src().string() ); + if ( url.protocol() == "cid" ) { + EmbeddedPartMap::const_iterator it = mEmbeddedPartMap.find( url.path() ); + if ( it != mEmbeddedPartMap.end() ) { + kdDebug(5006) << "Replacing " << url.prettyURL() << " by " << it.data() << endl; + image.setSrc( it.data() ); + } + } + } + } + +} // namespace KMail + +#include "tdehtmlparthtmlwriter.moc" |