version 1.1, 2006/01/31 23:03:39 |
version 1.5, 2006/12/06 20:58:18 |
|
|
#!/usr/bin/perl
|
#!/usr/bin/perl |
# $RedRiver$
|
# $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
|
# palmkeyring-tk *** A GUI for 'Keyring for PalmOS' written in perl |
#
|
# |
# 2006.01.31 #*#*# andrew fresh <andrew@mad-techies.org>
|
# 2006.01.31 #*#*# andrew fresh <andrew@mad-techies.org> |
########################################################################
|
######################################################################## |
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'}); |
|
} |
|
|
|
} |