#ifndef KADU_CUSTOM_INPUT_H
#define KADU_CUSTOM_INPUT_H

#include <qmultilineedit.h>

class QKeyEvent;
class QWidget;

/**
	\class CustomInput
	\brief Klasa umożliwiająca wpisywanie wiadomości
**/
class CustomInput : public QMultiLineEdit
{
	Q_OBJECT

	protected:

		bool autosend_enabled;/*!< zmienna informująca czy włączone jest
					automatyczne wysyłanie */
		/**
			\fn virtual void keyPressEvent(QKeyEvent *e)
			Funkcja obsługująca naciśnięcie przycisku
			\param e wskaźnik do obiektu obsługującego klawisze
		**/
		virtual void keyPressEvent(QKeyEvent *e);

		/**
			\fn virtual void keyReleaseEvent(QKeyEvent *e)
			Funkcja obsługująca zwolnienie przycisku
			\param e wskaźnik do obiektu obsługującego klawisze
		**/
		virtual void keyReleaseEvent(QKeyEvent* e);

	public:

		/*! Typ wyliczeniowy mowiący o rodzaju pisanych znaków */
		enum
		{
			KEY_BOLD,/*!< pogrubienie */
			KEY_ITALIC,/*!< kursywa */
			KEY_UNDERLINE/*!< podkreślenie */
		};

		/**
			\fn CustomInput(QWidget* parent = 0, const char* name = 0)
			Konstruktor tworzący obiekt
			i ustawiający odpowiedni styl
			\param parent rodzic okna
			\param name nazwa obiektu
		**/
		CustomInput(QWidget* parent = 0, const char* name = 0);

	public slots:

		/**
			\fn void paste()
			Slot wkleja czysty tekst
		**/
		void paste();

		/**
			\fn void setAutosend(bool on)
			Ustawia/wyłącza automatyczne wysyłanie wiadomości
			\param on zmienna ustawiająca autosend
		**/
		void setAutosend(bool on);

	signals:

		/**
			\fn void sendMessage()
			Sygnał zostaje wysłany kiedy naciśnięto
			klawisz wysłania wiadomości
		**/
		void sendMessage();

		/**
			\fn void specialKeyPressed(int key)
			Sygnał zostaje wysłany gdy naciśnięto specjalny
			klawisz (skrót) odpowiadający np KEY_BOLD
			\param key wartość z typu wyliczeniowego KEY_*
		**/
		void specialKeyPressed(int key);

		/**
			\fn void keyPressed(QKeyEvent* e, CustomInput* sender, bool &handled)
			Dowolny przycisk klawiatury został naciśnięty.
			Przekazany zostaje także obiekt, który wywołał akcję -
			 czyli this
			\param e wskaźnik do obiektu obsługującego klawisze
			\param sender wskaźnik do obiektu, który
			wywołał ten sygnał
			\param handled Slot osbługujący ten sygnał powinien ten parametr ustawić na true,
			jeśli zdarzenie zostało już obsłużone i żadne czynności związane
			ze standardową obsługą kontrolek Qt nie powinny być podjęte.
		**/
		void keyPressed(QKeyEvent* e, CustomInput* sender, bool &handled);

		/**
			\fn void keyReleased(QKeyEvent* e, CustomInput* sender, bool &handled)
			Dowolny przycisk klawiatury został zwolniony.
			Przekazany zostaje także obiekt, który wywołał akcję -
			 czyli this.
			\param e wskaźnik do obiektu obsługującego klawisze
			\param sender wskaźnik do obiektu, który
			wywołał ten sygnał
			\param handled Slot osbługujący ten sygnał powinien ten parametr ustawić na true,
			jeśli zdarzenie zostało już obsłużone i żadne czynności związane
			ze standardową obsługą kontrolek Qt nie powinny być podjęte.
		**/
		void keyReleased(QKeyEvent* e, CustomInput* sender, bool &handled);
};

#endif
