#ifndef _TK_BUTTON_H_
#define _TK_BUTTON_H_

#include "tk_base.h"

/**
 * \brief Represent "button" widget
 *
 * \date 01-12-2006
 *
 * \author Ondrej Svejdar
 *
 * \todo 
 *
 * \bug 
 *
 */
class TkButton:public TkBase,public IStateable,public ITextable
{
protected:
	void doSerialize(TiXmlElement& element) const;
	void doDeserialize(const TiXmlElement& element);
public:
	static TXmlObject* newObject()
	{
		return new TkButton(TclInterp::defaultInterp);
	}

	const static Ptr<TkOptionDef> OPT_ACTIVEBACKGROUND ;
	const static Ptr<TkOptionDef> OPT_ACTIVEFOREGROUND ;
	const static Ptr<TkOptionDef> OPT_ANCHOR ;
	const static Ptr<TkOptionDef> OPT_BACKGROUND ;
	const static Ptr<TkOptionDef> OPT_BITMAP ;
	const static Ptr<TkOptionDef> OPT_BORDERWIDTH ;
	const static Ptr<TkOptionDef> OPT_COMMAND ;
	const static Ptr<TkOptionDef> OPT_COMPOUND ;
	const static Ptr<TkOptionDef> OPT_CURSOR ;
	const static Ptr<TkOptionDef> OPT_DEFAULT ;
	const static Ptr<TkOptionDef> OPT_DISABLEDFOREGROUND ;
	const static Ptr<TkOptionDef> OPT_FONT ;
	const static Ptr<TkOptionDef> OPT_FOREGROUND ;
	const static Ptr<TkOptionDef> OPT_HEIGHT ;
	const static Ptr<TkOptionDef> OPT_HIGHLIGHTBACKGROUND ;
	const static Ptr<TkOptionDef> OPT_HIGHLIGHTCOLOR ;
	const static Ptr<TkOptionDef> OPT_HIGHLIGHTTHICKNESS ;
	const static Ptr<TkOptionDef> OPT_IMAGE;
	const static Ptr<TkOptionDef> OPT_JUSTIFY ;
	const static Ptr<TkOptionDef> OPT_PADX ;
	const static Ptr<TkOptionDef> OPT_PADY ;
	const static Ptr<TkOptionDef> OPT_RELIEF;
	const static Ptr<TkOptionDef> OPT_REPEATDELAY ;
	const static Ptr<TkOptionDef> OPT_REPEATINTERVAL ;
	const static Ptr<TkOptionDef> OPT_STATE ;
	const static Ptr<TkOptionDef> OPT_TAKEFOCUS ;
	const static Ptr<TkOptionDef> OPT_TEXT ;
	const static Ptr<TkOptionDef> OPT_UNDERLINE ;
	const static Ptr<TkOptionDef> OPT_WIDTH;
	const static Ptr<TkOptionDef> OPT_WRAPLENGTH ;

	const static Ptr<TkOptionDef> optAll[];
	const static char* type;
	const static char* tkClass;

	const Ptr<TkOptionDef>* getOptionAll() const;
	const char* getType() const;
	const char* getTkClass() const;

	TObject* clone();

	TkButton(Ptr<TclInterp>& interp);
	TkButton(Ptr<TclInterp>& interp,const string& text);
	
	void setText(const string& text);
	const string& getText() const;

	void setEnabled(bool value);
	bool isEnabled() const;

	void setBackgroundColor(TkColorOption* color);
	Ptr<TkColorOption>& getBackgroundColor() const;
};

#endif/*_TK_BUTTON_H_*/
