Hi Mattia,

I'm very pleased to see you are still developing wxPerl.  I'm not sure I
need this event handler at the moment, or I'd offer to participate in
testing.

wxPerl is a great tool and really I'd like to see a larger community of
wxPerl users and developers using it.  It would give other potential users
more confidence.  It seems to me that wxPython maybe has a more active
community than wxPerl.  

Would you like to see it used more?  Do you have any thoughts about how it
could be better publicised?  What do other users think?

Keep up the good work! 

Regards

Steve



-----Original Message-----
From: Mattia Barbon [mailto:mattia.bar...@libero.it] 
Sent: 13 June 2010 05:28
To: wxPerl users
Subject: Alternative event handling 

   Hi,
I am going to release a module implementing an alternative event 
handling mechanism for wxPerl; it's inspired to Qt signal/slots.

   The module implements a publish/subscribe model for events, and is 
built on top of wxPerl event handling.  Advantages compared to wxPerl 
event model:

- there is no need to import the EVT_* functions
- "interesting" values for the event are passed directly as parameters,
   so there is no need to deal with wxWidgets event objects
- a notification can be connected to multiple receivers
- notifications can be connected to already existing methods
   (for example connecting a 'TextChanged' signal to one of the existing
   'SetValue' methods)

   Preliminary documentation below (obviously, the event list is not 
complete, the entries are there as an example).  Feedback welcome!

Thanks,
Mattia



NAME
        Wx::Perl::SignalSlots - alternative event dispatching for wxPerl

SYNOPSIS
            use Wx::Perl::SignalSlots qw(:default);

            my $frame = MyFrame->new( ... );
            my $listbox = Wx::ListBox->new( $frame, -1, ... );

            subscribe( $listbox, 'ItemSelected', $frame, 'OnItemSelected' );
            subscribe( $listbox, 'ItemSelected', $object, 
'SetSelectedIndex' );

            # in MyFrame.pm

            sub OnItemSelected {
                my( $self, $index ) = @_;

                # ...
            }

DESCRIPTION
        This module implements an alternative event handling model
        for wxPerl, in some ways similar to Qt signal/slot mechanism.
        The advantages compared to wxWidgets/wxPerl standard
        event handling are:

        simpler
            No need to deal with wxWidgets event objects.

        multicast
            The "EVT_FOO" binders can only bind an event once per object.

        cleaner
            No need to import the various "EVT_FOO" binders.

FUNCTIONS
    "subscribe"
            subscribe( $sender, 'SignalName', $object, 'MethodName' );
            subscribe( $sender, 'SignalName', \&_function );

        Connects a signal to a receiver.  Every time the signal is
        emitted, the receiver method/function will be
        called with zero or more arguments
        specific to the signal (for example the "Clicked" signal takes no
        arguments while the "ItemSelected" signal takes the item index as
        argument).

        When multiple receivers are connected to the same sender/signal,
        the call order is undefined.

        Both sender and receiver converted into weak references; if a
        window is destroyed or an object is garbage collected
        all the associated connections are automatically removed.

    "unsubscribe"
            unsubscribe( $sender, 'SignalName', $object, 'MethodName' );
            unsubscribe( $sender, 'SignalName', \&_function );

        Removes a connection created by "subscribe".  If there is
        no matching connection the call does nothing.

CLASSES
    "Wx::Button"
        "Clicked()"

        Emitted when a push button is clicked.

    "Wx::ListBox"
        "ItemSelected( $index )"

        Emitted when a list box item is selected; takes the item index as
        parameter.

    "Wx::Timer"
        "Timeout()"

        Emitted every time the timer timeout expires.

    "Wx::Window"
        "Destroyed( $object )"

        Emitted when a "Wx::Window" derived class is destroyed.  Note
        that the object passed to the signal might not be blessed in
        the correct class, and no method must be called on it.

        "Idle()"

        Emitted every time the event loop stops because there are no more
        events to process.

Reply via email to