Pioneer
GuiContainer.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 _GUICONTAINER_H
5 #define _GUICONTAINER_H
6 /*
7  * Parent of all widgets that contain other widgets.
8  */
9 
10 #include "GuiWidget.h"
11 #include "graphics/Drawables.h"
12 #include <SDL_stdinc.h>
13 #include <list>
14 
15 namespace Gui {
16  class Container : public Widget {
17  public:
18  Container();
19  virtual ~Container();
21  bool OnMouseUp(MouseButtonEvent *e);
23  void RemoveAllChildren();
24  void DeleteAllChildren();
25  void GetChildPosition(const Widget *child, float outPos[2]) const;
26  int GetNumChildren() { return static_cast<Uint32>(m_children.size()); }
27  virtual void Draw();
28  void ShowChildren();
29  void HideChildren();
30  virtual void Show();
31  virtual void ShowAll();
32  virtual void HideAll();
33  virtual void OnChildResizeRequest(Widget *) = 0;
34  void SetBgColor(const Color &col);
35  void SetTransparency(bool a) { m_transparent = a; }
36  virtual void UpdateAllChildSizes() = 0;
37  void RemoveChild(Widget *w);
38  // only fired if child widgets do not eat event
39  sigc::signal<void, MouseButtonEvent *> onMouseButtonEvent;
40 
41  private:
42  void _OnMouseLeave();
43  void _OnSetSize();
44  bool HandleMouseEvent(MouseButtonEvent *e);
45  Color m_bgcol;
46  bool m_transparent;
47  std::unique_ptr<Graphics::Drawables::Rect> m_rect;
48 
49  protected:
50  struct widget_pos {
52  float pos[2];
53  Uint32 flags;
54  };
55  typedef std::list<widget_pos> WidgetList;
56 
57  void PrependChild(Widget *w, float x, float y);
58  void AppendChild(Widget *w, float x, float y);
59  void MoveChild(Widget *w, float x, float y);
60  WidgetList::const_iterator FindChild(const Widget *w) const;
61  WidgetList::iterator FindChild(const Widget *w);
62 
64  };
65 } // namespace Gui
66 
67 #endif /* _GUICONTAINER_H */
Definition: GuiContainer.h:16
void AppendChild(Widget *w, float x, float y)
Definition: GuiContainer.cpp:140
sigc::signal< void, MouseButtonEvent * > onMouseButtonEvent
Definition: GuiContainer.h:39
void RemoveChild(Widget *w)
Definition: GuiContainer.cpp:165
virtual void UpdateAllChildSizes()=0
WidgetList m_children
Definition: GuiContainer.h:63
void RemoveAllChildren()
Definition: GuiContainer.cpp:116
void SetBgColor(const Color &col)
Definition: GuiContainer.cpp:281
WidgetList::const_iterator FindChild(const Widget *w) const
Definition: GuiContainer.cpp:175
virtual void ShowAll()
Definition: GuiContainer.cpp:265
void SetTransparency(bool a)
Definition: GuiContainer.h:35
bool OnMouseDown(MouseButtonEvent *e)
Definition: GuiContainer.cpp:222
virtual void Draw()
Definition: GuiContainer.cpp:191
Container()
Definition: GuiContainer.cpp:13
void GetChildPosition(const Widget *child, float outPos[2]) const
Definition: GuiContainer.cpp:248
void HideChildren()
Definition: GuiContainer.cpp:240
virtual void HideAll()
Definition: GuiContainer.cpp:274
virtual void OnChildResizeRequest(Widget *)=0
void DeleteAllChildren()
Definition: GuiContainer.cpp:107
void PrependChild(Widget *w, float x, float y)
Definition: GuiContainer.cpp:125
virtual void Show()
Definition: GuiContainer.cpp:256
std::list< widget_pos > WidgetList
Definition: GuiContainer.h:55
bool OnMouseUp(MouseButtonEvent *e)
Definition: GuiContainer.cpp:227
virtual ~Container()
Definition: GuiContainer.cpp:21
void MoveChild(Widget *w, float x, float y)
Definition: GuiContainer.cpp:155
void ShowChildren()
Definition: GuiContainer.cpp:232
bool OnMouseMotion(MouseMotionEvent *e)
Definition: GuiContainer.cpp:39
int GetNumChildren()
Definition: GuiContainer.h:26
Definition: GuiWidget.h:14
float w
Definition: GuiWidget.h:93
Definition: Gui.cpp:10
Definition: Color.h:66
Definition: GuiContainer.h:50
Widget * w
Definition: GuiContainer.h:51
Uint32 flags
Definition: GuiContainer.h:53
float pos[2]
Definition: GuiContainer.h:52
Definition: GuiEvents.h:8
Definition: GuiEvents.h:18