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.
tdenetwork/kopete/protocols/irc/irccontact.h

154 lines
4.6 KiB

/*
irccontact.h - IRC Contact
Copyright (c) 2005 by Tommi Rantala <tommi.rantala@cs.helsinki.fi>
Copyright (c) 2003-2004 by Michel Hermier <michel.hermier@wanadoo.fr>
Copyright (c) 2003 by Jason Keirstead <jason@keirstead.org>
Copyright (c) 2002 by Nick Betcher <nbetcher@kde.org>
Kopete (c) 2002-2005 by the Kopete developers <kopete-devel@kde.org>
*************************************************************************
* *
* 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 IRCCONTACT_H
#define IRCCONTACT_H
#include "kircengine.h"
#include "kircentity.h"
#include "kopetecontact.h"
#include "kopetemessage.h"
#include <qptrlist.h>
#include <qmap.h>
class IRCProtocol;
class IRCAccount;
class IRCContactManager;
namespace KIRC
{
class Engine;
}
namespace Kopete
{
class ChatSession;
class MetaContact;
}
class KopeteView;
class QTextCodec;
/**
* @author Jason Keirstead <jason@keirstead.org>
* @author Michel Hermier <michel.hermier@wanadoo.fr>
*
* This class is the base class for @ref IRCUserContact and @ref IRCChannelContact.
* Common routines and signal connections that are required for both types of
* contacts reside here, to avoid code duplication between these two classes.
*/
class IRCContact
: public Kopete::Contact
{
Q_OBJECT
public:
IRCContact(IRCAccount *account, KIRC::EntityPtr entity, Kopete::MetaContact *metac, const QString& icon = QString::null);
IRCContact(IRCContactManager *contactManager, const QString &nick, Kopete::MetaContact *metac, const QString& icon = QString::null);
virtual ~IRCContact();
IRCAccount *ircAccount() const;
KIRC::Engine *kircEngine() const;
/**
* Sets the nickname of this contact. The nickname is distinct from the displayName
* in case trackNameChanges is disabled.
*/
void setNickName(const QString &nickname);
/**
* Returns the nickname / channel name
*/
const QString &nickName() const { return m_nickName; }
/**
* This function attempts to find the nickname specified within the current chat
* session. Returns a pointer to that IRCUserContact, or 0L if the user does not
* exist in this session. More useful for channels. Calling IRCChannelContact::locateUser()
* for example tells you if a user is in a certain channel.
*/
Kopete::Contact *locateUser( const QString &nickName );
virtual bool isReachable();
/**
* return true if the contact is in a chat. false if the contact is in no chats
* that loop over all manager, and checks the presence of the user
*/
bool isChatting( const Kopete::ChatSession *avoid = 0L ) const;
virtual const QString caption() const;
// virtual const QString formatedName() const;
virtual Kopete::ChatSession *manager(Kopete::Contact::CanCreateFlags = Kopete::Contact::CannotCreate);
virtual void appendMessage( Kopete::Message & );
const QTextCodec *codec();
KopeteView *view();
/**
* We serialise the contactId and the server group in 'contactId'
* so that other IRC programs reading this from KAddressBook have a chance of figuring
* which server the contact relates to
*/
virtual void serialize( QMap<QString, QString> &serializedData, QMap<QString, QString> &addressBookData );
signals:
void destroyed(IRCContact *self);
public slots:
void setCodec( const QTextCodec *codec );
virtual void updateStatus();
protected slots:
virtual void slotSendMsg(Kopete::Message &message, Kopete::ChatSession *);
QStringList sendMessage( const QString &msg );
virtual void chatSessionDestroyed();
void slotNewNickChange( const QString &oldnickname, const QString &newnickname);
void slotUserDisconnected( const QString &nickname, const QString &reason);
virtual void deleteContact();
virtual void privateMessage(IRCContact *from, IRCContact *to, const QString &message);
virtual void initConversation() {};
void receivedMessage( KIRC::Engine::ServerMessageType type,
const KIRC::EntityPtr &from,
const KIRC::EntityPtrList &to,
const QString &msg);
protected:
KIRC::EntityPtr m_entity;
QString m_nickName;
Kopete::ChatSession *m_chatSession;
QPtrList<Kopete::Contact> mMyself;
Kopete::Message::MessageDirection execDir;
};
#endif