=================================================================== RCS file: /cvs/palm/Palm-Keyring/test3.pl,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- palm/Palm-Keyring/test3.pl 2006/06/13 01:03:39 1.4 +++ palm/Palm-Keyring/test3.pl 2006/12/06 20:58:18 1.5 @@ -1,187 +1,187 @@ -#!/usr/bin/perl -# $RedRiver: palmkeyring-tk,v 1.3 2006/04/18 19:39:45 andrew Exp $ -######################################################################## -# palmkeyring-tk *** A GUI for 'Keyring for PalmOS' written in perl -# -# 2006.01.31 #*#*# andrew fresh -######################################################################## -use strict; -use warnings; - -use Tk 8.0; -use Tk::widgets qw/ Dialog BrowseEntry ROText ProgressBar /; - -use lib 'lib'; -use Palm::Keyring; - -my $NAME = 'Palm Keyring'; -my $VERSION = 0.01; - -my $File = shift || "Keys-Gtkr.PDB"; -my $Keyring = Open($File); - - -my $lock_when = 0; -my $unlocked = time; # Change this to 0 when I get more stuff filled out -my $lock_timeout = 30; - -build_window(); -MainLoop; - - - - -sub build_window -{ - - my $MW = MainWindow->new(); - $MW->optionAdd('*BorderWidth' => 1); - - my $pane = $MW->Panedwindow( - Name => 'main', - -showhandle => 1, - -orient => 'horizontal' - )->pack(-fill => 'both', -expand => 1); - - my $lists_frame = $pane->Frame(Name => 'lists') - ->pack(-side=>'top',-anchor=>'nw',-fill=>'x'); - my $right_frame = $pane->Frame(Name => 'right',-relief=>'sunken') - ->pack(-side=>'top',-anchor=>'ne',-fill=>'both',-expand=>1); - - my $account_frame = $right_frame->Frame(Name => 'account') - ->pack(-side=>'top',-anchor=>'nw',-fill=>'both',-expand=>1); - my $lock_frame = $right_frame->Frame(Name => 'lock',-relief=>'raised') - ->pack(-side=>'bottom',-fill=>'x'); - - $pane->add('.main.lists'); - $pane->add('.main.right'); - -# Lists - my $category_list = $lists_frame->BrowseEntry() - ->pack(-side=>'top',-fill=>'x'); - $category_list->insert(-1, 'All'); - my $accounts_list = $lists_frame->Scrolled('Listbox', -scrollbars => 'e') - ->pack(-side=>'top',-fill=>'both',-expand=>1); - - -# Account - my %account_entry; - foreach my $label (qw/Category Name Account Password/) { - $account_entry{$label} = $account_frame->LabEntry(-state=>'readonly', - -labelWidth => 10, - -labelPack => [-side => 'left', -anchor => 'w'], - -label=>$label . ': ', -text => 'my' . $label) - ->pack(-side=>'top',-anchor=>'nw',-fill=>'x'); - } - - $account_entry{'Details'} = $account_frame->ROText(-wrap => 'word',-height=>5,-width=>30) - ->pack(-side=>'top',-anchor=>'nw',-fill=>'both',-expand=>1); - $account_entry{'Details'}->insert('1.0',"This is a test\nThis is only a test"); - - -# Lock - my $lock_button = $lock_frame->Button(-text => 'Lock', -command => \&Lock) - ->pack(-side=>'left'); - my $lock_progress = $lock_frame->ProgressBar( - -variable=>\$lock_when, - -blocks => $lock_timeout, - -from => $lock_timeout, - -to => 0, - -gap => 0, - )->pack(-side=>'right',-fill=>'x',-expand=>1,-padx=>5); - - $lock_progress->repeat(500,\&Lock_Timeout); - - my $menubar = build_menubar($MW); - - _populate_lists($Keyring, $category_list, $accounts_list); - - return $MW; -} - - -sub build_menubar { - - my $MW = shift; - - # Create the menubar and File and Quit menubuttons. Note - # that the cascade's menu widget is automatically created. - - my $menubar = $MW->Menu; - $MW->configure(-menu => $menubar); - my $file = $menubar->cascade(-label => '~File', -tearoff => 0); - my $help = $menubar->cascade(-label => '~Help', -tearoff => 0); - - # Create the menuitems for each menu. First, the File menu item. - - $file->command(-label => "Open", -command => \&Open); - $file->command(-label => "Close", -command => \&Close); - $file->command(-label => "Quit", -command => \&exit); - - # Finally, the Help menuitems. - - $help->command(-label => 'Version'); - $help->separator; - $help->command(-label => 'About'); - - my $ver_dialog = $MW->Dialog(-title => $NAME . ' Version', - -text => "$NAME\n\nVersion $VERSION", - -buttons => ['OK'], - -bitmap => 'info'); - my $about_dialog = $MW->Dialog(-title => 'About ' . $NAME, - -text => 'About ' . $NAME . "\n" . - '© Copyright 2006 Andrew Fresh ', - -buttons => ['OK']); - my $menu = $help->cget('-menu'); - $menu->entryconfigure('Version', -command => [$ver_dialog => 'Show']); - $menu->entryconfigure('About', -command => [$about_dialog => 'Show']); - - $menubar; # return the menubar - -} - -sub Lock -{ - $unlocked = time; -} - -sub Lock_Timeout -{ - #return unless $unlocked; - my $diff = time - $unlocked; - if ($diff > $lock_timeout) { - print "Timed out!"; - Tk::exit(); - Lock(); - } else { - $lock_when = $diff; - } -} - -sub Open -{ - my $file = shift; - my $pdb = Palm::Keyring->new; - $pdb->Load($file) || die "Couldn't load '$file'"; - return $pdb; -} - -sub Close -{ -} - -sub _populate_lists -{ - my $pdb = shift; - my $cat = shift; - my $acct = shift; - foreach my $category (@{ $pdb->{'appinfo'}->{'categories'} }) { - next unless $category->{'name'}; - $cat->insert( $category->{'id'}, $category->{'name'}); - } - foreach my $account (@{ $pdb->{'records'} }) { - next unless $account->{'plaintext'}->{'name'}; - $acct->insert('end', $account->{'plaintext'}->{'name'}); - } - -} +#!/usr/bin/perl +# $RedRiver: palmkeyring-tk,v 1.4 2006/06/13 00:03:39 andrew Exp $ +######################################################################## +# palmkeyring-tk *** A GUI for 'Keyring for PalmOS' written in perl +# +# 2006.01.31 #*#*# andrew fresh +######################################################################## +use strict; +use warnings; + +use Tk 8.0; +use Tk::widgets qw/ Dialog BrowseEntry ROText ProgressBar /; + +use lib 'lib'; +use Palm::Keyring; + +my $NAME = 'Palm Keyring'; +my $VERSION = 0.01; + +my $File = shift || "Keys-Gtkr.PDB"; +my $Keyring = Open($File); + + +my $lock_when = 0; +my $unlocked = time; # Change this to 0 when I get more stuff filled out +my $lock_timeout = 30; + +build_window(); +MainLoop; + + + + +sub build_window +{ + + my $MW = MainWindow->new(); + $MW->optionAdd('*BorderWidth' => 1); + + my $pane = $MW->Panedwindow( + Name => 'main', + -showhandle => 1, + -orient => 'horizontal' + )->pack(-fill => 'both', -expand => 1); + + my $lists_frame = $pane->Frame(Name => 'lists') + ->pack(-side=>'top',-anchor=>'nw',-fill=>'x'); + my $right_frame = $pane->Frame(Name => 'right',-relief=>'sunken') + ->pack(-side=>'top',-anchor=>'ne',-fill=>'both',-expand=>1); + + my $account_frame = $right_frame->Frame(Name => 'account') + ->pack(-side=>'top',-anchor=>'nw',-fill=>'both',-expand=>1); + my $lock_frame = $right_frame->Frame(Name => 'lock',-relief=>'raised') + ->pack(-side=>'bottom',-fill=>'x'); + + $pane->add('.main.lists'); + $pane->add('.main.right'); + +# Lists + my $category_list = $lists_frame->BrowseEntry() + ->pack(-side=>'top',-fill=>'x'); + $category_list->insert(-1, 'All'); + my $accounts_list = $lists_frame->Scrolled('Listbox', -scrollbars => 'e') + ->pack(-side=>'top',-fill=>'both',-expand=>1); + + +# Account + my %account_entry; + foreach my $label (qw/Category Name Account Password/) { + $account_entry{$label} = $account_frame->LabEntry(-state=>'readonly', + -labelWidth => 10, + -labelPack => [-side => 'left', -anchor => 'w'], + -label=>$label . ': ', -text => 'my' . $label) + ->pack(-side=>'top',-anchor=>'nw',-fill=>'x'); + } + + $account_entry{'Details'} = $account_frame->ROText(-wrap => 'word',-height=>5,-width=>30) + ->pack(-side=>'top',-anchor=>'nw',-fill=>'both',-expand=>1); + $account_entry{'Details'}->insert('1.0',"This is a test\nThis is only a test"); + + +# Lock + my $lock_button = $lock_frame->Button(-text => 'Lock', -command => \&Lock) + ->pack(-side=>'left'); + my $lock_progress = $lock_frame->ProgressBar( + -variable=>\$lock_when, + -blocks => $lock_timeout, + -from => $lock_timeout, + -to => 0, + -gap => 0, + )->pack(-side=>'right',-fill=>'x',-expand=>1,-padx=>5); + + $lock_progress->repeat(500,\&Lock_Timeout); + + my $menubar = build_menubar($MW); + + _populate_lists($Keyring, $category_list, $accounts_list); + + return $MW; +} + + +sub build_menubar { + + my $MW = shift; + + # Create the menubar and File and Quit menubuttons. Note + # that the cascade's menu widget is automatically created. + + my $menubar = $MW->Menu; + $MW->configure(-menu => $menubar); + my $file = $menubar->cascade(-label => '~File', -tearoff => 0); + my $help = $menubar->cascade(-label => '~Help', -tearoff => 0); + + # Create the menuitems for each menu. First, the File menu item. + + $file->command(-label => "Open", -command => \&Open); + $file->command(-label => "Close", -command => \&Close); + $file->command(-label => "Quit", -command => \&exit); + + # Finally, the Help menuitems. + + $help->command(-label => 'Version'); + $help->separator; + $help->command(-label => 'About'); + + my $ver_dialog = $MW->Dialog(-title => $NAME . ' Version', + -text => "$NAME\n\nVersion $VERSION", + -buttons => ['OK'], + -bitmap => 'info'); + my $about_dialog = $MW->Dialog(-title => 'About ' . $NAME, + -text => 'About ' . $NAME . "\n" . + '© Copyright 2006 Andrew Fresh ', + -buttons => ['OK']); + my $menu = $help->cget('-menu'); + $menu->entryconfigure('Version', -command => [$ver_dialog => 'Show']); + $menu->entryconfigure('About', -command => [$about_dialog => 'Show']); + + $menubar; # return the menubar + +} + +sub Lock +{ + $unlocked = time; +} + +sub Lock_Timeout +{ + #return unless $unlocked; + my $diff = time - $unlocked; + if ($diff > $lock_timeout) { + print "Timed out!"; + Tk::exit(); + Lock(); + } else { + $lock_when = $diff; + } +} + +sub Open +{ + my $file = shift; + my $pdb = Palm::Keyring->new; + $pdb->Load($file) || die "Couldn't load '$file'"; + return $pdb; +} + +sub Close +{ +} + +sub _populate_lists +{ + my $pdb = shift; + my $cat = shift; + my $acct = shift; + foreach my $category (@{ $pdb->{'appinfo'}->{'categories'} }) { + next unless $category->{'name'}; + $cat->insert( $category->{'id'}, $category->{'name'}); + } + foreach my $account (@{ $pdb->{'records'} }) { + next unless $account->{'plaintext'}->{'name'}; + $acct->insert('end', $account->{'plaintext'}->{'name'}); + } + +}