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

Comparing kgsueme/kgsueme/room.pl (file contents):
Revision 1.5 by pcg, Sun Jun 1 04:52:16 2003 UTC vs.
Revision 1.16 by pcg, Fri Jul 25 17:35:20 2003 UTC

1package room; 1package room;
2
3use KGS::Constants;
2 4
3use base KGS::Listener::Room; 5use base KGS::Listener::Room;
4use base gtk::widget; 6use base gtk::widget;
5 7
6sub new { 8sub new {
13 $self->{window}->set_title("KGS Room $self->{name}"); 15 $self->{window}->set_title("KGS Room $self->{name}");
14 gtk::state $self->{window}, "room::window", $self->{name}, window_size => [600, 400]; 16 gtk::state $self->{window}, "room::window", $self->{name}, window_size => [600, 400];
15 17
16 $self->{window}->signal_connect(delete_event => sub { $self->part; 1 }); 18 $self->{window}->signal_connect(delete_event => sub { $self->part; 1 });
17 19
18 $self->{window}->add(my $hpane = new Gtk2::HPaned); 20 $self->{window}->add($self->{hpane} = new Gtk2::HPaned);
19 $hpane->set(position_set => 1); 21 $self->{hpane}->set(position_set => 1);
20 gtk::state $hpane, "room::hpane", $self->{name}, position => 200; 22 gtk::state $self->{hpane}, "room::hpane", $self->{name}, position => 200;
21 23
22 $hpane->pack1((my $vbox = new Gtk2::VBox), 1, 1); 24 $self->{hpane}->pack1((my $vbox = new Gtk2::VBox), 1, 1);
23 25
24 $vbox->add(my $sw = new Gtk2::ScrolledWindow); 26 $vbox->add($self->{chat} = new chat);
25 $sw->set_policy("automatic", "always");
26 27
27 $sw->add(($self->{text} = new gtk::text)->widget);
28
29 $vbox->pack_start(($self->{entry} = new Gtk2::Entry), 0, 1, 0);
30 $self->{entry}->signal_connect(activate => sub { 28 $self->{chat}->signal_connect(command => sub {
31 my $text = $self->{entry}->get_text; 29 my ($chat, $cmd, $arg) = @_;
32 $self->say($text) if $text =~ /\S/; 30 $self->{app}->do_command ($chat, $cmd, $arg, userlist => $self->{userlist}, room => $self);
33 $self->{entry}->set_text("");
34 }); 31 });
35 32
36 $hpane->pack2((my $sw = new Gtk2::ScrolledWindow), 0, 1); 33 $self->{hpane}->pack2((my $sw = new Gtk2::ScrolledWindow), 0, 1);
37 $sw->set_policy("automatic", "always"); 34 $sw->set_policy("automatic", "always");
38 35
39 $sw->add(($self->{userlist} = new userlist)->widget); 36 $sw->add(($self->{userlist} = new userlist)->widget);
40 37
41 $self; 38 $self;
50 47
51sub part { 48sub part {
52 my ($self) = @_; 49 my ($self) = @_;
53 $self->SUPER::part; 50 $self->SUPER::part;
54 51
55 delete $::config->{rooms}{$self->{channel}}; 52 $self->destroy; # yeaha
56 $self->{window}->hide_all;
57} 53}
58 54
59sub inject_msg_room { 55sub inject_msg_room {
60 my ($self, $msg) = @_; 56 my ($self, $msg) = @_;
61 57
62 $self->{text}->append_text("\n$msg->{name}: $msg->{message}"); 58 # secret typoe ;-)
59 $self->{chat}->append_text("\n<header><user>" . (util::toxml $msg->{name})
60 . "</user>: </header>" . (util::toxml $msg->{message}));
63} 61}
64 62
65sub event_update_users { 63sub event_update_users {
66 my ($self, $add, $update, $remove) = @_; 64 my ($self, $add, $update, $remove) = @_;
67 65
69} 67}
70 68
71sub event_update_games { 69sub event_update_games {
72 my ($self, $add, $update, $remove) = @_; 70 my ($self, $add, $update, $remove) = @_;
73 71
74 $appwin::gamelist->update ($self, $add, $update, $remove); 72 $self->{app}{gamelist}->update ($self, $add, $update, $remove);
75} 73}
76 74
77sub event_join { 75sub event_join {
78 my ($self) = @_; 76 my ($self) = @_;
79 $self->SUPER::event_join; 77 $self->SUPER::event_join;
80 78
81 $::config->{rooms}{$self->{channel}} = { channel => $self->{channel}, name => $self->{name} }; 79 $::config->{rooms}{$self->{channel}} = { channel => $self->{channel}, name => $self->{name} };
80
81 # mysteriously enough, we have to request game updates manually
82 $self->{gameupdate} ||= add Glib::Timeout INTERVAL_GAMEUPDATES * 1000, sub {
83 $self->req_games;
84 1;
85 };
86}
87
88sub event_part {
89 my ($self) = @_;
90
91 delete $::config->{rooms}{$self->{channel}};
92 delete $self->{app}{roomlist}{room}{$self->{channel}};
93 (remove Glib::Source delete $self->{gameupdate}) if $self->{gameupdate};
94 $self->unlisten;
95
96 $self->SUPER::event_part;
82} 97}
83 98
84sub event_update_roominfo { 99sub event_update_roominfo {
85 my ($self) = @_; 100 my ($self) = @_;
86 101
87 $self->{text}->append_text("\n$self->{owner}: $self->{description}\n"); 102 $self->{chat}->append_text("\n<user>" . (util::toxml $self->{owner}) . "</user>\n"
103 . "<description>" . (util::toxml $self->{description}) . "</description>\n");
104}
105
106sub destroy {
107 my ($self) = @_;
108
109 $self->event_part;
110
111 $self->SUPER::destroy;
88} 112}
89 113
901; 1141;
91 115

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines