Sample 2: Simple GUI Events Handling By Connecting Two Local Channels

This sample is based on sample 1 with changes to demonstrate connecting two local channels.

Also we use the following POD struct (defined in linear_id_trait.hpp) as message id/names:
    struct struct_id {
      message_family family;
      int type;

The changes are inside main() function:
int main(int, char **) {
First we create 2 channels
  evt_chan chan1;
  evt_chan chan2;
Then we connect these 2 channels
  connect(chan1, chan2);
Bind event source to channel 1
  gui_window window(chan1);
create handler object and bind it to channel 1
  window_handler hdlr(chan1);
create more event sinks and bind the global function to channel 2.
  evt_chan::in window_down_in(chan2, win_but_down_id, evt_handler);
  evt_chan::in window_up_in(chan2, win_but_up_id, evt_handler);
  evt_chan::in shut_down_in(chan2, win_close_id, evt_handler);
Now we fire some event for testing.
  window.up("..Hi there [mouse-left-up] ..");
  window.down(".. a simple window test [mouse-right-down] ..");
  window.close(".. simple window wiered [window-closed] ..");
Last exit
  cout << "... exit ...\n";
  return 0;

From testing, we should see events propagate to both channel 1 and channel 2 and events get printed out by callbacks at both channels.
Complete source listing...