… | |
… | |
250 | |
250 | |
251 | $hpane->pack2 (($self->{vpane} = new Gtk2::VPaned), 1, 1); |
251 | $hpane->pack2 (($self->{vpane} = new Gtk2::VPaned), 1, 1); |
252 | $hpane->set (position_set => 1); |
252 | $hpane->set (position_set => 1); |
253 | gtk::state $self->{vpane}, "game::vpane", $self->{name}, position => 80; |
253 | gtk::state $self->{vpane}, "game::vpane", $self->{name}, position => 80; |
254 | |
254 | |
255 | $self->{vpane}->add (my $sw = new Gtk2::ScrolledWindow); |
255 | # $self->{vpane}->add (my $sw = new Gtk2::ScrolledWindow); |
256 | $sw->set_policy ("automatic", "always"); |
256 | # $sw->set_policy ("automatic", "always"); |
257 | |
|
|
258 | $sw->add ($self->{userlist} = new userlist); |
257 | # $sw->add ($self->{userlist} = new userlist); |
259 | |
258 | |
260 | $self->{vpane}->add (my $vbox = new Gtk2::VBox); |
259 | $self->{vpane}->add (my $vbox = new Gtk2::VBox); |
261 | |
260 | |
262 | $vbox->pack_start ((my $hbox = new Gtk2::HBox 1), 0, 1, 0); |
261 | $vbox->pack_start ((my $hbox = new Gtk2::HBox 1), 0, 1, 0); |
263 | |
262 | |
… | |
… | |
265 | for COLOUR_WHITE, COLOUR_BLACK; |
264 | for COLOUR_WHITE, COLOUR_BLACK; |
266 | |
265 | |
267 | $vbox->pack_start (($self->{chat} = new superchat), 1, 1, 0); |
266 | $vbox->pack_start (($self->{chat} = new superchat), 1, 1, 0); |
268 | |
267 | |
269 | $self->{rules_inlay} = $self->{chat}->new_switchable_inlay ("Game Rules", sub { $self->draw_rules (@_) }, 1); |
268 | $self->{rules_inlay} = $self->{chat}->new_switchable_inlay ("Game Rules", sub { $self->draw_rules (@_) }, 1); |
|
|
269 | $self->{users_inlay} = $self->{chat}->new_switchable_inlay ("Users:", sub { $self->draw_users (@_) }, 0); |
270 | |
270 | |
271 | $self->{chat}->signal_connect (command => sub { |
271 | $self->{chat}->signal_connect (command => sub { |
272 | my ($chat, $cmd, $arg) = @_; |
272 | my ($chat, $cmd, $arg) = @_; |
273 | if ($cmd eq "rsave") { |
273 | if ($cmd eq "rsave") { |
274 | Storable::nstore { tree => $self->{tree}, curnode => $self->{curnode}, move => $self->{move} }, $arg;#d# |
274 | Storable::nstore { tree => $self->{tree}, curnode => $self->{curnode}, move => $self->{move} }, $arg;#d# |
… | |
… | |
281 | } |
281 | } |
282 | |
282 | |
283 | sub event_update_users { |
283 | sub event_update_users { |
284 | my ($self, $add, $update, $remove) = @_; |
284 | my ($self, $add, $update, $remove) = @_; |
285 | |
285 | |
286 | return unless $self->{userlist}; |
|
|
287 | |
|
|
288 | $self->{userlist}->update ($add, $update, $remove); |
286 | # $self->{userlist}->update ($add, $update, $remove); |
|
|
287 | |
|
|
288 | $self->{users_inlay}->refresh; |
289 | |
289 | |
290 | my %important; |
290 | my %important; |
291 | $important{$self->{user1}{name}}++; |
291 | $important{$self->{user1}{name}}++; |
292 | $important{$self->{user2}{name}}++; |
292 | $important{$self->{user2}{name}}++; |
293 | $important{$self->{user3}{name}}++; |
293 | $important{$self->{user3}{name}}++; |
… | |
… | |
502 | } elsif ($rules->{timesys} == TIMESYS_CANADIAN) { |
502 | } elsif ($rules->{timesys} == TIMESYS_CANADIAN) { |
503 | $text .= util::format_time $rules->{time}; |
503 | $text .= util::format_time $rules->{time}; |
504 | $text .= sprintf " + %s/%d CAN", util::format_time $rules->{interval}, $rules->{count}; |
504 | $text .= sprintf " + %s/%d CAN", util::format_time $rules->{interval}, $rules->{count}; |
505 | } |
505 | } |
506 | |
506 | |
507 | $inlay->clear; |
|
|
508 | $inlay->append_text ("<infoblock>$text</infoblock>"); |
507 | $inlay->append_text ("<infoblock>$text</infoblock>"); |
509 | } |
508 | } |
510 | |
509 | |
511 | sub event_update_rules { |
510 | sub event_update_rules { |
512 | my ($self, $rules) = @_; |
511 | my ($self, $rules) = @_; |
… | |
… | |
552 | my $rules = $challenge->{rules}; |
551 | my $rules = $challenge->{rules}; |
553 | |
552 | |
554 | my $as_black = $challenge->{user1}{name} eq $self->{conn}{name}; |
553 | my $as_black = $challenge->{user1}{name} eq $self->{conn}{name}; |
555 | my $opponent = $as_black ? $challenge->{user2} : $challenge->{user1}; |
554 | my $opponent = $as_black ? $challenge->{user2} : $challenge->{user1}; |
556 | |
555 | |
557 | $inlay->clear; |
|
|
558 | $inlay->append_text ("\n<challenge>Challenge to <user>" . $opponent->as_string . "</user></challenge>"); |
556 | $inlay->append_text ("\n<challenge>Challenge to <user>" . $opponent->as_string . "</user></challenge>"); |
559 | $inlay->append_text ("\nHandicap: $rules->{handicap}"); |
557 | $inlay->append_text ("\nHandicap: $rules->{handicap}"); |
560 | |
558 | |
561 | #bless( ( |
559 | #bless( ( |
562 | # gametype => 3, |
560 | # gametype => 3, |
… | |
… | |
579 | # name => 'Nerdamus' |
577 | # name => 'Nerdamus' |
580 | # }, 'KGS::User' ) |
578 | # }, 'KGS::User' ) |
581 | # ), 'KGS::Challenge' ) |
579 | # ), 'KGS::Challenge' ) |
582 | } |
580 | } |
583 | |
581 | |
|
|
582 | sub draw_users { |
|
|
583 | my ($self, $inlay) = @_; |
|
|
584 | |
|
|
585 | for (sort keys %{$self->{users}}) { |
|
|
586 | $inlay->append_text (" <user>" . $self->{users}{$_}->as_string . "</user>"); |
|
|
587 | } |
|
|
588 | } |
|
|
589 | |
584 | sub event_challenge { |
590 | sub event_challenge { |
585 | my ($self, $challenge) = @_; |
591 | my ($self, $challenge) = @_; |
586 | |
592 | |
587 | my $as_black = $challenge->{user1}{name} eq $self->{conn}{name}; |
593 | my $as_black = $challenge->{user1}{name} eq $self->{conn}{name}; |
588 | my $opponent = $as_black ? $challenge->{user2} : $challenge->{user1}; |
594 | my $opponent = $as_black ? $challenge->{user2} : $challenge->{user1}; |