diff --git a/include/osgUI/TabWidget b/include/osgUI/TabWidget new file mode 100644 index 000000000..c2e2f06e1 --- /dev/null +++ b/include/osgUI/TabWidget @@ -0,0 +1,101 @@ +/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2014 Robert Osfield + * + * This library is open source and may be redistributed and/or modified under + * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or + * (at your option) any later version. The full license is in LICENSE file + * included with this distribution, and on the openscenegraph.org website. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * OpenSceneGraph Public License for more details. +*/ + +#ifndef OSGUI_COMBOBOX +#define OSGUI_COMBOBOX + +#include +#include +#include + +namespace osgUI +{ + +class OSGUI_EXPORT Tab : public osg::Object +{ +public: + + Tab() : _color(1.0f,1.0f,1.0f,0.0f) {} + Tab(const std::string& str) : _text(str), _color(1.0f,1.0f,1.0f,0.0f) {} + Tab(const std::string& str, const osg::Vec4& col) : _text(str), _color(col) {} + Tab(const osg::Vec4& col) : _color(col) {} + + Tab(const Tab& item, const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY) : osg::Object(item,copyop), _text(item._text), _color(item._color) {} + + META_Object(osgUI, Tab); + + void setText(const std::string& text) { _text = text; } + std::string& getText() { return _text; } + const std::string& getText() const { return _text; } + + void setColor(const osg::Vec4f& color) { _color = color; } + osg::Vec4f& getColor() { return _color; } + const osg::Vec4f& getColor() const { return _color; } + + void setWidget(osgUI::Widget* widget) { _widget = widget; } + osgUI::Widget* getWidget() { return _widget.get(); } + const osgUI::Widget* getWidget() const { return _widget.get(); } + +protected: + virtual ~Tab() {} + + std::string _text; + osg::Vec4 _color; + osg::ref_ptr _widget; +}; + +class OSGUI_EXPORT TabWidget : public osgUI::Widget +{ +public: + TabWidget(); + TabWidget(const TabWidget& combobox, const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY); + META_Node(osgUI, TabWidget); + + void addTab(Tab* item) { _tabs.push_back(item); dirty(); } + + void setTab(unsigned int i, Tab* item) { _tabs[i] = item; dirty(); } + Tab* getTab(unsigned int i) { return _tabs[i].get(); } + const Tab* getTab(unsigned int i) const { return _tabs[i].get(); } + + void clear() { _tabs.clear(); dirty(); } + void removeTab(unsigned int i) { _tabs.erase(_tabs.begin()+i); dirty(); } + unsigned int getNumTabs() { return static_cast(_tabs.size()); } + + typedef std::vector< osg::ref_ptr > Tabs; + + void setTabs(const Tabs& items) { _tabs = items; } + Tabs& getTabs() { return _tabs; } + const Tabs& getTabs() const { return _tabs; } + + void setCurrentIndex(unsigned int i); + unsigned int getCurrentIndex() const { return _currentIndex; } + + virtual void currrentIndexChanged(unsigned int i); + virtual void currentIndexChangedImplementation(unsigned int i); + + + virtual bool handleImplementation(osgGA::EventVisitor* ev, osgGA::Event* event); + virtual void createGraphicsImplementation(); + virtual void enterImplementation(); + virtual void leaveImplementation(); + +protected: + virtual ~TabWidget() {} + + Tabs _tabs; + unsigned int _currentIndex; +}; + +} + +#endif diff --git a/src/osgUI/CMakeLists.txt b/src/osgUI/CMakeLists.txt index fea8864d5..95739fe6c 100644 --- a/src/osgUI/CMakeLists.txt +++ b/src/osgUI/CMakeLists.txt @@ -21,6 +21,7 @@ SET(TARGET_H ${HEADER_PATH}/Style ${HEADER_PATH}/AlignmentSettings ${HEADER_PATH}/FrameSettings + ${HEADER_PATH}/TabWidget ${HEADER_PATH}/TextSettings ${HEADER_PATH}/Validator ) @@ -38,6 +39,7 @@ SET(TARGET_SRC Style.cpp AlignmentSettings.cpp FrameSettings.cpp + TabWidget.cpp TextSettings.cpp Validator.cpp ${OPENSCENEGRAPH_VERSIONINFO_RC} diff --git a/src/osgUI/TabWidget.cpp b/src/osgUI/TabWidget.cpp new file mode 100644 index 000000000..132e63a3e --- /dev/null +++ b/src/osgUI/TabWidget.cpp @@ -0,0 +1,88 @@ +/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2014 Robert Osfield + * + * This library is open source and may be redistributed and/or modified under + * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or + * (at your option) any later version. The full license is in LICENSE file + * included with this distribution, and on the openscenegraph.org website. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * OpenSceneGraph Public License for more details. +*/ + + +#include +#include +#include +#include +#include +#include +#include + +using namespace osgUI; + +TabWidget::TabWidget(): + _currentIndex(0) +{ +} + +TabWidget::TabWidget(const osgUI::TabWidget& tabwidget, const osg::CopyOp& copyop): + Widget(tabwidget, copyop), + _tabs(tabwidget._tabs) +{ +} + +bool TabWidget::handleImplementation(osgGA::EventVisitor* ev, osgGA::Event* event) +{ + // OSG_NOTICE<<"TabWidget::handleImplementation"<run(this, inputParameters, outputParameters)) + { + return; + } + } + currentIndexChangedImplementation(i); +} + +void TabWidget::currentIndexChangedImplementation(unsigned int i) +{ + OSG_NOTICE<<"TabWidget::currentIndexChangedImplementation("< +#include +#include +#include +#include + + +REGISTER_OBJECT_WRAPPER( Tab, + new osgUI::Tab, + osgUI::Tab, + "osg::Object osgUI::Tab" ) +{ + ADD_STRING_SERIALIZER(Text, ""); + ADD_VEC4F_SERIALIZER(Color, osg::Vec4(1.0f,1.0f,1.0f,0.0f)); + ADD_OBJECT_SERIALIZER(Widget, osgUI::Widget, NULL); +} diff --git a/src/osgWrappers/serializers/osgUI/TabWidget.cpp b/src/osgWrappers/serializers/osgUI/TabWidget.cpp new file mode 100644 index 000000000..be43dceed --- /dev/null +++ b/src/osgWrappers/serializers/osgUI/TabWidget.cpp @@ -0,0 +1,38 @@ +#include +#include +#include +#include +#include + +struct TabWidgetCurrentIndexChangedImplementation : public osgDB::MethodObject +{ + virtual bool run(void* objectPtr, osg::Parameters& inputParameters, osg::Parameters& outputParameters) const + { + if (inputParameters.empty()) return false; + + osg::Object* indexObject = inputParameters[0].get(); + + unsigned int index = 0; + osg::DoubleValueObject* dvo = dynamic_cast(indexObject); + if (dvo) index = static_cast(dvo->getValue()); + else + { + osg::UIntValueObject* uivo = dynamic_cast(indexObject); + if (uivo) index = uivo->getValue(); + } + osgUI::TabWidget* cb = reinterpret_cast(objectPtr); + cb->currentIndexChangedImplementation(index); + + return true; + } +}; + +REGISTER_OBJECT_WRAPPER( TabWidget, + new osgUI::TabWidget, + osgUI::TabWidget, + "osg::Object osg::Node osg::Group osgUI::Widget osgUI::TabWidget" ) +{ + ADD_UINT_SERIALIZER(CurrentIndex, 0); + ADD_VECTOR_SERIALIZER( Tabs, osgUI::TabWidget::Tabs, osgDB::BaseSerializer::RW_OBJECT, 0 ); + ADD_METHOD_OBJECT( "currentIndexChangedImplementation", TabWidgetCurrentIndexChangedImplementation ); +}