Line data Source code
1 : /* Copyright (C) 2021 Wildfire Games.
2 : * This file is part of 0 A.D.
3 : *
4 : * 0 A.D. is free software: you can redistribute it and/or modify
5 : * it under the terms of the GNU General Public License as published by
6 : * the Free Software Foundation, either version 2 of the License, or
7 : * (at your option) any later version.
8 : *
9 : * 0 A.D. is distributed in the hope that it will be useful,
10 : * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 : * GNU General Public License for more details.
13 : *
14 : * You should have received a copy of the GNU General Public License
15 : * along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
16 : */
17 :
18 : #ifndef INCLUDED_IGUISCROLLBAROWNER
19 : #define INCLUDED_IGUISCROLLBAROWNER
20 :
21 : #include "ps/CStrForward.h"
22 :
23 : #include <memory>
24 : #include <vector>
25 :
26 : class CCanvas2D;
27 : struct SGUIMessage;
28 : struct SGUIScrollBarStyle;
29 : class IGUIScrollBar;
30 : class IGUIObject;
31 :
32 : /**
33 : * Base-class this if you want an object to contain
34 : * one, or several, scroll-bars.
35 : */
36 0 : class IGUIScrollBarOwner
37 : {
38 : NONCOPYABLE(IGUIScrollBarOwner);
39 :
40 : friend class IGUIScrollBar;
41 :
42 : public:
43 : IGUIScrollBarOwner(IGUIObject& m_pObject);
44 : virtual ~IGUIScrollBarOwner();
45 :
46 : virtual void Draw(CCanvas2D& canvas);
47 :
48 : /**
49 : * @see IGUIObject#HandleMessage()
50 : */
51 : virtual void HandleMessage(SGUIMessage& Message);
52 :
53 : /**
54 : * @see IGUIObject#ResetStates()
55 : */
56 : virtual void ResetStates();
57 :
58 : /**
59 : * Interface for the m_ScrollBar to use.
60 : */
61 : virtual const SGUIScrollBarStyle* GetScrollBarStyle(const CStr8& style) const;
62 :
63 : /**
64 : * Add a scroll-bar
65 : */
66 : virtual void AddScrollBar(std::unique_ptr<IGUIScrollBar> scrollbar);
67 :
68 : /**
69 : * Get Scroll Bar reference (it should be transparent it's actually
70 : * pointers).
71 : */
72 0 : virtual IGUIScrollBar& GetScrollBar(const int& index)
73 : {
74 0 : return *m_ScrollBars[index];
75 : }
76 :
77 : /**
78 : * Get the position of the scroll bar at @param index.
79 : * Equivalent to GetScrollbar(index).GetPos().
80 : */
81 : virtual float GetScrollBarPos(const int index) const;
82 :
83 : protected:
84 : /**
85 : * Predominately you will only have one, but you can have
86 : * as many as you like.
87 : */
88 : std::vector<std::unique_ptr<IGUIScrollBar>> m_ScrollBars;
89 :
90 : private:
91 : /**
92 : * Reference to the IGUIObject.
93 : * Private, because we don't want to inherit it in multiple classes.
94 : */
95 : IGUIObject& m_pObject;
96 : };
97 :
98 : #endif // INCLUDED_IGUISCROLLBAROWNER
|