Addd method implementation in serializers

This commit is contained in:
Robert Osfield 2014-05-21 16:15:02 +00:00
parent d8adc80c2c
commit 0b5b3213fe
6 changed files with 45 additions and 73 deletions

View File

@ -249,8 +249,6 @@ protected:
typedef CLASS MyClass; \ typedef CLASS MyClass; \
void wrapper_propfunc_##NAME(const char* domain, osgDB::ObjectWrapper* wrapper) void wrapper_propfunc_##NAME(const char* domain, osgDB::ObjectWrapper* wrapper)
#define ADD_METHOD_OBJECT( METHODNAME, METHODOBJECTCLASS ) wrapper->addMethodObject(METHODNAME, new METHODOBJECTCLASS());
class OSGDB_EXPORT RegisterCompressorProxy class OSGDB_EXPORT RegisterCompressorProxy
{ {
public: public:

View File

@ -1703,6 +1703,22 @@ public:
#define REMOVE_SERIALIZER(PROP) \ #define REMOVE_SERIALIZER(PROP) \
wrapper->markSerializerAsRemoved( #PROP ); wrapper->markSerializerAsRemoved( #PROP );
#define ADD_METHOD_OBJECT( METHODNAME, METHODOBJECTCLASS ) wrapper->addMethodObject(METHODNAME, new METHODOBJECTCLASS());
#define ADD_METHOD(METHODNAME) \
{ \
struct MethodCaller : public osgDB::MethodObject \
{ \
virtual bool run(void* objectPtr, osg::Parameters&, osg::Parameters&) const \
{ \
MyClass* obj = reinterpret_cast<MyClass*>(objectPtr); \
obj->METHODNAME(); \
return true; \
} \
}; \
wrapper->addMethodObject(#METHODNAME, new MethodCaller()); \
}
} }
#endif #endif

View File

@ -37,6 +37,13 @@ public:
virtual void enterImplementation(); virtual void enterImplementation();
virtual void leaveImplementation(); virtual void leaveImplementation();
virtual void pressed() { if (!runCallbacks("pressed")) pressedImplementation(); }
virtual void pressedImplementation();
virtual void released() { if (!runCallbacks("released")) releasedImplementation(); }
virtual void releasedImplementation();
protected: protected:
virtual ~PushButton() {} virtual ~PushButton() {}

View File

@ -40,15 +40,13 @@ bool PushButton::handleImplementation(osgGA::EventVisitor* ev, osgGA::Event* eve
case(osgGA::GUIEventAdapter::PUSH): case(osgGA::GUIEventAdapter::PUSH):
if (_buttonSwitch.valid()) if (_buttonSwitch.valid())
{ {
_buttonSwitch->setSingleChildOn(2); pressed();
runCallbacks("pressed");
} }
break; break;
case(osgGA::GUIEventAdapter::RELEASE): case(osgGA::GUIEventAdapter::RELEASE):
if (_buttonSwitch.valid()) if (_buttonSwitch.valid())
{ {
_buttonSwitch->setSingleChildOn(1); released();
runCallbacks("released");
} }
break; break;
default: default:
@ -107,3 +105,13 @@ void PushButton::createGraphicsImplementation()
} }
} }
void PushButton::pressedImplementation()
{
_buttonSwitch->setSingleChildOn(2);
}
void PushButton::releasedImplementation()
{
_buttonSwitch->setSingleChildOn(1);
}

View File

@ -11,4 +11,8 @@ REGISTER_OBJECT_WRAPPER( PushButton,
"osg::Object osg::Node osg::Group osgUI::Widget osgUI::PushButton" ) "osg::Object osg::Node osg::Group osgUI::Widget osgUI::PushButton" )
{ {
ADD_STRING_SERIALIZER( Text, std::string()); ADD_STRING_SERIALIZER( Text, std::string());
ADD_METHOD( pressed );
ADD_METHOD( pressedImplementation );
ADD_METHOD( released );
ADD_METHOD( releasedImplementation );
} }

View File

@ -5,67 +5,6 @@
#include <osgDB/OutputStream> #include <osgDB/OutputStream>
struct CreateGraphics : public osgDB::MethodObject
{
virtual bool run(void* objectPtr, osg::Parameters&, osg::Parameters&) const
{
osgUI::Widget* widget = reinterpret_cast<osgUI::Widget*>(objectPtr);
widget->createGraphics();
return true;
}
};
struct CreateGraphicsImplementation : public osgDB::MethodObject
{
virtual bool run(void* objectPtr, osg::Parameters&, osg::Parameters&) const
{
osgUI::Widget* widget = reinterpret_cast<osgUI::Widget*>(objectPtr);
widget->createGraphicsImplementation();
return true;
}
};
struct Enter : public osgDB::MethodObject
{
virtual bool run(void* objectPtr, osg::Parameters&, osg::Parameters&) const
{
osgUI::Widget* widget = reinterpret_cast<osgUI::Widget*>(objectPtr);
widget->enter();
return true;
}
};
struct EnterImplementation : public osgDB::MethodObject
{
virtual bool run(void* objectPtr, osg::Parameters&, osg::Parameters&) const
{
osgUI::Widget* widget = reinterpret_cast<osgUI::Widget*>(objectPtr);
widget->enterImplementation();
return true;
}
};
struct Leave : public osgDB::MethodObject
{
virtual bool run(void* objectPtr, osg::Parameters&, osg::Parameters&) const
{
osgUI::Widget* widget = reinterpret_cast<osgUI::Widget*>(objectPtr);
widget->leave();
return true;
}
};
struct LeaveImplementation : public osgDB::MethodObject
{
virtual bool run(void* objectPtr, osg::Parameters&, osg::Parameters&) const
{
osgUI::Widget* widget = reinterpret_cast<osgUI::Widget*>(objectPtr);
widget->leaveImplementation();
return true;
}
};
struct Traverse : public osgDB::MethodObject struct Traverse : public osgDB::MethodObject
{ {
virtual bool run(void* objectPtr, osg::Parameters& inputParameters, osg::Parameters&) const virtual bool run(void* objectPtr, osg::Parameters& inputParameters, osg::Parameters&) const
@ -137,14 +76,14 @@ REGISTER_OBJECT_WRAPPER( Widget,
ADD_OBJECT_SERIALIZER( TextSettings, osgUI::TextSettings, NULL ); ADD_OBJECT_SERIALIZER( TextSettings, osgUI::TextSettings, NULL );
ADD_METHOD_OBJECT( "createGraphics", CreateGraphics ); ADD_METHOD( createGraphics );
ADD_METHOD_OBJECT( "createGraphicsImplementation", CreateGraphicsImplementation ); ADD_METHOD( createGraphicsImplementation );
ADD_METHOD_OBJECT( "enter", Enter ); ADD_METHOD( enter );
ADD_METHOD_OBJECT( "enterImplementation", EnterImplementation ); ADD_METHOD( enterImplementation );
ADD_METHOD_OBJECT( "leave", Leave ); ADD_METHOD( leave );
ADD_METHOD_OBJECT( "leaveImplementation", LeaveImplementation ); ADD_METHOD( leaveImplementation );
ADD_METHOD_OBJECT( "traverse", Traverse ); ADD_METHOD_OBJECT( "traverse", Traverse );
ADD_METHOD_OBJECT( "traverseImplementation", TraverseImplementation ); ADD_METHOD_OBJECT( "traverseImplementation", TraverseImplementation );