From 4b05a8973191a936c8ab4a2d107a656c28e27be6 Mon Sep 17 00:00:00 2001 From: Grim Maple Date: Wed, 23 Nov 2022 21:23:17 +0300 Subject: [PATCH] Add ~= support for Signal; add unittest --- src/dlangui/core/signals.d | 54 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/src/dlangui/core/signals.d b/src/dlangui/core/signals.d index c224aa35..8ba62ea5 100644 --- a/src/dlangui/core/signals.d +++ b/src/dlangui/core/signals.d @@ -243,6 +243,13 @@ struct Signal(T1) if (is(T1 == interface) && __traits(allMembers, T1).length == final void clear() { _listeners.clear(); } + + /// Provides `~=` syntax for connecting to this `Signal` + void opOpAssign(string op, T1)(T1 listener) + if(op == "~=") + { + connect(listener); + } } /// Multiple listeners; implicitly specified return and parameter types @@ -299,4 +306,51 @@ struct Signal(RETURN_T, T1...) final void clear() { _listeners.clear(); } + + /// Provides `~=` syntax for connecting to this `Signal` + void opOpAssign(string op, T1)(T1 listener) + if(op == "~=") + { + connect(listener); + } +} + +unittest +{ + interface IHandler + { + void onHandler(); + } + + class Component + { + Signal!IHandler signal; + + void doStuff() + { + signal(); + } + } + + class Handler : IHandler + { + this() + { + c = new Component(); + c.signal = this; + } + + void onHandler() + { + res = 1; + } + + int res = 0; + Component c; + } + + scope Handler h = new Handler(); + h.c.doStuff(); + assert(h.c.signal.assigned); + assert(h.res == 1); }