mirror of https://github.com/buggins/dlangui.git
237 lines
9.1 KiB
HTML
237 lines
9.1 KiB
HTML
<html><head>
|
|
<META http-equiv="content-type" content="text/html; charset=utf-8">
|
|
<title>dlangui.core.signals</title>
|
|
</head><body>
|
|
<h1>dlangui.core.signals</h1>
|
|
<!-- Generated by Ddoc from src/dlangui/core/signals.d -->
|
|
DLANGUI library.
|
|
<br><br>
|
|
This module contains definition of <u>signals</u> / listeners.
|
|
<br><br>
|
|
|
|
Similar to std.<u>signals</u>.
|
|
<br><br>
|
|
|
|
Unlike std.<u>signals</u>, supports any types of delegates, and as well interfaces with single method.
|
|
<br><br>
|
|
|
|
Unlike std.<u>signals</u>, can support return types for slots.
|
|
|
|
<br><br>
|
|
<b>Caution:</b><br>
|
|
unlike std.<u>signals</u>, does not disconnect signal from slots belonging to destroyed objects.
|
|
<br><br>
|
|
|
|
Listener here stand for holder of single delegate (slot).
|
|
Signal is the same but supports multiple slots.
|
|
<br><br>
|
|
|
|
Can be declared either using list of result value and argument types, or by interface name with single method.
|
|
<br><br>
|
|
|
|
|
|
<br><br>
|
|
<b>Synopsis:</b><br>
|
|
<pre class="d_code"><font color=blue>import</font> dlangui.core.<u>signals</u>;
|
|
|
|
<font color=blue>interface</font> SomeInterface {
|
|
<font color=blue>bool</font> someMethod(string s, <font color=blue>int</font> n);
|
|
}
|
|
<font color=blue>class</font> Foo : SomeInterface {
|
|
<font color=blue>override</font> <font color=blue>bool</font> someMethod(string s, <font color=blue>int</font> n) {
|
|
writeln(<font color=red>"someMethod called "</font>, s, <font color=red>", "</font>, n);
|
|
<font color=blue>return</font> n > 10; <font color=green>// can return value
|
|
</font> }
|
|
}
|
|
|
|
<font color=green>// Listener! can hold arbitrary number of connected slots
|
|
</font>
|
|
<font color=green>// declare using list of return value and parameter types
|
|
</font>Listener!(<font color=blue>bool</font>, string, n) signal1;
|
|
|
|
Foo f = <font color=blue>new</font> Foo();
|
|
<font color=green>// when signal is defined as type list, you can use delegate
|
|
</font>signal1 = <font color=blue>bool</font> <font color=blue>delegate</font>(string s, <font color=blue>int</font> n) { writeln(<font color=red>"inside delegate - "</font>, s, n); <font color=blue>return</font> <font color=blue>false</font>; }
|
|
<font color=green>// or method reference
|
|
</font>signal1 = &f.someMethod;
|
|
|
|
<font color=green>// declare using interface with single method
|
|
</font>Listener!SomeInterface signal2;
|
|
<font color=green>// you still can use any delegate
|
|
</font>signal2 = <font color=blue>bool</font> <font color=blue>delegate</font>(string s, <font color=blue>int</font> n) { writeln(<font color=red>"inside delegate - "</font>, s, n); <font color=blue>return</font> <font color=blue>false</font>; }
|
|
<font color=green>// but for class method which overrides interface method, you can use simple syntax
|
|
</font>signal2 = f; <font color=green>// it will automatically take &f.someMethod
|
|
</font>
|
|
|
|
<font color=green>// call listener(s) either by opcall or explicit emit
|
|
</font>signal1(<font color=red>"text"</font>, 1);
|
|
signal1.emit(<font color=red>"text"</font>, 2);
|
|
signal2.emit(<font color=red>"text"</font>, 3);
|
|
|
|
<font color=green>// check if any slit is connected
|
|
</font><font color=blue>if</font> (signal1.assigned)
|
|
writeln(<font color=red>"has listeners"</font>);
|
|
|
|
<font color=green>// Signal! can hold arbitrary number of connected slots
|
|
</font>
|
|
<font color=green>// declare using list of return value and parameter types
|
|
</font>Signal!(<font color=blue>bool</font>, string, n) signal3;
|
|
|
|
<font color=green>// add listeners via connect call
|
|
</font>signal3.connect(<font color=blue>bool</font> <font color=blue>delegate</font>(string, <font color=blue>int</font>) { <font color=blue>return</font> <font color=blue>false</font>; });
|
|
<font color=green>// or via ~= operator
|
|
</font>signal3 ~= <font color=blue>bool</font> <font color=blue>delegate</font>(string, <font color=blue>int</font>) { <font color=blue>return</font> <font color=blue>false</font>; };
|
|
|
|
<font color=green>// declare using interface with single method
|
|
</font>Signal!SomeInterface signal4;
|
|
|
|
<font color=green>// you can connect several slots to signal
|
|
</font>signal4 ~= f;
|
|
signal4 ~= <font color=blue>bool</font> <font color=blue>delegate</font>(string, <font color=blue>int</font>) { <font color=blue>return</font> <font color=blue>true</font>; }
|
|
|
|
<font color=green>// calling of listeners of Signal! is similar to Listener!
|
|
</font><font color=green>// using opCall
|
|
</font><font color=blue>bool</font> res = signal4(<font color=red>"blah"</font>, 5);
|
|
<font color=green>// call listeners using emit
|
|
</font><font color=blue>bool</font> res = signal4.emit(<font color=red>"blah"</font>, 5);
|
|
|
|
<font color=green>// you can disconnect individual slots
|
|
</font><font color=green>// using disconnect()
|
|
</font>signal4.disconnect(f);
|
|
<font color=green>// or -= operator
|
|
</font>signal4 -= f;
|
|
|
|
</pre>
|
|
|
|
<br><br>
|
|
<b>License:</b><br>
|
|
Boost License 1.0
|
|
<br><br>
|
|
<b>Authors:</b><br>
|
|
Vadim Lopatin, coolreader.org@gmail.com<br><br>
|
|
|
|
<dl><dt><big><a name="Listener"></a>struct <u>Listener</u>(T1) if (is(T1 == interface) && __traits(allMembers, T1).length == 1);
|
|
</big></dt>
|
|
<dd>Single listener; parameter is interface with single method<br><br>
|
|
|
|
<dl><dt><big><a name="assigned"></a>bool <u>assigned</u>();
|
|
</big></dt>
|
|
<dd>returns <b>true</b> if listener is <u>assigned</u><br><br>
|
|
|
|
</dd>
|
|
<dt><big><a name="opAssign"></a>void <u>opAssign</u>(slot_t <i>listenerDelegate</i>);
|
|
</big></dt>
|
|
<dd>assign delegate<br><br>
|
|
|
|
</dd>
|
|
<dt><big><a name="opAssign"></a>void <u>opAssign</u>(T1 <i>listenerObject</i>);
|
|
</big></dt>
|
|
<dd>assign object implementing interface<br><br>
|
|
|
|
</dd>
|
|
</dl>
|
|
</dd>
|
|
<dt><big><a name="Listener"></a>struct <u>Listener</u>(RETURN_T, T1...);
|
|
</big></dt>
|
|
<dd>Single listener; implicitly specified return and parameter types<br><br>
|
|
|
|
<dl><dt><big><a name="assigned"></a>bool <u>assigned</u>();
|
|
</big></dt>
|
|
<dd>returns <b>true</b> if listener is <u>assigned</u><br><br>
|
|
|
|
</dd>
|
|
</dl>
|
|
</dd>
|
|
<dt><big><a name="Signal"></a>struct <u>Signal</u>(T1) if (is(T1 == interface) && __traits(allMembers, T1).length == 1);
|
|
</big></dt>
|
|
<dd>Multiple listeners; implicitly specified return and parameter types<br><br>
|
|
|
|
<dl><dt><big><a name="assigned"></a>bool <u>assigned</u>();
|
|
</big></dt>
|
|
<dd>returns <b>true</b> if listener is <u>assigned</u><br><br>
|
|
|
|
</dd>
|
|
<dt><big><a name="opAssign"></a>void <u>opAssign</u>(slot_t <i>listener</i>);
|
|
</big></dt>
|
|
<dd>replace all previously assigned listeners with new one (if <b>null</b> passed, remove all listeners)<br><br>
|
|
|
|
</dd>
|
|
<dt><big><a name="opAssign"></a>void <u>opAssign</u>(T1 <i>listener</i>);
|
|
</big></dt>
|
|
<dd>replace all previously assigned listeners with new one (if <b>null</b> passed, remove all listeners)<br><br>
|
|
|
|
</dd>
|
|
<dt><big><a name="opCall"></a>return_t <u>opCall</u>(params_t <i>params</i>);
|
|
</big></dt>
|
|
<dd>call all listeners; for signals having non-void return type, stop iterating when first return value is nonzero<br><br>
|
|
|
|
</dd>
|
|
<dt><big><a name="emit"></a>return_t <u>emit</u>(params_t <i>params</i>);
|
|
</big></dt>
|
|
<dd>call all listeners; for signals having non-void return type, stop iterating when first return value is nonzero<br><br>
|
|
|
|
</dd>
|
|
<dt><big><a name="connect"></a>void <u>connect</u>(slot_t <i>listener</i>);
|
|
</big></dt>
|
|
<dd>add <i>listener</i><br><br>
|
|
|
|
</dd>
|
|
<dt><big><a name="disconnect"></a>void <u>disconnect</u>(slot_t <i>listener</i>);
|
|
</big></dt>
|
|
<dd>remove <i>listener</i><br><br>
|
|
|
|
</dd>
|
|
<dt><big><a name="connect"></a>void <u>connect</u>(T1 <i>listener</i>);
|
|
</big></dt>
|
|
<dd>add <i>listener</i> - as interface member<br><br>
|
|
|
|
</dd>
|
|
<dt><big><a name="disconnect"></a>void <u>disconnect</u>(T1 <i>listener</i>);
|
|
</big></dt>
|
|
<dd>add <i>listener</i> - as interface member<br><br>
|
|
|
|
</dd>
|
|
</dl>
|
|
</dd>
|
|
<dt><big><a name="Signal"></a>struct <u>Signal</u>(RETURN_T, T1...);
|
|
</big></dt>
|
|
<dd>Multiple listeners; implicitly specified return and parameter types<br><br>
|
|
|
|
<dl><dt><big><a name="assigned"></a>bool <u>assigned</u>();
|
|
</big></dt>
|
|
<dd>returns <b>true</b> if listener is <u>assigned</u><br><br>
|
|
|
|
</dd>
|
|
<dt><big><a name="opAssign"></a>void <u>opAssign</u>(slot_t <i>listener</i>);
|
|
</big></dt>
|
|
<dd>replace all previously assigned listeners with new one (if <b>null</b> passed, remove all listeners)<br><br>
|
|
|
|
</dd>
|
|
<dt><big><a name="opCall"></a>RETURN_T <u>opCall</u>(T1 <i>params</i>);
|
|
</big></dt>
|
|
<dd>call all listeners; for signals having non-void return type, stop iterating when first return value is nonzero<br><br>
|
|
|
|
</dd>
|
|
<dt><big><a name="emit"></a>RETURN_T <u>emit</u>(T1 <i>params</i>);
|
|
</big></dt>
|
|
<dd>call all listeners; for signals having non-void return type, stop iterating when first return value is nonzero<br><br>
|
|
|
|
</dd>
|
|
<dt><big><a name="connect"></a>void <u>connect</u>(slot_t <i>listener</i>);
|
|
</big></dt>
|
|
<dd>add <i>listener</i><br><br>
|
|
|
|
</dd>
|
|
<dt><big><a name="disconnect"></a>void <u>disconnect</u>(slot_t <i>listener</i>);
|
|
</big></dt>
|
|
<dd>remove <i>listener</i><br><br>
|
|
|
|
</dd>
|
|
</dl>
|
|
</dd>
|
|
</dl>
|
|
|
|
<hr><small>Page generated by <a href="http://dlang.org/ddoc.html">Ddoc</a>. Vadim Lopatin, 2014
|
|
</small>
|
|
</body></html>
|