[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.3, Tue Apr 18 19:39:45 2006 UTC (18 years, 1 month 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'});
  }
    
}