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.3 by pcg, Sat May 31 11:12:22 2003 UTC vs.
Revision 1.4 by pcg, Sat May 31 13:58:32 2003 UTC

1package room; 1package room;
2 2
3use base KGS::Listener::Room; 3use base KGS::Listener::Room;
4use base gtk::widget;
4 5
5sub new { 6sub new {
6 my $self = shift; 7 my $self = shift;
7 $self = $self->SUPER::new(@_); 8 $self = $self->SUPER::new(@_);
8 9
16 17
17 $self->{window}->add(my $hpane = new Gtk2::HPaned); 18 $self->{window}->add(my $hpane = new Gtk2::HPaned);
18 $hpane->set(position_set => 1); 19 $hpane->set(position_set => 1);
19 gtk::state $hpane, "room::hpane", $self->{name}, position => 200; 20 gtk::state $hpane, "room::hpane", $self->{name}, position => 200;
20 21
21 $hpane->add(my $vpane = new Gtk2::VPaned);
22 $hpane->set(position_set => 1);
23 gtk::state $vpane, "room::vpane", $self->{name}, position => 200;
24 gtk::info 1, $vpane;
25
26 $vpane->add(my $sw = new Gtk2::ScrolledWindow);
27 $sw->set_policy("automatic", "always");
28
29 if (0) {
30 $sw->add($self->{gamelist} = new_with_titles Gtk2::ListStore "T", "Black", "White", "Rules", "Notes");
31 ::clist_autosort $self->{gamelist};
32 gtk::state $self->{gamelist}, "room::gamelist", $self->{name}, clist_column_widths => [20, 120, 120, 120];
33
34 $self->{gamelist}->signal_connect(select_row => sub {
35 my $game = $self->{gamelist}->get_row_data($_[1])
36 or return;
37 $self->{game}{$game->{channel}} ||= new game %$game, conn => $self->{conn}, room => $self;
38 $self->{game}{$game->{channel}}->join;
39 $self->{gamelist}->unselect_all;
40 });
41 }
42
43 $vpane->add(my $vbox = new Gtk2::VBox); 22 $hpane->pack1((my $vbox = new Gtk2::VBox), 1, 1);
44 23
45 $vbox->pack_start((my $sw = new Gtk2::ScrolledWindow), 1, 1, 0); 24 $vbox->add(my $sw = new Gtk2::ScrolledWindow);
46 $sw->set_policy("automatic", "always"); 25 $sw->set_policy("automatic", "always");
47 26
48 $sw->add(($self->{text} = new gtk::text)->widget); 27 $sw->add(($self->{text} = new gtk::text)->widget);
49 28
50 $vbox->pack_start(($self->{entry} = new Gtk2::Entry), 0, 1, 0); 29 $vbox->pack_start(($self->{entry} = new Gtk2::Entry), 0, 1, 0);
52 my $text = $self->{entry}->get_text; 31 my $text = $self->{entry}->get_text;
53 $self->say($text) if $text =~ /\S/; 32 $self->say($text) if $text =~ /\S/;
54 $self->{entry}->set_text(""); 33 $self->{entry}->set_text("");
55 }); 34 });
56 35
57 $hpane->add(my $sw = new Gtk2::ScrolledWindow); 36 $hpane->pack2((my $sw = new Gtk2::ScrolledWindow), 0, 1);
58 $sw->set_policy("automatic", "always"); 37 $sw->set_policy("automatic", "always");
59 38
60 if (0) { 39 $sw->add(($self->{userlist} = new gtk::userlist)->widget);
61 $sw->add($self->{userlist} = new_with_titles Gtk2::ListStore "User", "Rank", "Flags");
62 ::clist_autosort $self->{userlist};
63 gtk::state $self->{userlist}, "room::userlist", $self->{name}, clist_column_widths => [120, 30];
64 }
65 40
66 $self; 41 $self;
67} 42}
68 43
69sub join { 44sub join {
82} 57}
83 58
84sub inject_msg_room { 59sub inject_msg_room {
85 my ($self, $msg) = @_; 60 my ($self, $msg) = @_;
86 61
87 $self->{text}->insert(undef, undef, undef, "\n$msg->{name}: $msg->{message}"); 62 $self->{text}->append_text("\n$msg->{name}: $msg->{message}");
88} 63}
89 64
90sub event_update_users { 65sub event_update_users {
91 my ($self) = @_; 66 my ($self) = @_;
92 67
93 remove Glib::Source delete $self->{update_users} if $self->{update_users}; 68 $self->{userlist}->update ($self->{users});
94 $self->{update_users} ||= add Glib::Timeout 100, sub {
95 return unless $self->{joined};
96 return;
97
98 my $l = $self->{userlist};
99
100 $l->freeze;
101 my $pos = $l->get_vadjustment->get_value;
102 $l->clear;
103
104 my $row = 0;
105 for (values %{$self->{users}}) {
106 $l->append($_->{name});
107 $l->set_row_data($row++, $_);
108 }
109 $l->sort;
110 $l->get_vadjustment->set_value($pos);
111 $l->thaw;
112
113 delete $self->{update_users};
114 };
115} 69}
116 70
117sub event_update_games { 71sub event_update_games {
118 my ($self) = @_; 72 my ($self) = @_;
119 73
120 $self->{event_update_games} ||= add Glib::Timeout 200, sub { 74 $appwin::gamelist->update ($self);
121 return;
122 my $l = $self->{gamelist};
123
124 $l->freeze;
125 my $pos = $l->get_vadjustment->get_value;
126 $l->clear;
127
128 my $row = 0;
129 for (values %{$self->{games}}) {
130 $l->append($_->type, $_->user0, $_->user1, $_->rules, $_->notes);
131 $l->set_row_data($row++, $_);
132 }
133 $l->sort;
134 $l->get_vadjustment->set_value($pos);
135 $l->thaw;
136
137 delete $self->{event_update_games};
138 0;
139 };
140} 75}
141 76
142sub event_join { 77sub event_join {
143 my ($self) = @_; 78 my ($self) = @_;
144 $self->SUPER::event_join; 79 $self->SUPER::event_join;
145 80
146 $::config->{rooms}{$self->{channel}} = 1; 81 $::config->{rooms}{$self->{channel}} = { channel => $self->{channel}, name => $self->{name} };
147} 82}
148 83
149sub event_update_roominfo { 84sub event_update_roominfo {
150 my ($self) = @_; 85 my ($self) = @_;
151 86

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines