=================================================================== RCS file: /cvs/palm/Palm-Keyring/test3.pl,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- palm/Palm-Keyring/test3.pl 2006/01/31 23:03:39 1.1 +++ palm/Palm-Keyring/test3.pl 2006/02/02 00:59:08 1.2 @@ -1,5 +1,5 @@ #!/usr/bin/perl -# $RedRiver$ +# $RedRiver: palmkeyring-tk,v 1.1 2006/01/31 23:03:39 andrew Exp $ ######################################################################## # palmkeyring-tk *** A GUI for 'Keyring for PalmOS' written in perl # @@ -8,4 +8,178 @@ use strict; use warnings; +use Tk 8.0; +use Tk::widgets qw/ Dialog BrowseEntry ROText ProgressBar /; +use lib 'lib'; +use Palm::Keyring; + +my $File = "Keys-Gtkr.PDB"; +my $Keyring = _do_open($File); + +my $NAME = 'Palm Keyring'; + +my $lock_when = 0; +my $unlocked = time; # Change this to 0 when I get more stuff filled out +my $lock_timeout = 30; + +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); + +my $VERSION = 0.01; + +MainLoop; + + +sub build_menubar { + + # 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(); + } else { + $lock_when = $diff; + } +} + +sub Open +{ +} + +sub Close +{ +} + +sub _do_open +{ + my $file = shift; + my $pdb = Palm::Keyring->new; + $pdb->Load($file) || die "Couldn't load '$file'"; + return $pdb; +} + +sub _do_close +{ +} + +sub _do_lock +{ +} + +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'}); + } + +}