1815
|
1 #pragma once
|
|
2 #include <list>
|
|
3
|
|
4 class UIControl
|
|
5 {
|
|
6 public:
|
|
7 virtual void Show() = 0;
|
|
8
|
|
9 virtual bool Focused() = 0;
|
|
10
|
|
11 // Events
|
|
12 virtual bool OnKey(int key)
|
|
13 {
|
|
14 for (auto i = children.begin(); i != children.end(); ++i)
|
|
15 if ((*i)->OnKey(key))
|
|
16 return true;
|
|
17 return false;
|
|
18 }
|
|
19
|
|
20 virtual bool OnMouseLeftClick(int x, int y)
|
|
21 {
|
|
22 for (auto i = children.begin(); i != children.end(); ++i)
|
|
23 if ((*i)->OnMouseLeftClick(x, y))
|
|
24 return true;
|
|
25 return false;
|
|
26 }
|
|
27
|
|
28 virtual bool OnMouseRightClick(int x, int y)
|
|
29 {
|
|
30 for (auto i = children.begin(); i != children.end(); ++i)
|
|
31 if ((*i)->OnMouseRightClick(x, y))
|
|
32 return true;
|
|
33 return false;
|
|
34 }
|
|
35
|
|
36 virtual bool OnMouseEnter()
|
|
37 {
|
|
38 for (auto i = children.begin(); i != children.end(); ++i)
|
|
39 if ((*i)->OnMouseEnter())
|
|
40 return true;
|
|
41 return false;
|
|
42 }
|
|
43
|
|
44 virtual bool OnMouseLeave()
|
|
45 {
|
|
46 for (auto i = children.begin(); i != children.end(); ++i)
|
|
47 if ((*i)->OnMouseLeave())
|
|
48 return true;
|
|
49 return false;
|
|
50 }
|
|
51
|
|
52 // Container
|
|
53 virtual bool AddControl(UIControl *ctrl)
|
|
54 {
|
|
55 if (std::find(children.begin(), children.end(), ctrl) == children.end())
|
|
56 {
|
|
57 children.push_back(ctrl);
|
|
58 return true;
|
|
59 }
|
|
60 return false;
|
|
61 }
|
|
62
|
|
63 virtual bool RemoveControl(UIControl *ctrl)
|
|
64 {
|
|
65 auto i = std::find(children.begin(), children.end(), ctrl);
|
|
66
|
|
67 children.remove(ctrl);
|
|
68 if (i != children.end())
|
|
69 return true;
|
|
70 return false;
|
|
71 }
|
|
72
|
|
73 protected:
|
|
74 std::list<UIControl *> children;
|
|
75 }; |