DART  6.10.1
ImGuiHandler.hpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2011-2021, The DART development contributors
3  * All rights reserved.
4  *
5  * The list of contributors can be found at:
6  * https://github.com/dartsim/dart/blob/master/LICENSE
7  *
8  * This file is provided under the following "BSD-style" License:
9  * Redistribution and use in source and binary forms, with or
10  * without modification, are permitted provided that the following
11  * conditions are met:
12  * * Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  * * Redistributions in binary form must reproduce the above
15  * copyright notice, this list of conditions and the following
16  * disclaimer in the documentation and/or other materials provided
17  * with the distribution.
18  * * This code incorporates portions of Open Dynamics Engine
19  * (Copyright (c) 2001-2004, Russell L. Smith. All rights
20  * reserved.) and portions of FCL (Copyright (c) 2011, Willow
21  * Garage, Inc. All rights reserved.), which were released under
22  * the same BSD license as below
23  *
24  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
25  * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
26  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
27  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
28  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
29  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
32  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
33  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36  * POSSIBILITY OF SUCH DAMAGE.
37  */
38 
39 #ifndef DART_GUI_OSG_IMGUIHANDLER_HPP_
40 #define DART_GUI_OSG_IMGUIHANDLER_HPP_
41 
42 #include <array>
43 #include <memory>
44 #include <vector>
45 
46 #include <osg/GraphicsContext>
47 #include <osgGA/GUIActionAdapter>
48 #include <osgGA/GUIEventAdapter>
49 #include <osgGA/GUIEventHandler>
50 
51 namespace dart {
52 namespace gui {
53 namespace osg {
54 
55 class ImGuiWidget;
56 
57 class ImGuiHandler : public osgGA::GUIEventHandler
58 {
59 public:
61  ImGuiHandler();
62 
64  ~ImGuiHandler() override;
65 
66  void newFrame(::osg::RenderInfo& renderInfo);
67 
68  void render(::osg::RenderInfo& renderInfo);
69 
70  void setCameraCallbacks(::osg::Camera* camera);
71 
72  //----------------------------------------------------------------------------
74  //----------------------------------------------------------------------------
75 
77  bool hasWidget(const std::shared_ptr<ImGuiWidget>& widget) const;
78 
80  void addWidget(
81  const std::shared_ptr<ImGuiWidget>& widget, bool visible = true);
82 
84  void removeWidget(const std::shared_ptr<ImGuiWidget>& widget);
85 
87  void removeAllWidget();
88 
90 
91  // Documentation inherited.
92  bool handle(
93  const osgGA::GUIEventAdapter& eventAdapter,
94  osgGA::GUIActionAdapter& actionAdapter,
95  ::osg::Object* object,
96  ::osg::NodeVisitor* nodeVisitor) override;
97 
98 protected:
99  double mTime;
100 
102  std::array<bool, 3> mMousePressed;
103 
104  float mMouseWheel;
105 
106  std::vector<std::shared_ptr<ImGuiWidget>> mWidgets;
107 };
108 
109 } // namespace osg
110 } // namespace gui
111 } // namespace dart
112 
113 #endif // DART_GUI_OSG_IMGUIHANDLER_HPP_
Definition: ImGuiHandler.hpp:58
bool handle(const osgGA::GUIEventAdapter &eventAdapter, osgGA::GUIActionAdapter &actionAdapter, ::osg::Object *object, ::osg::NodeVisitor *nodeVisitor) override
Definition: ImGuiHandler.cpp:274
void render(::osg::RenderInfo &renderInfo)
Definition: ImGuiHandler.cpp:457
ImGuiHandler()
Constructor.
Definition: ImGuiHandler.cpp:179
void setCameraCallbacks(::osg::Camera *camera)
Definition: ImGuiHandler.cpp:219
double mTime
Definition: ImGuiHandler.hpp:99
void addWidget(const std::shared_ptr< ImGuiWidget > &widget, bool visible=true)
Adds given Widget to this Viewer.
Definition: ImGuiHandler.cpp:238
~ImGuiHandler() override
Destructor.
Definition: ImGuiHandler.cpp:213
void removeAllWidget()
Removes all the widgets in this Viewer.
Definition: ImGuiHandler.cpp:268
bool hasWidget(const std::shared_ptr< ImGuiWidget > &widget) const
Returns true if this Viewer contains given widget.
Definition: ImGuiHandler.cpp:232
std::array< bool, 3 > mMousePressed
Mouse buttons: left, right, middle.
Definition: ImGuiHandler.hpp:102
float mMouseWheel
Definition: ImGuiHandler.hpp:104
void removeWidget(const std::shared_ptr< ImGuiWidget > &widget)
Removes given Widget from this Viewer.
Definition: ImGuiHandler.cpp:254
std::vector< std::shared_ptr< ImGuiWidget > > mWidgets
Definition: ImGuiHandler.hpp:106
void newFrame(::osg::RenderInfo &renderInfo)
Definition: ImGuiHandler.cpp:429
Definition: BulletCollisionDetector.cpp:65