Category: | GUI Programming |
Author/Contact Info | Jouke Visser (jouke@pvoice.org) |
Description: | pVoice is a speechapplication for disabled people who
can't speak themselves. By only generating left and right
mousebuttonclicks the whole application can be operated. update: pVoice has grown so much that it's not possible to keep the code here updated. You can find the sourcecode of pVoice 2.x at opensource.pvoice.org. Binary releases (packed with ActiveState's PerlApp) can be found on www.pvoice.org. The current pVoice does no longer use Tk for the GUI, but wxPerl instead I'll keep the code updated in here, though pVoice 0.01 was posted in Cool Uses for Perl. For more backgroundinfo, look at http://www.pvoice.org This is version 0.02.1 The current version is 2.1 |
#!/usr/bin/perl -w # # pVoice # # For more information go to http://www.pvoice.org where you can # download a zipfile containing this file, the README and pvoicecommon +.pm # # See the mentioned README file for a little documentation # Since version 0.02.1 you also need pvoicecommon.pm, which is the obj +ect- # package. use Tk 800.017; use Tk::JPEG; # And on unix-systems it requires the system command 'play' to play th +e .wav # files, and on Win32 systems, it requires Win32::Sound for the same p +urpose. # # Author: Jouke Visser # Last modification: May 28, 2001 # # pVoice is free for personal use. # Copyright (c) 2001, Jouke Visser # # Changelog: # 0.01: First release # 0.02: Little bugfix (arrow-up on first position never showed up) # 0.02.1: OO-ified the whole thing and parametrisized as much as possi +ble. use strict; #--------------------------------------------------------------------- +--------- use pvoicecommon; # Configuration-stuff my $pv = new pvoicecommon( program_title => "pVoice 0.02.1 development", bgcolor => 'white', active_bgcolor => 'red', sounddir => "./data", current_category=> "", current_page => 1, indexfile => "index.txt", catfile => "cat.txt", sound_ext => "wav", img_ext => "jpg", border_width => 10, cellpadding => 4, columns => 4, rows => 4, selected_button => 0 ); my $img_ext = $pv->img_ext(); $pv->next_img("volgende.$img_ext"); $pv->prev_img("vorige.$img_ext"); $pv->up_img("omhoog.$img_ext"); # Create the main window my $main = MainWindow->new(-background => $pv->bgcolor()); # Maximize the window my ($screenw, $screenh) = ($main->screenwidth, $main->screenheight); $main->withdraw(); $main->geometry($screenw."x".$screenh."+0+0"); $main->deiconify(); $main->raise(); # Write the title of the window $main->title($pv->program_title()); #create the window for the images $pv->mainframe($main->Frame(-background => $pv->bgcolor())->pack()); # Write the header $pv->mainframe()->gridRowconfigure(0, -weight => 0, -pad => $pv->cellp +adding()); my $label=$main->Label( -text => $pv->program_title(), -background => $pv->bgcolor()); $label->grid( -in => $pv->mainframe(), -column => 0, -row => 0, -columnspan=> $pv->columns() ); # Determine the maximum size of each icon $main->update(); # To determine the height of the $label the window mu +st be updated $pv->max_height(int( ($main->height() - $label->height())/$pv->rows +())- (2*($pv->border_width() + $pv->cellpadding()) )); $pv->max_width(int( (($main->width)/$pv->columns())- 2*($pv->border_width() + $pv->cellpadding()) )); #configure the grid to constant cellsizes $pv->configurecolumns(startcolumn => 0); $pv->configurerows(startrow => 1); # Read the categoryfile and draw the first page with category-buttons my @categories = $pv->readcategoryfile(); $pv->drawcatpage(\@categories); # Make the first button active $pv->buttons()->[$pv->selected_button()]->configure(-state => 'active' +); # Right mouseclick means select next item $main->bind('<Button-3>', sub { $pv->buttons()->[$pv->selected_button()]->configure( -state => 'normal'); if ($pv->selected_button() < @{$pv->buttons()} -1) {$pv->selected_button($pv->selected_button()+1)} else {$pv->selected_button(0)} $pv->buttons()->[$pv->selected_button()]->configure( -state => 'active'); } ); # Left mouseclick means execute current item $main->bind('<Button-1>', sub { $pv->buttons()->[$pv->selected_button()]->invoke(); } ); MainLoop(); |
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: pVoice
by Beatnik (Parson) on May 29, 2001 at 15:58 UTC | |
by Jouke (Curate) on May 29, 2001 at 16:02 UTC | |
A reply falls below the community's threshold of quality. You may see it by logging in. |
Back to
Code Catacombs