ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/kgsueme/roomlist.pl
Revision: 1.5
Committed: Sun Jun 1 06:07:12 2003 UTC (21 years ago) by pcg
Content type: text/plain
Branch: MAIN
Changes since 1.4: +1 -3 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 package roomlist;
2
3 use KGS::Constants;
4
5 use base KGS::Listener::Roomlist;
6 use base gtk::widget;
7
8 sub new {
9 my $self = shift;
10 $self = $self->SUPER::new(@_);
11
12 $self->listen($self->{conn});
13
14 $self->{widget} = new Gtk2::Window 'toplevel';
15 $self->{widget}->set_title('KGS Rooms');
16 gtk::state $self->{widget}, "roomlist::window", undef, window_size => [400, 200];
17
18 $self->{widget}->signal_connect(delete_event => sub { $self->{widget}->hide; 1 });
19
20 $self->{widget}->add(my $vbox = new Gtk2::VBox);
21
22 $vbox->pack_start((my $sw = new Gtk2::ScrolledWindow), 1, 1, 0);
23 $sw->set_policy("automatic", "always");
24
25 $self->{roomlist} = new Gtk2::ListStore Glib::Scalar, Glib::String, Glib::String, Glib::Int, Glib::Int, Glib::Int, Glib::Int;
26 gtk::state $self->{roomlist}, "roomlist::model", undef, modelsortorder => [2, 'descending'];
27
28 $sw->add(my $treeview = new Gtk2::TreeView $self->{roomlist});
29
30 $treeview->set_search_column (1);
31
32 my $idx = 1;
33 for ("Group", "Room Name", "Us", "Gs", "Fs", "Ch") {
34 $renderer = $idx < 3 ? $gtk::text_renderer : $gtk::int_renderer;
35
36 # Gtk2-bug, need to keep these objects around
37 my $column = $self->{rlcolumns}[$idx] = Gtk2::TreeViewColumn->new_with_attributes ($_, $renderer, text => $idx);
38
39 $column->set_sort_column_id($idx);
40 $column->set(resizable => 1, sizing => 'fixed', clickable => 1);
41 gtk::state $column, "roomlist::model::$_", undef,
42 column_size => [0, 60, 450, 60, 60, 60, 60]->[$idx];
43 $treeview->append_column ($column);
44
45 $idx++;
46 }
47
48 $treeview->signal_connect(row_activated => sub {
49 my ($widget, $path, $column) = @_;
50 my $room = $self->{roomlist}->get ($self->{roomlist}->get_iter ($path), 0);
51 $self->join_room($room);
52 });
53
54 $self;
55 }
56
57 sub join_room {
58 my ($self, $room) = @_;
59
60 ($self->{room}{$room->{channel}} ||= room->new(%$room, conn => $self->{conn}))
61 ->join;
62 }
63
64 sub show {
65 my ($self, $msg) = @_;
66
67 $self->msg(list_rooms => group => $_) for 0..5; # fetch all room names (should not!)
68 $self->show_all;
69 }
70
71 sub event_update_rooms {
72 my ($self) = @_;
73
74 $self->{event_update} ||= add Glib::Timeout 200, sub {
75 my $l = $self->{roomlist};
76
77 $l->clear;
78
79 my $row = 0;
80 for (values %{$self->{rooms}}) {
81 $l->set ($l->append,
82 0 => $_,
83 1 => ($room_group{$_->{group}} || $_->{group}),
84 2 => $_->{name},
85 3 => $_->{users},
86 4 => $_->{games},
87 5 => $_->{flags},
88 6 => $_->{channel});
89 }
90
91 delete $self->{event_update};
92 0;
93 };
94 }
95
96 1;
97