ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/kgsueme/roomlist.pl
Revision: 1.9
Committed: Mon May 31 18:18:26 2004 UTC (20 years ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.8: +1 -1 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 pcg 1.1 package roomlist;
2    
3 pcg 1.4 use KGS::Constants;
4    
5 pcg 1.1 use base KGS::Listener::Roomlist;
6 pcg 1.2 use base gtk::widget;
7 pcg 1.1
8     sub new {
9     my $self = shift;
10     $self = $self->SUPER::new(@_);
11    
12 root 1.9 $self->listen ($self->{conn});
13 pcg 1.1
14 pcg 1.2 $self->{widget} = new Gtk2::Window 'toplevel';
15     $self->{widget}->set_title('KGS Rooms');
16 pcg 1.6 gtk::state $self->{widget}, "roomlist::window", undef, window_size => [450, 200];
17 pcg 1.1
18 pcg 1.2 $self->{widget}->signal_connect(delete_event => sub { $self->{widget}->hide; 1 });
19 pcg 1.1
20 pcg 1.2 $self->{widget}->add(my $vbox = new Gtk2::VBox);
21 pcg 1.1
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 pcg 1.4 gtk::state $self->{roomlist}, "roomlist::model", undef, modelsortorder => [2, 'descending'];
27 pcg 1.1
28     $sw->add(my $treeview = new Gtk2::TreeView $self->{roomlist});
29    
30 pcg 1.4 $treeview->set_search_column (1);
31 pcg 1.1
32     my $idx = 1;
33 pcg 1.4 for ("Group", "Room Name", "Us", "Gs", "Fs", "Ch") {
34     $renderer = $idx < 3 ? $gtk::text_renderer : $gtk::int_renderer;
35 pcg 1.1
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 pcg 1.5 $column->set(resizable => 1, sizing => 'fixed', clickable => 1);
41 pcg 1.4 gtk::state $column, "roomlist::model::$_", undef,
42     column_size => [0, 60, 450, 60, 60, 60, 60]->[$idx];
43 pcg 1.1 $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 pcg 1.8 $self->{app}->open_room (%$room);
52 pcg 1.1 });
53    
54     $self;
55     }
56    
57     sub show {
58     my ($self, $msg) = @_;
59    
60 pcg 1.7 $self->send(list_rooms => group => $_) for 0..5; # fetch all room names (should not!)
61 pcg 1.2 $self->show_all;
62 pcg 1.1 }
63    
64     sub event_update_rooms {
65     my ($self) = @_;
66    
67     $self->{event_update} ||= add Glib::Timeout 200, sub {
68     my $l = $self->{roomlist};
69    
70     $l->clear;
71    
72     my $row = 0;
73     for (values %{$self->{rooms}}) {
74     $l->set ($l->append,
75 pcg 1.4 0 => $_,
76     1 => ($room_group{$_->{group}} || $_->{group}),
77     2 => $_->{name},
78     3 => $_->{users},
79     4 => $_->{games},
80     5 => $_->{flags},
81     6 => $_->{channel});
82 pcg 1.1 }
83    
84     delete $self->{event_update};
85     0;
86     };
87     }
88    
89     1;
90