//C++ header - Open Scene Graph - Copyright (C) 1998-2001 Robert Osfield
//Distributed under the terms of the GNU Library General Public License (LGPL)
//as published by the Free Software Foundation.

#ifndef OSGUTIL_GEOSTATE_MANIPULATOR
#define OSGUTIL_GEOSTATE_MANIPULATOR 1

#include <osg/StateSet>

#include <osgUtil/Export>
#include <osgUtil/GUIEventAdapter>
#include <osgUtil/GUIActionAdapter>
#include <osgUtil/GUIEventHandler>

namespace osgUtil{

class OSGUTIL_EXPORT StateSetManipulator : public GUIEventHandler
{
    public:

	StateSetManipulator();
	virtual ~StateSetManipulator();

        /** attach a geostate to the manipulator to be used for specifying view.*/
	virtual void setStateSet(osg::StateSet*);

        /** get the attached a geostate.*/
	virtual osg::StateSet * getStateSet();

        /** get the attached a geostate.*/
	virtual const osg::StateSet * getStateSet() const;

	/** Handle events, return true if handled, false otherwise.*/
	virtual bool handle(const GUIEventAdapter& ea,GUIActionAdapter& us);        

    protected:

	// Reference pointer to a geostate
	osg::ref_ptr<osg::StateSet> _drawState;

        bool _backface;
        bool _lighting;
        bool _texture;
};

}

#endif
