/* ui/modelview.h This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_UI_MODELVIEW_H__ #define __INCLUDED_UI_MODELVIEW_H__ #include "math/axis.h" #include "ui/widget.h" #include "render/camera.h" namespace ui { class ModelView : public Widget { public: ModelView(Widget *parent); ~ModelView(); enum Mode { Model = 0, Globe = 1 }; inline std::string const &modelname() const { return modelview_modelname; } inline Mode mode() const { return modelview_mode; } inline float zoom() const { return modelview_zoom; } inline float radius() const { return modelview_radius; } /** * @brief clear the modelview and show nothing * */ void clear(); /** * @brief show a textured globe with an optional corona * */ void set_globetexturename(const std::string & texturename, const std::string & coronaname, const std::string ringsname, const bool bright = false); /** * @brief show a model * */ void set_modelname(const std::string & modelname); /** * @brief et primary and secondary entity color, to be used by the model renderer * */ void set_colors(const math::Color & color_primary, const math::Color & color_secondary); /** * @brief print modelview widget description * */ virtual void print(const size_t indent) const; /** * @brief set the zoom out factor * @param zoom the new zoom factor * The zoom factor will be clamped to the range [1.0-10.0] * 1.0 is not zoomed out, 10.0 is zoomed out by a factor of 10 * */ void set_zoom(const float zoom); inline void set_radius(const float radius) { modelview_radius = radius; } inline void set_mode(const Mode mode) { modelview_mode = mode; } protected: /// draw the widget virtual void draw(); /// draw border virtual void draw_border(); /// draw border virtual void draw_background(); /** * @brief mouse button press event handler * */ virtual bool on_mousepress(const unsigned int button); /** * @brief mouse button release event handler * */ virtual bool on_mouserelease(const unsigned int button); /** * @brief mouse over event handler * */ virtual void on_mouseover(const math::Vector2f &cursor); /** * @brief mouse movement event handler * */ virtual void on_mousemove(const math::Vector2f &cursor); /** * @brief mouse hweel event handler * */ virtual bool on_mousewheel(const math::Vector2f & direction); private: void reset(); void draw_model(); void draw_globe(); Mode modelview_mode; std::string modelview_modelname; std::string modelview_globetexturename; std::string modelview_globecoronaname; std::string modelview_globeringsname; bool modelview_globebright; math::Color modelview_color_primary; math::Color modelview_color_secondary; float modelview_zoom; float modelview_radius; math::Axis modelview_axis; math::Vector2f modelview_cursor; bool modelview_dragging; render::Camera modelview_camera; }; } #endif // __INCLUDED_UI_MODELVIEW_H__