I am prototyping an application that (I hope) will teach people to
read.  As such, the interface will not use text. Instead, sound files
will prompt the user.  I decided to use Perl because Perl is what I
normally use and have the most experience in.

I am working on a Win32 platform because that is what I have and what I
expect those I demo the application to would have.  My only other
experience with GUI app development was a trivial interface I banged
out using Spectix.

As of now, I am using Perl::Tk, Win32::Sound and POE.  For starters, I
am trying to set up a two button window (red for instructions and green
to begin the lesson).  I can get the window to come up and the intro
wav file to play once, but I want the wav file to play in a loop (with
a reasonable delay) until a button get clicked.  I'm not sure how to
pass messages (data, events, whatever) from one session (I think
they're sessions) to another.  Below is the code with my best guess as
to what should be going on.  Please not <something> on lines 36 and 55.

Thanks for your help.

- Jon

$|++;

use Tk;
use POE;
use Win32::Sound;
use POE::Component::SubWrapper;


POE::Session->create
         ( inline_states => {
                _start => \&ui_start,
                intro => \&welcome,
                lesson  => \&ui_lesson,
        }
);

$poe_kernel->run();
exit 0;

sub ui_start {
        my ( $kernel, $session, $heap ) =  @_[ KERNEL, SESSION, HEAP ];

        $poe_main_window->Label( -text => "Reading Teacher", -font =>
['arial', '36', 'bold'])->pack;

        $poe_main_window->Button( -command => $session->postback("lesson"),
        -background => green,
        -activebackground => green,
        )->pack(
        -ipadx => 75,
        -ipady =>  75,
        -side => 'left',
        -fill =>x,
        -expand => 1);

        $poe_main_window->Button( -command => {<something>} ,
        -background => red,
        -activebackground => red )->pack(
        -ipadx => 75,
        -ipady =>  75,
        -side => 'left',
        -fill =>x,
        -expand => 1);

        POE::Component::SubWrapper->spawn('intro');


        $kernel->delay( "intro", 1);
}

sub ui_lesson {
    print "lesson\n";
}

sub welcome {
        while (<something>) {
                Win32::Sound::Play("rt.wav");
                $kernel->delay("", 15);
        }
}

Reply via email to