FifeGUI 0.2.0
A C++ GUI library designed for games.
adjustingcontainer.hpp
1// SPDX-License-Identifier: LGPL-2.1-or-later OR BSD-3-Clause
2// SPDX-FileCopyrightText: 2004 - 2008 Olof Naessén and Per Larsson
3// SPDX-FileCopyrightText: 2013 - 2026 Fifengine contributors
4
5#ifndef INCLUDE_FIFECHAN_WIDGETS_ADJUSTINGCONTAINER_HPP_
6#define INCLUDE_FIFECHAN_WIDGETS_ADJUSTINGCONTAINER_HPP_
7
8#include <vector>
9
10#include "fifechan/widgets/container.hpp"
11
12namespace fcn
13{
83 class FIFEGUI_API AdjustingContainer : public Container
84 {
85 public:
93 enum class Alignment : uint8_t
94 {
95 Left = 0,
96 Center,
97 Right
98 };
99
101
102 ~AdjustingContainer() override;
103
104 AdjustingContainer(AdjustingContainer const &) = delete;
105 AdjustingContainer& operator=(AdjustingContainer const &) = delete;
107 AdjustingContainer& operator=(AdjustingContainer&&) = delete;
108
117 virtual void setNumberOfColumns(unsigned int numberOfColumns);
118
126 virtual unsigned int getNumberOfColumns() const;
127
134 virtual void setColumnAlignment(unsigned int column, Alignment alignment);
135
142 Alignment getColumnAlignment(unsigned int column) const;
143
147 virtual void adjustContent();
148
149 // Inherited from Container
150
152
157 void resizeToContent(bool recursion) override;
158
159 void adjustSize() override;
160
162
163 void expandContent(bool recursion) override;
164
165 Rectangle getChildrenArea() override;
166
167 // virtual void logic();
168
169 void add(Widget* widget) override;
170
171 void add(Widget* widget, int x, int y) override;
172
173 void remove(Widget* widget) override;
174
175 void removeAllChildren() override;
176
177 protected:
181 std::vector<Widget*> mContainedWidgets;
182
186 std::vector<unsigned int> mColumnWidths;
187
191 std::vector<Alignment> mColumnAlignment;
192
196 std::vector<unsigned int> mRowHeights;
197
201 unsigned int mWidth{0};
202
206 unsigned int mHeight{0};
207
211 unsigned int mNumberOfColumns{1};
212
216 unsigned int mNumberOfRows{1};
217 };
218} // namespace fcn
219
220#endif // INCLUDE_FIFECHAN_WIDGETS_ADJUSTINGCONTAINER_HPP_
Self-adjusting Container class.
unsigned int mNumberOfRows
Number of rows in the layout (derived from children count).
std::vector< Alignment > mColumnAlignment
The alignment of each column.
unsigned int mWidth
Cached container width used during layout.
std::vector< unsigned int > mColumnWidths
Computed width for each column (in pixels).
unsigned int mHeight
Cached container height used during layout.
std::vector< Widget * > mContainedWidgets
The widgets contained in the adjusting container in layout order.
unsigned int mNumberOfColumns
Number of columns in the layout.
Alignment
Possible alignment values for each column.
std::vector< unsigned int > mRowHeights
Computed height for each row (in pixels).
Container()
Constructor.
void expandContent(bool recursion) override
Expand children to occupy available space in this container.
void resizeToContent(bool recursion) override
Resize this container to fit its children.
Represents a rectangular area (X, Y, Width, Height).
Definition rectangle.hpp:20
Abstract base class defining the common behavior, properties, and lifecycle of all GUI elements.
Definition widget.hpp:45