The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/home/markt/usr/local/Linux/bin/perl

##
# A Krappy Browser
##

use strict;
no strict 'subs';
use vars qw($java $frame);
use lib qw(../../..);
use Java;

# Set up some convenience stuff
my $awt = "java.awt";
my $swing = "javax.swing";
my @menus;

# Create connection to JavaServer
$java = new Java();

do 'menu_bar.pl';

# Used by 'Back' button
my @previous_pages;
my $current_page = "http://www.zzo.com/Java/getit.html";
push @previous_pages, $current_page;

# Create the window and a Panel
$frame = $java->create_object("$swing.JFrame","I'll Call Him, Mini-Browser");

#
# Get default and 'hand' cursor to change cursor when ya move it over
#	a link
#
my $default_cursor = $frame->getCursor;
my $hand_cursor = $java->create_object("java.awt.Cursor",$java->get_field("java.awt.Cursor","HAND_CURSOR")->get_value);

##
# Add menus
##
push @menus, &file_menu, &edit_menu;
&menu_bar(@menus);
$frame->setJMenuBar(&menu_bar(@menus));

###
# Make some Buttons 
##
my $back_button = $java->create_object("$swing.JButton","Back");
$java->do_event($back_button,"addActionListener",\&back_button);
my $reload_button = $java->create_object("$swing.JButton","Reload");
$java->do_event($reload_button,"addActionListener",\&reload_button);

##
# Make 2 panels
#	One is main panel to display URL & other has Location text field
##
##
my $top_panel = $java->create_object("$swing.JPanel");
my $button_panel = $java->create_object("$swing.JPanel");
my $text_panel = $java->create_object("$swing.JPanel");
my $main_panel = $java->create_object("$swing.JEditorPane",$current_page);
$main_panel->setEditable("false:b");

#
# Listen for hyperlink events to change cursor & to jump to new location
#	if they press it
#
$java->do_event($main_panel,"addHyperlinkListener",\&hyperlink_listener);

# Toss main panel into scroll pane
my $scroll_pane = $java->create_object("$swing.JScrollPane",$main_panel);

# Location Text field
my $loc_field = $java->create_object("$swing.JTextField",$current_page,30);
$loc_field->setToolTipText("Type in URL here!");
my $label = $java->create_object("$swing.JLabel","Location:");
$label->setLabelFor($loc_field);

$text_panel->add($label);
$text_panel->add($loc_field);
$button_panel->add($back_button);
$button_panel->add($reload_button);
$top_panel->add($button_panel,"North");
$top_panel->add($text_panel,"Center");
$java->do_event($loc_field,"addActionListener",\&loc_field_listener);


# Add the panel to the 'Center' of the Content Pane
$frame->getContentPane->add($top_panel,"North");
# $frame->getContentPane->add($main_panel,"Center");
$frame->getContentPane->add($scroll_pane,"Center");

$frame->setSize(900,900);
$frame->show;
$frame->setVisible("true:b");

# This is my exciting event loop!
 my $cont = 1;
 while($cont)
 {
	 $cont = $java->go;
 }
$frame->dispose;


sub loc_field_listener
{
	my($obj,$event) = @_;
	push @previous_pages, $current_page;
	my $url = $loc_field->getText->get_value;
	# Tell Java to get it & render it!
	$url = "http://".$url if ($url !~ /^http/i);
	$main_panel->setPage($url);
	$current_page = $url;
	1;
}

sub hyperlink_listener
{
	my($obj,$event) = @_;
	my $type = $event->getEventType->get_value;
	#print "type is $type\n";

	# They pressed it
	if ($type eq 'ACTIVATED')
	{
		push @previous_pages, $loc_field->getText->get_value;
		my $url = $event->getURL;
		$current_page = $url->get_value;
		$loc_field->setText($current_page);
		$main_panel->setPage($url);
	}

	# They're over it!
	if ($type eq 'ENTERED')
	{
		$frame->setCursor($hand_cursor);
	}

	# They ain't there anymore!
	if ($type eq 'EXITED')
	{
		$frame->setCursor($default_cursor);
	}

	1;
}

sub back_button
{
	# They wanna go back...
	my($obj,$event) = @_;

	# Get whatever's on the top of the @previous_pages array
	# & roll it...
	my $page;
	$page = pop @previous_pages if (@previous_pages > 1);
	if ($page)
	{
		$current_page = $page;
		$current_page = "http://".$current_page if ($current_page !~ /^http/i);
		$loc_field->setText($current_page);
		$main_panel->setPage($current_page);
	}

	1;
}

sub reload_button
{
	# They wanna go reload...
	my($obj,$event) = @_;

	$main_panel->setPage($current_page);

	1;
}