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

#ifndef _DCCMANAGER_H
#define _DCCMANAGER_H

#include <time.h>

#include <tqobject.h>

#include "dccManagerbase.h"
#include "klistview.h"


class dccManager;
class TQSignal;
class TQObject;

class dccItem : public TQObject,
                public KListViewItem
{
Q_OBJECT
  TQ_OBJECT
public:
    enum dccStatus {
        dccRecving,
	dccOpen,
	dccWaitOnResume,
	dccResumed,
	dccSentOffer,
	dccGotOffer,
        dccSending,
        dccDone,
        dccCancel,
        dccError
    };

    enum dccType {
        dccGet,
        dccChat,
        dccSend
    };

    dccItem( KListView *, dccManager *, enum dccType, const TQString &file, const TQString &who, enum dccStatus, unsigned int size );
    dccItem( KListViewItem *, dccManager *, enum dccType, const TQString &file, const TQString &who, enum dccStatus, unsigned int size );
    virtual ~dccItem();

    void changeStatus(enum dccStatus);
    void setReceivedBytes(int bytes);

    void setWhoPostfix(const TQString &post);
    void changeFilename(const TQString &file);
    void changeWho(const TQString &who);

    const TQString who() { return m_who; }
    const TQString file() { return m_file; }
    enum dccStatus status() { return m_status; }
    enum dccType type() { return m_type; }
    double getPercent() { return m_percent; }

    void doRename();

signals:
    void statusChanged(TQListViewItem *);
    void itemRenamed(dccItem *, TQString oldNick, TQString oldFile);

protected:
    TQString enumToStatus(enum dccStatus);

    virtual void okRename ( int col );
    virtual void cancelRename ( int col );

private:

    dccManager *m_manager;
    TQString m_who;
    TQString m_file;
    TQString m_post;
    int m_percent;
    unsigned int m_size;
    enum dccStatus m_status;
    const enum dccType m_type;
    time_t m_stime;
    time_t m_lasttime;
};


class dccNew;

class dccManager : public dccManagerbase
{
Q_OBJECT
  TQ_OBJECT

public:
    dccManager( TQWidget *parent = 0, const char *name = 0 );
    ~dccManager();

    dccItem *newSendItem(TQString file, TQString who, enum dccItem::dccStatus, unsigned int size);
    dccItem *newGetItem(TQString file, TQString who, enum dccItem::dccStatus, unsigned int size);
    dccItem *newChatItem(TQString who, enum dccItem::dccStatus);

    void doChanged() { emit changed(false, TQString("dcc activity")); };

public slots:
    virtual void kpbNew_clicked();
    virtual void kpbConnect_clicked();
    virtual void kpbResume_clicked();
    virtual void kpbRename_clicked();
    virtual void kpbAbort_clicked();

signals:
    void outputLine(TQCString);
    void changed(bool, TQString);
    virtual void dccConnectClicked(dccItem *);
    virtual void dccResumeClicked(dccItem *);
    virtual void dccRenameClicked(dccItem *);
    virtual void dccAbortClicked(dccItem *);

protected slots:
    virtual void getSelChange(TQListViewItem *);
    virtual void sendSelChange(TQListViewItem *);
    virtual void dccNewAccepted(int type, TQString nick, TQString file);

private:

    KListViewItem *m_getit;
    KListViewItem *m_sendit;
    KListViewItem *m_chatit;

    dccNew *dccNewDialog;
};

#endif