#ifndef KADU_TABBAR_H
#define KADU_TABBAR_H

#include <qtabbar.h>
#include <qpainter.h>

class QToolButton;

/**
	Klasa ta jest odpowiedzialna za obsługę zakładek grup kontaktów.
	\class KaduTabBar
	\brief Zakładki grup.
**/
class KaduTabBar : public QTabBar {
	Q_OBJECT
	public:
		/**
			\fn KaduTabBar(QWidget *parent = 0, const char *name = 0)
			Standardowy konstruktor.
			\param parent rodzic kontrolki.
			\param name nazwa kontrolki.
		**/
		KaduTabBar(QWidget *parent = 0, const char *name = 0);
		~KaduTabBar();

		/**
			\fn void layoutTabs()
			Ustawia zakładki w odpowiedniej pozycji.
		**/
		void layoutTabs();

		/**
			\fn QSize sizeHint() const
			Sugeruje odpowiedni rozmiar zakładek.
			\return sugerowany rozmiar.
		**/
		QSize sizeHint() const;

		/**
			\fn QSize minimumSizeHint() const
			Sugeruje minimalny rozmiar zakładek.
			\return sugerowany rozmiar.
		**/
		QSize minimumSizeHint() const;

		/**
			\fn int insertTab(QTab *newTab, int index = -1)
			Dodaje nową zakładkę.
			\param newTab wskaźnik do obiektu zakładki, którą dodajemy.
			\param index pozycja, w którą ma być wstawiona nowa zakładka. Domyślnie -1 (na końcu).
		**/
		int insertTab(QTab *newTab, int index = -1);

		/**
			\fn void removeTab(QTab *t)
			Usuwa zakładkę.
			\param t wskaźnik do obiektu zakładki, którą usuwamy.
		**/
		void removeTab(QTab *t);

	public slots:

		/**
			\fn void setCurrentTab(QTab *tab)
			Ustawia daną zakładkę jako bierzącą.
			\param tab Wskaźnik do obiektu zakładki, którą ustawiamy.
		**/
		void setCurrentTab(QTab *tab);

	private slots:
		void scrollTabsVert();

	protected:
		/**
			\fn void paint(QPainter *p, QTab *t, bool selected) const
			Rysuje daną zakładkę.
			\param p urządzenie rysujące.
			\param t wskaźnik do obiektu zakładki, którą chcemy rysować.
			\param selected informuje o tym, czy zakładka jest wybraną (bierzącą),
				czy jedną z zakładek zasłoniętych.
		**/
		void paint(QPainter *p, QTab *t, bool selected) const;

		/**
			\fn void updateArrowButtonsVert()
			Odświerza przyciski służące do przewijania listy zakładek (gdy jest długa).
		**/
		void updateArrowButtonsVert();

		/**
			\fn void makeVisibleVert(QTab *t)
			Włącza przyciski służące do przewijania listy zakładekna danej zakładce.
			\param t wskaźnik do obiektu zakładki, na której włączamy przyciski.
			TODO: Nie jestem pewien czy ta metoda dokładnie to robi.
				Niech to poprawi ktoś, kto tą metodę pisał :)
		**/
		void makeVisibleVert(QTab *t);

		/**
			\fn void resizeEvent(QResizeEvent *)
			Metoda obsługująca zdarzenie zmiany rozmiaru paska zakładek.
			\param e wskaźnik obiektu opisującego to zdarzenie.
		**/
		void resizeEvent(QResizeEvent *e);

		/**
			\fn void dragEnterEvent(QDragEnterEvent* e)
			Metoda obsługująca zdarzenie "przeciągnięcia" nad listę zakładek "podniesionego" wcześniej elementu.
			\param e wskaźnik obiektu opisującego to zdarzenie.
		**/
		void dragEnterEvent(QDragEnterEvent* e);

		/**
			\fn void dropEvent(QDropEvent* e)
			Metoda obsługująca zdarzenie "upuszczenia" nad listę zakładek "podniesionego" wcześniej elementu.
			\param e wskaźnik obiektu opisującego to zdarzenie.
		**/
		void dropEvent(QDropEvent* e);

		/**
			\var QPtrList<QTab> *lstatic2
			Lista wskaźników do obiektów zakładek.
		**/
		QPtrList<QTab> *lstatic2;

		/**
			\var bool vertscrolls
			Informuje o tym, czy pasek zakładek jest już na tyle długi, ze trzeba go przewijać.
		**/
		bool vertscrolls;

		/**
			\var QToolButton *upB
			Wskaźnik do obiektu przycisku przewijającego zakładki w górę.
		**/
		QToolButton *upB;

		/**
			\var QToolButton *downB
			Wskaźnik do obiektu przycisku przewijającego zakładki w dół.
		**/
		QToolButton *downB;
};

#endif
