/* -*- c++ -*- attachmentlistview.cpp KMail, the KDE mail client. Copyright (c) 2003 Ingo Kloecker This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2.0, as published by the Free Software Foundation. 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, US */ #ifdef HAVE_CONFIG_H #include #endif // my header file #include "attachmentlistview.h" // other KMail headers #include "kmmsgbase.h" #include "kmfolder.h" #include "kmcommands.h" #include "kmmsgdict.h" #include "kmcomposewin.h" // other module headers (none) // other KDE headers #include // other Qt headers #include #include #include #include #include #include // other headers (none) namespace KMail { AttachmentListView::AttachmentListView( KMComposeWin* composer, QWidget* parent, const char* name ) : AttachmentListViewInherited( parent, name ), mComposer( composer ) { setAcceptDrops( true ); } //----------------------------------------------------------------------------- AttachmentListView::~AttachmentListView() { } //----------------------------------------------------------------------------- void AttachmentListView::contentsDragEnterEvent( QDragEnterEvent* e ) { if( e->format( 0 ) && ( e->format( 0 ) == QString( "x-kmail-drag/message" ) ) ) e->accept( true ); else AttachmentListViewInherited::dragEnterEvent( e ); } //----------------------------------------------------------------------------- void AttachmentListView::contentsDragMoveEvent( QDragMoveEvent* e ) { if( e->format( 0 ) && ( e->format( 0 ) == QString( "x-kmail-drag/message" ) ) ) e->accept( true ); else AttachmentListViewInherited::dragMoveEvent( e ); } //----------------------------------------------------------------------------- void AttachmentListView::contentsDropEvent( QDropEvent* e ) { if( e->format( 0 ) && ( e->format( 0 ) == QString( "x-kmail-drag/message" ) ) ) { // Decode the list of serial numbers stored as the drag data QByteArray serNums = e->encodedData( "x-kmail-drag/message" ); QBuffer serNumBuffer( serNums ); serNumBuffer.open( IO_ReadOnly ); QDataStream serNumStream( &serNumBuffer ); unsigned long serNum; KMFolder *folder = 0; int idx; QPtrList messageList; while( !serNumStream.atEnd() ) { KMMsgBase *msgBase = 0; serNumStream >> serNum; kernel->msgDict()->getLocation( serNum, &folder, &idx ); if( folder ) msgBase = folder->getMsgBase( idx ); if( msgBase ) messageList.append( msgBase ); } serNumBuffer.close(); uint identity = folder ? folder->identity() : 0; KMCommand *command = new KMForwardAttachedCommand( mComposer, messageList, identity, mComposer ); command->start(); } else if( KURLDrag::canDecode( e ) ) { KURL::List urlList; if( KURLDrag::decode( e, urlList ) ) { for( KURL::List::Iterator it = urlList.begin(); it != urlList.end(); ++it ) { mComposer->addAttach( *it ); } } } else { AttachmentListViewInherited::dropEvent( e ); } } }; // namespace KMail