1 #include <osgUI/Widget> 2 #include <osg/ValueObject> 3 #include <osgDB/ObjectWrapper> 4 #include <osgDB/InputStream> 5 #include <osgDB/OutputStream> 6 7 8 struct Traverse : public osgDB::MethodObject 9 { runTraverse10 virtual bool run(void* objectPtr, osg::Parameters& inputParameters, osg::Parameters&) const 11 { 12 osgUI::Widget* widget = reinterpret_cast<osgUI::Widget*>(objectPtr); 13 osg::NodeVisitor* nv = (inputParameters.size()>=1) ? dynamic_cast<osg::NodeVisitor*>(inputParameters[0].get()) : 0; 14 if (!nv) return false; 15 widget->traverse(*nv); 16 return true; 17 } 18 }; 19 20 struct TraverseImplementation : public osgDB::MethodObject 21 { runTraverseImplementation22 virtual bool run(void* objectPtr, osg::Parameters& inputParameters, osg::Parameters&) const 23 { 24 osgUI::Widget* widget = reinterpret_cast<osgUI::Widget*>(objectPtr); 25 osg::NodeVisitor* nv = (inputParameters.size()>=1) ? dynamic_cast<osg::NodeVisitor*>(inputParameters[0].get()) : 0; 26 if (!nv) return false; 27 widget->traverseImplementation(*nv); 28 return true; 29 } 30 }; 31 32 struct Handle : public osgDB::MethodObject 33 { runHandle34 virtual bool run(void* objectPtr, osg::Parameters& inputParameters, osg::Parameters&) const 35 { 36 osgUI::Widget* widget = reinterpret_cast<osgUI::Widget*>(objectPtr); 37 osgGA::EventVisitor* ev = (inputParameters.size()>=1) ? dynamic_cast<osgGA::EventVisitor*>(inputParameters[0].get()) : 0; 38 osgGA::Event* event = (inputParameters.size()>=2) ? dynamic_cast<osgGA::Event*>(inputParameters[1].get()) : 0; 39 if (!widget || !ev || !event) return false; 40 widget->handle(ev, event); 41 return true; 42 } 43 }; 44 45 struct HandleImplementation : public osgDB::MethodObject 46 { runHandleImplementation47 virtual bool run(void* objectPtr, osg::Parameters& inputParameters, osg::Parameters&) const 48 { 49 osgUI::Widget* widget = reinterpret_cast<osgUI::Widget*>(objectPtr); 50 osgGA::EventVisitor* ev = (inputParameters.size()>=1) ? dynamic_cast<osgGA::EventVisitor*>(inputParameters[0].get()) : 0; 51 osgGA::Event* event = (inputParameters.size()>=2) ? dynamic_cast<osgGA::Event*>(inputParameters[1].get()) : 0; 52 if (!widget || !ev || !event) return false; 53 widget->handleImplementation(ev, event); 54 return true; 55 } 56 }; 57 58 59 REGISTER_OBJECT_WRAPPER( Widget, 60 new osgUI::Widget, 61 osgUI::Widget, 62 "osg::Object osg::Node osg::Group osgUI::Widget" ) 63 { 64 BEGIN_ENUM_SERIALIZER( FocusBehaviour, FOCUS_FOLLOWS_POINTER ); 65 ADD_ENUM_VALUE( CLICK_TO_FOCUS ); 66 ADD_ENUM_VALUE( FOCUS_FOLLOWS_POINTER ); 67 ADD_ENUM_VALUE( EVENT_DRIVEN_FOCUS_DISABLED ); 68 END_ENUM_SERIALIZER(); 69 70 ADD_BOOL_SERIALIZER(HasEventFocus, false); 71 72 ADD_MAP_SERIALIZER(GraphicsSubgraphMap, osgUI::Widget::GraphicsSubgraphMap, osgDB::BaseSerializer::RW_INT, osgDB::BaseSerializer::RW_OBJECT); 73 SET_USAGE( osgDB::BaseSerializer::GET_SET_PROPERTY); 74 75 ADD_OBJECT_SERIALIZER( WidgetStateSet, osg::StateSet, NULL ); 76 SET_USAGE( osgDB::BaseSerializer::GET_SET_PROPERTY); 77 78 ADD_BOUNDINGBOXF_SERIALIZER(Extents, osg::BoundingBoxf()); 79 80 ADD_OBJECT_SERIALIZER( FrameSettings, osgUI::FrameSettings, NULL ); 81 ADD_OBJECT_SERIALIZER( AlignmentSettings, osgUI::AlignmentSettings, NULL ); 82 ADD_OBJECT_SERIALIZER( TextSettings, osgUI::TextSettings, NULL ); 83 84 ADD_BOOL_SERIALIZER(Visible, true); 85 ADD_BOOL_SERIALIZER(Enabled, true); 86 87 ADD_METHOD( createGraphics ); 88 ADD_METHOD( createGraphicsImplementation ); 89 90 ADD_METHOD( enter ); 91 ADD_METHOD( enterImplementation ); 92 93 ADD_METHOD( leave ); 94 ADD_METHOD( leaveImplementation ); 95 96 ADD_METHOD_OBJECT( "traverse", Traverse ); 97 ADD_METHOD_OBJECT( "traverseImplementation", TraverseImplementation ); 98 99 ADD_METHOD_OBJECT( "handle", Handle ); 100 ADD_METHOD_OBJECT( "handleImplementation", HandleImplementation ); 101 102 } 103