#!/usr/bin/perl -w
use Gtk::GladeXML '-init';
use Gtk '-init';
use DB_File;

my $crow = -1;

tie (%data, 'DB_File', '_');

$gladeObject = Gtk::GladeXML->new("aula.glade");

$window = $gladeObject -> get_widget("main");
$window->signal_connect("delete_event", sub {Gtk->main_quit });

$nome = $gladeObject -> get_widget("nome");
$email = $gladeObject -> get_widget("email");
$homepage = $gladeObject -> get_widget("homepage");

$lista = $gladeObject->get_widget("nomes");
$lista->signal_connect("select-row", \&show);

for (keys %data) { $lista->append($_); }

$OK = $gladeObject -> get_widget("ok");
$OK->signal_connect("clicked", \&add);

$CANCEL = $gladeObject -> get_widget("cancel");
$CANCEL->signal_connect("clicked", \&cancel);

Gtk->main();

untie %data;

sub add {
  my ($n,$e,$h) = ($nome->get_text, $email->get_text, $homepage->get_text);

  unless (exists($data{$n}) || $n=~/^\s*$/) {
    $data{$n} = "$e:$h";
    $lista->append($n);

    $nome->set_text(""); $email->set_text(""); $homepage->set_text("");
  }
}

sub show {
  my ($list, $row) = @_;

  $crow = $row;

  my $n = $list->get_text($row,0);
  $nome -> set_text($n);

  my ($a,$b) = ($data{$n}=~/^(.*?):(.*)$/);
  $email-> set_text($a);
  $homepage->set_text($b);
}

sub cancel {
  my $name2delete = $nome->get_text();
  delete($data{$name2delete});

  $lista->remove($crow);
  $crow = -1;

  $nome->set_text(""); $email->set_text(""); $homepage->set_text("");
}
