KrisLibrary  1.0.0
Widget.h
1 #ifndef GL_WIDGET_H
2 #define GL_WIDGET_H
3 
4 #include "GL.h"
5 #include "GLColor.h"
6 #include <KrisLibrary/camera/viewport.h>
7 #include <vector>
8 
9 namespace GLDraw {
10 
11 using namespace Math3D;
12 
16 class Widget
17 {
18  public:
19  Widget();
20  virtual ~Widget() {}
21  //returns true if it has been hovered over. The widget should be given
22  //highlight
23  virtual bool Hover(int x,int y,Camera::Viewport& viewport,double& distance) { return false; }
24  virtual void SetHighlight(bool value) { hasHighlight=value; }
25  //returns true if it was clicked. The widget should be given focus, if
26  //nothing was closer)
27  virtual bool BeginDrag(int x,int y,Camera::Viewport& viewport,double& distance) { return false; }
28  virtual void Drag(int dx,int dy,Camera::Viewport& viewport) {}
29  virtual void EndDrag() {}
30  virtual void SetFocus(bool value) { hasFocus=value; }
31  virtual void Keypress(char c) {}
32  virtual void DrawGL(Camera::Viewport& viewport) {}
33  virtual void Idle() {}
34 
35  //widgets call this internally
36  void Refresh() { requestRedraw = true; }
37 
38  bool hasHighlight,hasFocus;
39  bool requestRedraw;
40 };
41 
47 class WidgetSet : public Widget
48 {
49  public:
50  WidgetSet();
51  virtual ~WidgetSet() {}
52  virtual bool Hover(int x,int y,Camera::Viewport& viewport,double& distance);
53  virtual void SetHighlight(bool value);
54  virtual bool BeginDrag(int x,int y,Camera::Viewport& viewport,double& distance);
55  virtual void Drag(int dx,int dy,Camera::Viewport& viewport);
56  virtual void EndDrag();
57  virtual void SetFocus(bool value);
58  virtual void Keypress(char c);
59  virtual void DrawGL(Camera::Viewport& viewport);
60  virtual void Idle();
61  virtual void Enable(int index,bool enabled);
62  virtual void Enable(Widget* widget,bool enabled);
63 
64  std::vector<Widget*> widgets;
65  std::vector<bool> widgetEnabled;
66  Widget* activeWidget;
67  Widget* closestWidget;
68 };
69 
70 } //namespace GLDraw
71 
72 #endif
Base class for a visual widget.
Definition: Widget.h:16
A container of sub-widgets.
Definition: Widget.h:47
Contains all the definitions in the Math3D package.
Definition: AnyGeometry.h:13
A class containing viewport / camera information. This uses OpenGL coordinate convention in which x i...
Definition: viewport.h:11
Contains all definitions in the GLDraw package.
Definition: AnyGeometry.h:14