25#ifndef TGUI_CONTAINER_HPP
26#define TGUI_CONTAINER_HPP
28#include <TGUI/Widget.hpp>
43 class TGUI_API Container :
public Widget
47 using Ptr = std::shared_ptr<Container>;
48 using ConstPtr = std::shared_ptr<const Container>;
57 Container(
const char* typeName,
bool initRenderer);
77 Container& operator= (
const Container& right);
82 Container& operator= (Container&& right)
noexcept;
96 TGUI_NODISCARD
const std::vector<Widget::Ptr>&
getWidgets()
const
107 template<
typename Function>
110 std::sort(m_widgets.begin(), m_widgets.end(), std::forward<Function>(function));
153 template <
class W
idgetType>
154 TGUI_NODISCARD
typename WidgetType::Ptr
get(
const String& widgetName)
const
156 return std::dynamic_pointer_cast<WidgetType>(
get(widgetName));
187 return Vector2f{0, 0};
339#ifndef TGUI_REMOVE_DEPRECATED_CODE
349 TGUI_DEPRECATED(
"Use getWidgetAtPos instead") TGUI_NODISCARD virtual Widget::
Ptr getWidgetAtPosition(Vector2f pos) const;
455 void rightMousePressed(Vector2f pos)
override;
460 void leftMouseReleased(Vector2f pos)
override;
465 void rightMouseReleased(Vector2f pos)
override;
470 void mouseMoved(Vector2f pos)
override;
491 void textEntered(
char32_t key)
override;
496 bool scrolled(
float delta, Vector2f pos,
bool touch)
override;
501 void mouseNoLongerOnWidget()
override;
506 void leftMouseButtonNoLongerDown()
override;
511 void rightMouseButtonNoLongerDown()
override;
519 TGUI_NODISCARD
Widget::Ptr askToolTip(Vector2f mousePos)
override;
525 bool updateTime(
Duration elapsedTime)
override;
531 void setParent(Container* parent)
override;
544 void updateChildrenWithAutoLayout();
567 TGUI_NODISCARD std::unique_ptr<DataIO::Node>
save(SavingRenderersMap& renderers)
const override;
572 void load(
const std::unique_ptr<DataIO::Node>& node,
const LoadingRenderersMap& renderers)
override;
583 TGUI_NODISCARD
Widget::Ptr getWidgetBelowMouse(Vector2f mousePos)
const;
589 Widget::Ptr updateWidgetBelowMouse(Vector2f mousePos);
594 TGUI_NODISCARD std::size_t getFocusedWidgetIndex()
const;
599 bool tryFocusWidget(
const Widget::Ptr &widget,
bool reverseWidgetOrder,
bool recursive);
604 TGUI_NODISCARD
static Vector2f transformMousePos(
const Widget::Ptr& widget, Vector2f mousePos);
614 void injectFormFilePath(
const std::unique_ptr<DataIO::Node>& node,
const String& path, std::map<String, bool>& checkedFilenames)
const;
619 void loadWidgetsImpl(
const std::unique_ptr<DataIO::Node>& rootNode,
bool replaceExisting);
624 std::vector<Widget::Ptr> m_widgets;
630 bool m_draggingWidget =
false;
632 Vector2f m_prevInnerSize;
635 bool m_isolatedFocus =
false;
637 friend class SubwidgetContainer;
645 class TGUI_API RootContainer :
public Container
649 using Ptr = std::shared_ptr<RootContainer>;
650 using ConstPtr = std::shared_ptr<const RootContainer>;
661 explicit RootContainer(
const char* typeName =
StaticWidgetType,
bool initRenderer =
true);
683 void mouseNoLongerOnWidget()
override;
Base class for the Gui.
Definition BackendGui.hpp:45
Base class for render targets.
Definition BackendRenderTarget.hpp:46
virtual bool remove(const Widget::Ptr &widget)
Removes a single widget that was added to the container.
bool processMousePressEvent(Event::MouseButton button, Vector2f pos)
Inform the container about a mouse press event.
void saveWidgetsToFile(const String &filename) const
Saves the child widgets to a text file.
std::unique_ptr< DataIO::Node > saveWidgetsToNodeTree(const String &rootDirectory="") const
Saves the child widgets to a tree of nodes that contain all information about the widgets.
bool processMouseReleaseEvent(Event::MouseButton button, Vector2f pos)
Inform the container about a mouse release event.
Container(Container &&other) noexcept
Move constructor.
std::size_t moveWidgetBackward(const Widget::Ptr &widget)
Places a widget one step backward in the z-order.
bool focusPreviousWidget(bool recursive=true)
Focuses the previous widget in this container.
std::unique_ptr< DataIO::Node > save(SavingRenderersMap &renderers) const override
Saves the widget as a tree node in order to save it to a file.
~Container() override
Destructor.
bool canHandleKeyPress(const Event::KeyEvent &event) override
Called by the parent of the widget to check if keyPressed would process the event.
void draw(BackendRenderTarget &target, RenderStates states) const override
Draw the child widgets to a render target.
std::shared_ptr< Container > Ptr
Shared widget pointer.
Definition Container.hpp:47
bool processScrollEvent(float delta, Vector2f pos, bool touch)
Inform the container about a scroll event (either mouse wheel or two finger scrolling on touchscreen)...
void rendererChanged(const String &property) override
Function called when one of the properties of the renderer is changed.
virtual void add(const Widget::Ptr &widgetPtr, const String &widgetName="")
Adds a widget to the container.
virtual void removeAllWidgets()
Removes all widgets that were added to the container.
void loadWidgetsFromStream(std::stringstream &&stream, bool replaceExisting=true)
Loads the child widgets from a string stream.
virtual Vector2f getInnerSize() const
Returns the space available for widgets inside the container.
Widget::Ptr get(const String &widgetName) const
Returns a pointer to a widget that was added earlier.
bool focusNextWidget(bool recursive=true)
Focuses the next widget in this container.
const std::vector< Widget::Ptr > & getWidgets() const
Returns a list of all the widgets in this container.
Definition Container.hpp:96
void loadWidgetsFromNodeTree(const std::unique_ptr< DataIO::Node > &rootNode, bool replaceExisting=true)
Loads the child widgets from a tree of nodes that contain all information about the widgets.
void sortWidgets(Function &&function)
Sorts a list of all the widgets in this container.
Definition Container.hpp:108
virtual Widget::Ptr getWidgetAtPos(Vector2f pos, bool recursive) const
Returns the widget that is located at the given position.
void load(const std::unique_ptr< DataIO::Node > &node, const LoadingRenderersMap &renderers) override
Loads the widget from a tree of nodes.
void moveWidgetToFront(const Widget::Ptr &widget)
Places a widget before all other widgets, to the front of the z-order.
void loadWidgetsFromFile(const String &filename, bool replaceExisting=true)
Loads the child widgets from a text file.
void moveWidgetToBack(const Widget::Ptr &widget)
Places a widget behind all other widgets, to the back of the z-order.
virtual bool setWidgetIndex(const Widget::Ptr &widget, std::size_t index)
Changes the index of a widget in this container.
Container(const Container &other)
Copy constructor.
std::size_t moveWidgetForward(const Widget::Ptr &widget)
Places a widget one step forward in the z-order.
virtual Vector2f getChildWidgetsOffset() const
Returns the distance between the position of the container and a widget that would be drawn inside th...
Definition Container.hpp:185
int getWidgetIndex(const Widget::Ptr &widget) const
Returns the current index of a widget in this container.
bool leftMousePressed(Vector2f pos) override
Called by the parent when the left mouse button goes down on top of the widget.
void updateTextSize() override
Called when the text size is changed (either by setTextSize or via the renderer).
bool processTextEnteredEvent(char32_t key)
Inform the container about a key press event.
void setFocused(bool focused) override
Focus or unfocus the widget.
bool processKeyPressEvent(Event::KeyEvent event)
Inform the container about a key press event.
bool scrolled(float delta, Vector2f pos, bool touch) override
Called by the parent on scroll event (either from mouse wheel of from two finger scrolling on a touch...
void saveWidgetsToStream(std::stringstream &stream, const String &rootDirectory="") const
Saves the child widgets to a text file.
void setSize(const Layout2d &size) override
Changes the size of the container.
void loadWidgetsFromStream(std::stringstream &stream, bool replaceExisting=true)
Loads the child widgets from a string stream.
bool processMouseMoveEvent(Vector2f pos)
Inform the container about a mouse move event.
virtual Widget::Ptr getWidgetAtPosition(Vector2f pos) const
Returns the leaf child widget that is located at the given position.
WidgetType::Ptr get(const String &widgetName) const
Returns a pointer to a widget that was added earlier.
Definition Container.hpp:154
Widget::Ptr getFocusedChild() const
Returns the child widget that is focused inside this container.
Widget::Ptr getFocusedLeaf() const
Returns the leaf child widget that is focused inside this container.
std::shared_ptr< const Container > ConstPtr
Shared constant widget pointer.
Definition Container.hpp:48
Wrapper for durations.
Definition Duration.hpp:53
Class to store the position or size of a widget.
Definition Layout.hpp:321
std::shared_ptr< RootContainer > Ptr
Shared widget pointer.
Definition Container.hpp:649
static constexpr const char StaticWidgetType[]
Type name of the widget.
Definition Container.hpp:652
std::shared_ptr< const RootContainer > ConstPtr
Shared constant widget pointer.
Definition Container.hpp:650
bool isMouseOnWidget(Vector2f pos) const override
Returns whether the mouse position (which is relative to the parent widget) lies on top of the widget...
void draw(BackendRenderTarget &target, RenderStates states) const override
Draws all widgets to a render target.
void setFocused(bool focused) override
Focus or unfocus the widget.
Wrapper class to store strings.
Definition String.hpp:93
Namespace that contains all TGUI functions and classes.
Definition AbsoluteOrRelativeValue.hpp:36
KeyPressed event parameters.
Definition Event.hpp:168
MouseButton
Mouse buttons.
Definition Event.hpp:149
States used for drawing.
Definition RenderStates.hpp:38