blob: e23fd1cad8bb7b110425656cb56c81cd263e9503 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
/*
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"
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();
/// keypress event handler
virtual bool on_keypress(const int key, const unsigned int modifier);
/// keyrelease event handler
virtual bool on_keyrelease(const int key, const unsigned int modifier);
virtual void on_mouseover(const math::Vector2f &cursor);
/// mouse movement handler
virtual void on_mousemove(const math::Vector2f &cursor);
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;
};
}
#endif // __INCLUDED_UI_MODELVIEW_H__
|