Core/Signals: Remove Connect/Disconnect macros
And make interface easier to use Former-commit-id: 5b789c9acb694839cb173ae96392650d80d383b7
This commit is contained in:
@@ -17,10 +17,6 @@
|
||||
#define NazaraSlotType(Class, SignalName) Class::SignalName ## Type::ConnectionGuard
|
||||
#define NazaraSlot(Class, SignalName, SlotName) NazaraSlotType(Class, SignalName) SlotName
|
||||
|
||||
#define NazaraConnect(Instance, SignalName, Callback) (Instance).SignalName.Connect(Callback)
|
||||
#define NazaraConnectThis(Instance, SignalName, Callback) (Instance).SignalName.Connect(this, Callback)
|
||||
#define NazaraDisconnect(SlotName) SlotName.GetConnection().Disconnect()
|
||||
|
||||
|
||||
template<typename... Args>
|
||||
class NzSignal
|
||||
@@ -82,6 +78,8 @@ class NzSignal<Args...>::Connection
|
||||
Connection(Connection&& connection) = default;
|
||||
~Connection() = default;
|
||||
|
||||
template<typename... ConnectArgs>
|
||||
void Connect(BaseClass& signal, ConnectArgs&&... args);
|
||||
void Disconnect();
|
||||
|
||||
bool IsConnected() const;
|
||||
@@ -109,8 +107,14 @@ class NzSignal<Args...>::ConnectionGuard
|
||||
ConnectionGuard(ConnectionGuard&& connection) = default;
|
||||
~ConnectionGuard();
|
||||
|
||||
template<typename... ConnectArgs>
|
||||
void Connect(BaseClass& signal, ConnectArgs&&... args);
|
||||
void Disconnect();
|
||||
|
||||
Connection& GetConnection();
|
||||
|
||||
bool IsConnected() const;
|
||||
|
||||
ConnectionGuard& operator=(const Connection& connection);
|
||||
ConnectionGuard& operator=(const ConnectionGuard& connection) = delete;
|
||||
ConnectionGuard& operator=(Connection&& connection);
|
||||
|
||||
@@ -100,6 +100,13 @@ m_ptr(slot)
|
||||
{
|
||||
}
|
||||
|
||||
template<typename... Args>
|
||||
template<typename... ConnectArgs>
|
||||
void NzSignal<Args...>::Connection::Connect(BaseClass& signal, ConnectArgs&&... args)
|
||||
{
|
||||
operator=(signal.Connect(std::forward<ConnectArgs>(args)...));
|
||||
}
|
||||
|
||||
template<typename... Args>
|
||||
void NzSignal<Args...>::Connection::Disconnect()
|
||||
{
|
||||
@@ -132,12 +139,32 @@ NzSignal<Args...>::ConnectionGuard::~ConnectionGuard()
|
||||
m_connection.Disconnect();
|
||||
}
|
||||
|
||||
template<typename... Args>
|
||||
template<typename... ConnectArgs>
|
||||
void NzSignal<Args...>::ConnectionGuard::Connect(BaseClass& signal, ConnectArgs&&... args)
|
||||
{
|
||||
m_connection.Disconnect();
|
||||
m_connection.Connect(signal, std::forward<ConnectArgs>(args)...);
|
||||
}
|
||||
|
||||
template<typename... Args>
|
||||
void NzSignal<Args...>::ConnectionGuard::Disconnect()
|
||||
{
|
||||
m_connection.Disconnect();
|
||||
}
|
||||
|
||||
template<typename... Args>
|
||||
typename NzSignal<Args...>::Connection& NzSignal<Args...>::ConnectionGuard::GetConnection()
|
||||
{
|
||||
return m_connection;
|
||||
}
|
||||
|
||||
template<typename... Args>
|
||||
bool NzSignal<Args...>::ConnectionGuard::IsConnected() const
|
||||
{
|
||||
return m_connection.IsConnected();
|
||||
}
|
||||
|
||||
template<typename... Args>
|
||||
typename NzSignal<Args...>::ConnectionGuard& NzSignal<Args...>::ConnectionGuard::operator=(const Connection& connection)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user