/*
 * This file is a part of VyQChat.
 *
 * Copyright (C) 2002-2004 Pawel Stolowski <yogin@linux.bydg.org>
 *
 * VyQChat is free software; you can redestribute it and/or modify it
 * under terms of GNU General Public License by Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY. See GPL for more details.
 */

#ifndef __ULIST_H
#define __ULIST_H

#include <qlistbox.h>
#include <qmap.h>
#include <qhostaddress.h>
#include "user.h"
#include "global.h"

class QPopupMenu;
class QStringList;

class UsersList: public QListBox
{
	Q_OBJECT
		
	private:
		typedef QMap<QString, User *> UserMap;
		UserMap umap;
		QPopupMenu *menu;
		QPopupMenu *usermenu;

	public:
		enum { ID_MESSAGE = ID_USERSLIST_MENU,
		       ID_REQINFO,
		       ID_PRVCHAT,
		       ID_BEEP,
		       ID_SAYNICK,
		       ID_MASSMESSAGE,
		       ID_REFRESH
		};

	private slots:
		void dummy();
		void popupContextMenu(QListBoxItem *it, const QPoint &p);
		void sendMessage(QListBoxItem *it);
		void menuAction(int i);
		
	signals:
		void sendMessage(const QString &nick);
		void sendMassMessage(const QStringList &nicks);
		void requestInfo(const QString &nick);
		void beep(const QString &nick);
		void privateChat(const QString &nick);
		void refresh();
		void sayNick(const QString &nick);

	public:
		UsersList(QWidget *);
		~UsersList();
		bool exists(const QString &nick) const { return umap.contains(nick); }
		User *getUser(const QString &nick) const { return exists(nick) ? umap[nick] : NULL; }
		bool newNick(const QString &onick, const QString &nnick);
		User *addUser(const QString &nick, char status, const QHostAddress &addr, char gender=0xff);
		bool delUser(const QString &nick);
		QHostAddress getIP(const QString &nick) const { return umap.contains(nick) ? umap[nick]->getIP() : QHostAddress(); }
		char getStatus(const QString &nick) const;
		char getStatus(User *user) const { return user->getStatus(); }
		bool setStatus(const QString &nick, char s);
		bool setStatus(User *user, char s) { return user->setStatus(s); }
		void clear() { umap.clear(); QListBox::clear(); }
		void decDeadCounters();
		int incDeadCounter(const QString &nick) { User *u=getUser(nick); return u!=NULL ? u->incDeadCounter() : -1; }
		QStringList getAllUsers() const;
};

#endif



syntax highlighted by Code2HTML, v. 0.9.1