File: [local] / palm / Palm-Keyring / test3.pl (download)
Revision 1.3, Tue Apr 18 19:39:45 2006 UTC (18 years, 5 months ago) by andrew
Branch: MAIN
Changes since 1.2: +3 -2 lines
Some palmkeyring updates
|
#!/usr/bin/perl
# $RedRiver: palmkeyring-tk,v 1.2 2006/02/02 00:59:08 andrew Exp $
########################################################################
# palmkeyring-tk *** A GUI for 'Keyring for PalmOS' written in perl
#
# 2006.01.31 #*#*# andrew fresh <andrew@mad-techies.org>
########################################################################
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 $File = "k:/working/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 <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();
} 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'});
}
}