Pioneer
GuiWidget.h
Go to the documentation of this file.
1 // Copyright © 2008-2021 Pioneer Developers. See AUTHORS.txt for details
2 // Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3 
4 #ifndef _GUIWIDGET_H
5 #define _GUIWIDGET_H
6 
7 #include "Color.h"
8 #include "GuiEvents.h"
9 #include "libs.h"
10 
11 namespace Gui {
12  class Container;
13  class ToolTip;
14  class Widget {
15  public:
16  Widget();
17  virtual void Draw() = 0;
18  virtual ~Widget();
21  virtual void GetSizeRequested(float size[2]) = 0;
22  // the minimum size the widget requires to operate effectively
23  virtual void GetMinimumSize(float size[2]) { GetSizeRequested(size); }
24  void GetAbsolutePosition(float pos[2]) const;
25  void GetSize(float size[2])
26  {
27  size[0] = m_size.w;
28  size[1] = m_size.h;
29  }
30  void SetSize(float w, float h)
31  {
32  m_size.w = w;
33  m_size.h = h;
34  onSetSize.emit();
35  }
36  void ResizeRequest();
37  void SetShortcut(SDL_Keycode key, SDL_Keymod mod);
38  void SetScissor(bool enabled);
39  bool GetEnabled() { return m_enabled; }
40  void SetEnabled(bool v) { m_enabled = v; }
41  virtual void GrabFocus();
42  bool IsFocused();
43  virtual void ShowAll() { m_visible = true; }
44  virtual void Show() { m_visible = true; }
45  virtual void Hide();
46  void HideTooltip();
47  bool IsVisible() const;
48  Container *GetParent() const { return m_parent; }
49  void SetParent(Container *p) { m_parent = p; }
50  void SetToolTip(std::string s) { m_tooltip = s; }
51  const std::string &GetToolTip() const { return m_tooltip; }
52 
53  // event handlers should return false to stop propagating event
54  virtual bool OnMouseDown(MouseButtonEvent *e) { return true; }
55  virtual bool OnMouseUp(MouseButtonEvent *e) { return true; }
56  virtual bool OnMouseMotion(MouseMotionEvent *e) { return true; }
57  virtual void OnActivate() {}
58  virtual void OnMouseEnter();
59  virtual void OnMouseLeave();
60  virtual bool OnKeyDown(const SDL_Keysym *sym) { return false; }
61  virtual void OnTextInput(Uint32 unicode) {}
62  bool IsMouseOver() { return m_mouseOver; }
63  // only to be called by Screen::OnKeyDown
64  void OnPreShortcut(const SDL_Keysym *sym);
65  enum EventMask {
67  EVENT_KEYDOWN = 1 << 0,
68  EVENT_KEYUP = 1 << 1,
69  EVENT_MOUSEDOWN = 1 << 2,
70  EVENT_MOUSEUP = 1 << 3,
71  EVENT_MOUSEMOTION = 1 << 4 // needed for OnMouseEnter,Leave,IsMouseOver
72  };
73  static const unsigned int EVENT_ALL = 0xffffffff; // not in the enum because 0xffffffff is an unsigned int, and an enum is an int (before C++11 which allows strong-typed enums)
74  unsigned int GetEventMask() { return m_eventMask; }
75 
76  sigc::signal<void> onMouseEnter;
77  sigc::signal<void> onMouseLeave;
78  sigc::signal<void> onSetSize;
79  sigc::signal<void> onDelete;
80 
81  protected:
82  unsigned int m_eventMask;
83  struct {
84  SDL_Keycode sym;
85  SDL_Keymod mod;
87 
88  virtual std::string GetOverrideTooltip() { return ""; }
90 
91  private:
92  struct {
93  float w, h;
94  } m_size;
95  bool m_visible;
96  bool m_mouseOver;
97  bool m_enabled;
98  Container *m_parent;
99  std::string m_tooltip;
100  sigc::connection m_tooltipTimerConnection;
101  ToolTip *m_tooltipWidget;
102  void OnToolTip();
103  };
104 } // namespace Gui
105 
106 #endif /* _GUIWIDGET_H */
Definition: GuiContainer.h:16
Definition: GuiToolTip.h:11
Definition: GuiWidget.h:14
void UpdateOverriddenTooltip()
Definition: GuiWidget.cpp:117
sigc::signal< void > onMouseLeave
Definition: GuiWidget.h:77
struct Gui::Widget::@4 m_shortcut
bool IsVisible() const
Definition: GuiWidget.cpp:24
void OnPreShortcut(const SDL_Keysym *sym)
Definition: GuiWidget.cpp:78
Widget()
Definition: GuiWidget.cpp:11
virtual void GrabFocus()
Definition: GuiWidget.cpp:60
unsigned int m_eventMask
Definition: GuiWidget.h:82
virtual void Draw()=0
void SetEnabled(bool v)
Definition: GuiWidget.h:40
unsigned int GetEventMask()
Definition: GuiWidget.h:74
void SetToolTip(std::string s)
Definition: GuiWidget.h:50
virtual bool OnMouseDown(MouseButtonEvent *e)
Definition: GuiWidget.h:54
void GetSize(float size[2])
Definition: GuiWidget.h:25
EventMask
Definition: GuiWidget.h:65
@ EVENT_MOUSEUP
Definition: GuiWidget.h:70
@ EVENT_MOUSEMOTION
Definition: GuiWidget.h:71
@ EVENT_KEYDOWN
Definition: GuiWidget.h:67
@ EVENT_MOUSEDOWN
Definition: GuiWidget.h:69
@ EVENT_KEYUP
Definition: GuiWidget.h:68
@ EVENT_NONE
Definition: GuiWidget.h:66
virtual void OnMouseLeave()
Definition: GuiWidget.cpp:108
virtual void GetMinimumSize(float size[2])
Definition: GuiWidget.h:23
virtual void GetSizeRequested(float size[2])=0
SDL_Keymod mod
Definition: GuiWidget.h:85
virtual void OnTextInput(Uint32 unicode)
Definition: GuiWidget.h:61
virtual void ShowAll()
Definition: GuiWidget.h:43
void ResizeRequest()
Definition: GuiWidget.cpp:164
void SetParent(Container *p)
Definition: GuiWidget.h:49
bool GetEnabled()
Definition: GuiWidget.h:39
const std::string & GetToolTip() const
Definition: GuiWidget.h:51
static const unsigned int EVENT_ALL
Definition: GuiWidget.h:73
SDL_Keycode sym
Definition: GuiWidget.h:84
virtual bool OnMouseUp(MouseButtonEvent *e)
Definition: GuiWidget.h:55
bool IsFocused()
Definition: GuiWidget.cpp:65
virtual void OnMouseEnter()
Definition: GuiWidget.cpp:101
void SetSize(float w, float h)
Definition: GuiWidget.h:30
void HideTooltip()
Definition: GuiWidget.cpp:155
virtual std::string GetOverrideTooltip()
Definition: GuiWidget.h:88
void SetScissor(bool enabled)
Definition: GuiWidget.cpp:41
virtual bool OnKeyDown(const SDL_Keysym *sym)
Definition: GuiWidget.h:60
sigc::signal< void > onDelete
Definition: GuiWidget.h:79
bool IsMouseOver()
Definition: GuiWidget.h:62
virtual ~Widget()
Definition: GuiWidget.cpp:176
virtual bool OnMouseMotion(MouseMotionEvent *e)
Definition: GuiWidget.h:56
void GetAbsolutePosition(float pos[2]) const
Definition: GuiWidget.cpp:86
virtual void Hide()
Definition: GuiWidget.cpp:147
sigc::signal< void > onSetSize
Definition: GuiWidget.h:78
sigc::signal< void > onMouseEnter
Definition: GuiWidget.h:76
virtual void OnActivate()
Definition: GuiWidget.h:57
float w
Definition: GuiWidget.h:93
void SetShortcut(SDL_Keycode key, SDL_Keymod mod)
Definition: GuiWidget.cpp:70
float h
Definition: GuiWidget.h:93
virtual void Show()
Definition: GuiWidget.h:44
Container * GetParent() const
Definition: GuiWidget.h:48
Definition: Gui.cpp:10
Definition: GuiEvents.h:8
Definition: GuiEvents.h:18