26#ifndef TGUI_SIGNAL_MANAGER_IMPL_HPP
27#define TGUI_SIGNAL_MANAGER_IMPL_HPP
29#include <TGUI/SignalImpl.hpp>
30#include <TGUI/SignalManager.hpp>
38#if defined(__cpp_if_constexpr) && (__cpp_if_constexpr >= 201606L)
39 template <
typename Func,
typename... BoundArgs>
40 unsigned int SignalManager::connect(std::string widgetName, std::string signalName, Func&& handler,
const BoundArgs&... args)
42 const unsigned int id = generateUniqueId();
44 if constexpr (std::is_convertible_v<Func, std::function<void(
const BoundArgs&...)>>
45 && std::is_invocable_v<
decltype(&handler), BoundArgs...>
46 && !std::is_function_v<Func>)
49 m_signals[id] = {widgetName, signalName, makeSignal([=, f=std::function<
void(
const BoundArgs&...)>(handler)]{ std::invoke(f, args...); })};
51 else if constexpr (std::is_convertible_v<Func, std::function<void(
const BoundArgs&...)>>)
54 m_signals[id] = {widgetName, signalName, makeSignal([=]{ std::invoke(handler, args...); })};
56 else if constexpr (std::is_convertible_v<Func, std::function<void(
const BoundArgs&...,
const std::shared_ptr<Widget>&,
const std::string&)>>
57 && std::is_invocable_v<
decltype(&handler), BoundArgs...,
const std::shared_ptr<Widget>&,
const std::string&>
58 && !std::is_function_v<Func>)
61 m_signals[id] = {widgetName, signalName, makeSignal([=, f=std::function<
void(
const BoundArgs&...,
const std::shared_ptr<Widget>& w,
const std::string& s)>(handler)](
const std::shared_ptr<Widget>& w,
const std::string& s){ std::invoke(f, args..., w, s); })};
66 m_signals[id] = {widgetName, signalName, makeSignal([=](
const std::shared_ptr<Widget>& w,
const std::string& s){ std::invoke(handler, args..., w, s); })};
74 template <
typename Func,
typename... Args,
typename std::enable_if<std::is_convertible<Func, std::function<void(
const Args&...)>>::value>::type*>
75 unsigned int SignalManager::connect(std::string widgetName, std::string signalName, Func&& handler,
const Args&... args)
77 const unsigned int id = generateUniqueId();
78 m_signals[id] = {widgetName, signalName, makeSignal([f=std::function<
void(
const Args&...)>(handler),args...](){ f(args...); })};
84 template <
typename Func,
typename... BoundArgs,
typename std::enable_if<!std::is_convertible<Func, std::function<void(
const BoundArgs&...)>>::value
85 && std::is_convertible<Func, std::function<void(
const BoundArgs&..., std::shared_ptr<Widget>,
const std::string&)>>::value>::type*>
86 unsigned int SignalManager::connect(std::string widgetName, std::string signalName, Func&& handler, BoundArgs&&... args)
88 const unsigned int id = generateUniqueId();
89 m_signals[id] = {widgetName, signalName, makeSignal(
90 [f=std::function<
void(
const BoundArgs&...,
const std::shared_ptr<Widget>&,
const std::string&)>(handler), args...]
91 (
const std::shared_ptr<Widget>& w,
const std::string& s)
102 template <
typename Func,
typename... BoundArgs>
103 unsigned int SignalManager::connect(std::string widgetName, std::initializer_list<std::string> signalNames, Func&& handler, BoundArgs&&... args)
105 unsigned int lastId = 0;
106 for (
auto& signalName : signalNames)
107 lastId =
connect(widgetName, signalName, handler, args...);
unsigned int connect(std::string widgetName, std::string signalName, Func &&handler, const Args &... args)
Connects a signal handler that will be called when this signal is emitted.
Definition: SignalManagerImpl.hpp:75
Namespace that contains all TGUI functions and classes.
Definition: AbsoluteOrRelativeValue.hpp:37