[BACK]Return to test3.pl CVS log [TXT][DIR] Up to [local] / palm / Palm-Keyring

Diff for /palm/Palm-Keyring/test3.pl between version 1.1 and 1.4

version 1.1, 2006/01/31 23:03:39 version 1.4, 2006/06/13 01:03:39
Line 1 
Line 1 
 #!/usr/bin/perl  #!/usr/bin/perl
 # $RedRiver$  # $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  # palmkeyring-tk *** A GUI for 'Keyring for PalmOS' written in perl
 #  #
Line 8 
Line 8 
 use strict;  use strict;
 use warnings;  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 <andrew@mad-techies.org>',
                   -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'});
           }
   
   }

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.4

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>