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