ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/kgsueme/roomlist.pl
Revision: 1.3
Committed: Sat May 31 13:58:32 2003 UTC (21 years ago) by pcg
Content type: text/plain
Branch: MAIN
Changes since 1.2: +5 -10 lines
Log Message:
*** empty log message ***

File Contents

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