TGUI
=
=
Download
Tutorials
1.x
0.9
0.8
Documentation
1.x
0.9
0.8
Examples
1.x
0.9
0.8
Community
TGUI
1.x-dev
Toggle main menu visibility
Loading...
Searching...
No Matches
include
TGUI
SignalManager.hpp
1
2
//
3
// TGUI - Texus' Graphical User Interface
4
// Copyright (C) 2012-2026 Bruno Van de Velde (vdv_b@tgui.eu)
5
//
6
// This software is provided 'as-is', without any express or implied warranty.
7
// In no event will the authors be held liable for any damages arising from the use of this software.
8
//
9
// Permission is granted to anyone to use this software for any purpose,
10
// including commercial applications, and to alter it and redistribute it freely,
11
// subject to the following restrictions:
12
//
13
// 1. The origin of this software must not be misrepresented;
14
// you must not claim that you wrote the original software.
15
// If you use this software in a product, an acknowledgment
16
// in the product documentation would be appreciated but is not required.
17
//
18
// 2. Altered source versions must be plainly marked as such,
19
// and must not be misrepresented as being the original software.
20
//
21
// 3. This notice may not be removed or altered from any source distribution.
22
//
24
25
#ifndef TGUI_SIGNAL_MANAGER_HPP
26
#define TGUI_SIGNAL_MANAGER_HPP
27
28
#include <TGUI/Widget.hpp>
29
30
#include <memory>
31
#include <unordered_map>
32
34
35
namespace
tgui
36
{
38
39
class
TGUI_API
SignalManager
40
{
41
public
:
42
using
Ptr
= std::shared_ptr<SignalManager>;
43
using
ConstPtr
= std::shared_ptr<const SignalManager>;
44
45
using
Delegate = std::function<void()>;
46
using
DelegateEx = std::function<void(std::shared_ptr<Widget>,
const
String
&)>;
47
48
using
Weak = std::weak_ptr<Widget>;
49
using
SignalID =
unsigned
int;
50
51
struct
SignalTuple
52
{
53
String
widgetName;
54
String
signalName;
55
std::pair<Delegate, DelegateEx> func;
56
};
57
58
struct
ConnectedSignalTuple
59
{
60
SignalID signalId;
61
Weak widget;
62
unsigned
int
signalWidgetID;
63
64
ConnectedSignalTuple(SignalID sigId, Weak widgetPtr,
unsigned
int
widgetId) :
65
signalId(sigId),
66
widget(std::move(widgetPtr)),
67
signalWidgetID(widgetId)
68
{
69
}
70
};
71
75
SignalManager
() =
default
;
76
80
virtual
~SignalManager
() =
default
;
81
87
static
void
setDefaultSignalManager
(
const
SignalManager::Ptr
& manager);
88
94
[[nodiscard]]
static
SignalManager::Ptr
getSignalManager
();
95
106
template
<
typename
Func,
typename
... BoundArgs>
107
unsigned
int
connect
(
String
widgetName,
String
signalName, Func&& handler,
const
BoundArgs&... args);
108
116
virtual
bool
disconnect
(
unsigned
int
id
);
117
121
virtual
void
disconnectAll
();
122
126
virtual
void
add(
const
Widget::Ptr
& widgetPtr);
127
131
virtual
void
remove(
Widget
* widget);
132
134
135
private
:
139
unsigned
int
generateUniqueId();
140
141
unsigned
int
m_lastId = 0;
142
144
145
protected
:
149
[[nodiscard]]
static
std::pair<Delegate, DelegateEx> makeSignal(
const
Delegate& handle);
150
154
[[nodiscard]]
static
std::pair<Delegate, DelegateEx> makeSignalEx(
const
DelegateEx& handle);
155
163
virtual
void
connect
(SignalID
id
);
164
166
167
static
SignalManager::Ptr
m_manager;
168
169
std::vector<Weak> m_widgets;
170
std::unordered_map<SignalID, SignalTuple> m_signals;
171
std::vector<ConnectedSignalTuple> m_connectedSignals;
172
};
173
175
176
template
<
typename
Func,
typename
... BoundArgs>
177
unsigned
int
SignalManager::connect
(
String
widgetName,
String
signalName, Func&& handler,
const
BoundArgs&... args)
178
{
179
const
unsigned
int
id
= generateUniqueId();
180
auto
fwdHandler = std::forward<Func>(handler);
181
182
constexpr
bool
takesCallerArgs = std::is_invocable_v<Func, BoundArgs...,
const
std::shared_ptr<Widget>&,
const
String
&>;
183
if
constexpr
(takesCallerArgs)
184
{
185
m_signals[id] = {widgetName,
186
signalName,
187
makeSignalEx([f = fwdHandler, args...](
const
std::shared_ptr<Widget>& w,
const
String
& s)
188
{ std::invoke(f, args..., w, s); })};
189
}
190
else
191
{
192
m_signals[id] = {widgetName, signalName, makeSignal([f = fwdHandler, args...] { std::invoke(f, args...); })};
193
}
194
195
connect
(
id
);
196
return
id;
197
}
198
}
// namespace tgui
199
200
#endif
// TGUI_SIGNAL_MANAGER_HPP
tgui::SignalManager::connect
virtual void connect(SignalID id)
Function that is called each time new signal is created with it id.
tgui::SignalManager::disconnect
virtual bool disconnect(unsigned int id)
Disconnect a signal handler.
tgui::SignalManager::ConstPtr
std::shared_ptr< const SignalManager > ConstPtr
Shared constant widget pointer.
Definition
SignalManager.hpp:43
tgui::SignalManager::disconnectAll
virtual void disconnectAll()
Disconnect all signal handler.
tgui::SignalManager::SignalManager
SignalManager()=default
Default constructor.
tgui::SignalManager::~SignalManager
virtual ~SignalManager()=default
Destructor.
tgui::SignalManager::connect
unsigned int connect(String widgetName, String signalName, Func &&handler, const BoundArgs &... args)
Connects a signal handler that will be called when this signal is emitted.
Definition
SignalManager.hpp:177
tgui::SignalManager::getSignalManager
static SignalManager::Ptr getSignalManager()
Retrieves Signal Manager that will be used to operate a signal.
tgui::SignalManager::setDefaultSignalManager
static void setDefaultSignalManager(const SignalManager::Ptr &manager)
Sets Signal Manager that will be used to operate a signal.
tgui::SignalManager::Ptr
std::shared_ptr< SignalManager > Ptr
Shared widget pointer.
Definition
SignalManager.hpp:42
tgui::String
Wrapper class to store strings.
Definition
String.hpp:94
tgui::Widget
The parent class for every widget.
Definition
Widget.hpp:83
tgui::Widget::Ptr
std::shared_ptr< Widget > Ptr
Shared widget pointer.
Definition
Widget.hpp:85
tgui
Namespace that contains all TGUI functions and classes.
Definition
AbsoluteOrRelativeValue.hpp:37
tgui::SignalManager::SignalTuple
Definition
SignalManager.hpp:52
Generated on
for TGUI by
1.18.0