TGUI 1.11
Loading...
Searching...
No Matches
Signal.hpp
1
2//
3// TGUI - Texus' Graphical User Interface
4// Copyright (C) 2012-2025 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_HPP
26#define TGUI_SIGNAL_HPP
27
29
30#include <TGUI/Global.hpp>
31#include <TGUI/String.hpp>
32#include <TGUI/Color.hpp>
33#include <TGUI/Vector2.hpp>
34#include <TGUI/Animation.hpp>
35#include <TGUI/Filesystem.hpp>
36
37#include <unordered_map>
38#include <type_traits>
39#include <functional>
40#include <typeindex>
41#include <memory>
42#include <vector>
43#include <deque>
44
45#undef MessageBox // windows.h defines MessageBox when NOMB isn't defined before including windows.h
46
48
49namespace tgui
50{
51 class Widget;
52 class ChildWindow;
53 class Panel;
54
58 class TGUI_API Signal
59 {
60 public:
61
65 virtual ~Signal() = default;
66
73 Signal(String&& name, std::size_t extraParameters = 0) :
74 m_name{std::move(name)}
75 {
76 if (1 + extraParameters > m_parameters.size())
77 m_parameters.resize(1 + extraParameters);
78 }
79
83 Signal(const Signal& other);
84
88 Signal(Signal&& other) noexcept = default;
89
93 Signal& operator=(const Signal& other);
94
98 Signal& operator=(Signal&& other) noexcept = default;
99
108 template <typename Func, typename... BoundArgs>
109 unsigned int operator()(const Func& func, const BoundArgs&... args)
110 {
111 return connect(func, args...);
112 }
113
122 template <typename Func, typename... BoundArgs, typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&...)>>::value>* = nullptr>
123 unsigned int connect(const Func& func, const BoundArgs&... args)
124 {
125 const auto id = ++m_lastSignalId;
126#if defined(__cpp_if_constexpr) && (__cpp_if_constexpr >= 201606L)
127 if constexpr(sizeof...(BoundArgs) == 0)
128 m_handlers[id] = func;
129 else
130#endif
131 {
132 m_handlers[id] = [=]{ invokeFunc(func, args...); };
133 }
134
135 return id;
136 }
137
146 template <typename Func, typename... BoundArgs, typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., const std::shared_ptr<Widget>&, const String&)>>::value>* = nullptr>
147 unsigned int connectEx(const Func& func, const BoundArgs&... args)
148 {
149 // The name is copied so that the lambda does not depend on the 'this' pointer
150 return connect([func, name=m_name, args...](){ invokeFunc(func, args..., getWidget(), name); });
151 }
152
160 bool disconnect(unsigned int id);
161
166
174 bool emit(const Widget* widget);
175
181 TGUI_NODISCARD String getName() const
182 {
183 return m_name;
184 }
185
194 void setEnabled(bool enabled)
195 {
196 m_enabled = enabled;
197 }
198
207 TGUI_NODISCARD bool isEnabled() const
208 {
209 return m_enabled;
210 }
211
213 protected:
214
218 static std::shared_ptr<Widget> getWidget();
219
223 template <typename Type>
224 TGUI_NODISCARD static const std::decay_t<Type>& dereferenceParam(std::size_t paramIndex)
225 {
226 return *static_cast<const std::decay_t<Type>*>(m_parameters[paramIndex]);
227 }
228
229#if defined(__cpp_lib_invoke) && (__cpp_lib_invoke >= 201411L)
230 template <typename Func, typename... Args>
231 static void invokeFunc(Func&& func, Args&&... args)
232 {
233 std::invoke(std::forward<Func>(func), std::forward<Args>(args)...);
234 }
235#else
236 // std::invoke only exists in c++17 so we use our own implementation to support c++14 compilers
237 template <typename Func, typename... Args, typename std::enable_if_t<std::is_member_pointer<std::decay_t<Func>>::value>* = nullptr>
238 static void invokeFunc(Func&& func, Args&&... args)
239 {
240 (std::mem_fn(func))(std::forward<Args>(args)...);
241 }
242
243 template <typename Func, typename... Args, typename std::enable_if_t<!std::is_member_pointer<std::decay_t<Func>>::value>* = nullptr>
244 static void invokeFunc(Func&& func, Args&&... args)
245 {
246 std::forward<Func>(func)(std::forward<Args>(args)...);
247 }
248#endif
249
251 protected:
252
253 bool m_enabled = true;
254 String m_name;
255 std::unordered_map<unsigned int, std::function<void()>> m_handlers;
256
257 static unsigned int m_lastSignalId;
258 static std::deque<const void*> m_parameters;
259 };
260
267 template <typename T>
268 class SignalTyped : public Signal
269 {
270 public:
271
276 Signal{std::move(name), 1}
277 {
278 }
279
288 template <typename Func, typename... BoundArgs>
289 unsigned int operator()(const Func& func, const BoundArgs&... args)
290 {
291 return connect(func, args...);
292 }
293
302 template <typename Func, typename... BoundArgs, typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&...)>>::value>* = nullptr>
303 unsigned int connect(const Func& func, const BoundArgs&... args)
304 {
305 return Signal::connect(func, args...);
306 }
307
316 template <typename Func, typename... BoundArgs, typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., T)>>::value>* = nullptr>
317 unsigned int connect(const Func& func, const BoundArgs&... args)
318 {
319 return Signal::connect([=]{ invokeFunc(func, args..., dereferenceParam<T>(1)); });
320 }
321
330 bool emit(const Widget* widget, T param)
331 {
332 if (m_handlers.empty())
333 return false;
334
335 m_parameters[1] = static_cast<const void*>(&param);
336 return Signal::emit(widget);
337 }
338 };
339
346 template <typename T1, typename T2>
347 class SignalTyped2 : public Signal
348 {
349 public:
350
355 Signal{std::move(name), 2}
356 {
357 }
358
367 template <typename Func, typename... BoundArgs>
368 unsigned int operator()(const Func& func, const BoundArgs&... args)
369 {
370 return connect(func, args...);
371 }
372
381 template <typename Func, typename... BoundArgs, typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&...)>>::value>* = nullptr>
382 unsigned int connect(const Func& func, const BoundArgs&... args)
383 {
384 return Signal::connect(func, args...);
385 }
386
395 template <typename Func, typename... BoundArgs, typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., T1, T2)>>::value>* = nullptr>
396 unsigned int connect(const Func& func, const BoundArgs&... args)
397 {
398 return Signal::connect([=]{ invokeFunc(func, args..., dereferenceParam<T1>(1), dereferenceParam<T2>(2)); });
399 }
400
410 bool emit(const Widget* widget, T1 param1, T2 param2)
411 {
412 if (m_handlers.empty())
413 return false;
414
415 m_parameters[1] = static_cast<const void*>(&param1);
416 m_parameters[2] = static_cast<const void*>(&param2);
417 return Signal::emit(widget);
418 }
419 };
420
430
437 class TGUI_API SignalChildWindow : public Signal
438 {
439 public:
440
445 Signal{std::move(name), 1}
446 {
447 }
448
457 template <typename Func, typename... BoundArgs>
458 unsigned int operator()(const Func& func, const BoundArgs&... args)
459 {
460 return connect(func, args...);
461 }
462
471 template <typename Func, typename... BoundArgs, typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&...)>>::value>* = nullptr>
472 unsigned int connect(const Func& func, const BoundArgs&... args)
473 {
474 return Signal::connect(func, args...);
475 }
476
485 template <typename Func, typename... BoundArgs, typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., const std::shared_ptr<ChildWindow>&)>>::value>* = nullptr>
486 unsigned int connect(const Func& func, const BoundArgs&... args)
487 {
488 return Signal::connect([=]{ invokeFunc(func, args..., dereferenceChildWindow()); });
489 }
490
498 bool emit(ChildWindow* param);
499
501 private:
502
506 static std::shared_ptr<ChildWindow> dereferenceChildWindow();
507
509 };
510
519 class TGUI_API SignalItem : public Signal
520 {
521 public:
522
527 Signal{std::move(name), 3}
528 {
529 }
530
539 template <typename Func, typename... BoundArgs>
540 unsigned int operator()(const Func& func, const BoundArgs&... args)
541 {
542 return connect(func, args...);
543 }
544
553 template <typename Func, typename... BoundArgs, typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&...)>>::value>* = nullptr>
554 unsigned int connect(const Func& func, const BoundArgs&... args)
555 {
556 return Signal::connect(func, args...);
557 }
558
567 template <typename Func, typename... BoundArgs, typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., int)>>::value>* = nullptr>
568 unsigned int connect(const Func& func, const BoundArgs&... args)
569 {
570 return Signal::connect([=]{ invokeFunc(func, args..., dereferenceParam<int>(1)); });
571 }
572
581 template <typename Func, typename... BoundArgs, typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., const String&)>>::value>* = nullptr>
582 unsigned int connect(const Func& func, const BoundArgs&... args)
583 {
584 return Signal::connect([=]{ invokeFunc(func, args..., dereferenceParam<String>(2)); });
585 }
586
595 template <typename Func, typename... BoundArgs, typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., const String&, const String&)>>::value>* = nullptr>
596 unsigned int connect(const Func& func, const BoundArgs&... args)
597 {
598 return Signal::connect([=]{ invokeFunc(func, args..., dereferenceParam<String>(2), dereferenceParam<String>(3)); });
599 }
600
611 bool emit(const Widget* widget, int index, const String& item, const String& id);
612
614 };
615
627 class TGUI_API SignalPanelListBoxItem : public Signal
628 {
629 public:
634 Signal{std::move(name), 3}
635 { }
636
645 template<typename Func, typename... BoundArgs>
646 unsigned int operator()(const Func& func, const BoundArgs&... args)
647 {
648 return connect(func, args...);
649 }
650
659 template<typename Func, typename... BoundArgs, std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&...)>>::value>* = nullptr>
660 unsigned int connect(const Func& func, const BoundArgs&... args)
661 {
662 return Signal::connect(func, args...);
663 }
664
673 template<typename Func, typename... BoundArgs, std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., int)>>::value>* = nullptr>
674 unsigned int connect(const Func& func, const BoundArgs&... args)
675 {
676 return Signal::connect([=] { invokeFunc(func, args..., dereferenceParam<int>(1)); });
677 }
678
687 template<typename Func, typename... BoundArgs, std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., const std::shared_ptr<Panel>&)>>::value>* = nullptr>
688 unsigned int connect(const Func& func, const BoundArgs&... args)
689 {
690 return Signal::connect([=] { invokeFunc(func, args..., dereferencePanel()); });
691 }
692
701 template<typename Func, typename... BoundArgs, std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., const String&)>>::value>* = nullptr>
702 unsigned int connect(const Func& func, const BoundArgs&... args)
703 {
704 return Signal::connect([=] { invokeFunc(func, args..., dereferenceParam<String>(3)); });
705 }
706
715 template<typename Func, typename... BoundArgs, std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., int, const std::shared_ptr<Panel>&)>>::value>* = nullptr>
716 unsigned int connect(const Func& func, const BoundArgs&... args)
717 {
718 return Signal::connect([=] { invokeFunc(func, args..., dereferenceParam<int>(1), dereferencePanel()); });
719 }
720
729 template<typename Func, typename... BoundArgs, std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., const std::shared_ptr<Panel>&, const String&)>>::value>* = nullptr>
730 unsigned int connect(const Func& func, const BoundArgs&... args)
731 {
732 return Signal::connect([=] { invokeFunc(func, args..., dereferencePanel(), dereferenceParam<String>(3)); });
733 }
734
743 template<typename Func, typename... BoundArgs, std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., int, const std::shared_ptr<Panel>&, const String&)>>::value>* = nullptr>
744 unsigned int connect(const Func& func, const BoundArgs&... args)
745 {
746 return Signal::connect([=] { invokeFunc(func, args..., dereferenceParam<int>(1), dereferencePanel(), dereferenceParam<String>(3)); });
747 }
748
759 bool emit(const Widget* widget, int index, const std::shared_ptr<Panel>& panel, const String& id);
760
762 private:
763
767 static std::shared_ptr<Panel> dereferencePanel();
768
770 };
771
780 class TGUI_API SignalFileDialogPaths : public Signal
781 {
782 public:
783
788 Signal{std::move(name), 3}
789 {
790 }
791
800 template <typename Func, typename... BoundArgs>
801 unsigned int operator()(const Func& func, const BoundArgs&... args)
802 {
803 return connect(func, args...);
804 }
805
814 template <typename Func, typename... BoundArgs, typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&...)>>::value>* = nullptr>
815 unsigned int connect(const Func& func, const BoundArgs&... args)
816 {
817 return Signal::connect(func, args...);
818 }
819
828 template <typename Func, typename... BoundArgs, typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., const String&)>>::value>* = nullptr>
829 unsigned int connect(const Func& func, const BoundArgs&... args)
830 {
831 return Signal::connect([=]{ invokeFunc(func, args..., dereferenceParam<String>(1)); });
832 }
833
842 template <typename Func, typename... BoundArgs, typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., const Filesystem::Path&)>>::value>* = nullptr>
843 unsigned int connect(const Func& func, const BoundArgs&... args)
844 {
845 return Signal::connect([=]{ invokeFunc(func, args..., dereferenceParam<Filesystem::Path>(2)); });
846 }
847
856 template <typename Func, typename... BoundArgs, typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., const std::vector<Filesystem::Path>&)>>::value>* = nullptr>
857 unsigned int connect(const Func& func, const BoundArgs&... args)
858 {
859 return Signal::connect([=]{ invokeFunc(func, args..., dereferenceParam<std::vector<Filesystem::Path>>(3)); });
860 }
861
870 bool emit(const Widget* widget, const std::vector<Filesystem::Path>& paths);
871 };
872
881 class TGUI_API SignalShowEffect : public Signal
882 {
883 public:
884
889 Signal{std::move(name), 2}
890 {
891 }
892
901 template <typename Func, typename... BoundArgs>
902 unsigned int operator()(const Func& func, const BoundArgs&... args)
903 {
904 return connect(func, args...);
905 }
906
915 template <typename Func, typename... BoundArgs, typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&...)>>::value>* = nullptr>
916 unsigned int connect(const Func& func, const BoundArgs&... args)
917 {
918 return Signal::connect(func, args...);
919 }
920
929 template <typename Func, typename... BoundArgs, typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., ShowEffectType)>>::value>* = nullptr>
930 unsigned int connect(const Func& func, const BoundArgs&... args)
931 {
932 return Signal::connect([=]{ invokeFunc(func, args..., dereferenceParam<ShowEffectType>(1)); });
933 }
934
943 template <typename Func, typename... BoundArgs, typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., bool)>>::value>* = nullptr>
944 unsigned int connect(const Func& func, const BoundArgs&... args)
945 {
946 return Signal::connect([=]{ invokeFunc(func, args..., dereferenceParam<bool>(2)); });
947 }
948
957 template <typename Func, typename... BoundArgs, typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., ShowEffectType, bool)>>::value>* = nullptr>
958 unsigned int connect(const Func& func, const BoundArgs&... args)
959 {
960 return Signal::connect([=]{ invokeFunc(func, args..., dereferenceParam<ShowEffectType>(1), dereferenceParam<bool>(2)); });
961 }
962
972 bool emit(const Widget* widget, ShowEffectType type, bool visible);
973
975 };
976
983 class TGUI_API SignalAnimationType : public Signal
984 {
985 public:
986
991 Signal{std::move(name), 1}
992 {
993 }
994
1003 template <typename Func, typename... BoundArgs>
1004 unsigned int operator()(const Func& func, const BoundArgs&... args)
1005 {
1006 return connect(func, args...);
1007 }
1008
1017 template <typename Func, typename... BoundArgs, typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&...)>>::value>* = nullptr>
1018 unsigned int connect(const Func& func, const BoundArgs&... args)
1019 {
1020 return Signal::connect(func, args...);
1021 }
1022
1031 template <typename Func, typename... BoundArgs, typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., AnimationType)>>::value>* = nullptr>
1032 unsigned int connect(const Func& func, const BoundArgs&... args)
1033 {
1034 return Signal::connect([=]{ invokeFunc(func, args..., dereferenceParam<AnimationType>(1)); });
1035 }
1036
1045 bool emit(const Widget* widget, AnimationType type);
1046
1048 };
1049
1057 class TGUI_API SignalItemHierarchy : public Signal
1058 {
1059 public:
1060
1065 Signal{std::move(name), 2}
1066 {
1067 }
1068
1077 template <typename Func, typename... BoundArgs>
1078 unsigned int operator()(const Func& func, const BoundArgs&... args)
1079 {
1080 return connect(func, args...);
1081 }
1082
1091 template <typename Func, typename... BoundArgs, typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&...)>>::value>* = nullptr>
1092 unsigned int connect(const Func& func, const BoundArgs&... args)
1093 {
1094 return Signal::connect(func, args...);
1095 }
1096
1105 template <typename Func, typename... BoundArgs, typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., const String&)>>::value>* = nullptr>
1106 unsigned int connect(const Func& func, const BoundArgs&... args)
1107 {
1108 return Signal::connect([=]{ invokeFunc(func, args..., dereferenceParam<String>(1)); });
1109 }
1110
1119 template <typename Func, typename... BoundArgs, typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., const std::vector<String>&)>>::value>* = nullptr>
1120 unsigned int connect(const Func& func, const BoundArgs&... args)
1121 {
1122 return Signal::connect([=]{ invokeFunc(func, args..., dereferenceParam<std::vector<String>>(2)); });
1123 }
1124
1134 bool emit(const Widget* widget, const String& item, const std::vector<String>& fullItem);
1135
1137 };
1138
1140}
1141
1143
1144#endif // TGUI_SIGNAL_HPP
Child window widget.
Definition ChildWindow.hpp:43
Object to represent paths on a filesystem.
Definition Filesystem.hpp:56
Group of widgets that has a background color and optional borders.
Definition Panel.hpp:39
unsigned int connect(const Func &func, const BoundArgs &... args)
Connects a signal handler that will be called when this signal is emitted.
Definition Signal.hpp:1018
unsigned int operator()(const Func &func, const BoundArgs &... args)
Connects a signal handler that will be called when this signal is emitted.
Definition Signal.hpp:1004
SignalAnimationType(String &&name)
Constructor.
Definition Signal.hpp:990
bool emit(const Widget *widget, AnimationType type)
Call all connected signal handlers.
SignalChildWindow(String &&name)
Constructor.
Definition Signal.hpp:444
bool emit(ChildWindow *param)
Call all connected signal handlers.
unsigned int connect(const Func &func, const BoundArgs &... args)
Connects a signal handler that will be called when this signal is emitted.
Definition Signal.hpp:486
unsigned int operator()(const Func &func, const BoundArgs &... args)
Connects a signal handler that will be called when this signal is emitted.
Definition Signal.hpp:458
unsigned int connect(const Func &func, const BoundArgs &... args)
Connects a signal handler that will be called when this signal is emitted.
Definition Signal.hpp:472
unsigned int operator()(const Func &func, const BoundArgs &... args)
Connects a signal handler that will be called when this signal is emitted.
Definition Signal.hpp:801
unsigned int connect(const Func &func, const BoundArgs &... args)
Connects a signal handler that will be called when this signal is emitted.
Definition Signal.hpp:815
unsigned int connect(const Func &func, const BoundArgs &... args)
Connects a signal handler that will be called when this signal is emitted.
Definition Signal.hpp:857
bool emit(const Widget *widget, const std::vector< Filesystem::Path > &paths)
Call all connected signal handlers.
SignalFileDialogPaths(String &&name)
Constructor.
Definition Signal.hpp:787
unsigned int connect(const Func &func, const BoundArgs &... args)
Connects a signal handler that will be called when this signal is emitted.
Definition Signal.hpp:1120
unsigned int connect(const Func &func, const BoundArgs &... args)
Connects a signal handler that will be called when this signal is emitted.
Definition Signal.hpp:1092
SignalItemHierarchy(String &&name)
Constructor.
Definition Signal.hpp:1064
bool emit(const Widget *widget, const String &item, const std::vector< String > &fullItem)
Call all connected signal handlers.
unsigned int operator()(const Func &func, const BoundArgs &... args)
Connects a signal handler that will be called when this signal is emitted.
Definition Signal.hpp:1078
bool emit(const Widget *widget, int index, const String &item, const String &id)
Call all connected signal handlers.
unsigned int operator()(const Func &func, const BoundArgs &... args)
Connects a signal handler that will be called when this signal is emitted.
Definition Signal.hpp:540
SignalItem(String &&name)
Constructor.
Definition Signal.hpp:526
unsigned int connect(const Func &func, const BoundArgs &... args)
Connects a signal handler that will be called when this signal is emitted.
Definition Signal.hpp:554
unsigned int connect(const Func &func, const BoundArgs &... args)
Connects a signal handler that will be called when this signal is emitted.
Definition Signal.hpp:688
unsigned int connect(const Func &func, const BoundArgs &... args)
Connects a signal handler that will be called when this signal is emitted.
Definition Signal.hpp:660
SignalPanelListBoxItem(String &&name)
Constructor.
Definition Signal.hpp:633
bool emit(const Widget *widget, int index, const std::shared_ptr< Panel > &panel, const String &id)
Call all connected signal handlers.
unsigned int operator()(const Func &func, const BoundArgs &... args)
Connects a signal handler that will be called when this signal is emitted.
Definition Signal.hpp:646
unsigned int connect(const Func &func, const BoundArgs &... args)
Connects a signal handler that will be called when this signal is emitted.
Definition Signal.hpp:916
unsigned int operator()(const Func &func, const BoundArgs &... args)
Connects a signal handler that will be called when this signal is emitted.
Definition Signal.hpp:902
bool emit(const Widget *widget, ShowEffectType type, bool visible)
Call all connected signal handlers.
SignalShowEffect(String &&name)
Constructor.
Definition Signal.hpp:888
Signal to which the user can subscribe to get callbacks from.
Definition Signal.hpp:348
bool emit(const Widget *widget, T1 param1, T2 param2)
Call all connected signal handlers.
Definition Signal.hpp:410
unsigned int connect(const Func &func, const BoundArgs &... args)
Connects a signal handler that will be called when this signal is emitted.
Definition Signal.hpp:382
SignalTyped2(String &&name)
Constructor.
Definition Signal.hpp:354
unsigned int operator()(const Func &func, const BoundArgs &... args)
Connects a signal handler that will be called when this signal is emitted.
Definition Signal.hpp:368
Signal to which the user can subscribe to get callbacks from.
Definition Signal.hpp:269
SignalTyped(String &&name)
Constructor.
Definition Signal.hpp:275
unsigned int operator()(const Func &func, const BoundArgs &... args)
Connects a signal handler that will be called when this signal is emitted.
Definition Signal.hpp:289
bool emit(const Widget *widget, T param)
Call all connected signal handlers.
Definition Signal.hpp:330
unsigned int connect(const Func &func, const BoundArgs &... args)
Connects a signal handler that will be called when this signal is emitted.
Definition Signal.hpp:303
bool emit(const Widget *widget)
Call all connected signal handlers.
Signal(const Signal &other)
Copy constructor which will not copy the signal handlers.
static const std::decay_t< Type > & dereferenceParam(std::size_t paramIndex)
Turns the void* parameters back into its original type right before calling the callback function.
Definition Signal.hpp:224
unsigned int operator()(const Func &func, const BoundArgs &... args)
Connects a signal handler that will be called when this signal is emitted.
Definition Signal.hpp:109
bool isEnabled() const
Returns whether this signal calls the connected functions when triggered.
Definition Signal.hpp:207
void disconnectAll()
Disconnect all signal handler from this signal.
void setEnabled(bool enabled)
Changes whether this signal calls the connected functions when triggered.
Definition Signal.hpp:194
bool disconnect(unsigned int id)
Disconnect a signal handler from this signal.
Signal & operator=(const Signal &other)
Copy assignment operator which will not copy the signal handlers.
String getName() const
Returns the name given to the signal.
Definition Signal.hpp:181
unsigned int connect(const Func &func, const BoundArgs &... args)
Connects a signal handler that will be called when this signal is emitted.
Definition Signal.hpp:123
virtual ~Signal()=default
Default destructor.
Signal(String &&name, std::size_t extraParameters=0)
Constructor.
Definition Signal.hpp:73
Signal & operator=(Signal &&other) noexcept=default
Default move assignment operator.
Signal(Signal &&other) noexcept=default
Default move constructor.
static std::shared_ptr< Widget > getWidget()
Extracts the widget stored in the first parameter.
unsigned int connectEx(const Func &func, const BoundArgs &... args)
Connects a signal handler that will be called when this signal is emitted.
Definition Signal.hpp:147
Wrapper class to store strings.
Definition String.hpp:94
The parent class for every widget.
Definition Widget.hpp:84
Namespace that contains all TGUI functions and classes.
Definition AbsoluteOrRelativeValue.hpp:36
SignalTyped< int > SignalInt
Signal with one "int" as optional unbound parameter.
Definition Signal.hpp:421
ShowEffectType
Type of effect to show/hide widget.
Definition Animation.hpp:44
SignalTyped2< float, float > SignalRange
Signal with two floats as optional unbound parameters.
Definition Signal.hpp:429
SignalTyped< Color > SignalColor
Signal with one "Color" as optional unbound parameter.
Definition Signal.hpp:425
SignalTyped< unsigned int > SignalUInt
Signal with one "unsigned int" as optional unbound parameter.
Definition Signal.hpp:422
SignalTyped< Vector2f > SignalVector2f
Signal with one "Vector2f" as optional unbound parameter.
Definition Signal.hpp:427
SignalTyped< bool > SignalBool
Signal with one "bool" as optional unbound parameter.
Definition Signal.hpp:423
AnimationType
Type of animation.
Definition Animation.hpp:62
SignalTyped< FloatRect > SignalFloatRect
Signal with one "FloatRect" as optional unbound parameter.
Definition Signal.hpp:428
SignalTyped< const String & > SignalString
Signal with one "String" as optional unbound parameter.
Definition Signal.hpp:426
SignalTyped< float > SignalFloat
Signal with one "float" as optional unbound parameter.
Definition Signal.hpp:424