#!/opt/perl/bin/perl use strict; use Glib; use Gtk2 -init; use Games::Go::SimpleBoard; use Gtk2::GoBoard; use Games::Go::SGF::Grove; sub read_sgf { my ($file) = @_; open my $sgff, $file or die "$!"; my $c = do { local $/; <$sgff> }; my $sgp = Games::Go::SGF::Grove::Parser->new; my $tree = $sgp->parse ($c); use Data::Dumper; print "TREE:".Data::Dumper::Dumper ([$tree])."\n"; $tree } my $tree = read_sgf $ARGV[0]; my $w = Gtk2::Window->new; $w->add (my $vb = Gtk2::VBox->new); $vb->pack_start (my $hb = Gtk2::HBox->new, 0, 1, 0); $vb->pack_start (my $brd = Gtk2::GoBoard->new (19), 1, 1, 3); $hb->pack_start (my $nb = Gtk2::Button->new_with_label ("next"), 1, 1, 0); my $chlds = shift @{$tree->[0]->[0]->{children}}; my $aw = $tree->[0]->[0]->{AW}; my $ab = $tree->[0]->[0]->{AW}; my @upds; $nb->signal_connect (clicked => sub { my $cur = shift @$chlds; my $sbrd = Games::Go::SimpleBoard->new (19); if ($cur->{W}) { warn "WHITE $cur->{W}->[0] $cur->{W}->[1]\n"; push @upds, [$cur->{W}->[0], $cur->{W}->[1], -1, MARK_W|MARK_MOVE]; } elsif ($cur->{B}) { warn "BLACK $cur->{B}->[0], $cur->{B}->[1]\n"; push @upds, [$cur->{B}->[0], $cur->{B}->[1], -1, MARK_B|MARK_MOVE]; } $sbrd->update ([@upds]); $brd->set_board ($sbrd); }); $w->set_default_size (600, 800); $w->show_all; $brd->show_all; Gtk2->main;