… | |
… | |
121 | |
121 | |
122 | sub new { |
122 | sub new { |
123 | my $class = shift; |
123 | my $class = shift; |
124 | my $self = $class->SUPER::new(@_); |
124 | my $self = $class->SUPER::new(@_); |
125 | |
125 | |
126 | $self->{widget} = new Gtk2::VBox; |
126 | $self->{widget} = new Gtk2::HBox; |
127 | |
127 | |
|
|
128 | $self->{widget}->add (my $vbox = new Gtk2::VBox); |
|
|
129 | |
128 | $self->{widget}->add ($self->{name} = new Gtk2::Label $self->{name}); |
130 | $vbox->add ($self->{name} = new Gtk2::Label $self->{name}); |
129 | $self->{widget}->add ($self->{info} = new Gtk2::Label ""); |
131 | $vbox->add ($self->{info} = new Gtk2::Label ""); |
130 | $self->{widget}->add (($self->{clock} = new game::goclock)->widget); |
132 | $vbox->add (($self->{clock} = new game::goclock)->widget); |
131 | |
133 | |
132 | $self; |
134 | $self; |
133 | } |
135 | } |
134 | |
136 | |
135 | sub set_rules { |
137 | sub set_rules { |
136 | my ($self, $rules) = @_; |
138 | my ($self, $rules) = @_; |
137 | |
139 | |
|
|
140 | if ($self->{name}->get_text ne $rules->{player}[$self->{colour}]) { |
138 | $self->{name}->set_text ($rules->{player}[$self->{colour}]); |
141 | $self->{name}->set_text ($rules->{player}[$self->{colour}]); |
|
|
142 | |
|
|
143 | # the big picture... |
|
|
144 | appwin::userpic ($rules->{player}[$self->{colour}], sub { |
|
|
145 | $self->{widget}->add (gtk::image_from_data $_[0]) if $_[0]; |
|
|
146 | $self->{widget}->show_all; |
|
|
147 | # undef => show sth. funny |
|
|
148 | }); |
|
|
149 | } |
|
|
150 | |
139 | $self->{clock}->set_rules (@{$rules->{rules}}{qw(timesys time interval count)}); |
151 | $self->{clock}->set_rules (@{$rules->{rules}}{qw(timesys time interval count)}); |
140 | } |
152 | } |
141 | |
153 | |
142 | sub set_state { |
154 | sub set_state { |
143 | my ($self, $captures, $timer, $running) = @_; |
155 | my ($self, $captures, $timer, $running) = @_; |
… | |
… | |
218 | $sw->add(($self->{userlist} = new userlist)->widget); |
230 | $sw->add(($self->{userlist} = new userlist)->widget); |
219 | |
231 | |
220 | $self->{vpane}->add(my $vbox = new Gtk2::VBox); |
232 | $self->{vpane}->add(my $vbox = new Gtk2::VBox); |
221 | |
233 | |
222 | $vbox->pack_start((my $hbox = new Gtk2::HBox 1), 0, 1, 0); |
234 | $vbox->pack_start((my $hbox = new Gtk2::HBox 1), 0, 1, 0); |
223 | $hbox->add (($self->{user0} = new game::userpanel colour => WHITE)->widget); |
235 | $hbox->add (($self->{userpanel}[WHITE] = new game::userpanel colour => WHITE)->widget); |
224 | $hbox->add (($self->{user1} = new game::userpanel colour => BLACK)->widget); |
236 | $hbox->add (($self->{userpanel}[BLACK] = new game::userpanel colour => BLACK)->widget); |
225 | |
237 | |
226 | $vbox->pack_start((my $sw = new Gtk2::ScrolledWindow), 1, 1, 0); |
238 | $vbox->pack_start((my $sw = new Gtk2::ScrolledWindow), 1, 1, 0); |
227 | $sw->set_policy("never", "always"); |
239 | $sw->set_policy("never", "always"); |
228 | |
240 | |
229 | $sw->add(($self->{text} = new gtk::text)->widget); |
241 | $sw->add(($self->{text} = new gtk::text)->widget); |
… | |
… | |
592 | $self->{board_label}->set_text ("Move $move"); |
604 | $self->{board_label}->set_text ("Move $move"); |
593 | |
605 | |
594 | $self->{board} = new KGS::Game::Board $self->{size}; |
606 | $self->{board} = new KGS::Game::Board $self->{size}; |
595 | $self->{board}->interpret_path ([@{$self->{path}}[0 .. $move - 1]]); |
607 | $self->{board}->interpret_path ([@{$self->{path}}[0 .. $move - 1]]); |
596 | |
608 | |
597 | $self->{user0}->set_state ($self->{board}{captures}[0], |
609 | $self->{userpanel}[WHITE]->set_state ($self->{board}{captures}[WHITE], |
598 | $self->{board}{timer}[0], |
610 | $self->{board}{timer}[WHITE], |
599 | $running && $self->{board}{last} == WHITE); |
|
|
600 | $self->{user1}->set_state ($self->{board}{captures}[1], |
|
|
601 | $self->{board}{timer}[1], |
|
|
602 | $running && $self->{board}{last} == BLACK); |
611 | $running && $self->{board}{last} == BLACK); |
|
|
612 | $self->{userpanel}[BLACK]->set_state ($self->{board}{captures}[BLACK], |
|
|
613 | $self->{board}{timer}[BLACK], |
|
|
614 | $running && $self->{board}{last} == WHITE); |
603 | |
615 | |
604 | $self->redraw ($self->repaint_board); |
616 | $self->redraw ($self->repaint_board); |
605 | |
617 | |
606 | $self->{text}->set_text(KGS::Listener::Debug::dumpval([$self->{board}{time},$self->{board}{captures}]). $self->{board}{comment}); |
618 | $self->{text}->set_text ($self->{board}{comment}); |
607 | } |
619 | } |
608 | |
620 | |
609 | sub event_update_tree { |
621 | sub event_update_tree { |
610 | my ($self) = @_; |
622 | my ($self) = @_; |
611 | |
623 | |
612 | $self->{path} = $self->get_path; |
624 | $self->{path} = $self->get_path; |
613 | $self->{user0}->set_rules ($self->{path}[0]); |
625 | $self->{userpanel}[WHITE]->set_rules ($self->{path}[0]); # should be onload only |
614 | $self->{user1}->set_rules ($self->{path}[0]); |
626 | $self->{userpanel}[BLACK]->set_rules ($self->{path}[0]); # should be onload only |
615 | |
627 | |
616 | $self->{moveadj}->value_changed if $self->{moveadj}; |
628 | $self->{moveadj}->value_changed if $self->{moveadj}; |
617 | } |
629 | } |
618 | |
630 | |
619 | sub event_part { |
631 | sub event_part { |
… | |
… | |
632 | warn "UPDATE GAME";#d# |
644 | warn "UPDATE GAME";#d# |
633 | } |
645 | } |
634 | |
646 | |
635 | sub destroy { |
647 | sub destroy { |
636 | my ($self) = @_; |
648 | my ($self) = @_; |
|
|
649 | (delete $self->{userpanel}[WHITE])->destroy if $self->{userpanel}[WHITE]; |
|
|
650 | (delete $self->{userpanel}[BLACK])->destroy if $self->{userpanel}[BLACK]; |
637 | $self->SUPER::destroy; |
651 | $self->SUPER::destroy; |
638 | delete $appwin::gamelist->{game}{$self->{channel}}; |
652 | delete $appwin::gamelist->{game}{$self->{channel}}; |
639 | } |
653 | } |
640 | |
654 | |
641 | 1; |
655 | 1; |