FifeGUI 0.2.0
A C++ GUI library designed for games.
focushandler.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_FOCUSHANDLER_HPP_
6#define INCLUDE_FIFECHAN_FOCUSHANDLER_HPP_
7
8#include <vector>
9
10#include "fifechan/event.hpp"
11#include "fifechan/platform.hpp"
12
13namespace fcn
14{
15 class Widget;
16
32 class FIFEGUI_API FocusHandler
33 {
34 public:
35 virtual ~FocusHandler() = default;
36 FocusHandler();
37
38 FocusHandler(FocusHandler const &) = delete;
39 FocusHandler& operator=(FocusHandler const &) = delete;
40 FocusHandler(FocusHandler&&) = delete;
41 FocusHandler& operator=(FocusHandler&&) = delete;
42
52 virtual void requestFocus(Widget* widget);
53
63 virtual void requestModalFocus(Widget* widget);
64
80 virtual void requestModalMouseInputFocus(Widget* widget);
81
89 virtual void releaseModalFocus(Widget* widget);
90
99 virtual void releaseModalMouseInputFocus(Widget* widget);
100
108 virtual bool isFocused(Widget const * widget) const;
109
115 virtual Widget* getFocused() const;
116
123 virtual Widget* getModalFocused() const;
124
131 virtual Widget* getModalMouseInputFocused() const;
132
141 virtual void focusNext();
142
151 virtual void focusPrevious();
152
159 virtual void add(Widget* widget);
160
167 virtual void remove(Widget* widget);
168
173 virtual void focusNone();
174
181 virtual void tabNext();
182
189 virtual void tabPrevious();
190
198 virtual Widget* getDraggedWidget();
199
207 virtual void setDraggedWidget(Widget* draggedWidget);
208
217
225 virtual void setLastWidgetWithMouse(Widget* lastWidgetWithMouse);
226
234
241 virtual void setLastWidgetWithModalFocus(Widget* lastWidgetWithModalFocus);
242
250
258 virtual void setLastWidgetWithModalMouseInputFocus(Widget* lastWidgetWithModalMouseInputFocus);
259
267 virtual Widget* getLastWidgetPressed();
268
276 virtual void setLastWidgetPressed(Widget* lastWidgetPressed);
277
284 virtual void widgetHidden(Widget* widget);
285
286 protected:
292 virtual void distributeFocusLostEvent(Event const & focusEvent);
293
299 virtual void distributeFocusGainedEvent(Event const & focusEvent);
300
304 using WidgetVector = std::vector<Widget*>;
305
309 using WidgetIterator = WidgetVector::iterator;
310
316
321
327
333
339
344
349
354
359 };
360} // namespace fcn
361
362#endif // INCLUDE_FIFECHAN_FOCUSHANDLER_HPP_
Base class for all GUI event objects.
Definition event.hpp:24
Widget * mFocusedWidget
Holds the focused widget.
virtual Widget * getLastWidgetWithMouse()
Gets the last widget with the mouse.
std::vector< Widget * > WidgetVector
Typedef.
WidgetVector mWidgets
Holds the widgets currently being handled by the focus handler.
Widget * mDraggedWidget
Holds the dragged widget.
virtual void focusPrevious()
Focuses the previous widget added to a container.
virtual void widgetHidden(Widget *widget)
Informs the focus handler that a widget was hidden.
virtual void setLastWidgetWithMouse(Widget *lastWidgetWithMouse)
Sets the last widget with the mouse.
virtual void focusNone()
Focuses nothing.
virtual Widget * getDraggedWidget()
Gets the widget being dragged.
Widget * mLastWidgetWithModalMouseInputFocus
Holds the last widget with modal mouse input focus.
Widget * mLastWidgetPressed
Holds the last widget pressed.
virtual void add(Widget *widget)
Adds a widget to by handles by the focus handler.
virtual void setLastWidgetWithModalFocus(Widget *lastWidgetWithModalFocus)
Sets the last widget with modal focus.
virtual void releaseModalFocus(Widget *widget)
Releases modal focus if the widget has modal focus.
virtual void setLastWidgetPressed(Widget *lastWidgetPressed)
Sets the last widget pressed.
virtual Widget * getLastWidgetWithModalMouseInputFocus()
Gets the last widget with modal mouse input focus.
virtual Widget * getLastWidgetWithModalFocus()
Gets the last widget with modal focus.
virtual void remove(Widget *widget)
Removes a widget from the focus handler.
Widget * mModalMouseInputFocusedWidget
Holds the modal mouse input focused widget.
virtual bool isFocused(Widget const *widget) const
Checks if a widget is focused.
virtual void distributeFocusGainedEvent(Event const &focusEvent)
Distributes a focus gained event.
virtual void tabPrevious()
Focuses the previous widget which allows tabbing in unless current focused widget disallows tabbing o...
Widget * mLastWidgetWithModalFocus
Holds the last widget with modal focus.
virtual void requestModalFocus(Widget *widget)
Requests modal focus for a widget.
virtual void tabNext()
Focuses the next widget which allows tabbing in unless the current focused Widget disallows tabbing o...
virtual void distributeFocusLostEvent(Event const &focusEvent)
Distributes a focus lost event.
virtual void focusNext()
Focuses the next widget added to a container.
WidgetVector::iterator WidgetIterator
Typedef.
Widget * mModalFocusedWidget
Holds the modal focused widget.
virtual Widget * getModalFocused() const
Gets the widget with modal focus.
virtual void setDraggedWidget(Widget *draggedWidget)
Sets the widget being dragged.
virtual void requestFocus(Widget *widget)
Requests focus for a widget.
virtual Widget * getModalMouseInputFocused() const
Gets the widget with modal mouse input focus.
virtual Widget * getLastWidgetPressed()
Gets the last widget pressed.
virtual void requestModalMouseInputFocus(Widget *widget)
Requests modal mouse input focus for a widget.
Widget * mLastWidgetWithMouse
Holds the last widget with the mouse.
virtual void setLastWidgetWithModalMouseInputFocus(Widget *lastWidgetWithModalMouseInputFocus)
Sets the last widget with modal mouse input focus.
virtual void releaseModalMouseInputFocus(Widget *widget)
Releases modal mouse input focus if the widget has modal mouse input focus.
virtual Widget * getFocused() const
Gets the widget with focus.
Abstract base class defining the common behavior, properties, and lifecycle of all GUI elements.
Definition widget.hpp:45