ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/kgsueme/game.pl
(Generate patch)

Comparing kgsueme/kgsueme/game.pl (file contents):
Revision 1.3 by pcg, Sat May 31 11:12:22 2003 UTC vs.
Revision 1.4 by pcg, Sat May 31 13:58:31 2003 UTC

3use KGS::Constants; 3use KGS::Constants;
4use KGS::Game::Board; 4use KGS::Game::Board;
5 5
6use base KGS::Listener::Game; 6use base KGS::Listener::Game;
7use base KGS::Game; 7use base KGS::Game;
8
9use base gtk::widget;
8 10
9sub new { 11sub new {
10 my $self = shift; 12 my $self = shift;
11 $self = $self->SUPER::new(@_); 13 $self = $self->SUPER::new(@_);
12 14
13 $self->listen($self->{conn}); 15 $self->listen($self->{conn});
14 16
15 $self->{window} = new Gtk2::Window 'toplevel'; 17 $self->{window} = new Gtk2::Window 'toplevel';
16 my $title = $self->{channel} ? $self->user0." ".$self->user1 : "Game Window"; 18 my $title = $self->{channel} ? $self->owner->{name}." ".$self->opponent_string : "Game Window";
17 $self->{window}->set_title("KGS Game $title"); 19 $self->{window}->set_title("KGS Game $title");
18 gtk::state $self->{window}, "game::window", undef, window_size => [600, 500]; 20 gtk::state $self->{window}, "game::window", undef, window_size => [600, 500];
19 21
20 $self->{window}->signal_connect(delete_event => sub { $self->part; 1 }); 22 $self->{window}->signal_connect(delete_event => sub {
23 if ($self->{joined}) {
24 $self->part;
25 } else {
26 $self->event_part;
27 }
28 1;
29 });
21 30
22 $self->{window}->add(my $hpane = new Gtk2::HPaned); 31 $self->{window}->add($self->{hpane} = new Gtk2::HPaned);
23 gtk::state $hpane, "game::hpane", undef, position => 500; 32 gtk::state $self->{hpane}, "game::hpane", undef, position => 500;
24 33
25 $hpane->pack1((my $vbox = new Gtk2::VBox), 1, 1); 34 $self->{hpane}->pack1((my $vbox = new Gtk2::VBox), 1, 1);
26 35
27 $vbox->pack_start((my $frame = new Gtk2::Frame), 0, 1, 0); 36 $vbox->pack_start((my $frame = new Gtk2::Frame), 0, 1, 0);
28 37
29 # grrr... 38 # grrr...
30 { 39 {
57 #Gtk2::Widget->pop_visual; 66 #Gtk2::Widget->pop_visual;
58 67
59 $self->{canvas}->signal_connect(configure_event => \&configure_event, $self); 68 $self->{canvas}->signal_connect(configure_event => \&configure_event, $self);
60 $self->{canvas}->signal_connect(expose_event => \&expose_event, $self); 69 $self->{canvas}->signal_connect(expose_event => \&expose_event, $self);
61 70
62 $hpane->pack2((my $vpane = new Gtk2::VPaned), 0, 0); 71 $self->{hpane}->pack2(($self->{vpane} = new Gtk2::VPaned), 0, 0);
63 $hpane->set(position_set => 1); 72 $self->{hpane}->set(position_set => 1);
64 gtk::state $vpane, "game", $self->{name}, position => 80; 73 gtk::state $self->{vpane}, "game::vpane", $self->{name}, position => 80;
65 74
66 $vpane->add(my $sw = new Gtk2::ScrolledWindow); 75 $self->{vpane}->add(my $sw = new Gtk2::ScrolledWindow);
67 $sw->set_policy("automatic", "always"); 76 $sw->set_policy("automatic", "always");
68 77
69 if (0) { 78 $sw->add(($self->{userlist} = new gtk::userlist)->widget);
70 $sw->add($self->{userlist} = new_with_titles Gtk2::ListStore "User", "Rank", "Flags");
71 ::clist_autosort $self->{userlist};
72 gtk::state $self->{userlist}, "room::userlist", $self->{name}, clist_column_widths => [120, 30];
73 }
74 79
75 $vpane->add(my $vbox = new Gtk2::VBox); 80 $self->{vpane}->add(my $vbox = new Gtk2::VBox);
76 81
77 $vbox->pack_start((my $sw = new Gtk2::ScrolledWindow), 1, 1, 0); 82 $vbox->pack_start((my $sw = new Gtk2::ScrolledWindow), 1, 1, 0);
78 $sw->set_policy("automatic", "always"); 83 $sw->set_policy("automatic", "always");
79 84
80 $sw->add(($self->{text} = new gtk::text)->widget); 85 $sw->add(($self->{text} = new gtk::text)->widget);
90} 95}
91 96
92sub event_update_users { 97sub event_update_users {
93 my ($self) = @_; 98 my ($self) = @_;
94 99
95 room::event_update_users $self; 100 $self->{userlist}->update($self->{users});
96} 101}
97 102
98sub join { 103sub join {
99 my ($self) = @_; 104 my ($self) = @_;
100 $self->SUPER::join; 105 $self->SUPER::join;
437} 442}
438 443
439sub event_part { 444sub event_part {
440 my ($self) = @_; 445 my ($self) = @_;
441 $self->SUPER::event_part; 446 $self->SUPER::event_part;
442 (delete $self->{window})->destroy; # hmm.. why does this keep the object alive? puzzling.. ahh.. the callbacks ;)
443 delete $self->{room}{game}{$self->{channel}}; 447 delete $appwin::gamelist->{game}{$self->{channel}};
448 $self->destroy;
444} 449}
445 450
446sub event_move { 451sub event_move {
447 my ($self, $pass) = @_; 452 my ($self, $pass) = @_;
448 sound::play 1, $pass ? "pass" : "move"; 453 sound::play 1, $pass ? "pass" : "move";
449} 454}
450 455
451sub DESTROY {#d#
452 warn "DESTROY(@_)\n";#d#
453}
454
4551; 4561;
456 457

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines