[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.5, Wed Dec 6 20:58:18 2006 UTC (17 years, 5 months ago) by andrew
Branch: MAIN
CVS Tags: PALM_KEYRING_0_96_06, HEAD
Changes since 1.4: +187 -187 lines

no more windows line endings

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

}