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