00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00027
00029 #ifndef __BOOLEANTOGGLE_H__
00030 #define __BOOLEANTOGGLE_H__
00031
00032 #include "X3DChildNode.h"
00033 #include "SFBool.h"
00034
00035 namespace H3D {
00036
00048 class H3DAPI_API BooleanToggle : public X3DChildNode {
00049 public:
00050
00053 class H3DAPI_API SetBoolean: public AutoUpdate< SFBool > {
00054 public:
00055
00056 virtual void setValue( const bool &b, int id = 0 ) {
00057 SFBool::setValue( b );
00058 BooleanToggle *bf =
00059 static_cast< BooleanToggle * >( getOwner() );
00060 if( value )
00061 bf->toggle->setValue( !( bf->toggle->getValue() ) );
00062 }
00063 protected:
00064
00065 virtual void update() {
00066 SFBool::update();
00067 BooleanToggle *bf =
00068 static_cast< BooleanToggle * >( getOwner() );
00069 if( value )
00070 bf->toggle->setValue( !( bf->toggle->getValue() ) );
00071 }
00072 };
00073
00074 friend class SetBoolean;
00075
00077 BooleanToggle( Inst< SFNode > _metadata = 0,
00078 Inst< SetBoolean > _set_boolean = 0,
00079 Inst< SFBool > _toggle = 0 );
00080
00086 auto_ptr< SetBoolean > set_boolean;
00087
00094 auto_ptr< SFBool > toggle;
00095
00097 static H3DNodeDatabase database;
00098 };
00099 }
00100
00101 #endif