ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/kgsueme/roomlist.pl
Revision: 1.11
Committed: Wed Jun 2 04:54:48 2004 UTC (19 years, 11 months ago) by root
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.10: +3 -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 root 1.10
7     use Glib::Object::Subclass
8     Gtk2::Window;
9 pcg 1.1
10     sub new {
11 root 1.11 my ($self, %arg) = @_;
12    
13 root 1.10 $self = $self->Glib::Object::new;
14 root 1.11 $self->{$_} = delete $arg{$_} for keys %arg;
15 root 1.10 gtk::state $self, "roomlist::window", undef, window_size => [400, 300];
16 pcg 1.1
17 root 1.9 $self->listen ($self->{conn});
18 pcg 1.1
19 root 1.10 $self->set_title('KGS Rooms');
20 pcg 1.1
21 root 1.10 $self->signal_connect(delete_event => sub { $self->hide; 1 });
22 pcg 1.1
23 root 1.10 $self->add (my $vbox = new Gtk2::VBox);
24 pcg 1.1
25 root 1.10 $vbox->pack_start ((my $sw = new Gtk2::ScrolledWindow), 1, 1, 0);
26     $sw->set_policy ("automatic", "always");
27 pcg 1.1
28     $self->{roomlist} = new Gtk2::ListStore Glib::Scalar, Glib::String, Glib::String, Glib::Int, Glib::Int, Glib::Int, Glib::Int;
29 pcg 1.4 gtk::state $self->{roomlist}, "roomlist::model", undef, modelsortorder => [2, 'descending'];
30 pcg 1.1
31     $sw->add(my $treeview = new Gtk2::TreeView $self->{roomlist});
32    
33 pcg 1.4 $treeview->set_search_column (1);
34 pcg 1.1
35     my $idx = 1;
36 pcg 1.4 for ("Group", "Room Name", "Us", "Gs", "Fs", "Ch") {
37     $renderer = $idx < 3 ? $gtk::text_renderer : $gtk::int_renderer;
38 pcg 1.1
39     # Gtk2-bug, need to keep these objects around
40     my $column = $self->{rlcolumns}[$idx] = Gtk2::TreeViewColumn->new_with_attributes ($_, $renderer, text => $idx);
41    
42     $column->set_sort_column_id($idx);
43 pcg 1.5 $column->set(resizable => 1, sizing => 'fixed', clickable => 1);
44 pcg 1.4 gtk::state $column, "roomlist::model::$_", undef,
45 root 1.10 column_size => [0, 60, 250, 50, 40, 25, 25]->[$idx];
46 pcg 1.1 $treeview->append_column ($column);
47    
48     $idx++;
49     }
50    
51     $treeview->signal_connect(row_activated => sub {
52     my ($widget, $path, $column) = @_;
53     my $room = $self->{roomlist}->get ($self->{roomlist}->get_iter ($path), 0);
54 pcg 1.8 $self->{app}->open_room (%$room);
55 pcg 1.1 });
56    
57     $self;
58     }
59    
60     sub show {
61     my ($self, $msg) = @_;
62    
63 pcg 1.7 $self->send(list_rooms => group => $_) for 0..5; # fetch all room names (should not!)
64 pcg 1.2 $self->show_all;
65 pcg 1.1 }
66    
67     sub event_update_rooms {
68     my ($self) = @_;
69    
70     $self->{event_update} ||= add Glib::Timeout 200, sub {
71     my $l = $self->{roomlist};
72    
73     $l->clear;
74    
75     my $row = 0;
76     for (values %{$self->{rooms}}) {
77     $l->set ($l->append,
78 pcg 1.4 0 => $_,
79     1 => ($room_group{$_->{group}} || $_->{group}),
80     2 => $_->{name},
81     3 => $_->{users},
82     4 => $_->{games},
83     5 => $_->{flags},
84     6 => $_->{channel});
85 pcg 1.1 }
86    
87     delete $self->{event_update};
88     0;
89     };
90     }
91    
92     1;
93