… | |
… | |
263 | |
263 | |
264 | $vbox->pack_start((my $hbox = new Gtk2::HBox 1), 0, 1, 0); |
264 | $vbox->pack_start((my $hbox = new Gtk2::HBox 1), 0, 1, 0); |
265 | $hbox->add (($self->{userpanel}[WHITE] = new game::userpanel colour => WHITE)->widget); |
265 | $hbox->add (($self->{userpanel}[WHITE] = new game::userpanel colour => WHITE)->widget); |
266 | $hbox->add (($self->{userpanel}[BLACK] = new game::userpanel colour => BLACK)->widget); |
266 | $hbox->add (($self->{userpanel}[BLACK] = new game::userpanel colour => BLACK)->widget); |
267 | |
267 | |
268 | $vbox->pack_start(($self->{text} = new chat), 1, 1, 0); |
268 | $vbox->pack_start(($self->{chat} = new chat), 1, 1, 0); |
|
|
269 | |
|
|
270 | $self->{chat}->signal_connect(command => sub { |
|
|
271 | my ($chat, $cmd, $arg) = @_; |
|
|
272 | if ($cmd eq "rsave") { |
|
|
273 | Storable::nstore { tree => $self->{tree}, curnode => $self->{curnode}, move => $self->{move} }, $arg;#d# |
|
|
274 | } else { |
|
|
275 | $self->{app}->do_command ($chat, $cmd, $arg, userlist => $self->{userlist}, game => $self); |
|
|
276 | } |
|
|
277 | }); |
269 | |
278 | |
270 | $self->event_update_game; |
279 | $self->event_update_game; |
271 | $self; |
280 | $self; |
272 | } |
281 | } |
273 | |
282 | |
… | |
… | |
282 | $important{$self->{user1}{name}}++; |
291 | $important{$self->{user1}{name}}++; |
283 | $important{$self->{user2}{name}}++; |
292 | $important{$self->{user2}{name}}++; |
284 | $important{$self->{user3}{name}}++; |
293 | $important{$self->{user3}{name}}++; |
285 | |
294 | |
286 | if (my @users = grep $important{$_->{name}}, @$add) { |
295 | if (my @users = grep $important{$_->{name}}, @$add) { |
287 | $self->{text}->append_text ("\n<header>Joins:</header>"); |
296 | $self->{chat}->append_text ("\n<header>Joins:</header>"); |
288 | $self->{text}->append_text (" <user>" . $_->as_string . "</user>") for @users; |
297 | $self->{chat}->append_text (" <user>" . $_->as_string . "</user>") for @users; |
289 | } |
298 | } |
290 | if (my @users = grep $important{$_->{name}}, @$remove) { |
299 | if (my @users = grep $important{$_->{name}}, @$remove) { |
291 | $self->{text}->append_text ("\n<header>Parts:</header>"); |
300 | $self->{chat}->append_text ("\n<header>Parts:</header>"); |
292 | $self->{text}->append_text (" <user>" . $_->as_string . "</user>") for @users; |
301 | $self->{chat}->append_text (" <user>" . $_->as_string . "</user>") for @users; |
293 | } |
302 | } |
294 | |
303 | |
295 | } |
304 | } |
296 | |
305 | |
297 | sub join { |
306 | sub join { |
… | |
… | |
387 | }sgexi; |
396 | }sgexi; |
388 | |
397 | |
389 | $text .= $_; |
398 | $text .= $_; |
390 | } |
399 | } |
391 | |
400 | |
392 | $self->{text}->append_text ($text); |
401 | $self->{chat}->append_text ($text); |
393 | } |
402 | } |
394 | |
403 | |
395 | sub event_join { |
404 | sub event_join { |
396 | my ($self) = @_; |
405 | my ($self) = @_; |
397 | $self->SUPER::event_join; |
406 | $self->SUPER::event_join; |
… | |
… | |
471 | $text .= "</infoblock>"; |
480 | $text .= "</infoblock>"; |
472 | |
481 | |
473 | $self->{gatext} = \@ga; |
482 | $self->{gatext} = \@ga; |
474 | }; |
483 | }; |
475 | |
484 | |
476 | $self->{text}->append_text ($text); |
485 | $self->{chat}->append_text ($text); |
477 | } |
486 | } |
478 | |
487 | |
479 | sub event_update_rules { |
488 | sub event_update_rules { |
480 | my ($self, $rules) = @_; |
489 | my ($self, $rules) = @_; |
481 | |
490 | |
… | |
… | |
501 | } elsif ($rules->{timesys} == TIMESYS_CANADIAN) { |
510 | } elsif ($rules->{timesys} == TIMESYS_CANADIAN) { |
502 | $text .= util::format_time $rules->{time}; |
511 | $text .= util::format_time $rules->{time}; |
503 | $text .= sprintf " + %s/%d CAN", util::format_time $rules->{interval}, $rules->{count}; |
512 | $text .= sprintf " + %s/%d CAN", util::format_time $rules->{interval}, $rules->{count}; |
504 | } |
513 | } |
505 | |
514 | |
506 | $self->{text}->append_text ("<infoblock>$text</infoblock>"); |
515 | $self->{chat}->append_text ("<infoblock>$text</infoblock>"); |
507 | } |
516 | } |
508 | |
517 | |
509 | sub inject_resign_game { |
518 | sub inject_resign_game { |
510 | my ($self, $msg) = @_; |
519 | my ($self, $msg) = @_; |
511 | |
520 | |
512 | sound::play 3, "resign"; |
521 | sound::play 3, "resign"; |
513 | |
522 | |
514 | $self->{text}->append_text ("\n<infoblock><header>Resign</header>" |
523 | $self->{chat}->append_text ("\n<infoblock><header>Resign</header>" |
515 | . "\n<user>" |
524 | . "\n<user>" |
516 | . (util::toxml $self->{user}[$msg->{player}]->as_string) |
525 | . (util::toxml $self->{user}[$msg->{player}]->as_string) |
517 | . "</user> resigned.</infoblock>"); |
526 | . "</user> resigned.</infoblock>"); |
518 | } |
527 | } |
519 | |
528 | |
520 | sub inject_final_result { |
529 | sub inject_final_result { |
521 | my ($self, $msg) = @_; |
530 | my ($self, $msg) = @_; |
522 | |
531 | |
523 | $self->{text}->append_text ("<infoblock>\n<header>Game Over</header>" |
532 | $self->{chat}->append_text ("<infoblock>\n<header>Game Over</header>" |
524 | . "\nWhite Score " . (util::toxml $msg->{whitescore}->as_string) |
533 | . "\nWhite Score " . (util::toxml $msg->{whitescore}->as_string) |
525 | . "\nBlack Score " . (util::toxml $msg->{blackscore}->as_string) |
534 | . "\nBlack Score " . (util::toxml $msg->{blackscore}->as_string) |
526 | . "</infoblock>" |
535 | . "</infoblock>" |
527 | ); |
536 | ); |
528 | } |
537 | } |
529 | |
538 | |
530 | sub event_challenge { |
539 | sub event_challenge { |
531 | my ($self, $challenge) = @_; |
540 | my ($self, $challenge) = @_; |
532 | |
541 | |
533 | use KGS::Listener::Debug; |
542 | use KGS::Listener::Debug; |
534 | $self->{text}->append_text ("\n".KGS::Listener::Debug::dumpval($challenge)); |
543 | $self->{chat}->append_text ("\n".KGS::Listener::Debug::dumpval($challenge)); |
535 | } |
544 | } |
536 | |
545 | |
537 | sub destroy { |
546 | sub destroy { |
538 | my ($self) = @_; |
547 | my ($self) = @_; |
539 | |
548 | |