#!/usr/bin/perl use Gtk2 -init; use Gtk2::GladeXML; use MLDBM qw!DB_File Storable!; use Fcntl; use strict; use warnings; use Data::Dumper; my %db; tie %db, 'MLDBM', 'dic.db', O_RDWR|O_CREAT, 0666; my $interface = Gtk2::GladeXML->new('dic.glade'); my $main_window = $interface->get_widget('window1'); $main_window->signal_connect('delete-event' => sub {Gtk2->main_quit}); my $termo = $interface->get_widget('termo'); my $desc = $interface->get_widget('desc'); my $bt_del = $interface->get_widget('apagar'); $bt_del->signal_connect('clicked' => \&del); my $bt_add = $interface->get_widget('adicionar'); $bt_add->signal_connect('clicked' => \&add); my $ui_list = $interface->get_widget('lista'); my $list = Gtk2::ListStore->new('Glib::String'); $ui_list->set_model($list); $ui_list->append_column(Gtk2::TreeViewColumn->new_with_attributes("Termos",Gtk2::CellRendererText->new, 'text', 0)); $ui_list->get_selection()->signal_connect("changed" => \&show); for (keys %db) { $list->set($list->append(), 0, $_); } Gtk2->main; sub add { my $t = $termo->get_text; if ($t) { my $buffer = $desc->get_buffer; my $d = $buffer->get_text($buffer->get_start_iter, $buffer->get_end_iter, 0); $db{$t} = $d; $termo->set_text(""); $desc->get_buffer->set_text(""); $list->set($list->append(), 0, $t); } } sub del { my $t = $termo->get_text; delete($db{$t}) if exists $db{$t}; $termo->set_text(""); $desc->get_buffer->set_text(""); } sub show { my $selection = shift; my $iter = $selection->get_selected(); my $t = $list->get($iter, 0); $termo->set_text($t); $desc->get_buffer->set_text($db{$t}); }