#include "tcl_boolvar.h"

const char* TclBoolVar::type="TclBoolVar";

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

TclBoolVar::TclBoolVar(Ptr<TclInterp>& interp):TclVar(interp)
{
//	value=0;
//	Tcl_LinkVar(interp->getInterp(),guid.getId().c_str(),(char*)&value,TCL_LINK_BOOLEAN);
}

void TclBoolVar::set(bool value)
{
	int intValue=value?1:0;
	Tcl_Obj* objValue=Tcl_NewBooleanObj(intValue);
	Tcl_ObjSetVar2(interp->getInterp(), objName, 0, objValue, TCL_GLOBAL_ONLY);
	//update();
}

bool TclBoolVar::get() const
{
	Tcl_Obj* obj=Tcl_ObjGetVar2(interp->getInterp(),objName,0,TCL_GLOBAL_ONLY);

	int intValue;
	Tcl_GetBooleanFromObj(interp->getInterp(),obj,&intValue);

	return (intValue!=0);
}

void TclBoolVar::doSerialize(TiXmlElement& element) const
{
	element.SetAttribute("value",get()?1:0);
}

void TclBoolVar::doDeserialize(const TiXmlElement& element)
{
	int intValue;
	element.Attribute("value",&intValue);
	set(intValue!=0);
}
