1 #include <osgGA/Widget>
2 #include <osg/ValueObject>
3 #include <osgDB/ObjectWrapper>
4 #include <osgDB/InputStream>
5 #include <osgDB/OutputStream>
6 
7 
8 struct CreateGraphics : public osgDB::MethodObject
9 {
runCreateGraphics10     virtual bool run(void* objectPtr, osg::Parameters&, osg::Parameters&) const
11     {
12         osgGA::Widget* widget = reinterpret_cast<osgGA::Widget*>(objectPtr);
13         widget->createGraphics();
14         return true;
15     }
16 };
17 
18 struct CreateGraphicsImplementation : public osgDB::MethodObject
19 {
runCreateGraphicsImplementation20     virtual bool run(void* objectPtr, osg::Parameters&, osg::Parameters&) const
21     {
22         osgGA::Widget* widget = reinterpret_cast<osgGA::Widget*>(objectPtr);
23         widget->createGraphicsImplementation();
24         return true;
25     }
26 };
27 
28 struct Enter : public osgDB::MethodObject
29 {
runEnter30     virtual bool run(void* objectPtr, osg::Parameters&, osg::Parameters&) const
31     {
32         osgGA::Widget* widget = reinterpret_cast<osgGA::Widget*>(objectPtr);
33         widget->enter();
34         return true;
35     }
36 };
37 
38 struct EnterImplementation : public osgDB::MethodObject
39 {
runEnterImplementation40     virtual bool run(void* objectPtr, osg::Parameters&, osg::Parameters&) const
41     {
42         osgGA::Widget* widget = reinterpret_cast<osgGA::Widget*>(objectPtr);
43         widget->enterImplementation();
44         return true;
45     }
46 };
47 
48 struct Leave : public osgDB::MethodObject
49 {
runLeave50     virtual bool run(void* objectPtr, osg::Parameters&, osg::Parameters&) const
51     {
52         osgGA::Widget* widget = reinterpret_cast<osgGA::Widget*>(objectPtr);
53         widget->leave();
54         return true;
55     }
56 };
57 
58 struct LeaveImplementation : public osgDB::MethodObject
59 {
runLeaveImplementation60     virtual bool run(void* objectPtr, osg::Parameters&, osg::Parameters&) const
61     {
62         osgGA::Widget* widget = reinterpret_cast<osgGA::Widget*>(objectPtr);
63         widget->leaveImplementation();
64         return true;
65     }
66 };
67 
68 
69 struct Traverse : public osgDB::MethodObject
70 {
runTraverse71     virtual bool run(void* objectPtr, osg::Parameters& inputParameters, osg::Parameters&) const
72     {
73         osgGA::Widget* widget = reinterpret_cast<osgGA::Widget*>(objectPtr);
74         osg::NodeVisitor* nv = (inputParameters.size()>=1) ? dynamic_cast<osg::NodeVisitor*>(inputParameters[0].get()) : 0;
75         if (!nv) return false;
76         widget->traverse(*nv);
77         return true;
78     }
79 };
80 
81 struct TraverseImplementation : public osgDB::MethodObject
82 {
runTraverseImplementation83     virtual bool run(void* objectPtr, osg::Parameters& inputParameters, osg::Parameters&) const
84     {
85         osgGA::Widget* widget = reinterpret_cast<osgGA::Widget*>(objectPtr);
86         osg::NodeVisitor* nv = (inputParameters.size()>=1) ? dynamic_cast<osg::NodeVisitor*>(inputParameters[0].get()) : 0;
87         if (!nv) return false;
88         widget->traverseImplementation(*nv);
89         return true;
90     }
91 };
92 
93 struct Handle : public osgDB::MethodObject
94 {
runHandle95     virtual bool run(void* objectPtr, osg::Parameters& inputParameters, osg::Parameters&) const
96     {
97         osgGA::Widget* widget = reinterpret_cast<osgGA::Widget*>(objectPtr);
98         osgGA::EventVisitor* ev = (inputParameters.size()>=1) ? dynamic_cast<osgGA::EventVisitor*>(inputParameters[0].get()) : 0;
99         osgGA::Event* event = (inputParameters.size()>=2) ? dynamic_cast<osgGA::Event*>(inputParameters[1].get()) : 0;
100         if (!widget || !ev || !event) return false;
101         widget->handle(ev, event);
102         return true;
103     }
104 };
105 
106 struct HandleImplementation : public osgDB::MethodObject
107 {
runHandleImplementation108     virtual bool run(void* objectPtr, osg::Parameters& inputParameters, osg::Parameters&) const
109     {
110         osgGA::Widget* widget = reinterpret_cast<osgGA::Widget*>(objectPtr);
111         osgGA::EventVisitor* ev = (inputParameters.size()>=1) ? dynamic_cast<osgGA::EventVisitor*>(inputParameters[0].get()) : 0;
112         osgGA::Event* event = (inputParameters.size()>=2) ? dynamic_cast<osgGA::Event*>(inputParameters[1].get()) : 0;
113         if (!widget || !ev || !event) return false;
114         widget->handleImplementation(ev, event);
115         return true;
116     }
117 };
118 
119 
120 REGISTER_OBJECT_WRAPPER( Widget,
121                          new osgGA::Widget,
122                          osgGA::Widget,
123                          "osg::Object osg::Node osg::Group osgGA::Widget" )
124 {
125     BEGIN_ENUM_SERIALIZER( FocusBehaviour, FOCUS_FOLLOWS_POINTER );
126         ADD_ENUM_VALUE( CLICK_TO_FOCUS );
127         ADD_ENUM_VALUE( FOCUS_FOLLOWS_POINTER );
128         ADD_ENUM_VALUE( EVENT_DRIVEN_FOCUS_DISABLED );
129     END_ENUM_SERIALIZER();
130 
131     ADD_BOOL_SERIALIZER(HasEventFocus, false);
132 
133     ADD_BOUNDINGBOXF_SERIALIZER(Extents, osg::BoundingBoxf());
134 
135     ADD_METHOD_OBJECT( "createGraphics", CreateGraphics );
136     ADD_METHOD_OBJECT( "createGraphicsImplementation", CreateGraphicsImplementation );
137 
138     ADD_METHOD_OBJECT( "enter", Enter );
139     ADD_METHOD_OBJECT( "enterImplementation", EnterImplementation );
140 
141     ADD_METHOD_OBJECT( "leave", Leave );
142     ADD_METHOD_OBJECT( "leaveImplementation", LeaveImplementation );
143 
144     ADD_METHOD_OBJECT( "traverse", Traverse );
145     ADD_METHOD_OBJECT( "traverseImplementation", TraverseImplementation );
146 
147     ADD_METHOD_OBJECT( "handle", Handle );
148     ADD_METHOD_OBJECT( "handleImplementation", HandleImplementation );
149 
150 }
151