#include "tk_label.h"

const Ptr<TkOptionDef> TkLabel::OPT_ACTIVEBACKGROUND=new TkOptionDef("activebackground",TkColorOption::type);
const Ptr<TkOptionDef> TkLabel::OPT_ACTIVEFOREGROUND=new TkOptionDef("activeforeground",TkColorOption::type);
const Ptr<TkOptionDef> TkLabel::OPT_ANCHOR=new TkOptionDef("anchor",TkAnchorOption::type);
const Ptr<TkOptionDef> TkLabel::OPT_BACKGROUND=new TkOptionDef("background",TkColorOption::type);
const Ptr<TkOptionDef> TkLabel::OPT_BITMAP=0;
const Ptr<TkOptionDef> TkLabel::OPT_BORDERWIDTH=new TkOptionDef("borderwidth",TkIntOption::type);
const Ptr<TkOptionDef> TkLabel::OPT_COMPOUND=new TkOptionDef("compound",TkCompoundOption::type);
const Ptr<TkOptionDef> TkLabel::OPT_CURSOR=0;
const Ptr<TkOptionDef> TkLabel::OPT_DISABLEDFOREGROUND=new TkOptionDef("disabledforeground",TkColorOption::type);
const Ptr<TkOptionDef> TkLabel::OPT_FONT=0;
const Ptr<TkOptionDef> TkLabel::OPT_FOREGROUND=new TkOptionDef("foreground",TkColorOption::type);
const Ptr<TkOptionDef> TkLabel::OPT_HEIGHT=new TkOptionDef("height",TkIntOption::type);
const Ptr<TkOptionDef> TkLabel::OPT_HIGHLIGHTBACKGROUND=new TkOptionDef("highlightbackground",TkColorOption::type);
const Ptr<TkOptionDef> TkLabel::OPT_HIGHLIGHTCOLOR=new TkOptionDef("highlightcolor",TkColorOption::type);
const Ptr<TkOptionDef> TkLabel::OPT_HIGHLIGHTTHICKNESS=new TkOptionDef("highlightthickness",TkIntOption::type);
const Ptr<TkOptionDef> TkLabel::OPT_IMAGE=0;
const Ptr<TkOptionDef> TkLabel::OPT_JUSTIFY=new TkOptionDef("justify",TkJustifyOption::type);
const Ptr<TkOptionDef> TkLabel::OPT_PADX=new TkOptionDef("padx",TkIntOption::type);
const Ptr<TkOptionDef> TkLabel::OPT_PADY=new TkOptionDef("pady",TkIntOption::type);
const Ptr<TkOptionDef> TkLabel::OPT_RELIEF=new TkOptionDef("relief",TkReliefOption::type);
const Ptr<TkOptionDef> TkLabel::OPT_STATE=new TkOptionDef("state",TkStateOption::type);
const Ptr<TkOptionDef> TkLabel::OPT_TAKEFOCUS=0;
const Ptr<TkOptionDef> TkLabel::OPT_TEXT=new TkOptionDef("text",TkStringOption::type);
const Ptr<TkOptionDef> TkLabel::OPT_TEXTVARIABLE=0;
const Ptr<TkOptionDef> TkLabel::OPT_UNDERLINE=0;
const Ptr<TkOptionDef> TkLabel::OPT_WIDTH=new TkOptionDef("width",TkIntOption::type);
const Ptr<TkOptionDef> TkLabel::OPT_WRAPLENGTH=0;

const Ptr<TkOptionDef> TkLabel::optAll[]=
{
	TkLabel::OPT_ACTIVEBACKGROUND,
	TkLabel::OPT_ACTIVEFOREGROUND,
	TkLabel::OPT_ANCHOR,
	TkLabel::OPT_BACKGROUND,
	TkLabel::OPT_BITMAP,
	TkLabel::OPT_BORDERWIDTH,
	TkLabel::OPT_COMPOUND,
	TkLabel::OPT_CURSOR,
	TkLabel::OPT_DISABLEDFOREGROUND,
	TkLabel::OPT_FONT,
	TkLabel::OPT_FOREGROUND,
	TkLabel::OPT_HEIGHT,
	TkLabel::OPT_HIGHLIGHTBACKGROUND,
	TkLabel::OPT_HIGHLIGHTCOLOR,
	TkLabel::OPT_HIGHLIGHTTHICKNESS,
	TkLabel::OPT_IMAGE,
	TkLabel::OPT_JUSTIFY,
	TkLabel::OPT_PADX,
	TkLabel::OPT_PADY,
	TkLabel::OPT_RELIEF,
	TkLabel::OPT_TAKEFOCUS,
	TkLabel::OPT_TEXT,
	TkLabel::OPT_TEXTVARIABLE,
	TkLabel::OPT_UNDERLINE,
	TkLabel::OPT_WIDTH,
	TkLabel::OPT_WRAPLENGTH
};

const char* TkLabel::type="TkLabel";
const char* TkLabel::tkClass="label";

const Ptr<TkOptionDef>* TkLabel::getOptionAll() const
{
	return TkLabel::optAll;
}

const char* TkLabel::getType() const
{
	return TkLabel::type;
}

const char* TkLabel::getTkClass() const
{
	return TkLabel::tkClass;
}

void TkLabel::doSerialize(TiXmlElement& element) const
{
	TkBase::doSerialize(element);
	
	element.SetAttribute("text",getText().c_str());
}

void TkLabel::doDeserialize(const TiXmlElement& element)
{
	TkBase::doDeserialize(element);
    
	setText(element.Attribute("text"));
}

TObject* TkLabel::clone()
{
	TkBase* obj=new TkLabel(interp);

	baseClone(obj);

	return obj;
}

TkLabel::TkLabel(Ptr<TclInterp>& interp):TkBase(interp)
{
}

TkLabel::TkLabel(Ptr<TclInterp>& interp,const string& text):TkBase(interp)
{
	setText(text);
}

TkLabel::TkLabel(Ptr<TclInterp>& interp,const string& text,TkAnchorOption::opts anchor):TkBase(interp)
{
	setText(text);
	setOption(TkLabel::OPT_ANCHOR,new TkAnchorOption(anchor));
}

void TkLabel::setEnabled(bool value)
{
	if (value)
		setOption(TkLabel::OPT_STATE,new TkStateOption(TkStateOption::normal));
	else
		setOption(TkLabel::OPT_STATE,new TkStateOption(TkStateOption::disabled));	
}

bool TkLabel::isEnabled() const
{
	const string enabled=getStrOption(TkLabel::OPT_STATE);
	if (enabled=="disabled") return false;
	return true;
}

void TkLabel::setBackgroundColor(TkColorOption* color)
{
	setOption(OPT_BACKGROUND,color);
}

Ptr<TkColorOption>& TkLabel::getBackgroundColor() const
{
	TkColorOption* colorOption=new TkColorOption();
	
	colorOption->fromObject(getOption(OPT_BACKGROUND));
	return *(new Ptr<TkColorOption>(colorOption));
}


