/*
    This file is part of libtdepim.

    Copyright (c) 2003 Don Sanders <sanders@kde.org>
    Copyright (c) 2005 George Staikos <staikos@kde.org.

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.

    This library 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
    Library General Public License for more details.

    You should have received a copy of the GNU Library General Public License
    along with this library; see the file COPYING.LIB.  If not, write to
    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
    Boston, MA 02110-1301, USA.
*/
#ifndef maillistdrag_h
#define maillistdrag_h

#include "tqdragobject.h"
#include "tqvaluelist.h"
#include "tqglobal.h"
#include "time.h"

#include <tdepimmacros.h>

/**
 * TDEPIM classes for drag and drop of mails
 * 
 * // Code example for drag and drop enabled widget
 *
 * void SomeWidget::contentsDropEvent(TQDropEvent *e)
 * {
 *    if (e->provides(MailListDrag::format())) {
 *	MailList mailList;
 *	MailListDrag::decode( e, mailList );
 *      ...
 **/

namespace KPIM {

class KDE_EXPORT MailSummary 
{
public:
    MailSummary( TQ_UINT32 serialNumber, TQString messageId, TQString subject, 
		 TQString from, TQString to, time_t date );
    MailSummary() {}
    ~MailSummary() {}

    /*** Set fields for this mail summary  ***/
    void set( TQ_UINT32, TQString, TQString, TQString, TQString, time_t );

    /*** KMail unique identification number ***/
    TQ_UINT32 serialNumber() const;

    /*** MD5 checksum of message identification string ***/
    TQString messageId();

    /*** Subject of the message including prefixes ***/
    TQString subject();

    /*** Simplified from address ***/
    TQString from();

    /** Simplified to address ***/
    TQString to();

    /*** Date the message was sent ***/
    time_t date();

private:
    TQ_UINT32 mSerialNumber;
    TQString mMessageId, mSubject, mFrom, mTo;
    time_t mDate;
};

// List of mail summaries
typedef TQValueList<MailSummary> MailList;

// Object for the drag object to call-back for message fulltext
class KDE_EXPORT MailTextSource {
public:
    MailTextSource() {}
    virtual ~MailTextSource() {}

    virtual TQCString text(TQ_UINT32 serialNumber) const = 0;
};

// Drag and drop object for mails
class KDE_EXPORT MailListDrag : public TQStoredDrag
{
public:
    // Takes ownership of "src" and deletes it when done
    MailListDrag( MailList, TQWidget * parent = 0, MailTextSource *src = 0 );
    ~MailListDrag();

    const char *format(int i) const;

    bool provides(const char *mimeType) const;

    TQByteArray encodedData(const char *) const;

    /* Reset the list of mail summaries */
    void setMailList( MailList );

    /* The format for this drag - "x-kmail-drag/message-list" */
    static const char* format();
    
    /* Returns TRUE if the information in e can be decoded into a TQString;
       otherwsie returns FALSE */
    static bool canDecode( TQMimeSource* e );

    /* Attempts to decode the dropped information;
       Returns TRUE if successful; otherwise return false */
    static bool decode( TQDropEvent* e, MailList& s );

    /* Attempts to decode the serialNumbers of the dropped information;
       Returns TRUE if successful; otherwise return false */
    static bool decode( TQDropEvent* e, TQByteArray& a );

    /* Attempts to decode the encoded MailList;
       Returns TRUE if successful; otherwise return false */
    static bool decode( TQByteArray& a, MailList& s );

private:
    MailTextSource *_src;
};

}
#endif /*maillistdrag_h*/