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/kmail/attachmentlistview.cpp

147 lines
3.8 KiB

/* -*- c++ -*-
attachmentlistview.cpp
KMail, the KDE mail client.
Copyright (c) 2003 Ingo Kloecker <kloecker@kde.org>
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, US
*/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
// my header file
#include "attachmentlistview.h"
// other KMail headers
#include "kmmsgbase.h"
#include "kmfolder.h"
#include "kmcommands.h"
#include "kmmsgdict.h"
#include "composer.h"
// other module headers
#include <maillistdrag.h>
using KPIM::MailListDrag;
// other KDE headers
#include <kurldrag.h>
// other Qt headers
#include <qevent.h>
#include <qcstring.h>
#include <qbuffer.h>
#include <qptrlist.h>
#include <qdatastream.h>
#include <qstring.h>
// other headers (none)
namespace KMail {
AttachmentListView::AttachmentListView( KMail::Composer * composer,
QWidget* parent,
const char* name )
: KListView( parent, name ),
mComposer( composer )
{
setAcceptDrops( true );
setDragEnabled( true );
}
//-----------------------------------------------------------------------------
AttachmentListView::~AttachmentListView()
{
}
//-----------------------------------------------------------------------------
void AttachmentListView::contentsDragEnterEvent( QDragEnterEvent* e )
{
if( e->provides( MailListDrag::format() ) || KURLDrag::canDecode( e ) )
e->accept( true );
else
KListView::dragEnterEvent( e );
}
//-----------------------------------------------------------------------------
void AttachmentListView::contentsDragMoveEvent( QDragMoveEvent* e )
{
if( e->provides( MailListDrag::format() ) || KURLDrag::canDecode( e ) )
e->accept( true );
else
KListView::dragMoveEvent( e );
}
//-----------------------------------------------------------------------------
void AttachmentListView::contentsDropEvent( QDropEvent* e )
{
if( e->provides( MailListDrag::format() ) ) {
// Decode the list of serial numbers stored as the drag data
QByteArray serNums;
MailListDrag::decode( e, serNums );
QBuffer serNumBuffer( serNums );
serNumBuffer.open( IO_ReadOnly );
QDataStream serNumStream( &serNumBuffer );
Q_UINT32 serNum;
KMFolder *folder = 0;
int idx;
QPtrList<KMMsgBase> messageList;
while( !serNumStream.atEnd() ) {
KMMsgBase *msgBase = 0;
serNumStream >> serNum;
KMMsgDict::instance()->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 {
KListView::dropEvent( e );
}
}
//-----------------------------------------------------------------------------
void AttachmentListView::keyPressEvent( QKeyEvent * e )
{
if ( e->key() == Key_Delete ) {
emit attachmentDeleted();
}
}
/*virtual*/
void AttachmentListView::startDrag()
{
emit dragStarted();
}
} // namespace KMail
#include "attachmentlistview.moc"