7 #ifndef _QI_SIGNAL_HPP_
8 #define _QI_SIGNAL_HPP_
10 #include <boost/function.hpp>
11 #include <boost/scoped_ptr.hpp>
18 #include <boost/thread/thread.hpp>
19 #include <boost/thread/mutex.hpp>
22 # pragma warning( push )
23 # pragma warning( disable: 4251 )
31 class ManageablePrivate;
32 class SignalSubscriber;
34 class SignalBasePrivate;
62 SignalSubscriber connect(boost::function<F> func);
63 SignalSubscriber connect(
AnyObject object,
const unsigned int slot);
64 SignalSubscriber connect(
AnyObject object,
const std::string& slot);
67 SignalSubscriber connect(
const SignalSubscriber& s);
89 bool asyncDisconnectAll()
118 disconnectAsync(link);
144 std::vector<SignalSubscriber> subscribers();
145 bool hasSubscribers();
149 void setOnSubscribers(OnSubscribers onSubscribers);
154 using Trigger = boost::function<void(const GenericFunctionParameters& params, MetaCallType callType)>;
156 void setTriggerOverride(
Trigger trigger);
157 void callOnSubscribe(
bool v);
158 void createNewTrackLink(
int&
id,
SignalLink*& trackLink);
159 void disconnectTrackLink(
int id);
161 void clearExecutionContext();
164 boost::shared_ptr<SignalBasePrivate>
_p;
165 friend class SignalBasePrivate;
183 using boost::function<T>::operator();
211 template <
typename F>
214 SignalSubscriber
connect(
const SignalSubscriber& sub);
215 template <
typename U>
217 template <
typename... P>
220 template <
typename F,
typename Arg0,
typename... Args>
221 SignalSubscriber
connect(F&& func, Arg0&& arg0, Args&&... args);
228 template<
class ForcedSignalType,
class SignalType >
229 SignalSubscriber connectSignal(SignalType& signal);
236 template<
typename... P>
247 using boost::function<FunctionType>::operator();
265 class
QI_API SignalSubscriber
269 friend class FunctorCall;
270 friend class ManageablePrivate;
272 friend class SignalBasePrivate;
278 SignalSubscriber(
const AnyObject& target,
unsigned int method);
281 SignalSubscriber(
const SignalSubscriber& other);
282 SignalSubscriber& operator=(
const SignalSubscriber& other);
295 void call(
const std::shared_ptr<GenericFunctionParameters>& args,
310 std::shared_ptr<SignalSubscriberPrivate> _p;
314 boost::optional<ExecutionContext*> executionContextFor(
MetaCallType callType)
const;
320 template<
typename Args>
321 void callWithValueOrPtr(
const Args& args,
MetaCallType callType);
340 boost::weak_ptr<SignalBasePrivate>
source;
362 # pragma warning( pop )
369 #endif // _QITYPE_SIGNAL_HPP_
boost::scoped_ptr< AnyWeakObject > target
SignalSubscriberPrivate()
SignalLink linkId
Uid that can be passed to GenericObject::disconnect()
std::atomic< ExecutionContext * > executionContext
boost::shared_ptr< SignalSubscriber > SignalSubscriberPtr
static const SignalLink invalidSignalLink
boost::shared_ptr< SignalBasePrivate > _p
Honor the default behavior.
Signal(ExecutionContext *execContext, OnSubscribers onSubscribers=OnSubscribers())
std::atomic< bool > enabled
virtual qi::Signature signature() const
void(const AnyValue &) FunctionType
boost::function< Future< void >(bool)> OnSubscribers
Force a synchronous call.
#define QI_API_DEPRECATED_MSG(msg__)
Compiler flags to mark a function as deprecated. It will generate a compiler warning.
~SignalSubscriberPrivate()
MetaCallType threadingModel
Various macros for qi. (deprecated, export API, disallow copy, ..) <includename>qi/macro.hpp</includename> .
boost::weak_ptr< SignalBasePrivate > source
SignalSubscriberPrivate & operator=(const SignalSubscriberPrivate &)=delete
typename ParentType::OnSubscribers OnSubscribers
Signal(OnSubscribers onSubscribers=OnSubscribers())
QI_WARNING_DISABLE(4996, deprecated-declarations) class SignalSubscriber
boost::function< void(const GenericFunctionParameters ¶ms, MetaCallType callType)> Trigger
SignalSubscriber connect(...)
SignalF(OnSubscribers onSubscribers=OnSubscribers())