From 57a42aac396cf0fe0e5dd0671ba7182f0b942bd3 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Tue, 9 Sep 2014 15:14:35 +0000 Subject: [PATCH] Moved the diaglog title bar widgets into the Widget::GraphicsSubgraph map to avoid them poluting the Dialog's children list and to prevent them from being serialized. git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/trunk@14441 16af8721-9629-0410-8352-f15c8da7e697 --- include/osgUI/Callbacks | 8 +++++++- src/osgUI/Callbacks.cpp | 8 +++++++- src/osgUI/Dialog.cpp | 15 +++++++++++++-- src/osgUI/Widget.cpp | 14 ++++++++++++++ 4 files changed, 41 insertions(+), 4 deletions(-) diff --git a/include/osgUI/Callbacks b/include/osgUI/Callbacks index b82060d8d..c1ab3df81 100644 --- a/include/osgUI/Callbacks +++ b/include/osgUI/Callbacks @@ -18,6 +18,7 @@ #include #include +#include namespace osgUI { @@ -26,14 +27,19 @@ namespace osgUI class OSGUI_EXPORT CloseCallback : public osg::CallbackObject { public: - CloseCallback(const std::string& callbackName=std::string("close")); + CloseCallback(const std::string& callbackName=std::string("close"), osgUI::Widget* closeWidget=0); CloseCallback(const CloseCallback& hc, const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY); META_Object(osgUI, CloseCallback); + void setCloseWidget(osgUI::Widget* widget) { _closeWidget = widget; } + osgUI::Widget* getCloseWidget() { return _closeWidget.get(); } + const osgUI::Widget* getCloseWidget() const { return _closeWidget.get(); } + virtual bool run(osg::Object* object, osg::Parameters& inputParameters, osg::Parameters& outputParameters) const; protected: virtual ~CloseCallback() {} + osg::observer_ptr _closeWidget; }; class OSGUI_EXPORT HandleCallback : public osg::CallbackObject diff --git a/src/osgUI/Callbacks.cpp b/src/osgUI/Callbacks.cpp index 9ee64ee4e..9821b5afc 100644 --- a/src/osgUI/Callbacks.cpp +++ b/src/osgUI/Callbacks.cpp @@ -21,7 +21,8 @@ using namespace osgUI; -CloseCallback::CloseCallback(const std::string& callbackName) +CloseCallback::CloseCallback(const std::string& callbackName, osgUI::Widget* closeWidget): + _closeWidget(closeWidget) { setName(callbackName); } @@ -32,6 +33,11 @@ CloseCallback::CloseCallback(const CloseCallback& hc, const osg::CopyOp& copyop) bool CloseCallback::run(osg::Object* object, osg::Parameters&, osg::Parameters&) const { + if (_closeWidget.valid()) + { + _closeWidget->setVisible(false); + } + osg::Node* node = dynamic_cast(object); if (node) { diff --git a/src/osgUI/Dialog.cpp b/src/osgUI/Dialog.cpp index e3ca38493..0f184380f 100644 --- a/src/osgUI/Dialog.cpp +++ b/src/osgUI/Dialog.cpp @@ -102,8 +102,7 @@ void Dialog::createGraphicsImplementation() closeButton->setAlignmentSettings(getAlignmentSettings()); closeButton->setTextSettings(getTextSettings()); //closeButton->setFrameSettings(getFrameSettings()); - closeButton->getOrCreateUserDataContainer()->addUserObject(new osgUI::CloseCallback("released")); - addChild(closeButton.get()); + closeButton->getOrCreateUserDataContainer()->addUserObject(new osgUI::CloseCallback("released", this)); osg::ref_ptr