#ifndef KADU_USERINFO_H
#define KADU_USERINFO_H

#include <qhbox.h>
#include <qvaluelist.h>

#include "userlistelement.h"
#include "misc.h"

class LayoutHelper;
class QCheckBox;
class QDns;
class QLineEdit;
class QPushButton;
class QScrollView;
class QTabWidget;
class QVBox;
class QVGroupBox;

/**
	Klasa ta reprezentuje okno, z którym mamy do czynienia podczas dodawania nowego kontaktu,
	lub podczas edycji danych istniejącego już kontaktu.
	\class UserInfo
	\brief Okno dialogowe pokazujące informacje o wybranym kontakcie
**/
class UserInfo : public QHBox
{
	Q_OBJECT
	public:
		/**
			\var static CreateNotifier createNotifier
			Statyczny obiekt wysyłający sygnał CreateNotifier::objectCreated
			jeśli powstanie nowa instancja okienka.
		**/
		static CreateNotifier createNotifier;

		/**
			\fn UserInfo(const QString &altnick, bool addUser = false, QDialog* parent=0, const char *name=0)
			Konstruktor tworzący okno dialogowe z informacjami o danym kontakcie.
			\param altnick pseudonim kontaktu wyświetlany na liście.
			\param addUser TRUE gdy dodajemy kontakt, FALSE gdy edytujemy dane istniejącego. Domyślnie FALSE.
			\param parent wskaźnik do obiektu stanowiącego rodzica. Domyślnie 0.
			\param name nazwa kontrolki. Domyślnie 0.
		**/
		UserInfo(UserListElement user, QWidget* parent = 0, const char *name = 0);
		~UserInfo();

		QTabWidget *tabs() {return tw_main;}
		UserListElement user() const {return User;}
		static bool acceptableGroupName(const QString &groupName);

	private:
		UserListElement User;
		QLineEdit *e_firstname;
		QLineEdit *e_lastname;
		QLineEdit *e_nickname;
		QLineEdit *e_altnick;
		QLineEdit *e_mobile;
		QLineEdit *e_uin;
		QLineEdit *e_addr;
		QLineEdit *e_ver;
		QLineEdit *e_email;
		QLineEdit *e_dnsname;
		QCheckBox *c_blocking;
		QCheckBox *c_offtouser;
		QCheckBox *c_notify;
		QPushButton *pb_addapply;
		QTabWidget *tw_main;
		QVGroupBox *vgb_general;
		QDns *dns;
		QScrollView* scrollView;

		QValueList<QCheckBox *> groups;
		QValueList<QCheckBox *> hiddenCheckBoxes;
		QLineEdit *newGroup;
		QVBox *groupsBox;
		LayoutHelper *layoutHelper;

		QMap <QString, QLabel *> pixmapLabels;

		void keyPressEvent(QKeyEvent *);

	protected:
		/**
			\fn void setupTab1()
			Tworzy pierwszą zakładkę.
		**/
		void setupTab1();

		/**
			\fn void setupTab2()
			Tworzy drugą zakładkę.
		**/
		void setupTab2();

		/**
			\fn void setupTab3()
			Tworzy trzecią zakładkę.
		**/
		void setupTab3();

		virtual void resizeEvent(QResizeEvent *);

	public slots:
		/**
			\fn void updateUserlist()
			Wciśnięcie przycisku Dodaj/Uaktualnij
		**/
		void updateUserlist();

	private slots:
		/**
			\fn void resultsReady()
			Ustawia wartość pola DNS na znalezioną nazwę domeny.
		**/
		void resultsReady();

		/**
			\fn void newGroupClicked()
			wciśnięto przycisk tworzenia nowej grupy
		**/
		void newGroupClicked();

		/**
			\fn void scrollToBottom()
			po dodaniu nowej grupy przewija listę grup aby dodana była widoczna
		**/
		void scrollToBottom();
		
		/**
			void selectIcon()
			wciśnięto przycisk dodania ikony dla grupy
		**/
		void selectIcon();

		/**
			void deleteIcon()
			wciśnięto przycisk usunięcia ikony grupy
		**/
		void deleteIcon();
	signals:
		void updateClicked(UserInfo *);
};

#endif
