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

File: [local] / palm / Palm-Keyring / test3.pl (download)

Revision 1.2, Thu Feb 2 00:59:08 2006 UTC (18 years, 3 months ago) by andrew
Branch: MAIN
Changes since 1.1: +175 -1 lines

palmkeyring-tk now looks pretty good, loads the categories and accounts, but doesn't show any information or get a password yet.

palmkeyring.pl uses the new Load function

and Keyring.pm now overrides the Load function so it can populate the 'name' so we can use that while it is still encrypted.

#!/usr/bin/perl
# $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
# 
# 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 $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'});
  }
    
}