[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
AWS supports signal sources and sinks. A signal is simply a bit of information that lets someone know that something happened. A signal source is an object that gives out signals. A signal sink is an object that receives them. A signal slot is a conduit that manages a connection between sources and sinks. All AWS components are signal sources. They are derived from `awsSource', and thus support all the functionality of that class.
Signals are very distinct from Events. Signals are usually not sent for vents like `MouseDown', etc. A signal usually indicates that something important happened to the source. Good examples of signals are `TextChanged' for a text-box or `ButtonClicked' for a command button. These indicate that the user has gone through a series of complex motions, and has triggered the component to do something that it was programmed for. Signals do not include extra parameter information, simply a 32-bit value that indicates what happened.
Signals are unique to each component. Therefore, you never have to worry about namespace conflicts. For instance, if you want notification when a command button is clicked, you can connect your "button clicked" handler to the button like this:
awsSlot slot(mySink); slot.Connect(cmdbutton, awsButton::sButtonClicked, doSomethingUsefulTrigger); |
The parameter to the slot is the class that contains your sink.
This can be any class derived from `iAwsSink'. For the connect
call, the first parameter is the signal source that you are
connecting to, the second is the signal you want notification of, and
the final parameter is the identifier of the trigger you want activated
on the sink when signaled. A single slot can map between a
number of sources, signals, and triggers. To get the trigger identifier
(which may change every time your application is run) you merely
need to call GetTriggerID()
on the sink with the name of the
trigger that you want.
unsigned long trigger = mySink->GetTriggerID("LoginUser"); |
What this means is that you don't have to override the `awsButton' class to find out what's going on. In fact, you don't even have to know about the button. All you need to know is that it supports the signal. If it doesn't support the signal, by the way, you will simply never get any information about it. Your slot will never become active.
A slot maps back to a sink's trigger. A single slot is always
bound to a single sink, but there may be other slots bound to the
same sink. When a trigger gets activated, it's passed in a
reference to the source of the signal. That way it can get any
information that it needs out of that source. A trigger could use
this information to find out what type of component the source is
and cast it to the correct type. The primary means for doing that
resides in the GetProperty()
and SetProperty
methods. These
allow you to request a property by name from a random component.
If the component does not support the property, the call will
fail in a graceful manner.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] |
This document was generated using texi2html 1.76.