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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines